sam.1 - sam - An updated version of the sam text editor. | |
git clone git://vernunftzentrum.de/sam.git | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
sam.1 (27698B) | |
--- | |
1 .Dd $Mdocdate$ | |
2 .Dt SAM 1 | |
3 .Os | |
4 .Sh NAME | |
5 .Nm sam | |
6 .Nd screen editor with structural regular expressions | |
7 .Sh SYNOPSIS | |
8 .Nm | |
9 .Op Fl d | |
10 .Op Fl t Ar terminal | |
11 .Ar | |
12 .Nm | |
13 .Fl r Ar machine | |
14 .Op Fl s Ar file | |
15 .Op Fl t Ar terminal | |
16 .Ar | |
17 .Nm sam.save | |
18 .Nm B | |
19 .Op Fl r Ar machine | |
20 .Ar | |
21 .Sh DESCRIPTION | |
22 .Nm sam | |
23 is a multi-file editor. | |
24 It modifies a local copy of an external file. | |
25 The copy is here called a | |
26 .Em file "." | |
27 The files are listed in a menu available through mouse button 3 or the | |
28 .Li n | |
29 command. | |
30 Each file has an associated name, usually the name of the external file … | |
31 .Dq modified | |
32 bit that indicates whether the editor's file agrees with the external fi… | |
33 The external file is not read into the editor's file until it first beco… | |
34 The options are | |
35 .Bl -tag -width Ds | |
36 .It Fl d | |
37 Do not download the terminal part of | |
38 .Nm "." | |
39 Editing will be done with the command language only, as in | |
40 .Xr ed 1 "." | |
41 .It Fl r Ar machine | |
42 Run the host part remotely on the specified machine, the terminal part l… | |
43 .Pq "in the case of the B command" | |
44 commands to be sent to an instance of | |
45 .Nm | |
46 associated with | |
47 .Ar machine "." | |
48 .It Fl s Ar file | |
49 Start the host part from the indicated file on the remote host. | |
50 .It Fl t Ar file | |
51 Start the terminal part from the indicated file. | |
52 Useful for debugging. | |
53 .El | |
54 .Ss Text Files | |
55 .Nm | |
56 can only edit text files, | |
57 encoded using the encoding specified in the | |
58 .Ev LC_ALL "," | |
59 .Ev LC_CTYPE "," | |
60 or | |
61 .Ev LANG | |
62 environment variables | |
63 .Po | |
64 see | |
65 .Xr locale 7 | |
66 .Pc "." | |
67 .Nm | |
68 supports any encoding supported by the underlying operating system. | |
69 .Pp | |
70 Editing files that do not contain valid text in the current encoding | |
71 .Pq "including binary files" | |
72 will result in a warning and such files generally neither load nor displ… | |
73 The standard | |
74 .Xr iconv 1 | |
75 utility can be used to convert among various text encodings, | |
76 and may be useful in converting files to the current encoding for editin… | |
77 .Ss Regular expressions | |
78 Regular expressions are more-or-less as they are in | |
79 .Xr regex 7 "," | |
80 with the addition of | |
81 .Li \[rs]n | |
82 to represent newlines. | |
83 A regular expression may never contain a literal newline character. | |
84 The elements of regular expressions are: | |
85 .Bl -tag -width Ds | |
86 .It Li "." | |
87 Match any character except newline. | |
88 .It Li \[rs]n | |
89 Match newline. | |
90 .It Li \[rs]x | |
91 For any character except | |
92 .Li n | |
93 match the character | |
94 .Po | |
95 here | |
96 .Sy x | |
97 .Pc "." | |
98 .It Li "[abc]" | |
99 Match any character in the square brackets. | |
100 .Li \[rs]n | |
101 may be mentioned. | |
102 .It Li "[^abc]" | |
103 Match any character not in the square brackets, but never a newline. | |
104 Both this and the positive form above accept a range of ASCII characters… | |
105 .Li "a-z" "." | |
106 .It Li "^" | |
107 Match the null string immediately after a newline. | |
108 .It Li "$" | |
109 Match the null string immediately before a newline. | |
110 .El | |
111 .Pp | |
112 Any other character except newline matches itself. | |
113 .Pp | |
114 In the following, | |
115 .Sy r1 | |
116 and | |
117 .Sy r2 | |
118 are regular expressions. | |
119 .Bl -tag -width Ds | |
120 .It Pq Sy r1 | |
121 Match what | |
122 .Sy r1 | |
123 matches. | |
124 .It Sy r1|r2 | |
125 Match what | |
126 .Sy r1 | |
127 or | |
128 .Sy r2 | |
129 matches. | |
130 .It Sy r1* | |
131 Match zero or more adjacent matches of | |
132 .Sy r1 "." | |
133 .It Sy r1+ | |
134 Match one or more adjacent matches of | |
135 .Sy r1 "." | |
136 .It Sy "r1?" | |
137 Match zero or one matches of | |
138 .Sy r1 "." | |
139 .El | |
140 .Pp | |
141 The operators | |
142 .Li "*" "," | |
143 .Li "+" "," | |
144 and | |
145 .Li "?" | |
146 are highest precedence, then catenation, then | |
147 .Li "|" | |
148 is lowest. | |
149 The empty regular expression stands for the last complete expression enc… | |
150 A regular expression in | |
151 .Nm | |
152 matches the longest leftmost substring formally matched by the expressio… | |
153 Searching in the reverse direction is equivalent to search backwards wit… | |
154 .Ss Addresses | |
155 An address identifies a substring in a file. | |
156 In the following | |
157 .Do | |
158 character | |
159 .Sy n | |
160 .Pc | |
161 means the null string after the | |
162 .Sy n\fR-th | |
163 character in the file, with 1 the first character in the file. | |
164 .Do | |
165 Line | |
166 .Sy n | |
167 .Dc | |
168 means the | |
169 .Sy n\fR-th | |
170 match, starting at the beginning of the file, of the regular expression | |
171 .Li ".*\[rs]n?" "." | |
172 .Po | |
173 The peculiar properties of a last line without a newline are temporarily… | |
174 .Pc | |
175 All files always have a current substring, called | |
176 .Sy dot "," | |
177 that is the default address. | |
178 .Ss Simple addresses | |
179 .Bl -tag -width Ds | |
180 .It Li # Sy n | |
181 The empty string after character | |
182 .Sy n ";" | |
183 .Li #0 | |
184 is the beginning of the file. | |
185 .It Sy n | |
186 Line | |
187 .Sy n "." | |
188 .It Li / Sy regexp Li / | |
189 .It Li ? Sy regexp Li ? | |
190 The substring that matches the regular expression, found by looking towa… | |
191 .Pq Li / | |
192 or beginning | |
193 .Pq Li "?" | |
194 of the file, and if necessary continuing the search from the other end t… | |
195 The matched substring may straddle the starting point. | |
196 When entering a pattern containing a literal question mark for a backwar… | |
197 .It Li 0 | |
198 The string before the first full line. | |
199 This is not necessarily the null string; see | |
200 .Li + | |
201 and | |
202 .Li - | |
203 below. | |
204 .It Li $ | |
205 The null string at the end of the file. | |
206 .It Li "." | |
207 Dot. | |
208 .It Li "'" | |
209 The mark in the file | |
210 .Po | |
211 see the | |
212 .Sy k | |
213 command below | |
214 .Pc "." | |
215 .It Do regexp Dc | |
216 .Po | |
217 A regular expression in double quotes. | |
218 .Pc | |
219 Preceding a simple address | |
220 .Po | |
221 default | |
222 .Li "." | |
223 .Pc "," | |
224 refers to the address evaluated in the unique file whose menu line match… | |
225 .El | |
226 .Ss Compound addresses | |
227 In the following, | |
228 .Sy a1 | |
229 and | |
230 .Sy a2 | |
231 are addresses. | |
232 .Bl -tag -width Ds | |
233 .It Sy a1+a2 | |
234 The address | |
235 .Sy a2 | |
236 evaulated starting at the end of | |
237 .Sy a1 "." | |
238 .It Sy a1-a2 | |
239 The address | |
240 .Sy a2 | |
241 evaluated looking the reverse direction starting at the beginning of | |
242 .Sy a1 "." | |
243 .It Sy "a1,a2" | |
244 The substring from the beinning of | |
245 .Sy a1 | |
246 to the end of | |
247 .Sy a2 "." | |
248 If | |
249 .Sy a1 | |
250 is missing, | |
251 .Li 0 | |
252 is substituted. | |
253 If | |
254 .Sy a2 | |
255 is missing, | |
256 .Li $ | |
257 is substituted. | |
258 .It Sy a1;a2 | |
259 Like | |
260 .Dq Sy a1,a2 | |
261 but with | |
262 .Sy a2 | |
263 evaluated at the end of, and dot set to, | |
264 .Sy a1 "." | |
265 .El | |
266 .Pp | |
267 The operators | |
268 .Li + | |
269 and | |
270 .Li - | |
271 are high precedence, while | |
272 .Li , | |
273 and | |
274 .Li ; | |
275 are low precedence. | |
276 .Pp | |
277 In both | |
278 .Li + | |
279 and | |
280 .Li - | |
281 forms, if | |
282 .Sy a2 | |
283 is a line or character address with a missing number, the number default… | |
284 If | |
285 .Sy a1 | |
286 is missing, | |
287 .Li "." | |
288 is subtituted. | |
289 If both | |
290 .Sy a1 | |
291 and | |
292 .Sy a2 | |
293 are present and distinguishable, | |
294 .Li + | |
295 may be elided. | |
296 .Sy a2 | |
297 may be a regular expression; if it is delimited by | |
298 .Li ""?"" | |
299 characters, the effect of the | |
300 .Li + | |
301 or | |
302 .Li - | |
303 is reversed. | |
304 .Pp | |
305 It is an error for a compound address to represent a malformed substring. | |
306 .Pp | |
307 Some useful idioms: | |
308 .Bl -tag -width Ds | |
309 .It Sy a1+- Po Sy a1-+ Pc | |
310 selects the line containing the end | |
311 .Dq beginning | |
312 of | |
313 .Sy a1 "." | |
314 .It Sy 0/regexp/ | |
315 locates the first match of the expression in the file. | |
316 .Po | |
317 The form | |
318 .Li 0;// | |
319 sets dot unnecessarily. | |
320 .Pc | |
321 .It Sy "./regexp///" | |
322 find the second following occurence of the expression, and | |
323 .Sy ".,/regexp/" | |
324 extends dot. | |
325 .El | |
326 .Ss Commands | |
327 In the following, text demarcated by slashes represents text delimited b… | |
328 Any number of trailing delimiters may be elided, with multiple elisions … | |
329 In any delimited text, newline may not appear literally; | |
330 .Li \[rs]n | |
331 may be typed for newline; and | |
332 .Li \[rs]/ | |
333 quotes the delimiter, here | |
334 .Li / "." | |
335 Backslash is otherwise interpreted literally, except in | |
336 .Sy s | |
337 commands. | |
338 .Pp | |
339 Most commands may be prefixed with an address to indicate their range of… | |
340 Those that may not are marked with a | |
341 .Sy "*" | |
342 below. | |
343 If a command takes an address and none is supplied, dot is used. | |
344 The sole exception is the | |
345 .Sy w | |
346 command, which defaults to | |
347 .Li "0,$" "." | |
348 In the description, | |
349 .Dq range | |
350 is used to represent whatever address is supplied. | |
351 Many commands set the value of dot as a side effect. | |
352 If so, it is always to the | |
353 .Dq result | |
354 of the change: the empty string for a deletion, the new text for an inse… | |
355 .Po | |
356 but see the | |
357 .Sy s | |
358 and | |
359 .Sy e | |
360 commands | |
361 .Pc "." | |
362 .Ss Text commands | |
363 .Bl -tag -width Ds | |
364 .It Sy a/text/ | |
365 Insert the text into the file after the range. | |
366 Set dot. | |
367 .Pp | |
368 May also be written as | |
369 .Bd -literal -offset indent | |
370 a | |
371 lines | |
372 of | |
373 text | |
374 . | |
375 .Ed | |
376 .It Sy c \fR or Sy i | |
377 Same as | |
378 .Sy a "," | |
379 but | |
380 .Sy c | |
381 replaces the text, while | |
382 .Sy i | |
383 inserts | |
384 .Em before | |
385 the range. | |
386 .It Sy d | |
387 Delete the text in range. | |
388 Set dot. | |
389 .It Sy s/regexp/text/ | |
390 Substitute | |
391 .Sy text | |
392 for the first match to the regular expression in the range. | |
393 Set dot to the modified range. | |
394 In | |
395 .Sy text | |
396 the character | |
397 .Li "&" | |
398 stands for the string that matched the expression. | |
399 Backslash behaves as usual unless followed by a digit: | |
400 .Sy \[rs]d | |
401 stands for the string that matched the subexpression begun by the | |
402 .Sy d\fR-th | |
403 left parenthesis. | |
404 If | |
405 .Sy s | |
406 is followed immediately by a number | |
407 .Sy n "," | |
408 as in | |
409 .Li "s2/x/y/" "," | |
410 the | |
411 .Sy n\fR-th | |
412 match in the range is substituted. | |
413 If the command is followed by | |
414 .Sy g "," | |
415 as in | |
416 .Li "s/x/y/g" "," | |
417 all matches in the range are substituted. | |
418 .It Sy "m a1" | |
419 Move the range to after | |
420 .Sy a1 "." | |
421 Set dot. | |
422 .It Sy "t a1" | |
423 Copy the range to after | |
424 .Sy a1 "." | |
425 Set dot. | |
426 .El | |
427 .Ss Display commands | |
428 .Bl -tag -width Ds | |
429 .It Sy p | |
430 Print the text in the range. | |
431 Set dot. | |
432 .It Sy = | |
433 Print the line address and character address of the range. | |
434 .It Sy =# | |
435 Print just the character address of the range. | |
436 .El | |
437 .Ss File commands | |
438 .Bl -tag -width Ds | |
439 .It * Sy "b name" | |
440 Set the current file to the first window on file | |
441 .Ar name "," | |
442 if | |
443 .Nm | |
444 has such a file in its menu. | |
445 If no such file is present, | |
446 .Ar name | |
447 is compared against the | |
448 .Xr basename 3 | |
449 of each menu file, and the first match is made current. | |
450 Finally, if no such file is present, the first menu file that contains | |
451 .Ar name | |
452 as a substring is selected. | |
453 The name may be expressed | |
454 .Sy "<shell-command" | |
455 in which case the file names are taken as words | |
456 .Pq "in the shell sense" | |
457 generated by the shell command and no fuzzy matching is performed. | |
458 .It * Sy "B file-list" | |
459 Same as | |
460 .Sy b "," | |
461 except that filenames not in the menu are entered there, and all file na… | |
462 .It * Sy n | |
463 Print a menu of files. | |
464 The format is: | |
465 .Bl -tag -width Ds | |
466 .It "' or blank" | |
467 indicating the file is modified or clean, | |
468 .It "- or +" | |
469 indicating the file is unread or has been read | |
470 .Po | |
471 in the terminal, | |
472 .Li "*" | |
473 means more than one window is open | |
474 .Pc "," | |
475 .It ". or blank" | |
476 indicating the current file, | |
477 .El | |
478 a blank, | |
479 and the filename. | |
480 .It "*" Sy "D file-list" | |
481 Delete the named files from the menu. | |
482 If no files are named, the current file is deleted. | |
483 It is an error to delete a modified file, but a subsequent | |
484 .Sy D | |
485 will delete such a file. | |
486 .El | |
487 .Ss I/O commands | |
488 .Bl -tag -width Ds | |
489 .It "*" Sy "e filename" | |
490 Replace the file by the contents of the named external file. | |
491 Set dot to the beginning of the file. | |
492 .It Sy "r filename" | |
493 Replace the text in the range by the contents of the named external file. | |
494 Set dot. | |
495 .It Sy "w filename" | |
496 Write the range | |
497 .Po | |
498 default | |
499 .Li 0,$ | |
500 .Pc | |
501 to the named external file. | |
502 .It "*" Sy "f filename" | |
503 Set the file name and print the resulting menu entry. | |
504 .El | |
505 .Pp | |
506 If the file name argument is absent from any of these, the current file … | |
507 .Sy e | |
508 always sets the file name, | |
509 .Sy r | |
510 and | |
511 .Sy w | |
512 will do so if the file has no name. | |
513 .Bl -tag -width Ds | |
514 .It Sy "< shell-command" | |
515 Replace the range by the standard output of the shell command. | |
516 .It Sy "> shell-command" | |
517 Sends the range to the standard input of the shell command. | |
518 .It Sy "| shell-command" | |
519 Send the range to the standard input, and replace it by the standard out… | |
520 .It "*" Sy "! shell-command" | |
521 Run the shell command. | |
522 .It "*" Sy "cd directory" | |
523 Change working directory. | |
524 If no directory is specified, | |
525 .Ev "$HOME" | |
526 is used. | |
527 .El | |
528 .Pp | |
529 In any of | |
530 .Sy "<" "," | |
531 .Sy ">" "," | |
532 .Sy "|" ", or" | |
533 .Sy "!" "," | |
534 if the shell command is omitted, the last shell command | |
535 .Pq "of any type" | |
536 is substituted. | |
537 If | |
538 .Nm | |
539 is downloaded, | |
540 .Sy "!" | |
541 sets standard input to | |
542 .Pa "/dev/null" "," | |
543 and otherwise unassigned output | |
544 .Po | |
545 .Pa stdout | |
546 for | |
547 .Sy "!" | |
548 and | |
549 .Sy ">" "," | |
550 .Pa stderr | |
551 for all | |
552 .Pc | |
553 is placed in | |
554 .Pa "${HOME}/sam.err" | |
555 and the first few lines are printed. | |
556 .Ss Loops and conditionals | |
557 .Bl -tag -width Ds | |
558 .It Sy "x/regexp/ command" | |
559 For each match of the regular expression in the range, run the command w… | |
560 Set dot to the last match. | |
561 If the regular expression and its slashes are omitted, | |
562 .Li "/.*\[rs]n/" | |
563 is assumed. | |
564 Null string matches potentially occur before every character of the rang… | |
565 .It Sy "y/regexp/ command" | |
566 Like | |
567 .Sy x "," | |
568 but run the command for each substring that lies before, between, or aft… | |
569 .Sy x "." | |
570 There is no default behavior. | |
571 Null substrings potentially occur before every character in the range. | |
572 .It "*" Sy "X/regexp/ command" | |
573 For each file whose menu entry matches the regular expression, make that… | |
574 If the expression is omitted, the command is run in every file. | |
575 .It "*" Sy "Y/regexp/ command" | |
576 Same as | |
577 .Sy X "," | |
578 but for files that do not match the regular expression, and the expressi… | |
579 .It Sy "g/regexp/ command" | |
580 .It Sy "v/regexp/ command" | |
581 If the range contains | |
582 .Po | |
583 .Sy g | |
584 .Pc | |
585 or does not contain | |
586 .Po | |
587 .Sy v | |
588 .Pc | |
589 a match for the expression, set dot to the range and run the command. | |
590 .El | |
591 .Pp | |
592 These may be nested arbitrarily deeply, but only one instance of either | |
593 .Sy X | |
594 or | |
595 .Sy Y | |
596 may appear in a single command. | |
597 An empty command in an | |
598 .Sy x | |
599 or | |
600 .Sy y | |
601 defaults to | |
602 .Sy p ";" | |
603 an empty command in | |
604 .Sy X | |
605 or | |
606 .Sy Y | |
607 defaults to | |
608 .Sy f "." | |
609 .Sy g | |
610 and | |
611 .Sy v | |
612 do not have defaults. | |
613 .Ss Miscellany | |
614 .Bl -tag -width Ds | |
615 .It Sy k | |
616 Set the current file's mark to the range. | |
617 Does not set dot. | |
618 .It "*" Sy q | |
619 Quit. | |
620 It is an error to quit with modified files, but a second | |
621 .Sy q | |
622 will succeed. | |
623 .It "*" Sy "u n" | |
624 Undo the last | |
625 .Sy n | |
626 .Pq "default 1" | |
627 top-level commands that changed the contents or name of the current file… | |
628 Successive | |
629 .Sy u | |
630 commands move further back in time. | |
631 The only commands for which | |
632 .Sy u | |
633 is ineffective are | |
634 .Sy cd "," | |
635 .Sy u "," | |
636 .Sy q "," | |
637 .Sy w "," | |
638 and | |
639 .Sy D "." | |
640 .It Sy empty | |
641 .Dq "The empty string as a command." | |
642 If the range is explicit, set dot to the range. | |
643 If | |
644 .Nm | |
645 is downloaded, the resulting dot is selected on the screen; otherwise it… | |
646 If no address is specified | |
647 .Pq "the command is a newline" | |
648 dot is extended in either direction to the line boundaries and printed. | |
649 If dot is thereby unchanged, i is set to | |
650 .Li ".+1" | |
651 and printed. | |
652 .El | |
653 .Ss Grouping and multiple changes | |
654 Commands may be grouped by enclosing them in curly braces. | |
655 Commands within the braces must appear on separate lines | |
656 .Pq "no backslashes are required between commands" | |
657 .Do | |
658 as those familiar with other editors might expect | |
659 .Dc "." | |
660 Semantically, the opening brance is like a command: it takes an | |
661 .Pq optional | |
662 address and sets dot for each sub-command. | |
663 Commands within the braces are executed sequentially, but changes made b… | |
664 .Pq "see the next paragraph" "." | |
665 Braces may be nested arbitrarily. | |
666 .Pp | |
667 When a command makes a number of changes to a file, as in | |
668 .Li "x/re/c/text/" "," | |
669 the addresses of all changes to the file are computed in the original fi… | |
670 If the changes are in sequence, they are applied to the file. | |
671 Successive insertions at the same address are catenated into a single in… | |
672 .Ss The terminal | |
673 What follows refers to the behavior of | |
674 .Nm | |
675 when downloaded, that is, when operating as a display editor on a bitmap… | |
676 This is the default behavior; invoking | |
677 .Nm | |
678 with the | |
679 .Fl d | |
680 .Pq "no download" | |
681 option provides access to the command language only. | |
682 .Pp | |
683 Each file may have zero or more windows open. | |
684 Each window is equivalent and is updated simultaneously with changes in … | |
685 Each window has an independent value of dot, indicated by a highlighted … | |
686 Dot may be in a region not within the window. | |
687 There is usually a | |
688 .Dq "current window" "," | |
689 marked with a dark border, to which typed text and editing commands appl… | |
690 The escape key selects | |
691 .Pq "sets dot to" | |
692 text typed since the last mouse button hit. | |
693 .Pp | |
694 The button 3 menu controls window operations. | |
695 The top of the menu provides the following operators, each of which uses… | |
696 .Bl -tag -width Ds | |
697 .It Sy new | |
698 Create a new empty file: | |
699 Depress button 3 where one corner of the new rectangle should appear | |
700 .Pq "box cursor" "," | |
701 and move the mouse while holding down button 3 to the diagonally opposit… | |
702 .Dq Sweeping | |
703 a null rectangle gets a large window disjoint from the command window or… | |
704 .Nm | |
705 window, depending on where the null rectangle is. | |
706 .It Sy zerox | |
707 Create a copy of an existing window. | |
708 After selecting the window to copy with button 1, | |
709 sweep out the window for the copy. | |
710 .It Sy reshape | |
711 Change the size and location of a window. | |
712 First click button 3 in the window to be changed | |
713 .Pq "gunsight cursor" "." | |
714 Then sweep out a window as for the | |
715 .Sy new | |
716 menu selection. | |
717 .It Sy close | |
718 Delete the window. | |
719 In the last window of a file, | |
720 .Sy close | |
721 is equivalent to a | |
722 .Sy D | |
723 for the file. | |
724 .It Sy write | |
725 Equivalent to a | |
726 .Sy w | |
727 for the file. | |
728 .El | |
729 .Pp | |
730 Below these operators is a list of available files, starting with | |
731 .Sy "~~sam~~" "," | |
732 the command window. | |
733 Selecting a file from the list makes the most recently used window on th… | |
734 If no windows are open on the file, the user is prompted to open one. | |
735 Files other than | |
736 .Sy "~~sam~~" | |
737 are marked with one of the characters | |
738 .Li "-+*" | |
739 according as zero, one, or more windows are open on the file. | |
740 A further mark, | |
741 .Li "." "," | |
742 appears on the file in the current window and a single quote, | |
743 .Li "'" "," | |
744 on a file modified since last write. | |
745 .Pp | |
746 The command window, created automatically when | |
747 .Nm | |
748 starts, is an ordinary window except that text typed to it is interprete… | |
749 There is an | |
750 .Dq "output point" | |
751 that separates commands being typed from previous output. | |
752 Commands typed in the command window apply to the current open file\[en]… | |
753 .Ss Manipulating text | |
754 Typed characters replace the current selection | |
755 .Pq dot | |
756 in the current window. | |
757 Backspace deletes the previous character. | |
758 .Pp | |
759 Button 1 changes the selection. | |
760 Pointing to a non-current window with button 1 makes it current; within … | |
761 Double-clicking selects text to the boundaries of words, lines, quoted s… | |
762 .Pp | |
763 Button 2 (or button 3 combined with the shift key) provides a menu of ed… | |
764 .Bl -tag -width Ds | |
765 .It Sy cut | |
766 Delete dot and save the deleted text in the snarf buffer. | |
767 .It Sy paste | |
768 Replace the text in dot by the contents of the snarf buffer. | |
769 .It Sy snarf | |
770 Save the text in dot in the snarf buffer. | |
771 .It Sy look | |
772 Search forward for the next occurence of the literal text in dot. | |
773 If dot is the null string, the text in the snarf buffer is used. | |
774 The snarf buffer is unaffected. | |
775 .It Sy <exch> | |
776 Exchange the snarf buffer with the current system-wide text selection. | |
777 The exchange of a large amount of selected text is truncated to the size… | |
778 .Pq "currently 4K" | |
779 without warning. | |
780 .It Sy "/regexp" | |
781 Search forward for the next match of the last regular expression typed i… | |
782 .Pq "Not in command window." | |
783 .It Sy send | |
784 Send the text in dot, or the snarf buffer if dot is the null string, as … | |
785 Saves the sent text in the snarf buffer. | |
786 .Pq "Command window only." | |
787 .El | |
788 .Pp | |
789 The cut and paste operations can also be accessed combinations of mouse… | |
790 After making a selection with button 1, pressing button 2 with button 1 … | |
791 Pressing button 3 with button 1 still pressed will perform a paste opera… | |
792 Performing both of these operations (pressing buttons 2 and then 3 with … | |
793 These button combinations are referred to as | |
794 .Dq "chords" "." | |
795 .Pp | |
796 A scroll wheel, if present, can be used to scroll a file up and down. | |
797 .Pp | |
798 Various editing functions are also available via the keyboard. | |
799 The notation | |
800 .Em "C-x" | |
801 below means | |
802 .Dq "hold the Control key while pressing x" | |
803 where | |
804 .Em x | |
805 is another key. | |
806 .Pp | |
807 .TS | |
808 box; | |
809 lb | lb | |
810 - | - | |
811 l | l. | |
812 Key Sequence Action | |
813 C-K Jump to/from the command window | |
814 C-E/X/D/S Collapse and move selection up/down/right/left | |
815 C-W/U Delete previous word/to beginning of line | |
816 C-Backspace Delete previous word | |
817 C-Y Cut selection | |
818 C-C Snarf selection | |
819 C-V Paste selection | |
820 C-Q Exchange selection | |
821 C-Tab Insert a tab (even when tab expansion is enabled) | |
822 Escape Highlight recently typed text | |
823 .TE | |
824 .Pp | |
825 Note that the key bindings, | |
826 mouse chords, | |
827 and scroll wheel configuration can be modified at runtime | |
828 .Po | |
829 see | |
830 .Xr samrc 5 | |
831 and | |
832 .Sx "Runtime configuration" | |
833 below | |
834 .Pc | |
835 and thus may vary depending upon your configuration. | |
836 .Ss Runtime configuration | |
837 The terminal can be configured at runtime using environment variables | |
838 .Po | |
839 see | |
840 .Xs ENVIRONMENT | |
841 below | |
842 .Pc | |
843 or by writing a | |
844 .Pa samrc | |
845 file in your home directory | |
846 .Po | |
847 see | |
848 .Xr samrc 5 | |
849 .Pc "." | |
850 The terminal's keybindings, | |
851 mouse chords, | |
852 tab handling, | |
853 colors, | |
854 and fonts may be set at runtime using these methods. | |
855 .Ss Abnormal termination | |
856 If | |
857 .Nm | |
858 terminates other than by a | |
859 .Sy q | |
860 command | |
861 .Pq "by hangup, deleting its window, etc." "," | |
862 modified files are saved in an executable file, | |
863 .Pq "${HOME}/sam.save" "." | |
864 This program, when executed, asks whether to write each file back to an … | |
865 The answer | |
866 .Sy y | |
867 causes writing; anything else skips the file. | |
868 Note that | |
869 .P "sam.save" | |
870 is a shell script, | |
871 passed directly to | |
872 .Xr sh 1 "." | |
873 A modicum of caution should therefore be taken before blindly executing … | |
874 especially if one of the files being edited was itself a shell script. | |
875 .Pp | |
876 If a machine crash prevents the creation of a | |
877 .P "sam.save" | |
878 file, all changes are lost. | |
879 If an editing session is difficult to replicate, writing changed files o… | |
880 .Ss Remote execution | |
881 .Nm sam | |
882 allows the host and terminal parts of the editor to run on diffrent mach… | |
883 .Dq downloading "." | |
884 This process can be suppressed with the | |
885 .Fl d | |
886 option, which then runs only the host part in the manner of | |
887 .Xr ed 1 "." | |
888 .Pp | |
889 Running the host part on another machine is accomplished using the | |
890 .Fl r | |
891 option, which is used to specify a remote machine name suitable for pass… | |
892 .Ev RSH | |
893 environment variable. | |
894 .Pp | |
895 The only component of | |
896 .Nm sam | |
897 that needs to be on the remote machine is | |
898 .Nm sam "," | |
899 or whatever command specified as the argument to the | |
900 .Fl s | |
901 option. | |
902 Users may also like to have the | |
903 .Nm B | |
904 command present on the remote system; invoking this command on the remot… | |
905 .Po | |
906 if | |
907 .Nm sam | |
908 was invoked with its default remote host command, i.e. | |
909 .Nm sam | |
910 .Pc | |
911 open files in the local terminal. | |
912 This allows users to run the terminal part of | |
913 .Nm sam | |
914 locally while controlling it via a remote shell connection. | |
915 .Ss Controlling running instances of Nm | |
916 .Nm B | |
917 is a shell command that causes a downloaded instance of | |
918 .Nm sam | |
919 to load the named files. | |
920 The | |
921 .Fl r | |
922 option causes the instance of | |
923 .Nm sam | |
924 connected to | |
925 .Ar machine | |
926 to load the named files; the default is the most-recently started local … | |
927 .Pp | |
928 .Nm B | |
929 may also be called on a remote machine, causing the downloaded instance … | |
930 .Sh ENVIRONMENT | |
931 The following environment variables affect the operation of | |
932 .Nm sam ":" | |
933 .Bl -tag -width Ds | |
934 .It Ev LC_CTYPE | |
935 .It Ev LC_ALL | |
936 .It Ev LANG | |
937 These variables are consulted to determine the encoding used for text fi… | |
938 .It Ev FOREGROUND | |
939 Sets the foreground color used by | |
940 .Nm | |
941 to draw its terminal. | |
942 Common English color names can be used | |
943 .Po | |
944 see | |
945 .Xr rgb 5 | |
946 .Pc "," | |
947 or exact colors can be specified as | |
948 .Sy "#rrggbb" "," | |
949 where | |
950 .Sy "rr" "," | |
951 .Sy "gg" "," | |
952 and | |
953 .Sy "bb" | |
954 are hexadecimal digits describing the red, green, and blue components of… | |
955 By default, this is the string | |
956 .Dq black "." | |
957 This can also be set using the | |
958 .Em foreground | |
959 directive in | |
960 .Xr samrc 5 "." | |
961 .It Ev BORDER | |
962 As | |
963 .Ev FOREGROUND "," | |
964 but describing the color used to draw borders. | |
965 This can also be set using the | |
966 .Em border | |
967 directive in | |
968 .Xr samrc 5 "." | |
969 .It Ev BACKGROUND | |
970 A colon-separated sequence of color descriptions as in | |
971 .Ev FOREGROUND "," | |
972 but describing the background color. | |
973 By default, this is the string | |
974 .Dq white "." | |
975 If multiple colors are specified, | |
976 .Nm | |
977 will cycle through this list when opening new files. | |
978 Note that the command text will use the first color specified. | |
979 .Pp | |
980 This can also be set using the | |
981 .Em background | |
982 directive in | |
983 .Xr samrc 5 "." | |
984 .It Ev FONT | |
985 A string representing a | |
986 .Xr fc-match 1 | |
987 compatible font pattern. | |
988 The font described by this pattern will be used to render text in the te… | |
989 By default, this is the string | |
990 .Dq "monospace" "." | |
991 This can also be set using the | |
992 .Em font | |
993 directive in | |
994 .Xr samrc 5 "." | |
995 .It Ev RSH | |
996 The name of a command to be used to connect to a remote machine when | |
997 .Nm | |
998 is invoked with the | |
999 .Fl r | |
1000 option. | |
1001 It will be passed arguments of the form: | |
1002 .Bd -literal | |
1003 | |
1004 -R REMOTE:LOCAL MACHINE COMMAND | |
1005 | |
1006 .Ed | |
1007 where | |
1008 .Em REMOTE | |
1009 is the name of the remote UNIX domain socket for remote control, | |
1010 .Em LOCAL | |
1011 is the name of the local UNIX domain socket for remote control, | |
1012 .Em MACHINE | |
1013 is the hostname to connect to, and | |
1014 .Em COMMAND | |
1015 is the command | |
1016 .Po | |
1017 e.g. | |
1018 .Nm sam | |
1019 .Pc | |
1020 to execute on that machine. | |
1021 .Pp | |
1022 Note that this works out-of-the-box with recent versions of | |
1023 .Xr ssh 1 "." | |
1024 Any additional arguments should be passed to the command on the remote m… | |
1025 By default, this is the string | |
1026 .Dq "ssh" "." | |
1027 .It Ev SAMRC | |
1028 If set, | |
1029 provides the name of the | |
1030 .Xr samrc 5 | |
1031 file to read at startup. | |
1032 By default, | |
1033 this is | |
1034 .Pa ${HOME}/.samrc "." | |
1035 .It Ev SAMSOCKETPATH | |
1036 Names a directory in which | |
1037 .Nm | |
1038 remote control sockets should be placed. | |
1039 By default, the contents of | |
1040 .Ev HOME | |
1041 are used. | |
1042 .It Ev SAMSOCKETNAME | |
1043 Gives a full path name for a | |
1044 .Nm | |
1045 remote control socket; this will be used in preference to any file in the | |
1046 .Ev SAMSOCKETPATH | |
1047 directory. | |
1048 .It Ev RSAMSOCKETPATH | |
1049 Names a directory in which | |
1050 .Nm | |
1051 remote control sockets should be placed on remote systems. | |
1052 .It Ev TABS | |
1053 A number between 1 and 12, indicating the width of a tab character. | |
1054 This number is treated as a multiplier of the width of the '0' character. | |
1055 The default is 8. | |
1056 .Pp | |
1057 If the number specified for | |
1058 .Ev TABS | |
1059 is negative, the absolute value of that number is used and automatic tab… | |
1060 is enabled. | |
1061 Tab behavior can also be controlled using the | |
1062 .Em tabs | |
1063 and | |
1064 .Em expandtabs | |
1065 directives in | |
1066 .Xr samrc 5 "." | |
1067 .It Ev SHELL | |
1068 Specifies the full path of the shell to use for executing external comma… | |
1069 .El | |
1070 .Sh FILES | |
1071 .Bl -tag -width Ds | |
1072 .It Pa "${HOME}/.samrc" | |
1073 Provides runtime configuration of key bindings, | |
1074 mouse chords, | |
1075 colors, | |
1076 fonts, | |
1077 and tabs. | |
1078 .It Pa "${HOME}/sam.save" | |
1079 Created if | |
1080 .Nm | |
1081 terminates abnormally. | |
1082 Executing this file will prompt the user to restore the files that were … | |
1083 .It Pa "${HOME}/sam.err" | |
1084 Stores output of shell commands executed by | |
1085 .Nm "." | |
1086 .El | |
1087 .Sh SEE ALSO | |
1088 .Xr ed 1 | |
1089 .Xr samrc 5 | |
1090 .Sh BUGS | |
1091 .Pp | |
1092 The only human language in which colors may be specified is English. | |
1093 .Pp | |
1094 The only human language in which output is generated is English. | |
1095 .Pp | |
1096 There is no support for right-to-left text, ligatures, composed characte… | |
1097 .Pp | |
1098 There is no support for font fallback: characters that do not exist in t… |