gramscii.1 - gramscii - A simple editor for ASCII box-and-arrow charts | |
Log | |
Files | |
Refs | |
Tags | |
README | |
LICENSE | |
--- | |
gramscii.1 (16676B) | |
--- | |
1 .TH GRAMSCII 1 "28/09/2019" "" "" | |
2 .SH NAME | |
3 gramscii \- simple editor for ASCII box diagrams | |
4 .SH SYNOPSIS | |
5 .PP | |
6 gramscii | |
7 .RI [-s] | |
8 .RI [-h] | |
9 .RI [file ...] | |
10 .PP | |
11 .SH DESCRIPTION | |
12 .PP | |
13 gramscii is a simple interactive editor to create ASCII box-and-arrows | |
14 diagrams. It uses vi-like keybindings for drawing and editing boxes | |
15 (rectangles, palallelograms, trapezia, triangles), arrows, and text. | |
16 .PP | |
17 .SH OPTIONS | |
18 .TP 5m | |
19 .BI -s | |
20 Start gramscii in script-mode. In this mode the screen is set to 25 rows | |
21 by 80 columns, no status bar is present, drawings and cursor movements | |
22 are not shown, and the state of the screen is dumped to stdout when the | |
23 program ends. With this flag, gramscii can be used in a pipeline, | |
24 getting commands from stdin (or from a file) and making its output | |
25 available for further processing. | |
26 .TP | |
27 .BI -h | |
28 Print short usage unstructions and exit. | |
29 .PP | |
30 If one or more files are provided after the last option, gramscii will | |
31 consider them command files and will read them one after the other | |
32 (i.e., as if the characters in the file were typed while gramscii was | |
33 running), before accepting commands from stdin. This allows to use | |
34 gramscii scripts. For instance, if you start gramscii as: | |
35 .EX | |
36 | |
37 gramscii file.txt | |
38 | |
39 .EE | |
40 and "file.txt" contains the lines: | |
41 .EX | |
42 | |
43 gg10lbLLJJb | |
44 gg10l15jbLLJJ | |
45 | |
46 .EE | |
47 then gramscii will show two boxes and then will start accepting | |
48 commands as usual. | |
49 .SH COMMANDS | |
50 gramscii is a visual modal editor. Commands are associated to | |
51 keystrokes, and keystrokes have different meaning in different modes. | |
52 The default mode is | |
53 .B move | |
54 mode, which allows the user to move the cursor around the screen. | |
55 Exiting from any other mode (either via pressing | |
56 .B [ESC] | |
57 or by toggling the current mode) automatically puts gramscii in | |
58 .B move | |
59 mode. There are four classes of commands in gramscii, namely | |
60 .B GENERAL, | |
61 .B MOVEMENTS, | |
62 .B MODES, | |
63 and | |
64 .B STYLES. | |
65 Each of those classes of commands is described in a separate subsection | |
66 below. | |
67 .SS GENERAL | |
68 General commands available in | |
69 .B move | |
70 mode: | |
71 .TP 5m | |
72 .BI C | |
73 Crop chart to the largest non-blank region. The first line and the first | |
74 column of the cropped chart will contain the first non-blank line and | |
75 the first non-blank column of the original chart, respectively. | |
76 .TP 5m | |
77 .BI e | |
78 Load (edit) an existing file from disk. gramscii asks the user if they | |
79 want to save the current screen (only if the screen has been modified | |
80 since the | |
81 last | |
82 .BI w | |
83 command). | |
84 .TP 5m | |
85 .BI E | |
86 Load (edit) an existing file from disk, discarding any change to the | |
87 current screen. | |
88 .TP 5m | |
89 .BI M a | |
90 Mark (label) the current cursor position as 'a'. The label 'a' must be | |
91 one of the 26 ASCII alphabetic characters. The cursor can be moved to a | |
92 previously marked position using the global positioning command | |
93 .B g | |
94 (see below). Position marks are case-insensitive, meaning that both | |
95 .I 'c' | |
96 and | |
97 .I 'C' | |
98 indicate the same mark. | |
99 .TP 5m | |
100 .BI N | |
101 Start a new empty screen. If the current screen has been modified since | |
102 the last | |
103 .BI w | |
104 command, gramscii will ask the user if they want to save the current | |
105 screen before creating a new one. | |
106 .TP 5m | |
107 .BI p | |
108 Paste the content of the yank buffer at the cursor position. The yank | |
109 buffer contains the rectangle yanked/cut in | |
110 .B visual | |
111 mode. | |
112 .TP 5m | |
113 .BI q | |
114 Quit gramscii, and prompt for a filename if the current screen contains | |
115 unsaved changes. | |
116 .TP 5m | |
117 .BI Q | |
118 Quit gramscii and discard any change to the current screen. | |
119 .TP 5m | |
120 .BI r | |
121 Read a file at the current cursor position. gramscii will prompt for the | |
122 name of the file to read. If the first non-blank character of the name | |
123 given is a '!', gramscii will run the command specified after '!' in a | |
124 shell, and will import its standard output. | |
125 .TP 5m | |
126 .BI R | |
127 Redraw the screen | |
128 .TP 5m | |
129 .BI u | |
130 Undo the last change. gramscii supports an undo history of indefinite | |
131 length. The command | |
132 .BI u | |
133 gets the last change from the history, and moves the history pointer | |
134 back by one change. See the related command | |
135 .BI U | |
136 below. | |
137 .TP 5m | |
138 .BI U | |
139 Redo, i.e., cancel a previous | |
140 .BI u | |
141 command. gramscii supports an undo history of indefinite length. The | |
142 command | |
143 .BI U | |
144 moves to the following change, if possible. For instance, the sequence | |
145 .BI uuU | |
146 will go back two changes, and then forward one, effectively resetting | |
147 the state of the screen to what it was before the last change occurred. | |
148 .TP 5m | |
149 .BI w | |
150 Write the current screen to a file. If the current screen has already | |
151 been associated to a file, use the same filename. Otherwise, the user is | |
152 prompted for a filename to save the screen to. | |
153 .TP 5m | |
154 .BI W | |
155 Write the current screen to a new file. This commands acts like | |
156 .B w | |
157 but always prompts for a file name to use. | |
158 .TP 5m | |
159 .BI # | |
160 Start a comment. Discard all the characters until a newline is | |
161 entered. Useful to include comments in scripts. | |
162 | |
163 .SS MOVEMENTS | |
164 The following movement commands are available in any mode where cursor | |
165 movements are meaningful, currently only | |
166 .B move, box, arrow, parallelogram, trapezium, erase, | |
167 and | |
168 .B visual | |
169 (see | |
170 .B MODES | |
171 below). | |
172 .TP 5m | |
173 .BI h | |
174 move the cursor to the left by 1 column | |
175 .TP 5m | |
176 .BI j | |
177 move the cursor down by 1 row | |
178 .TP 5m | |
179 .BI k | |
180 move the cursor up by 1 row | |
181 .TP 5m | |
182 .BI l | |
183 move the cursor right by 1 column | |
184 .PP | |
185 gramscii accepts also the uppercase commands | |
186 .B H, J, K, L, | |
187 which will move in the corresponding direction by a LONG_STEP number of | |
188 units at a time (defaults to 5, change LONG_STEP in config.h as you | |
189 wish). | |
190 .TP 5m | |
191 .BI g | |
192 Initiate a global positioning command (go). These are two- or | |
193 three-letter commands starting with a | |
194 .BI g | |
195 and followed by a direction command, or by a character that indicates a | |
196 global position, or by a valid position mark previously defined with | |
197 .B M | |
198 and preceded by a single quote. In particular: | |
199 .RS | |
200 .TP 5m | |
201 .BI h | |
202 move the cursor to the first column of the current row. | |
203 .TP 5m | |
204 .BI l | |
205 move the cursos to the last column of the current row. | |
206 .TP 5m | |
207 .BI j | |
208 move the cursor to the last row of the current column. | |
209 .TP 5m | |
210 .BI k | |
211 move the cursos to the first row of the current column. | |
212 .TP 5m | |
213 .BI g | |
214 move the cursor to the top-left corner of the screen | |
215 .TP 5m | |
216 .BI G | |
217 move the cursor to the bottom-right corner of the screen | |
218 .TP 5m | |
219 .BI m | |
220 move the cursor to the middle of the screen. | |
221 .TP 5m | |
222 .BI 'a | |
223 (single-quote followed by a character) move the cursor to the position | |
224 previously marked (labelled) with character | |
225 .BI 'a' | |
226 by the command | |
227 .B M | |
228 (mark). The character 'a' must be one of the 26 ASCII alphabetic | |
229 characters. Notice that position marks are case-insensitive, so the two | |
230 commands: | |
231 .B g'b | |
232 and | |
233 .B g'B | |
234 move the cursor to the position mark associated to the letter 'b', if it | |
235 exists. | |
236 .PP | |
237 If you want to move the cursor to the first row of the current | |
238 column, you could use the two-letter command | |
239 .B gk | |
240 (which can be read as "go-up"). Similarly, the command | |
241 .B gh | |
242 (to be read "go-left"), will move the cursor to the first column of the | |
243 current line. Notice that the command | |
244 .B gg | |
245 is effectively equivalent to the sequence | |
246 .B ghgk | |
247 (or | |
248 .B gkgh | |
249 ) while the command | |
250 .B gG | |
251 is equivalent to | |
252 .B glgj | |
253 (or | |
254 .B gjgl | |
255 ). | |
256 .PP | |
257 Global positioning commands are available in | |
258 .B box, arrow, visual, parallelogram, trapezium, | |
259 and | |
260 .B erase | |
261 mode. Notice that | |
262 .B gg, gG, gm | |
263 and moves to position marks like | |
264 .B g'b, | |
265 are not available in | |
266 .B arrow | |
267 mode. | |
268 .PP | |
269 Typing | |
270 .BI g | |
271 followed by any character that is not listed above has no effect on the | |
272 cursor. | |
273 .SS MULTIPLIERS | |
274 Simple cursor movement commands (hjklHJKL) can be preceded by a number | |
275 that acts as a multiplier. For instance, the command: | |
276 .PP | |
277 .RS | |
278 14h | |
279 .PP | |
280 .RE | |
281 will move the cursor by 14 steps to the left. Similarily, the command: | |
282 .PP | |
283 .RS | |
284 7J | |
285 .PP | |
286 .RE | |
287 will move the cursor by 7 LONG_STEPs rows down (with the default | |
288 LONG_STEP equal to 5, this will correspond to 35 rows down). | |
289 .PP | |
290 Multipliers can be used whenever a movement command is legal, i.e. in | |
291 move, box, arrox, parallelogram, trapezium, visual, and erase mode. So | |
292 for instance the sequence: | |
293 .RS | |
294 ggb13l18jb | |
295 .PP | |
296 .RE | |
297 will draw a 18x13 box whose top-left corner coincides with the top-left | |
298 corner of the screen. | |
299 .PP | |
300 Multipliers are ignored by global positioning commands (i.e., those | |
301 starting with | |
302 .B g) | |
303 .SS MODES | |
304 The currently supported modes are: | |
305 .B move, | |
306 .B box, | |
307 .B parallelogram, | |
308 .B trapezium, | |
309 .B arrow, | |
310 .B erase, | |
311 .B text, | |
312 and | |
313 .B visual. | |
314 The current mode is shown in the | |
315 status bar (see | |
316 .B STATUS BAR | |
317 below for more details). gramscii starts in | |
318 .B move | |
319 mode (mov). The following commands are used to change mode: | |
320 .TP 7m | |
321 .BI [ESC] | |
322 Return to | |
323 .B move | |
324 mode. | |
325 .TP 7m | |
326 .BI b | |
327 Toggle | |
328 .B box | |
329 mode. All movements in | |
330 .B box | |
331 mode identify a rectangular box (see | |
332 .B | |
333 MOVEMENTS | |
334 above). When you are happy with the shape of your box, just press | |
335 .B b | |
336 again or | |
337 .B [ENTER] | |
338 to draw the current box permanently and return to | |
339 .B move | |
340 mode. The horizontal and vertical borders of the box are drawn using | |
341 the current | |
342 .B HL | |
343 style and the current | |
344 .B VL | |
345 style, respectively. The corners are drawn using the current | |
346 .B CN | |
347 style, See | |
348 .B STYLES | |
349 below for more information. If you press | |
350 .B [ESC] | |
351 while in box mode, gramscii will return to | |
352 .B move | |
353 mode discarding the current box. | |
354 .TP 7m | |
355 .BI z | |
356 Toggle | |
357 .B parallelogram | |
358 mode. All moves in | |
359 .B parallelogram | |
360 mode identify the bounding box of a parallelogram (see | |
361 .B MOVEMENTS | |
362 above). By default the parallelogram leans to the right. Pressing | |
363 .B Z | |
364 while in parallelogram mode toggles the direction towards which the | |
365 parallelogram leans. Press | |
366 .BI z | |
367 again or | |
368 .B [ENTER] | |
369 to draw the current parallelogram and return to | |
370 .B move | |
371 mode. If you press | |
372 .B [ESC] | |
373 while in parallelogram mode, the current parallelogram will be discarded | |
374 and gramscii will return to | |
375 .B move | |
376 mode. | |
377 .TP 7m | |
378 .BI t | |
379 Toggle | |
380 .B trapezium | |
381 mode. All moves in | |
382 .B trapezium | |
383 mode identify the bounding box of a trapezium (see | |
384 .B MOVEMENTS | |
385 above). A trapezium with a short horizontal side of length zero is a | |
386 triangle, and gramscii knows that. By default, the trapezium is | |
387 isosceles, with the short side up. | |
388 Pressing | |
389 .B T | |
390 while in trapezium mode toggles the type and orientation of the | |
391 trapezium. Press | |
392 .BI t | |
393 again or | |
394 .B [ENTER] | |
395 to draw the current trapezium and return to | |
396 .B move | |
397 mode. If you press | |
398 .B [ESC] | |
399 while in trapezium mode, the current trapezium will be discarded | |
400 and gramscii will return to | |
401 .B move | |
402 mode. | |
403 .TP 7m | |
404 .BI a | |
405 Toggle | |
406 .B arrow | |
407 mode. All movements in | |
408 .B arrow | |
409 mode change the position of the end-point of the current arrow. Press | |
410 .BI a | |
411 again or | |
412 .B [ENTER] | |
413 to draw the current arrow and return to | |
414 .B move | |
415 mode. If you press | |
416 .B [ESC] | |
417 while in arrow mode, gramscii will return to | |
418 .B move | |
419 mode discarding the current arrow. The horizontal and vertical segments | |
420 of the arrow are drawn using the current | |
421 .B HL | |
422 and | |
423 .B VL | |
424 line styles. Corners are drawn using the current | |
425 .B CN | |
426 style. Similarly, the start and the end point of the arrow are drawn | |
427 using the current | |
428 .B SP | |
429 and | |
430 .B EP | |
431 styles. See | |
432 .B STYLES | |
433 below for more information. | |
434 .TP 7m | |
435 .BI A | |
436 Exactly as | |
437 .BI a | |
438 toggles | |
439 .B arrow | |
440 mode, but the end point marker is automatically set according to the | |
441 direction of the arrow. | |
442 .TP 7m | |
443 .BI x | |
444 Toggle | |
445 .B erase | |
446 mode. In erase mode, any character traversed by the cursor is erased, | |
447 i.e., reset to the default background character (space). If you press | |
448 .BI [ESC] | |
449 while in | |
450 .BI erase | |
451 mode, the current erase operation is aborted. Press | |
452 .B x | |
453 again or | |
454 .B [ENTER] | |
455 to make the erase permanent and return to | |
456 .B move | |
457 mode. | |
458 .TP 7m | |
459 .BI i | |
460 Enter | |
461 .B text | |
462 mode. While in text mode, each character typed is printed on the screen | |
463 at the corresponding location, and the cursor is advanced by a single | |
464 position to the right. Movement modes are not allowed while in | |
465 .B text | |
466 mode. By pressing | |
467 .B [ENTER] | |
468 the cursor is placed on the following row (if possible), at the same | |
469 column where the cursor was when the command | |
470 .BI i | |
471 was typed. Press | |
472 .B [ESC] | |
473 to exit | |
474 .B text | |
475 mode and return to | |
476 .B move | |
477 mode. | |
478 .TP 7m | |
479 .BI v | |
480 Toggle | |
481 .B visual | |
482 mode. Visual mode allows to highlight a rectangular region of the | |
483 screen, and to perform an operation into it. After entering | |
484 .B visual | |
485 mode, you can use | |
486 .B MOVEMENTS | |
487 commands to highlight a rectangle. Then, you can use one of the | |
488 following command on the highlighted region: | |
489 .RS | |
490 .TP 5m | |
491 .BI y | |
492 Yank (copy) the highlighted rectangle to the yank buffer. The content of | |
493 the yank buffer can be retrieved by using the | |
494 .B p | |
495 command while in | |
496 .B move | |
497 mode. The yank buffer is overwritten by subsequent yank/cut commands. | |
498 .TP 5m | |
499 .BI x | |
500 Cut region. The content of the highlighted rectangle will be put in the | |
501 yank buffer and all the characters in the region are set to the default | |
502 background character (space). The yank buffer is overwritten by | |
503 subsequent yank/cut commands. | |
504 .TP 5m | |
505 .BI f | |
506 Fill region. gramscii will wait for a character on input and then will | |
507 fill the highlighted region with that character. | |
508 .TP 5m | |
509 .BI C | |
510 Crop-to-region. Crop the chart to the content of the highlighted region. | |
511 Everything else in the screen is erased. | |
512 .TP 5m | |
513 .BI v | |
514 leave | |
515 .B visual | |
516 mode and return to | |
517 .B move | |
518 mode. | |
519 .TP 5m | |
520 .BI [ENTER] | |
521 same as | |
522 .BI v, | |
523 i.e., leave | |
524 .B visual | |
525 mode and return to | |
526 .B move | |
527 mode. | |
528 .TP 5m | |
529 .BI [ESC] | |
530 same as | |
531 .BI v, | |
532 i.e., leave | |
533 .B visual | |
534 mode and return to | |
535 .B move | |
536 mode. | |
537 .RE | |
538 | |
539 .SS STYLES | |
540 The style of lines, corners and markers can be changed at any time while | |
541 in | |
542 .B move, | |
543 .B box, | |
544 and | |
545 .B arrow | |
546 mode. Some caveats apply to parallelogram and trapezium mode though (see | |
547 BUGS). The following style commands are available: | |
548 .TP 5m | |
549 .B . | |
550 (dot) Reset all styles to their default values. | |
551 .TP 5m | |
552 .BI - | |
553 (dash) Change the style used for horizontal lines. Indicated in the | |
554 .B STATUS BAR | |
555 as "HL". Default is '-'. | |
556 .TP 5m | |
557 .BI | | |
558 (pipe) Change the style used for vertical lines. Indicated in the | |
559 .B STATUS BAR | |
560 as "VL". Default is '|'. | |
561 .TP 5m | |
562 .BI + | |
563 (plus) Change the style used for corners (i.e., intersections between | |
564 horizontal and vertical lines). Indicated in the | |
565 .B STATUS BAR | |
566 as "CN". Default is '+'. | |
567 .TP 5m | |
568 .BI < | |
569 (less-than) Change the style used for arrow start points. Indicated in | |
570 the | |
571 .B STATUS BAR | |
572 as "SP". Default is '+'. | |
573 .TP 5m | |
574 .BI > | |
575 (greater-than) Change the style used for arrow end points. Indicated in | |
576 the | |
577 .B STATUS BAR | |
578 as "EP". Default is '>'. | |
579 .PP | |
580 If a style command is issued in | |
581 .B box | |
582 or | |
583 .B arrow | |
584 mode, the new style will be applied to the box/arrow that is currently b… | |
585 drawn, and will remain active until the next style command is used. | |
586 | |
587 .SH STATUS BAR | |
588 Unless script-mode has been requested using option | |
589 .RI -s, | |
590 gramscii shows a status bar on the last line of the screen. The bar | |
591 reports information about the current screen, and in particular: | |
592 .RS | |
593 .TP 10m | |
594 x:XXX | |
595 Current column position of the cursor (the leftmost column is 0). | |
596 .TP 10m | |
597 y:YYY | |
598 Current row position of the cursor (top is 0). | |
599 .TP 10m | |
600 MODE: xxx | |
601 Current mode. It is one of | |
602 .B mov | |
603 (move), | |
604 .B box | |
605 (box), | |
606 .B par | |
607 (parallelogram), | |
608 .B trp | |
609 (trapezium), | |
610 .B arr | |
611 (arrow), | |
612 .B txt | |
613 (text), | |
614 .B del | |
615 (erase), or | |
616 .B vis | |
617 (visual). | |
618 .TP 10m | |
619 HL:x | |
620 Style used for horizontal lines. | |
621 .TP 10m | |
622 VL:x | |
623 Style used for vertical lines. | |
624 .TP 10m | |
625 CN:x | |
626 Style used for corners. | |
627 .TP 10m | |
628 SP:x | |
629 Style used for arrow starting points. | |
630 .TP 10m | |
631 EP:x | |
632 Style used for arrow end points. | |
633 .RE | |
634 .PP | |
635 The rightmost side of the status bar also reports the name of the file | |
636 associated to the current screen: | |
637 .RS | |
638 .TP 12m | |
639 [] | |
640 No file is associated to the current screen, and no changes have been | |
641 made. The command | |
642 .B w | |
643 would prompt the user for the name of the file to save the screen to. | |
644 .TP 12m | |
645 ** | |
646 The screen has been changed, but there is no file associated to it. The | |
647 command | |
648 .B w | |
649 would prompt the user for the name of the file to save the screen to. | |
650 .TP 12m | |
651 [filename] | |
652 The screen corresponds to the file "filename" and it has not been | |
653 modified since the last write on disk. The command | |
654 .B w | |
655 would automatically save the screen into "filename". | |
656 .TP 12m | |
657 *filename* | |
658 The screen is associated to the file "filename", but the current buffer | |
659 includes some changes that have not been saved to the disk. The command | |
660 .B w | |
661 would automatically save the screen into "filename". | |
662 .RE | |
663 .SH BUGS | |
664 gramscii currently manages only a fixed screen of the same size of the | |
665 screen where it starts from. This will be changed in a future release to | |
666 support scrolling and "virtual" screens of any (reasonable) size. | |
667 .PP | |
668 It is not currently possible to change the style of the oblique sides of | |
669 a parallelogram or of a trapezium. | |
670 .PP | |
671 The trapezium routine does not handle well the case of trapezia whose | |
672 height would yield a negative length for the small horizontal side. | |
673 Nevertheless, an exceptionally creative user might consider this a | |
674 feature, rather than a bug. | |
675 .SH AUTHORS | |
676 gramscii is written and maintained by Vincenzo "KatolaZ" Nicosia | |
677 <[email protected]>. You can use, copy, modify, and redistribute | |
678 gramscii under the terms of the GNU General Public License, version 3 of | |
679 the License or, at your option, any later version. |