You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
935 lines
33 KiB
935 lines
33 KiB
.\" $NetBSD: editline.7,v 1.5 2016/05/09 21:27:55 christos Exp $ |
|
.\" $OpenBSD: editline.7,v 1.1 2016/04/20 01:11:45 schwarze Exp $ |
|
.\" |
|
.\" Copyright (c) 2016 Ingo Schwarze <schwarze@openbsd.org> |
|
.\" |
|
.\" Permission to use, copy, modify, and distribute this software for any |
|
.\" purpose with or without fee is hereby granted, provided that the above |
|
.\" copyright notice and this permission notice appear in all copies. |
|
.\" |
|
.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|
.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|
.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|
.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|
.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|
.\" |
|
.Dd May 7, 2016 |
|
.Dt EDITLINE 7 |
|
.Os |
|
.Sh NAME |
|
.Nm editline |
|
.Nd line editing user interface |
|
.Sh DESCRIPTION |
|
When a program using the |
|
.Xr editline 3 |
|
library prompts for an input string using the function |
|
.Xr el_wgets 3 , |
|
it reads characters from the terminal. |
|
Invalid input bytes that do not form characters are silently |
|
discarded. |
|
For each character read, one editor command is executed. |
|
The mapping of input characters to editor commands depends on the |
|
editing mode. |
|
There are three editing modes: vi insert mode, vi command mode, |
|
and emacs mode. |
|
The default is vi insert mode. |
|
The program can switch the default to emacs mode by using the |
|
.Xr el_set 3 |
|
or |
|
.Xr el_parse 3 |
|
functions, and the user can switch to emacs mode either in the |
|
.Xr editrc 5 |
|
configuration file or interactively with the |
|
.Ic ed-command |
|
editor command, in all three cases executing the |
|
.Ic bind Fl e |
|
builtin command. |
|
.Pp |
|
If trying to read from the terminal results in end of file or an |
|
error, the library signals end of file to the program and does not |
|
return a string. |
|
.Ss Input character bindings |
|
All default bindings described below can be overridden by individual |
|
programs and can be changed with the |
|
.Xr editrc 5 |
|
.Ic bind |
|
builtin command. |
|
.Pp |
|
In the following tables, |
|
.Sq Ctrl- |
|
indicates a character with the bit 0x40 flipped, and |
|
.Sq Meta- |
|
indicates a character with the bit 0x80 set. |
|
In vi insert mode and in emacs mode, all Meta-characters considered |
|
printable by the current |
|
.Xr locale 1 |
|
are bound to |
|
.Ic ed-insert |
|
instead of to the editor command listed below. |
|
Consequently, in UTF-8 mode, most of the Meta-characters are not |
|
directly accessible because their code points are occupied by |
|
printable Unicode characters, and Meta-characters are usually input |
|
using the |
|
.Ic em-meta-next |
|
editor command. |
|
For example, to enter |
|
.Sq Meta-B |
|
in order to call the |
|
.Ic ed-prev-word |
|
editor command in emacs mode, call |
|
.Ic em-meta-next |
|
by pressing and releasing the escape key (or equivalently, Ctrl-[), |
|
then press and release the |
|
.Sq B |
|
key. |
|
If you have configured a Meta-key on your keyboard, for example |
|
with |
|
.Ql setxkbmap -option altwin:left_meta_win , |
|
the Ctrl-Meta-characters are directly accessible. |
|
For example, to enter |
|
.Sq Ctrl-Meta-H |
|
in order to call the |
|
.Ic ed-delete-prev-word |
|
editor command in emacs mode, hold down the keys |
|
.Sq Ctrl , |
|
.Sq Meta , |
|
and |
|
.Sq H |
|
at the same time. |
|
Alternatively, press and release the escape key, then press and |
|
release |
|
.Sq Ctrl-H . |
|
.Pp |
|
In vi input mode, input characters are bound to the following editor |
|
commands by default: |
|
.Bl -column -offset indent "Ctrl-Z, TSTP" "ed-search-next-history" |
|
.It Ctrl-D, EOF Ta Ic vi-list-or-eof |
|
.It Ctrl-H, BS Ta Ic vi-delete-prev-char |
|
.It Ctrl-J, LF Ta Ic ed-newline |
|
.It Ctrl-M, CR Ta Ic ed-newline |
|
.It Ctrl-Q Ta Ic ed-tty-start-output |
|
.It Ctrl-S Ta Ic ed-tty-stop-output |
|
.It Ctrl-U Ta Ic vi-kill-line-prev |
|
.It Ctrl-V Ta Ic ed-quoted-insert |
|
.It Ctrl-W Ta Ic ed-delete-prev-word |
|
.It Ctrl-[, ESC Ta Ic vi-command-mode |
|
.It Ctrl-\e, QUIT Ta Ic ed-tty-sigquit |
|
.It Ctrl-?, DEL Ta Ic vi-delete-prev-char |
|
.El |
|
.Pp |
|
All other input characters except the NUL character (Ctrl-@) are |
|
bound to |
|
.Ic ed-insert . |
|
.Pp |
|
In vi command mode, input characters are bound to the following |
|
editor commands by default: |
|
.Bl -column -offset indent "Ctrl-Z, TSTP" "ed-search-next-history" |
|
.It Ctrl-A Ta Ic ed-move-to-beg |
|
.It Ctrl-C, INT Ta Ic ed-tty-sigint |
|
.It Ctrl-E Ta Ic ed-move-to-end |
|
.It Ctrl-H, BS Ta Ic ed-delete-prev-char |
|
.It Ctrl-J, LF Ta Ic ed-newline |
|
.It Ctrl-K Ta Ic ed-kill-line |
|
.It Ctrl-L, FF Ta Ic ed-clear-screen |
|
.It Ctrl-M, CR Ta Ic ed-newline |
|
.It Ctrl-N Ta Ic ed-next-history |
|
.It Ctrl-O Ta Ic ed-tty-flush-output |
|
.It Ctrl-P Ta Ic ed-prev-history |
|
.It Ctrl-Q Ta Ic ed-tty-start-output |
|
.It Ctrl-R Ta Ic ed-redisplay |
|
.It Ctrl-S Ta Ic ed-tty-stop-output |
|
.It Ctrl-U Ta Ic vi-kill-line-prev |
|
.It Ctrl-W Ta Ic ed-delete-prev-word |
|
.It Ctrl-[, ESC Ta Ic em-meta-next |
|
.It Ctrl-\e, QUIT Ta Ic ed-tty-sigquit |
|
.It Space Ta Ic ed-next-char |
|
.It # Ta Ic vi-comment-out |
|
.It $ Ta Ic ed-move-to-end |
|
.It % Ta Ic vi-match |
|
.It + Ta Ic ed-next-history |
|
.It \&, Ta Ic vi-repeat-prev-char |
|
.It - Ta Ic ed-prev-history |
|
.It \&. Ta Ic vi-redo |
|
.It / Ta Ic vi-search-prev |
|
.It 0 Ta Ic vi-zero |
|
.It 1 to 9 Ta Ic ed-argument-digit |
|
.It \&: Ta Ic ed-command |
|
.It \&; Ta Ic vi-repeat-next-char |
|
.It \&? Ta Ic vi-search-next |
|
.It @ Ta Ic vi-alias |
|
.It A Ta Ic vi-add-at-eol |
|
.It B Ta Ic vi-prev-big-word |
|
.It C Ta Ic vi-change-to-eol |
|
.It D Ta Ic ed-kill-line |
|
.It E Ta Ic vi-end-big-word |
|
.It F Ta Ic vi-prev-char |
|
.It G Ta Ic vi-to-history-line |
|
.It I Ta Ic vi-insert-at-bol |
|
.It J Ta Ic ed-search-next-history |
|
.It K Ta Ic ed-search-prev-history |
|
.It N Ta Ic vi-repeat-search-prev |
|
.It O Ta Ic ed-sequence-lead-in |
|
.It P Ta Ic vi-paste-prev |
|
.It R Ta Ic vi-replace-mode |
|
.It S Ta Ic vi-substitute-line |
|
.It T Ta Ic vi-to-prev-char |
|
.It U Ta Ic vi-undo-line |
|
.It W Ta Ic vi-next-big-word |
|
.It X Ta Ic ed-delete-prev-char |
|
.It Y Ta Ic vi-yank-end |
|
.It \&[ Ta Ic ed-sequence-lead-in |
|
.It ^ Ta Ic ed-move-to-beg |
|
.It _ Ta Ic vi-history-word |
|
.It a Ta Ic vi-add |
|
.It b Ta Ic vi-prev-word |
|
.It c Ta Ic vi-change-meta |
|
.It d Ta Ic vi-delete-meta |
|
.It e Ta Ic vi-end-word |
|
.It f Ta Ic vi-next-char |
|
.It h Ta Ic ed-prev-char |
|
.It i Ta Ic vi-insert |
|
.It j Ta Ic ed-next-history |
|
.It k Ta Ic ed-prev-history |
|
.It l Ta Ic ed-next-char |
|
.It n Ta Ic vi-repeat-search-next |
|
.It p Ta Ic vi-paste-next |
|
.It r Ta Ic vi-replace-char |
|
.It s Ta Ic vi-substitute-char |
|
.It t Ta Ic vi-to-next-char |
|
.It u Ta Ic vi-undo |
|
.It v Ta Ic vi-histedit |
|
.It w Ta Ic vi-next-word |
|
.It x Ta Ic ed-delete-next-char |
|
.It y Ta Ic vi-yank |
|
.It \&| Ta Ic vi-to-column |
|
.It ~ Ta Ic vi-change-case |
|
.It Ctrl-?, DEL Ta Ic ed-delete-prev-char |
|
.It Meta-O Ta Ic ed-sequence-lead-in |
|
.It Meta-[ Ta Ic ed-sequence-lead-in |
|
.El |
|
.Pp |
|
In emacs mode, input characters are bound to the following editor |
|
commands by default: |
|
.Bl -column -offset indent "Ctrl-Z, TSTP" "ed-search-next-history" |
|
.It 0 to 9 Ta Ic ed-digit |
|
.It Ctrl-@, NUL Ta Ic em-set-mark |
|
.It Ctrl-A Ta Ic ed-move-to-beg |
|
.It Ctrl-B Ta Ic ed-prev-char |
|
.It Ctrl-C, INT Ta Ic ed-tty-sigint |
|
.It Ctrl-D, EOF Ta Ic em-delete-or-list |
|
.It Ctrl-E Ta Ic ed-move-to-end |
|
.It Ctrl-F Ta Ic ed-next-char |
|
.It Ctrl-H, BS Ta Ic em-delete-prev-char |
|
.It Ctrl-J, LF Ta Ic ed-newline |
|
.It Ctrl-K Ta Ic ed-kill-line |
|
.It Ctrl-L, FF Ta Ic ed-clear-screen |
|
.It Ctrl-M, CR Ta Ic ed-newline |
|
.It Ctrl-N Ta Ic ed-next-history |
|
.It Ctrl-O Ta Ic ed-tty-flush-output |
|
.It Ctrl-P Ta Ic ed-prev-history |
|
.It Ctrl-Q Ta Ic ed-tty-start-output |
|
.It Ctrl-R Ta Ic ed-redisplay |
|
.It Ctrl-S Ta Ic ed-tty-stop-output |
|
.It Ctrl-T Ta Ic ed-transpose-chars |
|
.It Ctrl-U Ta Ic ed-kill-line |
|
.It Ctrl-V Ta Ic ed-quoted-insert |
|
.It Ctrl-W Ta Ic em-kill-region |
|
.It Ctrl-X Ta Ic ed-sequence-lead-in |
|
.It Ctrl-Y Ta Ic em-yank |
|
.It Ctrl-Z, TSTP Ta Ic ed-tty-sigtstp |
|
.It Ctrl-[, ESC Ta Ic em-meta-next |
|
.It Ctrl-\e, QUIT Ta Ic ed-tty-sigquit |
|
.It Ctrl-] Ta Ic ed-tty-dsusp |
|
.It Ctrl-?, DEL Ta Ic em-delete-prev-char |
|
.It Ctrl-Meta-H Ta Ic ed-delete-prev-word |
|
.It Ctrl-Meta-L Ta Ic ed-clear-screen |
|
.It Ctrl-Meta-_ Ta Ic em-copy-prev-word |
|
.It Meta-0 to 9 Ta Ic ed-argument-digit |
|
.It Meta-B Ta Ic ed-prev-word |
|
.It Meta-C Ta Ic em-capitol-case |
|
.It Meta-D Ta Ic em-delete-next-word |
|
.It Meta-F Ta Ic em-next-word |
|
.It Meta-L Ta Ic em-lower-case |
|
.It Meta-N Ta Ic ed-search-next-history |
|
.It Meta-O Ta Ic ed-sequence-lead-in |
|
.It Meta-P Ta Ic ed-search-prev-history |
|
.It Meta-U Ta Ic em-upper-case |
|
.It Meta-W Ta Ic em-copy-region |
|
.It Meta-X Ta Ic ed-command |
|
.It Meta-[ Ta Ic ed-sequence-lead-in |
|
.It Meta-b Ta Ic ed-prev-word |
|
.It Meta-c Ta Ic em-capitol-case |
|
.It Meta-d Ta Ic em-delete-next-word |
|
.It Meta-f Ta Ic em-next-word |
|
.It Meta-l Ta Ic em-lower-case |
|
.It Meta-n Ta Ic ed-search-next-history |
|
.It Meta-p Ta Ic ed-search-prev-history |
|
.It Meta-u Ta Ic em-upper-case |
|
.It Meta-w Ta Ic em-copy-region |
|
.It Meta-x Ta Ic ed-command |
|
.It Ctrl-Meta-? Ta Ic ed-delete-prev-word |
|
.El |
|
.Pp |
|
The remaining |
|
.Xr ascii 7 |
|
characters in the range 0x20 to 0x7e are bound to |
|
.Ic ed-insert . |
|
.Pp |
|
If standard output is not connected to a terminal device |
|
or |
|
.Xr el_set 3 |
|
was used to set |
|
.Dv EL_EDITMODE |
|
to 0, all input character bindings are disabled and all characters |
|
typed are appended to the edit buffer. |
|
In that case, the edit buffer is returned to the program after a |
|
newline or carriage return character is typed, or after the first |
|
character typed if |
|
.Xr el_set 3 |
|
was used to set |
|
.Dv EL_UNBUFFERED |
|
to non-zero. |
|
.Ss Editor commands |
|
Most editor commands accept an optional argument. |
|
The argument is entered by prefixing the editor command with one |
|
or more of the editor commands |
|
.Ic ed-argument-digit , |
|
.Ic ed-digit , |
|
.Ic em-universal-argument , |
|
or |
|
.Ic vi-zero . |
|
When an argument is not provided, it defaults to 1. |
|
For most editor commands, the effect of an argument is to repeatedly |
|
execute the command that number of times. |
|
.Pp |
|
When talking about a character string from a left character to a |
|
right character, the left character is included in the string, while |
|
the right character is not included. |
|
.Pp |
|
If an editor command causes an error, the input character is discarded, |
|
no action occurs, and the terminal bell is rung. |
|
In case of a non-fatal error, the terminal bell is also rung, |
|
but the editor command takes effect anyway. |
|
.Pp |
|
In the following list, the default key bindings are listed after |
|
each editor command. |
|
.Bl -tag -width 4n |
|
.It Ic ed-argument-digit Pq vi command: 1 to 9; emacs: Meta-0 to Meta-9 |
|
If in argument input mode, append the input digit to the argument |
|
being read. |
|
Otherwise, switch to argument input mode and use the input digit |
|
as the most significant digit of the argument. |
|
It is an error if the input character is not a digit or if the |
|
existing argument is already greater than a million. |
|
.It Ic ed-clear-screen Pq vi command: Ctrl-L; emacs: Ctrl-L, Ctrl-Meta-L |
|
Clear the screen and display the edit buffer at the top. |
|
Ignore any argument. |
|
.It Ic ed-command Pq vi command: So \&: Sc ; emacs: Meta-X, Meta-x |
|
Read a line from the terminal bypassing the normal line editing |
|
functionality and execute that line as an |
|
.Xr editrc 5 |
|
builtin command. |
|
If in vi command mode, also switch back to vi insert mode. |
|
Ignore any argument. |
|
.It Ic ed-delete-next-char Pq vi command: x |
|
Delete the character at the cursor position. |
|
With an argument, delete that number of characters. |
|
In emacs mode, it is an error if the cursor is at the end of the |
|
edit buffer. |
|
In vi mode, the last character in the edit buffer is deleted in |
|
that case, and it is an error if the buffer is empty. |
|
.It Ic ed-delete-prev-char Pq vi command: X, Ctrl-H, BS, Ctrl-?, DEL |
|
Delete the character to the left of the cursor position. |
|
With an argument, delete that number of characters. |
|
It is an error if the cursor is at the beginning of the edit buffer. |
|
.It Ic ed-delete-prev-word Pq vi: Ctrl-W; emacs: Ctrl-Meta-H, Ctrl-Meta-? |
|
Move to the left to the closest beginning of a word, delete the |
|
string from that position to the cursor, and save it to the cut |
|
buffer. |
|
With an argument, delete that number of words. |
|
It is an error if the cursor is at the beginning of the edit buffer. |
|
.It Ic ed-digit Pq emacs: 0 to 9 |
|
If in argument input mode, append the input digit to the argument |
|
being read. |
|
Otherwise, call |
|
.Ic ed-insert . |
|
It is an error if the input character is not a digit or if the |
|
existing argument is already greater than a million. |
|
.It Ic ed-end-of-file Pq not bound by default |
|
Discard the edit buffer and indicate end of file to the program. |
|
Ignore any argument. |
|
.It Ic ed-ignore Pq various |
|
Discard the input character and do nothing. |
|
.It Ic ed-insert Pq vi input: almost all; emacs: printable characters |
|
In insert mode, insert the input character left of the cursor |
|
position. |
|
In replace mode, overwrite the character at the cursor and move the |
|
cursor to the right by one character position. |
|
Accept an argument to do this repeatedly. |
|
It is an error if the input character is the NUL character (Ctrl-@). |
|
Failure to enlarge the edit buffer also results in an error. |
|
.It Ic ed-kill-line Pq vi command: D, Ctrl-K; emacs: Ctrl-K, Ctrl-U |
|
Delete the string from the cursor position to the end of the line |
|
and save it to the cut buffer. |
|
Ignore any argument. |
|
.It Ic ed-move-to-beg Pq vi command: ^, Ctrl-A; emacs: Ctrl-A |
|
In vi mode, move the cursor to the first non-space character in the |
|
edit buffer. |
|
In emacs mode, move the cursor to the beginning of the edit buffer. |
|
Ignore any argument. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
.It Ic ed-move-to-end Pq vi command: $, Ctrl-E; emacs: Ctrl-E |
|
Move the cursor to the end of the edit buffer. |
|
Ignore any argument. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
.It Ic ed-newline Pq all modes: Ctrl-J, LF, Ctrl-M, CR |
|
Append a newline character to the edit buffer and return the edit |
|
buffer to the program. |
|
Ignore any argument. |
|
.It Ic ed-next-char Pq vi command: Space, l; emacs: Ctrl-F |
|
Move the cursor one character position to the right. |
|
With an argument, move by that number of characters. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
It is an error if the cursor is already at the end of the edit |
|
buffer. |
|
.It Ic ed-next-history Pq vi command: j, +, Ctrl-N; emacs: Ctrl-N |
|
Replace the edit buffer with the next history line. |
|
That line is older than the current line. |
|
With an argument, go forward by that number of history lines. |
|
It is a non-fatal error to advance by more lines than are available. |
|
.It Ic ed-next-line Pq not bound by default |
|
Move the cursor down one line. |
|
With an argument, move down by that number of lines. |
|
It is an error if the edit buffer does not contain enough newline |
|
characters to the right of the cursor position. |
|
.It Ic ed-prev-char Pq vi command: h; emacs: Ctrl-B |
|
Move the cursor one character position to the left. |
|
With an argument, move by that number of characters. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
It is an error if the cursor is already at the beginning of the |
|
edit buffer. |
|
.It Ic ed-prev-history Pq vi command: k, -, Ctrl-P; emacs: Ctrl-P |
|
Replace the edit buffer with the previous history line. |
|
That line is newer than the current line. |
|
With an argument, go back by that number of lines. |
|
It is a non-fatal error to back up by more lines than are available. |
|
.It Ic ed-prev-line Pq not bound by default |
|
Move the cursor up one line. |
|
With an argument, move up by that number of lines. |
|
It is an error if the edit buffer does not contain enough newline |
|
characters to the left of the cursor position. |
|
.It Ic ed-prev-word Pq emacs: Meta-B, Meta-b |
|
Move the cursor to the left to the closest beginning of a word. |
|
With an argument, repeat that number of times. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
It is an error if the cursor is already at the beginning of the |
|
edit buffer. |
|
.It Ic ed-quoted-insert Pq vi insert, emacs: Ctrl-V |
|
Read one character from the terminal bypassing the normal line |
|
editing functionality and call |
|
.Ic ed-insert |
|
on it. |
|
If trying to read the character returns end of file or an error, |
|
call |
|
.Ic ed-end-of-file |
|
instead. |
|
.It Ic ed-redisplay Pq vi command, emacs: Ctrl-R |
|
Redisplay everything. |
|
Ignore any argument. |
|
.It Ic ed-search-next-history Pq vi command: J; emacs: Meta-N, Meta-n |
|
Replace the edit buffer with the next matching history entry. |
|
.It Ic ed-search-prev-history Pq vi command: K; emacs: Meta-P, Meta-p |
|
Replace the edit buffer with the previous matching history entry. |
|
.It Ic ed-sequence-lead-in Pq vi cmd: O, \&[; emacs: Ctrl-X;\ |
|
both: Meta-O, Meta-[ |
|
Call a macro. |
|
See the section about |
|
.Sx Macros |
|
below for details. |
|
.It Ic ed-start-over Pq not bound by default |
|
Discard the contents of the edit buffer and start from scratch. |
|
Ignore any argument. |
|
.It Ic ed-transpose-chars Pq emacs: Ctrl-T |
|
Exchange the character at the cursor position with the one to the |
|
left of it and move the cursor to the character to the right of the |
|
two exchanged characters. |
|
Ignore any argument. |
|
It is an error if the cursor is at the beginning of the edit buffer |
|
or if the edit buffer contains less than two characters. |
|
.It Ic ed-unassigned Pq all characters not listed |
|
This editor command always results in an error. |
|
.It Ic em-capitol-case Pq emacs: Meta-C, Meta-c |
|
Capitalize the string from the cursor to the end of the current |
|
word. |
|
That is, if it contains at least one alphabetic character, convert |
|
the first alphabetic character to upper case, and convert all |
|
characters to the right of it to lower case. |
|
In any case, move the cursor to the next character after the end |
|
of the current word. |
|
.It Ic em-copy-prev-word Pq emacs: Ctrl-Meta-_ |
|
Copy the string from the beginning of the current word to the cursor |
|
and insert it to the left of the cursor. |
|
Move the cursor to the character after the inserted string. |
|
It is an error if the cursor is at the beginning of the edit buffer. |
|
.It Ic em-copy-region Pq emacs: Meta-W, Meta-w |
|
Copy the string from the cursor to the mark to the cut buffer. |
|
It is an error if the mark is not set. |
|
.It Ic em-delete-next-word Pq emacs: Meta-D, Meta-d |
|
Delete the string from the cursor to the end of the current word |
|
and save it to the cut buffer. |
|
It is an error if the cursor is at the end of the edit buffer. |
|
.It Ic em-delete-or-list Pq emacs: Ctrl-D, EOF |
|
If the cursor is not at the end of the line, delete the character |
|
at the cursor. |
|
If the edit buffer is empty, indicate end of file to the program. |
|
It is an error if the cursor is at the end of the edit buffer and |
|
the edit buffer is not empty. |
|
.It Ic em-delete-prev-char Pq emacs: Ctrl-H, BS, Ctrl-?, DEL |
|
Delete the character to the left of the cursor. |
|
It is an error if the cursor is at the beginning of the edit buffer. |
|
.It Ic em-exchange-mark Pq not bound by default |
|
Exchange the cursor and the mark. |
|
.It Ic em-gosmacs-transpose Pq not bound by default |
|
Exchange the two characters to the left of the cursor. |
|
It is an error if the cursor is on the first or second character |
|
of the edit buffer. |
|
.It Ic em-inc-search-next Pq not bound by default |
|
Emacs incremental next search. |
|
.It Ic em-inc-search-prev Pq not bound by default |
|
Emacs incremental reverse search. |
|
.It Ic em-kill-line Pq not bound by default |
|
Delete the entire contents of the edit buffer and save it to the |
|
cut buffer. |
|
.It Ic em-kill-region Pq emacs: Ctrl-W |
|
Delete the string from the cursor to the mark and save it to the |
|
cut buffer. |
|
It is an error if the mark is not set. |
|
.It Ic em-lower-case Pq emacs: Meta-L, Meta-l |
|
Convert the characters from the cursor to the end of the current |
|
word to lower case. |
|
.It Ic em-meta-next Pq vi command, emacs: Ctrl-[, ESC |
|
Set the bit 0x80 on the next character typed. |
|
Unless the resulting code point is printable, holding down the |
|
.Sq Meta- |
|
key while typing that character is a simpler way to achieve the |
|
same effect. |
|
.It Ic em-next-word Pq Meta-F, Meta-f |
|
Move the cursor to the end of the current word. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
It is an error if the cursor is already at the end of the edit |
|
buffer. |
|
.It Ic em-set-mark Pq emacs: Ctrl-Q, NUL |
|
Set the mark at the current cursor position. |
|
.It Ic em-toggle-overwrite Pq not bound by default |
|
Switch from insert to overwrite mode or vice versa. |
|
.It Ic em-universal-argument Pq not bound by default |
|
If in argument input mode, multiply the argument by 4. |
|
Otherwise, switch to argument input mode and set the argument to 4. |
|
It is an error if the existing argument is already greater than a |
|
million. |
|
.It Ic em-upper-case Pq emacs: Meta-U, Meta-u |
|
Convert the characters from the cursor to the end of the current |
|
word to upper case. |
|
.It Ic em-yank Pq emacs: Ctrl-Y |
|
Paste the cut buffer to the left of the cursor. |
|
.It Ic vi-add Pq vi command: a |
|
Switch to vi insert mode. |
|
Unless the cursor is already at the end of the edit buffer, move |
|
it one character position to the right. |
|
.It Ic vi-add-at-eol Pq vi command: A |
|
Switch to vi insert mode and move the cursor to the end of the edit |
|
buffer. |
|
.It Ic vi-alias Pq vi command: @ |
|
If an alias function was defined by calling the |
|
.Xr el_set 3 |
|
or |
|
.Xr el_wset 3 |
|
function with the argument |
|
.Dv EL_ALIAS_TEXT , |
|
read one character from the terminal bypassing the normal line |
|
editing functionality, call the alias function passing the argument that was specified with |
|
.Dv EL_ALIAS_TEXT |
|
as the first argument and the character read, with an underscore |
|
prepended, as the second argument, and pass the string returned |
|
from the alias function to |
|
.Xr el_wpush 3 . |
|
It is an error if no alias function is defined or if trying to read |
|
the character results in end of file or an error. |
|
.It Ic vi-change-case Pq vi command: ~ |
|
Change the case of the character at the cursor and move the cursor |
|
one character position to the right. |
|
It is an error if the cursor is already at the end of the edit |
|
buffer. |
|
.It Ic vi-change-meta Pq vi command: c |
|
Delete the string from the cursor to the position specified by the |
|
following movement command and save a copy of it to the cut buffer. |
|
When given twice in a row, instead delete the whole contents of the |
|
edit buffer and save a copy of it to the cut buffer. |
|
In either case, switch to vi insert mode after that. |
|
.It Ic vi-change-to-eol Pq vi command: C |
|
Delete the string from the cursor position to the end of the line |
|
and save it to the cut buffer, then switch to vi insert mode. |
|
.It Ic vi-command-mode Pq vi insert: Ctrl-[, ESC |
|
Discard pending actions and arguments and switch to vi command mode. |
|
Unless the cursor is already at the beginning of the edit buffer, |
|
move it to the left by one character position. |
|
.It Ic vi-comment-out Pq vi command: # |
|
Insert a |
|
.Sq # |
|
character at the beginning of the edit buffer and return the edit |
|
buffer to the program. |
|
.It Ic vi-delete-meta Pq vi command: d |
|
Delete the string from the cursor to the position specified by the |
|
following movement command and save a copy of it to the cut buffer. |
|
When given twice in a row, instead delete the whole contents of the |
|
edit buffer and save a copy of it to the cut buffer. |
|
.It Ic vi-delete-prev-char Pq vi insert: Ctrl-H, BS, Ctrl-?, DEL |
|
Delete the character to the left of the cursor. |
|
It is an error if the cursor is already at the beginning of the |
|
edit buffer. |
|
.It Ic vi-end-big-word Pq vi command: E |
|
Move the cursor to the end of the current space delimited word. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
It is an error if the cursor is already at the end of the edit |
|
buffer. |
|
.It Ic vi-end-word Pq vi command: e |
|
Move the cursor to the end of the current word. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
It is an error if the cursor is already at the end of the edit |
|
buffer. |
|
.It Ic vi-history-word Pq vi command: _ |
|
Insert the first word from the most recent history entry after the |
|
cursor, move the cursor after to the character after the inserted |
|
word, and switch to vi insert mode. |
|
It is an error if there is no history entry or the most recent |
|
history entry is empty. |
|
.It Ic vi-insert Pq vi command: i |
|
Enter insert mode. |
|
.It Ic vi-insert-at-bol Pq vi command: I |
|
Move the cursor to the beginning of the edit buffer and switch to |
|
vi insert mode. |
|
.It Ic vi-kill-line-prev Pq vi: Ctrl-U |
|
Delete the string from the beginning of the edit buffer to the |
|
cursor and save it to the cut buffer. |
|
.It Ic vi-list-or-eof Pq vi insert: Ctrl-D, EOF |
|
If the edit buffer is empty, indicate end of file to the program. |
|
It is an error if the edit buffer is not empty. |
|
.It Ic vi-match Pq vi command: % |
|
Consider opening and closing parentheses, braces, and brackets as |
|
delimiters. |
|
If the cursor is not at a delimiter, move it to the right until it |
|
gets to one, then move it to the matching delimiter. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
It is an error if there is no delimiter at the cursor or in the |
|
string to the right of the cursor, or if the first such delimiter |
|
has no matching delimiter. |
|
.It Ic vi-next-big-word Pq vi command: W |
|
Move the cursor to the right to the beginning of the next space |
|
delimited word. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
It is an error if the cursor is already at the end of the edit |
|
buffer or on its last character. |
|
.It Ic vi-next-char Pq vi command: f |
|
Read one character from the terminal bypassing the normal line |
|
editing functionality and move the cursor to the right to the next |
|
instance of that character in the edit buffer. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
If trying to read the character results in end of file or an error, |
|
call |
|
.Ic ed-end-of-file |
|
instead. |
|
It is an error if the character is not found searching to the right |
|
in the edit buffer. |
|
.It Ic vi-next-word Pq vi command: w |
|
Move the cursor to the right to the beginning of the next word. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
It is an error if the cursor is already at the end of the edit |
|
buffer or on its last character. |
|
.It Ic vi-paste-next Pq vi command: p |
|
Insert a copy of the cut buffer to the right of the cursor. |
|
It is an error if the cut buffer is empty. |
|
.It Ic vi-paste-prev Pq vi command: P |
|
Insert a copy of the cut buffer to the left of the cursor. |
|
It is an error if the cut buffer is empty. |
|
.It Ic vi-prev-big-word Pq vi command: B |
|
Move the cursor to the left to the next beginning of a space delimited |
|
word. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
It is an error if the cursor is already at the beginning of the |
|
edit buffer. |
|
.It Ic vi-prev-char Pq vi command: F |
|
Read one character from the terminal bypassing the normal line |
|
editing functionality and move the cursor to the left to the next |
|
instance of that character in the edit buffer. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
If trying to read the character results in end of file or an error, |
|
call |
|
.Ic ed-end-of-file |
|
instead. |
|
It is an error if the character is not found searching to the left |
|
in the edit buffer. |
|
.It Ic vi-prev-word Pq vi command: b |
|
Move the cursor to the left to the next beginning of a word. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
It is an error if the cursor is already at the beginning of the |
|
edit buffer. |
|
.It Ic vi-redo Pq vi command: Sq \&. |
|
Redo the last non-motion command. |
|
.It Ic vi-repeat-next-char Pq vi command: Sq \&; |
|
Repeat the most recent character search in the same search direction. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
.It Ic vi-repeat-prev-char Pq vi command: Sq \&, |
|
Repeat the most recent character search in the opposite search |
|
direction. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
.It Ic vi-repeat-search-next Pq vi command: n |
|
Repeat the most recent history search in the same search direction. |
|
.It Ic vi-repeat-search-prev Pq vi command: N |
|
Repeat the most recent history search in the opposite search |
|
direction. |
|
.It Ic vi-replace-char Pq vi command: r |
|
Switch to vi replace mode, and automatically switch back to vi |
|
command mode after the next character typed. |
|
See |
|
.Ic ed-insert |
|
for a description of replace mode. |
|
It is an error if the cursor is at the end of the edit buffer. |
|
.It Ic vi-replace-mode Pq vi command: R |
|
Switch to vi replace mode. |
|
This is a variant of vi insert mode; see |
|
.Ic ed-insert |
|
for the difference. |
|
.It Ic vi-search-next Pq vi command: \&? |
|
Replace the edit buffer with the next matching history entry. |
|
.It Ic vi-search-prev Pq vi command: / |
|
Replace the edit buffer with the previous matching history entry. |
|
.It Ic vi-substitute-char Pq vi command: s |
|
Delete the character at the cursor and switch to vi insert mode. |
|
.It Ic vi-substitute-line Pq vi command: S |
|
Delete the entire contents of the edit buffer, save a copy of it |
|
in the cut buffer, and enter vi insert mode. |
|
.It Ic vi-to-column Pq vi command: \&| |
|
Move the cursor to the column specified as the argument. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
.It Ic vi-to-history-line Pq vi command: G |
|
Replace the edit buffer with the specified history entry. |
|
.It Ic vi-to-next-char Pq vi command: t |
|
Read one character from the terminal bypassing the normal line |
|
editing functionality and move the cursor to the right to the |
|
character before the next instance of that character in the edit |
|
buffer. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
If trying to read the character results in end of file or an error, |
|
call |
|
.Ic ed-end-of-file |
|
instead. |
|
It is an error if the character is not found searching to the right |
|
in the edit buffer. |
|
.It Ic vi-to-prev-char Pq vi command: T |
|
Read one character from the terminal bypassing the normal line |
|
editing functionality and move the cursor to the left to the character |
|
after the next instance of that character in the edit buffer. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
If trying to read the character results in end of file or an error, |
|
call |
|
.Ic ed-end-of-file |
|
instead. |
|
It is an error if the character is not found searching to the left |
|
in the edit buffer. |
|
.It Ic vi-undo Pq vi command: u |
|
Undo the last change. |
|
.It Ic vi-undo-line Pq vi command: U |
|
Undo all changes to the edit buffer. |
|
.It Ic vi-yank Pq vi command: y |
|
Copy the string from the cursor to the position specified by the |
|
following movement command to the cut buffer. |
|
When given twice in a row, instead copy the whole contents of the |
|
edit buffer to the cut buffer. |
|
.It Ic vi-yank-end Pq vi command: Y |
|
Copy the string from the cursor to the end of the edit buffer to |
|
the cut buffer. |
|
.It Ic vi-zero Pq vi command: 0 |
|
If in argument input mode, multiply the argument by ten. |
|
Otherwise, move the cursor to the beginning of the edit buffer. |
|
Can be used as a movement command after |
|
.Ic vi_change_meta , |
|
.Ic vi_delete_meta , |
|
or |
|
.Ic vi_yank . |
|
.El |
|
.Ss Macros |
|
If an input character is bound to the editor command |
|
.Ic ed-sequence-lead-in , |
|
.Nm |
|
attempts to call a macro. |
|
If the input character by itself forms the name of a macro, that |
|
macro is executed. |
|
Otherwise, additional input characters are read until the string |
|
read forms the name of a macro, in which case that macro is executed, |
|
or until the string read matches the beginning of none of the existing |
|
macro names, in which case the string including the final, mismatching |
|
character is discarded and the terminal bell is rung. |
|
.Pp |
|
There are two kinds of macros. |
|
Command macros execute a single editor command. |
|
Keyboard macros return a string of characters that is appended |
|
as a new line to the |
|
.Sx Input Queue . |
|
.Pp |
|
The following command macros are defined by default in vi command |
|
mode and in emacs mode: |
|
.Bl -column -offset indent "Esc O A, Esc O A" "em-exchange-mark" |
|
.It Esc \&[ A, Esc O A Ta Ic ed-prev-history |
|
.It Esc \&[ B, Esc O B Ta Ic ed-next-history |
|
.It Esc \&[ C, Esc O C Ta Ic ed-next-char |
|
.It Esc \&[ D, Esc O D Ta Ic ed-prev-char |
|
.It Esc \&[ F, Esc O F Ta Ic ed-move-to-end |
|
.It Esc \&[ H, Esc O H Ta Ic ed-move-to-beg |
|
.El |
|
.Pp |
|
In vi command mode, they are also defined by default without the |
|
initial escape character. |
|
.Pp |
|
In addition, the |
|
.Nm |
|
library tries to bind the strings generated by the arrow keys |
|
as reported by the |
|
.Xr terminfo 5 |
|
database to these editor commands, unless that would clobber |
|
user settings. |
|
.Pp |
|
In emacs mode, the two-character string |
|
.Dq Ctrl-X Ctrl-X |
|
is bound to the |
|
.Ic em-exchange-mark |
|
editor command. |
|
.Ss Input Queue |
|
The |
|
.Nm |
|
library maintains an input queue operated in FIFO mode. |
|
Whenever it needs an input character, it takes the first character |
|
from the first line of the input queue. |
|
When the queue is empty, it reads from the terminal. |
|
.Pp |
|
A line can be appended to the end of the input queue in several ways: |
|
.Bl -dash -offset indent |
|
.It |
|
By calling one of the keyboard |
|
.Sx Macros . |
|
.It |
|
By calling the editor command |
|
.Ic vi-redo . |
|
.It |
|
By calling the editor command |
|
.Ic vi-alias . |
|
.It |
|
By pressing a key in emacs incremental search mode that doesn't |
|
have a special meaning in that mode but returns to normal emacs |
|
mode. |
|
.It |
|
If an application program directly calls the functions |
|
.Xr el_push 3 |
|
or |
|
.Xr el_wpush 3 , |
|
it can provide additional, program-specific ways |
|
of appending to the input queue. |
|
.El |
|
.Sh SEE ALSO |
|
.Xr mg 1 , |
|
.Xr vi 1 , |
|
.Xr editline 3 , |
|
.Xr el_wgets 3 , |
|
.Xr el_wpush 3 , |
|
.Xr el_wset 3 , |
|
.Xr editrc 5 |
|
.Sh HISTORY |
|
This manual page first appeared in |
|
.Ox 6.0 |
|
and |
|
.Nx 8 . |
|
.Sh AUTHORS |
|
.An -nosplit |
|
This manual page was written by |
|
.An Ingo Schwarze Aq Mt schwarze@openbsd.org .
|
|
|