Annotation of embedaddon/readline/doc/rluser.texi, revision 1.1
1.1 ! misho 1: @comment %**start of header (This is for running Texinfo on a region.)
! 2: @setfilename rluser.info
! 3: @comment %**end of header (This is for running Texinfo on a region.)
! 4:
! 5: @ignore
! 6: This file documents the end user interface to the GNU command line
! 7: editing features. It is to be an appendix to manuals for programs which
! 8: use these features. There is a document entitled "readline.texinfo"
! 9: which contains both end-user and programmer documentation for the
! 10: GNU Readline Library.
! 11:
! 12: Copyright (C) 1988--2014 Free Software Foundation, Inc.
! 13:
! 14: Authored by Brian Fox and Chet Ramey.
! 15:
! 16: Permission is granted to process this file through Tex and print the
! 17: results, provided the printed document carries copying permission notice
! 18: identical to this one except for the removal of this paragraph (this
! 19: paragraph not being relevant to the printed manual).
! 20:
! 21: Permission is granted to make and distribute verbatim copies of this manual
! 22: provided the copyright notice and this permission notice are preserved on
! 23: all copies.
! 24:
! 25: Permission is granted to copy and distribute modified versions of this
! 26: manual under the conditions for verbatim copying, provided also that the
! 27: GNU Copyright statement is available to the distributee, and provided that
! 28: the entire resulting derived work is distributed under the terms of a
! 29: permission notice identical to this one.
! 30:
! 31: Permission is granted to copy and distribute translations of this manual
! 32: into another language, under the above conditions for modified versions.
! 33: @end ignore
! 34:
! 35: @comment If you are including this manual as an appendix, then set the
! 36: @comment variable readline-appendix.
! 37:
! 38: @ifclear BashFeatures
! 39: @defcodeindex bt
! 40: @end ifclear
! 41:
! 42: @node Command Line Editing
! 43: @chapter Command Line Editing
! 44:
! 45: This chapter describes the basic features of the @sc{gnu}
! 46: command line editing interface.
! 47: @ifset BashFeatures
! 48: Command line editing is provided by the Readline library, which is
! 49: used by several different programs, including Bash.
! 50: Command line editing is enabled by default when using an interactive shell,
! 51: unless the @option{--noediting} option is supplied at shell invocation.
! 52: Line editing is also used when using the @option{-e} option to the
! 53: @code{read} builtin command (@pxref{Bash Builtins}).
! 54: By default, the line editing commands are similar to those of Emacs.
! 55: A vi-style line editing interface is also available.
! 56: Line editing can be enabled at any time using the @option{-o emacs} or
! 57: @option{-o vi} options to the @code{set} builtin command
! 58: (@pxref{The Set Builtin}), or disabled using the @option{+o emacs} or
! 59: @option{+o vi} options to @code{set}.
! 60: @end ifset
! 61:
! 62: @menu
! 63: * Introduction and Notation:: Notation used in this text.
! 64: * Readline Interaction:: The minimum set of commands for editing a line.
! 65: * Readline Init File:: Customizing Readline from a user's view.
! 66: * Bindable Readline Commands:: A description of most of the Readline commands
! 67: available for binding
! 68: * Readline vi Mode:: A short description of how to make Readline
! 69: behave like the vi editor.
! 70: @ifset BashFeatures
! 71: * Programmable Completion:: How to specify the possible completions for
! 72: a specific command.
! 73: * Programmable Completion Builtins:: Builtin commands to specify how to
! 74: complete arguments for a particular command.
! 75: * A Programmable Completion Example:: An example shell function for
! 76: generating possible completions.
! 77: @end ifset
! 78: @end menu
! 79:
! 80: @node Introduction and Notation
! 81: @section Introduction to Line Editing
! 82:
! 83: The following paragraphs describe the notation used to represent
! 84: keystrokes.
! 85:
! 86: The text @kbd{C-k} is read as `Control-K' and describes the character
! 87: produced when the @key{k} key is pressed while the Control key
! 88: is depressed.
! 89:
! 90: The text @kbd{M-k} is read as `Meta-K' and describes the character
! 91: produced when the Meta key (if you have one) is depressed, and the @key{k}
! 92: key is pressed.
! 93: The Meta key is labeled @key{ALT} on many keyboards.
! 94: On keyboards with two keys labeled @key{ALT} (usually to either side of
! 95: the space bar), the @key{ALT} on the left side is generally set to
! 96: work as a Meta key.
! 97: The @key{ALT} key on the right may also be configured to work as a
! 98: Meta key or may be configured as some other modifier, such as a
! 99: Compose key for typing accented characters.
! 100:
! 101: If you do not have a Meta or @key{ALT} key, or another key working as
! 102: a Meta key, the identical keystroke can be generated by typing @key{ESC}
! 103: @emph{first}, and then typing @key{k}.
! 104: Either process is known as @dfn{metafying} the @key{k} key.
! 105:
! 106: The text @kbd{M-C-k} is read as `Meta-Control-k' and describes the
! 107: character produced by @dfn{metafying} @kbd{C-k}.
! 108:
! 109: In addition, several keys have their own names. Specifically,
! 110: @key{DEL}, @key{ESC}, @key{LFD}, @key{SPC}, @key{RET}, and @key{TAB} all
! 111: stand for themselves when seen in this text, or in an init file
! 112: (@pxref{Readline Init File}).
! 113: If your keyboard lacks a @key{LFD} key, typing @key{C-j} will
! 114: produce the desired character.
! 115: The @key{RET} key may be labeled @key{Return} or @key{Enter} on
! 116: some keyboards.
! 117:
! 118: @node Readline Interaction
! 119: @section Readline Interaction
! 120: @cindex interaction, readline
! 121:
! 122: Often during an interactive session you type in a long line of text,
! 123: only to notice that the first word on the line is misspelled. The
! 124: Readline library gives you a set of commands for manipulating the text
! 125: as you type it in, allowing you to just fix your typo, and not forcing
! 126: you to retype the majority of the line. Using these editing commands,
! 127: you move the cursor to the place that needs correction, and delete or
! 128: insert the text of the corrections. Then, when you are satisfied with
! 129: the line, you simply press @key{RET}. You do not have to be at the
! 130: end of the line to press @key{RET}; the entire line is accepted
! 131: regardless of the location of the cursor within the line.
! 132:
! 133: @menu
! 134: * Readline Bare Essentials:: The least you need to know about Readline.
! 135: * Readline Movement Commands:: Moving about the input line.
! 136: * Readline Killing Commands:: How to delete text, and how to get it back!
! 137: * Readline Arguments:: Giving numeric arguments to commands.
! 138: * Searching:: Searching through previous lines.
! 139: @end menu
! 140:
! 141: @node Readline Bare Essentials
! 142: @subsection Readline Bare Essentials
! 143: @cindex notation, readline
! 144: @cindex command editing
! 145: @cindex editing command lines
! 146:
! 147: In order to enter characters into the line, simply type them. The typed
! 148: character appears where the cursor was, and then the cursor moves one
! 149: space to the right. If you mistype a character, you can use your
! 150: erase character to back up and delete the mistyped character.
! 151:
! 152: Sometimes you may mistype a character, and
! 153: not notice the error until you have typed several other characters. In
! 154: that case, you can type @kbd{C-b} to move the cursor to the left, and then
! 155: correct your mistake. Afterwards, you can move the cursor to the right
! 156: with @kbd{C-f}.
! 157:
! 158: When you add text in the middle of a line, you will notice that characters
! 159: to the right of the cursor are `pushed over' to make room for the text
! 160: that you have inserted. Likewise, when you delete text behind the cursor,
! 161: characters to the right of the cursor are `pulled back' to fill in the
! 162: blank space created by the removal of the text. A list of the bare
! 163: essentials for editing the text of an input line follows.
! 164:
! 165: @table @asis
! 166: @item @kbd{C-b}
! 167: Move back one character.
! 168: @item @kbd{C-f}
! 169: Move forward one character.
! 170: @item @key{DEL} or @key{Backspace}
! 171: Delete the character to the left of the cursor.
! 172: @item @kbd{C-d}
! 173: Delete the character underneath the cursor.
! 174: @item @w{Printing characters}
! 175: Insert the character into the line at the cursor.
! 176: @item @kbd{C-_} or @kbd{C-x C-u}
! 177: Undo the last editing command. You can undo all the way back to an
! 178: empty line.
! 179: @end table
! 180:
! 181: @noindent
! 182: (Depending on your configuration, the @key{Backspace} key be set to
! 183: delete the character to the left of the cursor and the @key{DEL} key set
! 184: to delete the character underneath the cursor, like @kbd{C-d}, rather
! 185: than the character to the left of the cursor.)
! 186:
! 187: @node Readline Movement Commands
! 188: @subsection Readline Movement Commands
! 189:
! 190:
! 191: The above table describes the most basic keystrokes that you need
! 192: in order to do editing of the input line. For your convenience, many
! 193: other commands have been added in addition to @kbd{C-b}, @kbd{C-f},
! 194: @kbd{C-d}, and @key{DEL}. Here are some commands for moving more rapidly
! 195: about the line.
! 196:
! 197: @table @kbd
! 198: @item C-a
! 199: Move to the start of the line.
! 200: @item C-e
! 201: Move to the end of the line.
! 202: @item M-f
! 203: Move forward a word, where a word is composed of letters and digits.
! 204: @item M-b
! 205: Move backward a word.
! 206: @item C-l
! 207: Clear the screen, reprinting the current line at the top.
! 208: @end table
! 209:
! 210: Notice how @kbd{C-f} moves forward a character, while @kbd{M-f} moves
! 211: forward a word. It is a loose convention that control keystrokes
! 212: operate on characters while meta keystrokes operate on words.
! 213:
! 214: @node Readline Killing Commands
! 215: @subsection Readline Killing Commands
! 216:
! 217: @cindex killing text
! 218: @cindex yanking text
! 219:
! 220: @dfn{Killing} text means to delete the text from the line, but to save
! 221: it away for later use, usually by @dfn{yanking} (re-inserting)
! 222: it back into the line.
! 223: (`Cut' and `paste' are more recent jargon for `kill' and `yank'.)
! 224:
! 225: If the description for a command says that it `kills' text, then you can
! 226: be sure that you can get the text back in a different (or the same)
! 227: place later.
! 228:
! 229: When you use a kill command, the text is saved in a @dfn{kill-ring}.
! 230: Any number of consecutive kills save all of the killed text together, so
! 231: that when you yank it back, you get it all. The kill
! 232: ring is not line specific; the text that you killed on a previously
! 233: typed line is available to be yanked back later, when you are typing
! 234: another line.
! 235: @cindex kill ring
! 236:
! 237: Here is the list of commands for killing text.
! 238:
! 239: @table @kbd
! 240: @item C-k
! 241: Kill the text from the current cursor position to the end of the line.
! 242:
! 243: @item M-d
! 244: Kill from the cursor to the end of the current word, or, if between
! 245: words, to the end of the next word.
! 246: Word boundaries are the same as those used by @kbd{M-f}.
! 247:
! 248: @item M-@key{DEL}
! 249: Kill from the cursor the start of the current word, or, if between
! 250: words, to the start of the previous word.
! 251: Word boundaries are the same as those used by @kbd{M-b}.
! 252:
! 253: @item C-w
! 254: Kill from the cursor to the previous whitespace. This is different than
! 255: @kbd{M-@key{DEL}} because the word boundaries differ.
! 256:
! 257: @end table
! 258:
! 259: Here is how to @dfn{yank} the text back into the line. Yanking
! 260: means to copy the most-recently-killed text from the kill buffer.
! 261:
! 262: @table @kbd
! 263: @item C-y
! 264: Yank the most recently killed text back into the buffer at the cursor.
! 265:
! 266: @item M-y
! 267: Rotate the kill-ring, and yank the new top. You can only do this if
! 268: the prior command is @kbd{C-y} or @kbd{M-y}.
! 269: @end table
! 270:
! 271: @node Readline Arguments
! 272: @subsection Readline Arguments
! 273:
! 274: You can pass numeric arguments to Readline commands. Sometimes the
! 275: argument acts as a repeat count, other times it is the @i{sign} of the
! 276: argument that is significant. If you pass a negative argument to a
! 277: command which normally acts in a forward direction, that command will
! 278: act in a backward direction. For example, to kill text back to the
! 279: start of the line, you might type @samp{M-- C-k}.
! 280:
! 281: The general way to pass numeric arguments to a command is to type meta
! 282: digits before the command. If the first `digit' typed is a minus
! 283: sign (@samp{-}), then the sign of the argument will be negative. Once
! 284: you have typed one meta digit to get the argument started, you can type
! 285: the remainder of the digits, and then the command. For example, to give
! 286: the @kbd{C-d} command an argument of 10, you could type @samp{M-1 0 C-d},
! 287: which will delete the next ten characters on the input line.
! 288:
! 289: @node Searching
! 290: @subsection Searching for Commands in the History
! 291:
! 292: Readline provides commands for searching through the command history
! 293: @ifset BashFeatures
! 294: (@pxref{Bash History Facilities})
! 295: @end ifset
! 296: for lines containing a specified string.
! 297: There are two search modes: @dfn{incremental} and @dfn{non-incremental}.
! 298:
! 299: Incremental searches begin before the user has finished typing the
! 300: search string.
! 301: As each character of the search string is typed, Readline displays
! 302: the next entry from the history matching the string typed so far.
! 303: An incremental search requires only as many characters as needed to
! 304: find the desired history entry.
! 305: To search backward in the history for a particular string, type
! 306: @kbd{C-r}. Typing @kbd{C-s} searches forward through the history.
! 307: The characters present in the value of the @code{isearch-terminators} variable
! 308: are used to terminate an incremental search.
! 309: If that variable has not been assigned a value, the @key{ESC} and
! 310: @kbd{C-J} characters will terminate an incremental search.
! 311: @kbd{C-g} will abort an incremental search and restore the original line.
! 312: When the search is terminated, the history entry containing the
! 313: search string becomes the current line.
! 314:
! 315: To find other matching entries in the history list, type @kbd{C-r} or
! 316: @kbd{C-s} as appropriate.
! 317: This will search backward or forward in the history for the next
! 318: entry matching the search string typed so far.
! 319: Any other key sequence bound to a Readline command will terminate
! 320: the search and execute that command.
! 321: For instance, a @key{RET} will terminate the search and accept
! 322: the line, thereby executing the command from the history list.
! 323: A movement command will terminate the search, make the last line found
! 324: the current line, and begin editing.
! 325:
! 326: Readline remembers the last incremental search string. If two
! 327: @kbd{C-r}s are typed without any intervening characters defining a new
! 328: search string, any remembered search string is used.
! 329:
! 330: Non-incremental searches read the entire search string before starting
! 331: to search for matching history lines. The search string may be
! 332: typed by the user or be part of the contents of the current line.
! 333:
! 334: @node Readline Init File
! 335: @section Readline Init File
! 336: @cindex initialization file, readline
! 337:
! 338: Although the Readline library comes with a set of Emacs-like
! 339: keybindings installed by default, it is possible to use a different set
! 340: of keybindings.
! 341: Any user can customize programs that use Readline by putting
! 342: commands in an @dfn{inputrc} file, conventionally in his home directory.
! 343: The name of this
! 344: @ifset BashFeatures
! 345: file is taken from the value of the shell variable @env{INPUTRC}. If
! 346: @end ifset
! 347: @ifclear BashFeatures
! 348: file is taken from the value of the environment variable @env{INPUTRC}. If
! 349: @end ifclear
! 350: that variable is unset, the default is @file{~/.inputrc}. If that
! 351: file does not exist or cannot be read, the ultimate default is
! 352: @file{/etc/inputrc}.
! 353:
! 354: When a program which uses the Readline library starts up, the
! 355: init file is read, and the key bindings are set.
! 356:
! 357: In addition, the @code{C-x C-r} command re-reads this init file, thus
! 358: incorporating any changes that you might have made to it.
! 359:
! 360: @menu
! 361: * Readline Init File Syntax:: Syntax for the commands in the inputrc file.
! 362:
! 363: * Conditional Init Constructs:: Conditional key bindings in the inputrc file.
! 364:
! 365: * Sample Init File:: An example inputrc file.
! 366: @end menu
! 367:
! 368: @node Readline Init File Syntax
! 369: @subsection Readline Init File Syntax
! 370:
! 371: There are only a few basic constructs allowed in the
! 372: Readline init file. Blank lines are ignored.
! 373: Lines beginning with a @samp{#} are comments.
! 374: Lines beginning with a @samp{$} indicate conditional
! 375: constructs (@pxref{Conditional Init Constructs}). Other lines
! 376: denote variable settings and key bindings.
! 377:
! 378: @table @asis
! 379: @item Variable Settings
! 380: You can modify the run-time behavior of Readline by
! 381: altering the values of variables in Readline
! 382: using the @code{set} command within the init file.
! 383: The syntax is simple:
! 384:
! 385: @example
! 386: set @var{variable} @var{value}
! 387: @end example
! 388:
! 389: @noindent
! 390: Here, for example, is how to
! 391: change from the default Emacs-like key binding to use
! 392: @code{vi} line editing commands:
! 393:
! 394: @example
! 395: set editing-mode vi
! 396: @end example
! 397:
! 398: Variable names and values, where appropriate, are recognized without regard
! 399: to case. Unrecognized variable names are ignored.
! 400:
! 401: Boolean variables (those that can be set to on or off) are set to on if
! 402: the value is null or empty, @var{on} (case-insensitive), or 1. Any other
! 403: value results in the variable being set to off.
! 404:
! 405: @ifset BashFeatures
! 406: The @w{@code{bind -V}} command lists the current Readline variable names
! 407: and values. @xref{Bash Builtins}.
! 408: @end ifset
! 409:
! 410: A great deal of run-time behavior is changeable with the following
! 411: variables.
! 412:
! 413: @cindex variables, readline
! 414: @table @code
! 415:
! 416: @item bell-style
! 417: @vindex bell-style
! 418: Controls what happens when Readline wants to ring the terminal bell.
! 419: If set to @samp{none}, Readline never rings the bell. If set to
! 420: @samp{visible}, Readline uses a visible bell if one is available.
! 421: If set to @samp{audible} (the default), Readline attempts to ring
! 422: the terminal's bell.
! 423:
! 424: @item bind-tty-special-chars
! 425: @vindex bind-tty-special-chars
! 426: If set to @samp{on}, Readline attempts to bind the control characters
! 427: treated specially by the kernel's terminal driver to their Readline
! 428: equivalents.
! 429:
! 430: @item colored-stats
! 431: @vindex colored-stats
! 432: If set to @samp{on}, Readline displays possible completions using different
! 433: colors to indicate their file type.
! 434: The color definitions are taken from the value of the @env{LS_COLORS}
! 435: environment variable.
! 436: The default is @samp{off}.
! 437:
! 438: @item comment-begin
! 439: @vindex comment-begin
! 440: The string to insert at the beginning of the line when the
! 441: @code{insert-comment} command is executed. The default value
! 442: is @code{"#"}.
! 443:
! 444: @item completion-display-width
! 445: @vindex completion-display-width
! 446: The number of screen columns used to display possible matches
! 447: when performing completion.
! 448: The value is ignored if it is less than 0 or greater than the terminal
! 449: screen width.
! 450: A value of 0 will cause matches to be displayed one per line.
! 451: The default value is -1.
! 452:
! 453: @item completion-ignore-case
! 454: @vindex completion-ignore-case
! 455: If set to @samp{on}, Readline performs filename matching and completion
! 456: in a case-insensitive fashion.
! 457: The default value is @samp{off}.
! 458:
! 459: @item completion-map-case
! 460: @vindex completion-map-case
! 461: If set to @samp{on}, and @var{completion-ignore-case} is enabled, Readline
! 462: treats hyphens (@samp{-}) and underscores (@samp{_}) as equivalent when
! 463: performing case-insensitive filename matching and completion.
! 464:
! 465: @item completion-prefix-display-length
! 466: @vindex completion-prefix-display-length
! 467: The length in characters of the common prefix of a list of possible
! 468: completions that is displayed without modification. When set to a
! 469: value greater than zero, common prefixes longer than this value are
! 470: replaced with an ellipsis when displaying possible completions.
! 471:
! 472: @item completion-query-items
! 473: @vindex completion-query-items
! 474: The number of possible completions that determines when the user is
! 475: asked whether the list of possibilities should be displayed.
! 476: If the number of possible completions is greater than this value,
! 477: Readline will ask the user whether or not he wishes to view
! 478: them; otherwise, they are simply listed.
! 479: This variable must be set to an integer value greater than or equal to 0.
! 480: A negative value means Readline should never ask.
! 481: The default limit is @code{100}.
! 482:
! 483: @item convert-meta
! 484: @vindex convert-meta
! 485: If set to @samp{on}, Readline will convert characters with the
! 486: eighth bit set to an @sc{ascii} key sequence by stripping the eighth
! 487: bit and prefixing an @key{ESC} character, converting them to a
! 488: meta-prefixed key sequence. The default value is @samp{on}.
! 489:
! 490: @item disable-completion
! 491: @vindex disable-completion
! 492: If set to @samp{On}, Readline will inhibit word completion.
! 493: Completion characters will be inserted into the line as if they had
! 494: been mapped to @code{self-insert}. The default is @samp{off}.
! 495:
! 496: @item editing-mode
! 497: @vindex editing-mode
! 498: The @code{editing-mode} variable controls which default set of
! 499: key bindings is used. By default, Readline starts up in Emacs editing
! 500: mode, where the keystrokes are most similar to Emacs. This variable can be
! 501: set to either @samp{emacs} or @samp{vi}.
! 502:
! 503: @item echo-control-characters
! 504: When set to @samp{on}, on operating systems that indicate they support it,
! 505: readline echoes a character corresponding to a signal generated from the
! 506: keyboard. The default is @samp{on}.
! 507:
! 508: @item enable-keypad
! 509: @vindex enable-keypad
! 510: When set to @samp{on}, Readline will try to enable the application
! 511: keypad when it is called. Some systems need this to enable the
! 512: arrow keys. The default is @samp{off}.
! 513:
! 514: @item enable-meta-key
! 515: When set to @samp{on}, Readline will try to enable any meta modifier
! 516: key the terminal claims to support when it is called. On many terminals,
! 517: the meta key is used to send eight-bit characters.
! 518: The default is @samp{on}.
! 519:
! 520: @item expand-tilde
! 521: @vindex expand-tilde
! 522: If set to @samp{on}, tilde expansion is performed when Readline
! 523: attempts word completion. The default is @samp{off}.
! 524:
! 525: @item history-preserve-point
! 526: @vindex history-preserve-point
! 527: If set to @samp{on}, the history code attempts to place the point (the
! 528: current cursor position) at the
! 529: same location on each history line retrieved with @code{previous-history}
! 530: or @code{next-history}. The default is @samp{off}.
! 531:
! 532: @item history-size
! 533: @vindex history-size
! 534: Set the maximum number of history entries saved in the history list.
! 535: If set to zero, any existing history entries are deleted and no new entries
! 536: are saved.
! 537: If set to a value less than zero, the number of history entries is not
! 538: limited.
! 539: By default, the number of history entries is not limited.
! 540:
! 541: @item horizontal-scroll-mode
! 542: @vindex horizontal-scroll-mode
! 543: This variable can be set to either @samp{on} or @samp{off}. Setting it
! 544: to @samp{on} means that the text of the lines being edited will scroll
! 545: horizontally on a single screen line when they are longer than the width
! 546: of the screen, instead of wrapping onto a new screen line. By default,
! 547: this variable is set to @samp{off}.
! 548:
! 549: @item input-meta
! 550: @vindex input-meta
! 551: @vindex meta-flag
! 552: If set to @samp{on}, Readline will enable eight-bit input (it
! 553: will not clear the eighth bit in the characters it reads),
! 554: regardless of what the terminal claims it can support. The
! 555: default value is @samp{off}. The name @code{meta-flag} is a
! 556: synonym for this variable.
! 557:
! 558: @item isearch-terminators
! 559: @vindex isearch-terminators
! 560: The string of characters that should terminate an incremental search without
! 561: subsequently executing the character as a command (@pxref{Searching}).
! 562: If this variable has not been given a value, the characters @key{ESC} and
! 563: @kbd{C-J} will terminate an incremental search.
! 564:
! 565: @item keymap
! 566: @vindex keymap
! 567: Sets Readline's idea of the current keymap for key binding commands.
! 568: Acceptable @code{keymap} names are
! 569: @code{emacs},
! 570: @code{emacs-standard},
! 571: @code{emacs-meta},
! 572: @code{emacs-ctlx},
! 573: @code{vi},
! 574: @code{vi-move},
! 575: @code{vi-command}, and
! 576: @code{vi-insert}.
! 577: @code{vi} is equivalent to @code{vi-command}; @code{emacs} is
! 578: equivalent to @code{emacs-standard}. The default value is @code{emacs}.
! 579: The value of the @code{editing-mode} variable also affects the
! 580: default keymap.
! 581:
! 582: @item keyseq-timeout
! 583: Specifies the duration Readline will wait for a character when reading an
! 584: ambiguous key sequence (one that can form a complete key sequence using
! 585: the input read so far, or can take additional input to complete a longer
! 586: key sequence).
! 587: If no input is received within the timeout, Readline will use the shorter
! 588: but complete key sequence.
! 589: Readline uses this value to determine whether or not input is
! 590: available on the current input source (@code{rl_instream} by default).
! 591: The value is specified in milliseconds, so a value of 1000 means that
! 592: Readline will wait one second for additional input.
! 593: If this variable is set to a value less than or equal to zero, or to a
! 594: non-numeric value, Readline will wait until another key is pressed to
! 595: decide which key sequence to complete.
! 596: The default value is @code{500}.
! 597:
! 598: @item mark-directories
! 599: If set to @samp{on}, completed directory names have a slash
! 600: appended. The default is @samp{on}.
! 601:
! 602: @item mark-modified-lines
! 603: @vindex mark-modified-lines
! 604: This variable, when set to @samp{on}, causes Readline to display an
! 605: asterisk (@samp{*}) at the start of history lines which have been modified.
! 606: This variable is @samp{off} by default.
! 607:
! 608: @item mark-symlinked-directories
! 609: @vindex mark-symlinked-directories
! 610: If set to @samp{on}, completed names which are symbolic links
! 611: to directories have a slash appended (subject to the value of
! 612: @code{mark-directories}).
! 613: The default is @samp{off}.
! 614:
! 615: @item match-hidden-files
! 616: @vindex match-hidden-files
! 617: This variable, when set to @samp{on}, causes Readline to match files whose
! 618: names begin with a @samp{.} (hidden files) when performing filename
! 619: completion.
! 620: If set to @samp{off}, the leading @samp{.} must be
! 621: supplied by the user in the filename to be completed.
! 622: This variable is @samp{on} by default.
! 623:
! 624: @item menu-complete-display-prefix
! 625: @vindex menu-complete-display-prefix
! 626: If set to @samp{on}, menu completion displays the common prefix of the
! 627: list of possible completions (which may be empty) before cycling through
! 628: the list. The default is @samp{off}.
! 629:
! 630: @item output-meta
! 631: @vindex output-meta
! 632: If set to @samp{on}, Readline will display characters with the
! 633: eighth bit set directly rather than as a meta-prefixed escape
! 634: sequence. The default is @samp{off}.
! 635:
! 636: @item page-completions
! 637: @vindex page-completions
! 638: If set to @samp{on}, Readline uses an internal @code{more}-like pager
! 639: to display a screenful of possible completions at a time.
! 640: This variable is @samp{on} by default.
! 641:
! 642: @item print-completions-horizontally
! 643: If set to @samp{on}, Readline will display completions with matches
! 644: sorted horizontally in alphabetical order, rather than down the screen.
! 645: The default is @samp{off}.
! 646:
! 647: @item revert-all-at-newline
! 648: @vindex revert-all-at-newline
! 649: If set to @samp{on}, Readline will undo all changes to history lines
! 650: before returning when @code{accept-line} is executed. By default,
! 651: history lines may be modified and retain individual undo lists across
! 652: calls to @code{readline}. The default is @samp{off}.
! 653:
! 654: @item show-all-if-ambiguous
! 655: @vindex show-all-if-ambiguous
! 656: This alters the default behavior of the completion functions. If
! 657: set to @samp{on},
! 658: words which have more than one possible completion cause the
! 659: matches to be listed immediately instead of ringing the bell.
! 660: The default value is @samp{off}.
! 661:
! 662: @item show-all-if-unmodified
! 663: @vindex show-all-if-unmodified
! 664: This alters the default behavior of the completion functions in
! 665: a fashion similar to @var{show-all-if-ambiguous}.
! 666: If set to @samp{on},
! 667: words which have more than one possible completion without any
! 668: possible partial completion (the possible completions don't share
! 669: a common prefix) cause the matches to be listed immediately instead
! 670: of ringing the bell.
! 671: The default value is @samp{off}.
! 672:
! 673: @item show-mode-in-prompt
! 674: @vindex show-mode-in-prompt
! 675: If set to @samp{on}, add a character to the beginning of the prompt
! 676: indicating the editing mode: emacs (@samp{@@}), vi command (@samp{:}),
! 677: or vi insertion (@samp{+}).
! 678: The default value is @samp{off}.
! 679:
! 680: @item skip-completed-text
! 681: @vindex skip-completed-text
! 682: If set to @samp{on}, this alters the default completion behavior when
! 683: inserting a single match into the line. It's only active when
! 684: performing completion in the middle of a word. If enabled, readline
! 685: does not insert characters from the completion that match characters
! 686: after point in the word being completed, so portions of the word
! 687: following the cursor are not duplicated.
! 688: For instance, if this is enabled, attempting completion when the cursor
! 689: is after the @samp{e} in @samp{Makefile} will result in @samp{Makefile}
! 690: rather than @samp{Makefilefile}, assuming there is a single possible
! 691: completion.
! 692: The default value is @samp{off}.
! 693:
! 694: @item visible-stats
! 695: @vindex visible-stats
! 696: If set to @samp{on}, a character denoting a file's type
! 697: is appended to the filename when listing possible
! 698: completions. The default is @samp{off}.
! 699:
! 700: @end table
! 701:
! 702: @item Key Bindings
! 703: The syntax for controlling key bindings in the init file is
! 704: simple. First you need to find the name of the command that you
! 705: want to change. The following sections contain tables of the command
! 706: name, the default keybinding, if any, and a short description of what
! 707: the command does.
! 708:
! 709: Once you know the name of the command, simply place on a line
! 710: in the init file the name of the key
! 711: you wish to bind the command to, a colon, and then the name of the
! 712: command.
! 713: There can be no space between the key name and the colon -- that will be
! 714: interpreted as part of the key name.
! 715: The name of the key can be expressed in different ways, depending on
! 716: what you find most comfortable.
! 717:
! 718: In addition to command names, readline allows keys to be bound
! 719: to a string that is inserted when the key is pressed (a @var{macro}).
! 720:
! 721: @ifset BashFeatures
! 722: The @w{@code{bind -p}} command displays Readline function names and
! 723: bindings in a format that can put directly into an initialization file.
! 724: @xref{Bash Builtins}.
! 725: @end ifset
! 726:
! 727: @table @asis
! 728: @item @w{@var{keyname}: @var{function-name} or @var{macro}}
! 729: @var{keyname} is the name of a key spelled out in English. For example:
! 730: @example
! 731: Control-u: universal-argument
! 732: Meta-Rubout: backward-kill-word
! 733: Control-o: "> output"
! 734: @end example
! 735:
! 736: In the above example, @kbd{C-u} is bound to the function
! 737: @code{universal-argument},
! 738: @kbd{M-DEL} is bound to the function @code{backward-kill-word}, and
! 739: @kbd{C-o} is bound to run the macro
! 740: expressed on the right hand side (that is, to insert the text
! 741: @samp{> output} into the line).
! 742:
! 743: A number of symbolic character names are recognized while
! 744: processing this key binding syntax:
! 745: @var{DEL},
! 746: @var{ESC},
! 747: @var{ESCAPE},
! 748: @var{LFD},
! 749: @var{NEWLINE},
! 750: @var{RET},
! 751: @var{RETURN},
! 752: @var{RUBOUT},
! 753: @var{SPACE},
! 754: @var{SPC},
! 755: and
! 756: @var{TAB}.
! 757:
! 758: @item @w{"@var{keyseq}": @var{function-name} or @var{macro}}
! 759: @var{keyseq} differs from @var{keyname} above in that strings
! 760: denoting an entire key sequence can be specified, by placing
! 761: the key sequence in double quotes. Some @sc{gnu} Emacs style key
! 762: escapes can be used, as in the following example, but the
! 763: special character names are not recognized.
! 764:
! 765: @example
! 766: "\C-u": universal-argument
! 767: "\C-x\C-r": re-read-init-file
! 768: "\e[11~": "Function Key 1"
! 769: @end example
! 770:
! 771: In the above example, @kbd{C-u} is again bound to the function
! 772: @code{universal-argument} (just as it was in the first example),
! 773: @samp{@kbd{C-x} @kbd{C-r}} is bound to the function @code{re-read-init-file},
! 774: and @samp{@key{ESC} @key{[} @key{1} @key{1} @key{~}} is bound to insert
! 775: the text @samp{Function Key 1}.
! 776:
! 777: @end table
! 778:
! 779: The following @sc{gnu} Emacs style escape sequences are available when
! 780: specifying key sequences:
! 781:
! 782: @table @code
! 783: @item @kbd{\C-}
! 784: control prefix
! 785: @item @kbd{\M-}
! 786: meta prefix
! 787: @item @kbd{\e}
! 788: an escape character
! 789: @item @kbd{\\}
! 790: backslash
! 791: @item @kbd{\"}
! 792: @key{"}, a double quotation mark
! 793: @item @kbd{\'}
! 794: @key{'}, a single quote or apostrophe
! 795: @end table
! 796:
! 797: In addition to the @sc{gnu} Emacs style escape sequences, a second
! 798: set of backslash escapes is available:
! 799:
! 800: @table @code
! 801: @item \a
! 802: alert (bell)
! 803: @item \b
! 804: backspace
! 805: @item \d
! 806: delete
! 807: @item \f
! 808: form feed
! 809: @item \n
! 810: newline
! 811: @item \r
! 812: carriage return
! 813: @item \t
! 814: horizontal tab
! 815: @item \v
! 816: vertical tab
! 817: @item \@var{nnn}
! 818: the eight-bit character whose value is the octal value @var{nnn}
! 819: (one to three digits)
! 820: @item \x@var{HH}
! 821: the eight-bit character whose value is the hexadecimal value @var{HH}
! 822: (one or two hex digits)
! 823: @end table
! 824:
! 825: When entering the text of a macro, single or double quotes must
! 826: be used to indicate a macro definition.
! 827: Unquoted text is assumed to be a function name.
! 828: In the macro body, the backslash escapes described above are expanded.
! 829: Backslash will quote any other character in the macro text,
! 830: including @samp{"} and @samp{'}.
! 831: For example, the following binding will make @samp{@kbd{C-x} \}
! 832: insert a single @samp{\} into the line:
! 833: @example
! 834: "\C-x\\": "\\"
! 835: @end example
! 836:
! 837: @end table
! 838:
! 839: @node Conditional Init Constructs
! 840: @subsection Conditional Init Constructs
! 841:
! 842: Readline implements a facility similar in spirit to the conditional
! 843: compilation features of the C preprocessor which allows key
! 844: bindings and variable settings to be performed as the result
! 845: of tests. There are four parser directives used.
! 846:
! 847: @table @code
! 848: @item $if
! 849: The @code{$if} construct allows bindings to be made based on the
! 850: editing mode, the terminal being used, or the application using
! 851: Readline. The text of the test extends to the end of the line;
! 852: no characters are required to isolate it.
! 853:
! 854: @table @code
! 855: @item mode
! 856: The @code{mode=} form of the @code{$if} directive is used to test
! 857: whether Readline is in @code{emacs} or @code{vi} mode.
! 858: This may be used in conjunction
! 859: with the @samp{set keymap} command, for instance, to set bindings in
! 860: the @code{emacs-standard} and @code{emacs-ctlx} keymaps only if
! 861: Readline is starting out in @code{emacs} mode.
! 862:
! 863: @item term
! 864: The @code{term=} form may be used to include terminal-specific
! 865: key bindings, perhaps to bind the key sequences output by the
! 866: terminal's function keys. The word on the right side of the
! 867: @samp{=} is tested against both the full name of the terminal and
! 868: the portion of the terminal name before the first @samp{-}. This
! 869: allows @code{sun} to match both @code{sun} and @code{sun-cmd},
! 870: for instance.
! 871:
! 872: @item application
! 873: The @var{application} construct is used to include
! 874: application-specific settings. Each program using the Readline
! 875: library sets the @var{application name}, and you can test for
! 876: a particular value.
! 877: This could be used to bind key sequences to functions useful for
! 878: a specific program. For instance, the following command adds a
! 879: key sequence that quotes the current or previous word in Bash:
! 880: @example
! 881: $if Bash
! 882: # Quote the current or previous word
! 883: "\C-xq": "\eb\"\ef\""
! 884: $endif
! 885: @end example
! 886: @end table
! 887:
! 888: @item $endif
! 889: This command, as seen in the previous example, terminates an
! 890: @code{$if} command.
! 891:
! 892: @item $else
! 893: Commands in this branch of the @code{$if} directive are executed if
! 894: the test fails.
! 895:
! 896: @item $include
! 897: This directive takes a single filename as an argument and reads commands
! 898: and bindings from that file.
! 899: For example, the following directive reads from @file{/etc/inputrc}:
! 900: @example
! 901: $include /etc/inputrc
! 902: @end example
! 903: @end table
! 904:
! 905: @node Sample Init File
! 906: @subsection Sample Init File
! 907:
! 908: Here is an example of an @var{inputrc} file. This illustrates key
! 909: binding, variable assignment, and conditional syntax.
! 910:
! 911: @example
! 912: @page
! 913: # This file controls the behaviour of line input editing for
! 914: # programs that use the GNU Readline library. Existing
! 915: # programs include FTP, Bash, and GDB.
! 916: #
! 917: # You can re-read the inputrc file with C-x C-r.
! 918: # Lines beginning with '#' are comments.
! 919: #
! 920: # First, include any system-wide bindings and variable
! 921: # assignments from /etc/Inputrc
! 922: $include /etc/Inputrc
! 923:
! 924: #
! 925: # Set various bindings for emacs mode.
! 926:
! 927: set editing-mode emacs
! 928:
! 929: $if mode=emacs
! 930:
! 931: Meta-Control-h: backward-kill-word Text after the function name is ignored
! 932:
! 933: #
! 934: # Arrow keys in keypad mode
! 935: #
! 936: #"\M-OD": backward-char
! 937: #"\M-OC": forward-char
! 938: #"\M-OA": previous-history
! 939: #"\M-OB": next-history
! 940: #
! 941: # Arrow keys in ANSI mode
! 942: #
! 943: "\M-[D": backward-char
! 944: "\M-[C": forward-char
! 945: "\M-[A": previous-history
! 946: "\M-[B": next-history
! 947: #
! 948: # Arrow keys in 8 bit keypad mode
! 949: #
! 950: #"\M-\C-OD": backward-char
! 951: #"\M-\C-OC": forward-char
! 952: #"\M-\C-OA": previous-history
! 953: #"\M-\C-OB": next-history
! 954: #
! 955: # Arrow keys in 8 bit ANSI mode
! 956: #
! 957: #"\M-\C-[D": backward-char
! 958: #"\M-\C-[C": forward-char
! 959: #"\M-\C-[A": previous-history
! 960: #"\M-\C-[B": next-history
! 961:
! 962: C-q: quoted-insert
! 963:
! 964: $endif
! 965:
! 966: # An old-style binding. This happens to be the default.
! 967: TAB: complete
! 968:
! 969: # Macros that are convenient for shell interaction
! 970: $if Bash
! 971: # edit the path
! 972: "\C-xp": "PATH=$@{PATH@}\e\C-e\C-a\ef\C-f"
! 973: # prepare to type a quoted word --
! 974: # insert open and close double quotes
! 975: # and move to just after the open quote
! 976: "\C-x\"": "\"\"\C-b"
! 977: # insert a backslash (testing backslash escapes
! 978: # in sequences and macros)
! 979: "\C-x\\": "\\"
! 980: # Quote the current or previous word
! 981: "\C-xq": "\eb\"\ef\""
! 982: # Add a binding to refresh the line, which is unbound
! 983: "\C-xr": redraw-current-line
! 984: # Edit variable on current line.
! 985: "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
! 986: $endif
! 987:
! 988: # use a visible bell if one is available
! 989: set bell-style visible
! 990:
! 991: # don't strip characters to 7 bits when reading
! 992: set input-meta on
! 993:
! 994: # allow iso-latin1 characters to be inserted rather
! 995: # than converted to prefix-meta sequences
! 996: set convert-meta off
! 997:
! 998: # display characters with the eighth bit set directly
! 999: # rather than as meta-prefixed characters
! 1000: set output-meta on
! 1001:
! 1002: # if there are more than 150 possible completions for
! 1003: # a word, ask the user if he wants to see all of them
! 1004: set completion-query-items 150
! 1005:
! 1006: # For FTP
! 1007: $if Ftp
! 1008: "\C-xg": "get \M-?"
! 1009: "\C-xt": "put \M-?"
! 1010: "\M-.": yank-last-arg
! 1011: $endif
! 1012: @end example
! 1013:
! 1014: @node Bindable Readline Commands
! 1015: @section Bindable Readline Commands
! 1016:
! 1017: @menu
! 1018: * Commands For Moving:: Moving about the line.
! 1019: * Commands For History:: Getting at previous lines.
! 1020: * Commands For Text:: Commands for changing text.
! 1021: * Commands For Killing:: Commands for killing and yanking.
! 1022: * Numeric Arguments:: Specifying numeric arguments, repeat counts.
! 1023: * Commands For Completion:: Getting Readline to do the typing for you.
! 1024: * Keyboard Macros:: Saving and re-executing typed characters
! 1025: * Miscellaneous Commands:: Other miscellaneous commands.
! 1026: @end menu
! 1027:
! 1028: This section describes Readline commands that may be bound to key
! 1029: sequences.
! 1030: @ifset BashFeatures
! 1031: You can list your key bindings by executing
! 1032: @w{@code{bind -P}} or, for a more terse format, suitable for an
! 1033: @var{inputrc} file, @w{@code{bind -p}}. (@xref{Bash Builtins}.)
! 1034: @end ifset
! 1035: Command names without an accompanying key sequence are unbound by default.
! 1036:
! 1037: In the following descriptions, @dfn{point} refers to the current cursor
! 1038: position, and @dfn{mark} refers to a cursor position saved by the
! 1039: @code{set-mark} command.
! 1040: The text between the point and mark is referred to as the @dfn{region}.
! 1041:
! 1042: @node Commands For Moving
! 1043: @subsection Commands For Moving
! 1044: @ftable @code
! 1045: @item beginning-of-line (C-a)
! 1046: Move to the start of the current line.
! 1047:
! 1048: @item end-of-line (C-e)
! 1049: Move to the end of the line.
! 1050:
! 1051: @item forward-char (C-f)
! 1052: Move forward a character.
! 1053:
! 1054: @item backward-char (C-b)
! 1055: Move back a character.
! 1056:
! 1057: @item forward-word (M-f)
! 1058: Move forward to the end of the next word.
! 1059: Words are composed of letters and digits.
! 1060:
! 1061: @item backward-word (M-b)
! 1062: Move back to the start of the current or previous word.
! 1063: Words are composed of letters and digits.
! 1064:
! 1065: @ifset BashFeatures
! 1066: @item shell-forward-word ()
! 1067: Move forward to the end of the next word.
! 1068: Words are delimited by non-quoted shell metacharacters.
! 1069:
! 1070: @item shell-backward-word ()
! 1071: Move back to the start of the current or previous word.
! 1072: Words are delimited by non-quoted shell metacharacters.
! 1073: @end ifset
! 1074:
! 1075: @item clear-screen (C-l)
! 1076: Clear the screen and redraw the current line,
! 1077: leaving the current line at the top of the screen.
! 1078:
! 1079: @item redraw-current-line ()
! 1080: Refresh the current line. By default, this is unbound.
! 1081:
! 1082: @end ftable
! 1083:
! 1084: @node Commands For History
! 1085: @subsection Commands For Manipulating The History
! 1086:
! 1087: @ftable @code
! 1088: @item accept-line (Newline or Return)
! 1089: @ifset BashFeatures
! 1090: Accept the line regardless of where the cursor is.
! 1091: If this line is
! 1092: non-empty, add it to the history list according to the setting of
! 1093: the @env{HISTCONTROL} and @env{HISTIGNORE} variables.
! 1094: If this line is a modified history line, then restore the history line
! 1095: to its original state.
! 1096: @end ifset
! 1097: @ifclear BashFeatures
! 1098: Accept the line regardless of where the cursor is.
! 1099: If this line is
! 1100: non-empty, it may be added to the history list for future recall with
! 1101: @code{add_history()}.
! 1102: If this line is a modified history line, the history line is restored
! 1103: to its original state.
! 1104: @end ifclear
! 1105:
! 1106: @item previous-history (C-p)
! 1107: Move `back' through the history list, fetching the previous command.
! 1108:
! 1109: @item next-history (C-n)
! 1110: Move `forward' through the history list, fetching the next command.
! 1111:
! 1112: @item beginning-of-history (M-<)
! 1113: Move to the first line in the history.
! 1114:
! 1115: @item end-of-history (M->)
! 1116: Move to the end of the input history, i.e., the line currently
! 1117: being entered.
! 1118:
! 1119: @item reverse-search-history (C-r)
! 1120: Search backward starting at the current line and moving `up' through
! 1121: the history as necessary. This is an incremental search.
! 1122:
! 1123: @item forward-search-history (C-s)
! 1124: Search forward starting at the current line and moving `down' through
! 1125: the the history as necessary. This is an incremental search.
! 1126:
! 1127: @item non-incremental-reverse-search-history (M-p)
! 1128: Search backward starting at the current line and moving `up'
! 1129: through the history as necessary using a non-incremental search
! 1130: for a string supplied by the user.
! 1131:
! 1132: @item non-incremental-forward-search-history (M-n)
! 1133: Search forward starting at the current line and moving `down'
! 1134: through the the history as necessary using a non-incremental search
! 1135: for a string supplied by the user.
! 1136:
! 1137: @item history-search-forward ()
! 1138: Search forward through the history for the string of characters
! 1139: between the start of the current line and the point.
! 1140: The search string must match at the beginning of a history line.
! 1141: This is a non-incremental search.
! 1142: By default, this command is unbound.
! 1143:
! 1144: @item history-search-backward ()
! 1145: Search backward through the history for the string of characters
! 1146: between the start of the current line and the point.
! 1147: The search string must match at the beginning of a history line.
! 1148: This is a non-incremental search.
! 1149: By default, this command is unbound.
! 1150:
! 1151: @item history-substr-search-forward ()
! 1152: Search forward through the history for the string of characters
! 1153: between the start of the current line and the point.
! 1154: The search string may match anywhere in a history line.
! 1155: This is a non-incremental search.
! 1156: By default, this command is unbound.
! 1157:
! 1158: @item history-substr-search-backward ()
! 1159: Search backward through the history for the string of characters
! 1160: between the start of the current line and the point.
! 1161: The search string may match anywhere in a history line.
! 1162: This is a non-incremental search.
! 1163: By default, this command is unbound.
! 1164:
! 1165: @item yank-nth-arg (M-C-y)
! 1166: Insert the first argument to the previous command (usually
! 1167: the second word on the previous line) at point.
! 1168: With an argument @var{n},
! 1169: insert the @var{n}th word from the previous command (the words
! 1170: in the previous command begin with word 0). A negative argument
! 1171: inserts the @var{n}th word from the end of the previous command.
! 1172: Once the argument @var{n} is computed, the argument is extracted
! 1173: as if the @samp{!@var{n}} history expansion had been specified.
! 1174:
! 1175: @item yank-last-arg (M-. or M-_)
! 1176: Insert last argument to the previous command (the last word of the
! 1177: previous history entry).
! 1178: With a numeric argument, behave exactly like @code{yank-nth-arg}.
! 1179: Successive calls to @code{yank-last-arg} move back through the history
! 1180: list, inserting the last word (or the word specified by the argument to
! 1181: the first call) of each line in turn.
! 1182: Any numeric argument supplied to these successive calls determines
! 1183: the direction to move through the history. A negative argument switches
! 1184: the direction through the history (back or forward).
! 1185: The history expansion facilities are used to extract the last argument,
! 1186: as if the @samp{!$} history expansion had been specified.
! 1187:
! 1188: @end ftable
! 1189:
! 1190: @node Commands For Text
! 1191: @subsection Commands For Changing Text
! 1192:
! 1193: @ftable @code
! 1194:
! 1195: @item @i{end-of-file} (usually C-d)
! 1196: The character indicating end-of-file as set, for example, by
! 1197: @code{stty}. If this character is read when there are no characters
! 1198: on the line, and point is at the beginning of the line, Readline
! 1199: interprets it as the end of input and returns @sc{eof}.
! 1200:
! 1201: @item delete-char (C-d)
! 1202: Delete the character at point. If this function is bound to the
! 1203: same character as the tty @sc{eof} character, as @kbd{C-d}
! 1204: commonly is, see above for the effects.
! 1205:
! 1206: @item backward-delete-char (Rubout)
! 1207: Delete the character behind the cursor. A numeric argument means
! 1208: to kill the characters instead of deleting them.
! 1209:
! 1210: @item forward-backward-delete-char ()
! 1211: Delete the character under the cursor, unless the cursor is at the
! 1212: end of the line, in which case the character behind the cursor is
! 1213: deleted. By default, this is not bound to a key.
! 1214:
! 1215: @item quoted-insert (C-q or C-v)
! 1216: Add the next character typed to the line verbatim. This is
! 1217: how to insert key sequences like @kbd{C-q}, for example.
! 1218:
! 1219: @ifclear BashFeatures
! 1220: @item tab-insert (M-@key{TAB})
! 1221: Insert a tab character.
! 1222: @end ifclear
! 1223:
! 1224: @item self-insert (a, b, A, 1, !, @dots{})
! 1225: Insert yourself.
! 1226:
! 1227: @item transpose-chars (C-t)
! 1228: Drag the character before the cursor forward over
! 1229: the character at the cursor, moving the
! 1230: cursor forward as well. If the insertion point
! 1231: is at the end of the line, then this
! 1232: transposes the last two characters of the line.
! 1233: Negative arguments have no effect.
! 1234:
! 1235: @item transpose-words (M-t)
! 1236: Drag the word before point past the word after point,
! 1237: moving point past that word as well.
! 1238: If the insertion point is at the end of the line, this transposes
! 1239: the last two words on the line.
! 1240:
! 1241: @item upcase-word (M-u)
! 1242: Uppercase the current (or following) word. With a negative argument,
! 1243: uppercase the previous word, but do not move the cursor.
! 1244:
! 1245: @item downcase-word (M-l)
! 1246: Lowercase the current (or following) word. With a negative argument,
! 1247: lowercase the previous word, but do not move the cursor.
! 1248:
! 1249: @item capitalize-word (M-c)
! 1250: Capitalize the current (or following) word. With a negative argument,
! 1251: capitalize the previous word, but do not move the cursor.
! 1252:
! 1253: @item overwrite-mode ()
! 1254: Toggle overwrite mode. With an explicit positive numeric argument,
! 1255: switches to overwrite mode. With an explicit non-positive numeric
! 1256: argument, switches to insert mode. This command affects only
! 1257: @code{emacs} mode; @code{vi} mode does overwrite differently.
! 1258: Each call to @code{readline()} starts in insert mode.
! 1259:
! 1260: In overwrite mode, characters bound to @code{self-insert} replace
! 1261: the text at point rather than pushing the text to the right.
! 1262: Characters bound to @code{backward-delete-char} replace the character
! 1263: before point with a space.
! 1264:
! 1265: By default, this command is unbound.
! 1266:
! 1267: @end ftable
! 1268:
! 1269: @node Commands For Killing
! 1270: @subsection Killing And Yanking
! 1271:
! 1272: @ftable @code
! 1273:
! 1274: @item kill-line (C-k)
! 1275: Kill the text from point to the end of the line.
! 1276:
! 1277: @item backward-kill-line (C-x Rubout)
! 1278: Kill backward to the beginning of the line.
! 1279:
! 1280: @item unix-line-discard (C-u)
! 1281: Kill backward from the cursor to the beginning of the current line.
! 1282:
! 1283: @item kill-whole-line ()
! 1284: Kill all characters on the current line, no matter where point is.
! 1285: By default, this is unbound.
! 1286:
! 1287: @item kill-word (M-d)
! 1288: Kill from point to the end of the current word, or if between
! 1289: words, to the end of the next word.
! 1290: Word boundaries are the same as @code{forward-word}.
! 1291:
! 1292: @item backward-kill-word (M-@key{DEL})
! 1293: Kill the word behind point.
! 1294: Word boundaries are the same as @code{backward-word}.
! 1295:
! 1296: @ifset BashFeatures
! 1297: @item shell-kill-word ()
! 1298: Kill from point to the end of the current word, or if between
! 1299: words, to the end of the next word.
! 1300: Word boundaries are the same as @code{shell-forward-word}.
! 1301:
! 1302: @item shell-backward-kill-word ()
! 1303: Kill the word behind point.
! 1304: Word boundaries are the same as @code{shell-backward-word}.
! 1305: @end ifset
! 1306:
! 1307: @item unix-word-rubout (C-w)
! 1308: Kill the word behind point, using white space as a word boundary.
! 1309: The killed text is saved on the kill-ring.
! 1310:
! 1311: @item unix-filename-rubout ()
! 1312: Kill the word behind point, using white space and the slash character
! 1313: as the word boundaries.
! 1314: The killed text is saved on the kill-ring.
! 1315:
! 1316: @item delete-horizontal-space ()
! 1317: Delete all spaces and tabs around point. By default, this is unbound.
! 1318:
! 1319: @item kill-region ()
! 1320: Kill the text in the current region.
! 1321: By default, this command is unbound.
! 1322:
! 1323: @item copy-region-as-kill ()
! 1324: Copy the text in the region to the kill buffer, so it can be yanked
! 1325: right away. By default, this command is unbound.
! 1326:
! 1327: @item copy-backward-word ()
! 1328: Copy the word before point to the kill buffer.
! 1329: The word boundaries are the same as @code{backward-word}.
! 1330: By default, this command is unbound.
! 1331:
! 1332: @item copy-forward-word ()
! 1333: Copy the word following point to the kill buffer.
! 1334: The word boundaries are the same as @code{forward-word}.
! 1335: By default, this command is unbound.
! 1336:
! 1337: @item yank (C-y)
! 1338: Yank the top of the kill ring into the buffer at point.
! 1339:
! 1340: @item yank-pop (M-y)
! 1341: Rotate the kill-ring, and yank the new top. You can only do this if
! 1342: the prior command is @code{yank} or @code{yank-pop}.
! 1343: @end ftable
! 1344:
! 1345: @node Numeric Arguments
! 1346: @subsection Specifying Numeric Arguments
! 1347: @ftable @code
! 1348:
! 1349: @item digit-argument (@kbd{M-0}, @kbd{M-1}, @dots{} @kbd{M--})
! 1350: Add this digit to the argument already accumulating, or start a new
! 1351: argument. @kbd{M--} starts a negative argument.
! 1352:
! 1353: @item universal-argument ()
! 1354: This is another way to specify an argument.
! 1355: If this command is followed by one or more digits, optionally with a
! 1356: leading minus sign, those digits define the argument.
! 1357: If the command is followed by digits, executing @code{universal-argument}
! 1358: again ends the numeric argument, but is otherwise ignored.
! 1359: As a special case, if this command is immediately followed by a
! 1360: character that is neither a digit or minus sign, the argument count
! 1361: for the next command is multiplied by four.
! 1362: The argument count is initially one, so executing this function the
! 1363: first time makes the argument count four, a second time makes the
! 1364: argument count sixteen, and so on.
! 1365: By default, this is not bound to a key.
! 1366: @end ftable
! 1367:
! 1368: @node Commands For Completion
! 1369: @subsection Letting Readline Type For You
! 1370:
! 1371: @ftable @code
! 1372: @item complete (@key{TAB})
! 1373: Attempt to perform completion on the text before point.
! 1374: The actual completion performed is application-specific.
! 1375: @ifset BashFeatures
! 1376: Bash attempts completion treating the text as a variable (if the
! 1377: text begins with @samp{$}), username (if the text begins with
! 1378: @samp{~}), hostname (if the text begins with @samp{@@}), or
! 1379: command (including aliases and functions) in turn. If none
! 1380: of these produces a match, filename completion is attempted.
! 1381: @end ifset
! 1382: @ifclear BashFeatures
! 1383: The default is filename completion.
! 1384: @end ifclear
! 1385:
! 1386: @item possible-completions (M-?)
! 1387: List the possible completions of the text before point.
! 1388: When displaying completions, Readline sets the number of columns used
! 1389: for display to the value of @code{completion-display-width}, the value of
! 1390: the environment variable @env{COLUMNS}, or the screen width, in that order.
! 1391:
! 1392: @item insert-completions (M-*)
! 1393: Insert all completions of the text before point that would have
! 1394: been generated by @code{possible-completions}.
! 1395:
! 1396: @item menu-complete ()
! 1397: Similar to @code{complete}, but replaces the word to be completed
! 1398: with a single match from the list of possible completions.
! 1399: Repeated execution of @code{menu-complete} steps through the list
! 1400: of possible completions, inserting each match in turn.
! 1401: At the end of the list of completions, the bell is rung
! 1402: (subject to the setting of @code{bell-style})
! 1403: and the original text is restored.
! 1404: An argument of @var{n} moves @var{n} positions forward in the list
! 1405: of matches; a negative argument may be used to move backward
! 1406: through the list.
! 1407: This command is intended to be bound to @key{TAB}, but is unbound
! 1408: by default.
! 1409:
! 1410: @item menu-complete-backward ()
! 1411: Identical to @code{menu-complete}, but moves backward through the list
! 1412: of possible completions, as if @code{menu-complete} had been given a
! 1413: negative argument.
! 1414:
! 1415: @item delete-char-or-list ()
! 1416: Deletes the character under the cursor if not at the beginning or
! 1417: end of the line (like @code{delete-char}).
! 1418: If at the end of the line, behaves identically to
! 1419: @code{possible-completions}.
! 1420: This command is unbound by default.
! 1421:
! 1422: @ifset BashFeatures
! 1423: @item complete-filename (M-/)
! 1424: Attempt filename completion on the text before point.
! 1425:
! 1426: @item possible-filename-completions (C-x /)
! 1427: List the possible completions of the text before point,
! 1428: treating it as a filename.
! 1429:
! 1430: @item complete-username (M-~)
! 1431: Attempt completion on the text before point, treating
! 1432: it as a username.
! 1433:
! 1434: @item possible-username-completions (C-x ~)
! 1435: List the possible completions of the text before point,
! 1436: treating it as a username.
! 1437:
! 1438: @item complete-variable (M-$)
! 1439: Attempt completion on the text before point, treating
! 1440: it as a shell variable.
! 1441:
! 1442: @item possible-variable-completions (C-x $)
! 1443: List the possible completions of the text before point,
! 1444: treating it as a shell variable.
! 1445:
! 1446: @item complete-hostname (M-@@)
! 1447: Attempt completion on the text before point, treating
! 1448: it as a hostname.
! 1449:
! 1450: @item possible-hostname-completions (C-x @@)
! 1451: List the possible completions of the text before point,
! 1452: treating it as a hostname.
! 1453:
! 1454: @item complete-command (M-!)
! 1455: Attempt completion on the text before point, treating
! 1456: it as a command name. Command completion attempts to
! 1457: match the text against aliases, reserved words, shell
! 1458: functions, shell builtins, and finally executable filenames,
! 1459: in that order.
! 1460:
! 1461: @item possible-command-completions (C-x !)
! 1462: List the possible completions of the text before point,
! 1463: treating it as a command name.
! 1464:
! 1465: @item dynamic-complete-history (M-@key{TAB})
! 1466: Attempt completion on the text before point, comparing
! 1467: the text against lines from the history list for possible
! 1468: completion matches.
! 1469:
! 1470: @item dabbrev-expand ()
! 1471: Attempt menu completion on the text before point, comparing
! 1472: the text against lines from the history list for possible
! 1473: completion matches.
! 1474:
! 1475: @item complete-into-braces (M-@{)
! 1476: Perform filename completion and insert the list of possible completions
! 1477: enclosed within braces so the list is available to the shell
! 1478: (@pxref{Brace Expansion}).
! 1479:
! 1480: @end ifset
! 1481: @end ftable
! 1482:
! 1483: @node Keyboard Macros
! 1484: @subsection Keyboard Macros
! 1485: @ftable @code
! 1486:
! 1487: @item start-kbd-macro (C-x ()
! 1488: Begin saving the characters typed into the current keyboard macro.
! 1489:
! 1490: @item end-kbd-macro (C-x ))
! 1491: Stop saving the characters typed into the current keyboard macro
! 1492: and save the definition.
! 1493:
! 1494: @item call-last-kbd-macro (C-x e)
! 1495: Re-execute the last keyboard macro defined, by making the characters
! 1496: in the macro appear as if typed at the keyboard.
! 1497:
! 1498: @item print-last-kbd-macro ()
! 1499: Print the last keboard macro defined in a format suitable for the
! 1500: @var{inputrc} file.
! 1501:
! 1502: @end ftable
! 1503:
! 1504: @node Miscellaneous Commands
! 1505: @subsection Some Miscellaneous Commands
! 1506: @ftable @code
! 1507:
! 1508: @item re-read-init-file (C-x C-r)
! 1509: Read in the contents of the @var{inputrc} file, and incorporate
! 1510: any bindings or variable assignments found there.
! 1511:
! 1512: @item abort (C-g)
! 1513: Abort the current editing command and
! 1514: ring the terminal's bell (subject to the setting of
! 1515: @code{bell-style}).
! 1516:
! 1517: @item do-uppercase-version (M-a, M-b, M-@var{x}, @dots{})
! 1518: If the metafied character @var{x} is lowercase, run the command
! 1519: that is bound to the corresponding uppercase character.
! 1520:
! 1521: @item prefix-meta (@key{ESC})
! 1522: Metafy the next character typed. This is for keyboards
! 1523: without a meta key. Typing @samp{@key{ESC} f} is equivalent to typing
! 1524: @kbd{M-f}.
! 1525:
! 1526: @item undo (C-_ or C-x C-u)
! 1527: Incremental undo, separately remembered for each line.
! 1528:
! 1529: @item revert-line (M-r)
! 1530: Undo all changes made to this line. This is like executing the @code{undo}
! 1531: command enough times to get back to the beginning.
! 1532:
! 1533: @ifset BashFeatures
! 1534: @item tilde-expand (M-&)
! 1535: @end ifset
! 1536: @ifclear BashFeatures
! 1537: @item tilde-expand (M-~)
! 1538: @end ifclear
! 1539: Perform tilde expansion on the current word.
! 1540:
! 1541: @item set-mark (C-@@)
! 1542: Set the mark to the point. If a
! 1543: numeric argument is supplied, the mark is set to that position.
! 1544:
! 1545: @item exchange-point-and-mark (C-x C-x)
! 1546: Swap the point with the mark. The current cursor position is set to
! 1547: the saved position, and the old cursor position is saved as the mark.
! 1548:
! 1549: @item character-search (C-])
! 1550: A character is read and point is moved to the next occurrence of that
! 1551: character. A negative count searches for previous occurrences.
! 1552:
! 1553: @item character-search-backward (M-C-])
! 1554: A character is read and point is moved to the previous occurrence
! 1555: of that character. A negative count searches for subsequent
! 1556: occurrences.
! 1557:
! 1558: @item skip-csi-sequence ()
! 1559: Read enough characters to consume a multi-key sequence such as those
! 1560: defined for keys like Home and End. Such sequences begin with a
! 1561: Control Sequence Indicator (CSI), usually ESC-[. If this sequence is
! 1562: bound to "\e[", keys producing such sequences will have no effect
! 1563: unless explicitly bound to a readline command, instead of inserting
! 1564: stray characters into the editing buffer. This is unbound by default,
! 1565: but usually bound to ESC-[.
! 1566:
! 1567: @item insert-comment (M-#)
! 1568: Without a numeric argument, the value of the @code{comment-begin}
! 1569: variable is inserted at the beginning of the current line.
! 1570: If a numeric argument is supplied, this command acts as a toggle: if
! 1571: the characters at the beginning of the line do not match the value
! 1572: of @code{comment-begin}, the value is inserted, otherwise
! 1573: the characters in @code{comment-begin} are deleted from the beginning of
! 1574: the line.
! 1575: In either case, the line is accepted as if a newline had been typed.
! 1576: @ifset BashFeatures
! 1577: The default value of @code{comment-begin} causes this command
! 1578: to make the current line a shell comment.
! 1579: If a numeric argument causes the comment character to be removed, the line
! 1580: will be executed by the shell.
! 1581: @end ifset
! 1582:
! 1583: @item dump-functions ()
! 1584: Print all of the functions and their key bindings to the
! 1585: Readline output stream. If a numeric argument is supplied,
! 1586: the output is formatted in such a way that it can be made part
! 1587: of an @var{inputrc} file. This command is unbound by default.
! 1588:
! 1589: @item dump-variables ()
! 1590: Print all of the settable variables and their values to the
! 1591: Readline output stream. If a numeric argument is supplied,
! 1592: the output is formatted in such a way that it can be made part
! 1593: of an @var{inputrc} file. This command is unbound by default.
! 1594:
! 1595: @item dump-macros ()
! 1596: Print all of the Readline key sequences bound to macros and the
! 1597: strings they output. If a numeric argument is supplied,
! 1598: the output is formatted in such a way that it can be made part
! 1599: of an @var{inputrc} file. This command is unbound by default.
! 1600:
! 1601: @ifset BashFeatures
! 1602: @item glob-complete-word (M-g)
! 1603: The word before point is treated as a pattern for pathname expansion,
! 1604: with an asterisk implicitly appended. This pattern is used to
! 1605: generate a list of matching file names for possible completions.
! 1606:
! 1607: @item glob-expand-word (C-x *)
! 1608: The word before point is treated as a pattern for pathname expansion,
! 1609: and the list of matching file names is inserted, replacing the word.
! 1610: If a numeric argument is supplied, a @samp{*} is appended before
! 1611: pathname expansion.
! 1612:
! 1613: @item glob-list-expansions (C-x g)
! 1614: The list of expansions that would have been generated by
! 1615: @code{glob-expand-word} is displayed, and the line is redrawn.
! 1616: If a numeric argument is supplied, a @samp{*} is appended before
! 1617: pathname expansion.
! 1618:
! 1619: @item display-shell-version (C-x C-v)
! 1620: Display version information about the current instance of Bash.
! 1621:
! 1622: @item shell-expand-line (M-C-e)
! 1623: Expand the line as the shell does.
! 1624: This performs alias and history expansion as well as all of the shell
! 1625: word expansions (@pxref{Shell Expansions}).
! 1626:
! 1627: @item history-expand-line (M-^)
! 1628: Perform history expansion on the current line.
! 1629:
! 1630: @item magic-space ()
! 1631: Perform history expansion on the current line and insert a space
! 1632: (@pxref{History Interaction}).
! 1633:
! 1634: @item alias-expand-line ()
! 1635: Perform alias expansion on the current line (@pxref{Aliases}).
! 1636:
! 1637: @item history-and-alias-expand-line ()
! 1638: Perform history and alias expansion on the current line.
! 1639:
! 1640: @item insert-last-argument (M-. or M-_)
! 1641: A synonym for @code{yank-last-arg}.
! 1642:
! 1643: @item operate-and-get-next (C-o)
! 1644: Accept the current line for execution and fetch the next line
! 1645: relative to the current line from the history for editing. Any
! 1646: argument is ignored.
! 1647:
! 1648: @item edit-and-execute-command (C-xC-e)
! 1649: Invoke an editor on the current command line, and execute the result as shell
! 1650: commands.
! 1651: Bash attempts to invoke
! 1652: @code{$VISUAL}, @code{$EDITOR}, and @code{emacs}
! 1653: as the editor, in that order.
! 1654:
! 1655: @end ifset
! 1656:
! 1657: @ifclear BashFeatures
! 1658: @item emacs-editing-mode (C-e)
! 1659: When in @code{vi} command mode, this causes a switch to @code{emacs}
! 1660: editing mode.
! 1661:
! 1662: @item vi-editing-mode (M-C-j)
! 1663: When in @code{emacs} editing mode, this causes a switch to @code{vi}
! 1664: editing mode.
! 1665:
! 1666: @end ifclear
! 1667:
! 1668: @end ftable
! 1669:
! 1670: @node Readline vi Mode
! 1671: @section Readline vi Mode
! 1672:
! 1673: While the Readline library does not have a full set of @code{vi}
! 1674: editing functions, it does contain enough to allow simple editing
! 1675: of the line. The Readline @code{vi} mode behaves as specified in
! 1676: the @sc{posix} standard.
! 1677:
! 1678: @ifset BashFeatures
! 1679: In order to switch interactively between @code{emacs} and @code{vi}
! 1680: editing modes, use the @samp{set -o emacs} and @samp{set -o vi}
! 1681: commands (@pxref{The Set Builtin}).
! 1682: @end ifset
! 1683: @ifclear BashFeatures
! 1684: In order to switch interactively between @code{emacs} and @code{vi}
! 1685: editing modes, use the command @kbd{M-C-j} (bound to emacs-editing-mode
! 1686: when in @code{vi} mode and to vi-editing-mode in @code{emacs} mode).
! 1687: @end ifclear
! 1688: The Readline default is @code{emacs} mode.
! 1689:
! 1690: When you enter a line in @code{vi} mode, you are already placed in
! 1691: `insertion' mode, as if you had typed an @samp{i}. Pressing @key{ESC}
! 1692: switches you into `command' mode, where you can edit the text of the
! 1693: line with the standard @code{vi} movement keys, move to previous
! 1694: history lines with @samp{k} and subsequent lines with @samp{j}, and
! 1695: so forth.
! 1696:
! 1697: @ifset BashFeatures
! 1698: @node Programmable Completion
! 1699: @section Programmable Completion
! 1700: @cindex programmable completion
! 1701:
! 1702: When word completion is attempted for an argument to a command for
! 1703: which a completion specification (a @var{compspec}) has been defined
! 1704: using the @code{complete} builtin (@pxref{Programmable Completion Builtins}),
! 1705: the programmable completion facilities are invoked.
! 1706:
! 1707: First, the command name is identified.
! 1708: If a compspec has been defined for that command, the
! 1709: compspec is used to generate the list of possible completions for the word.
! 1710: If the command word is the empty string (completion attempted at the
! 1711: beginning of an empty line), any compspec defined with
! 1712: the @option{-E} option to @code{complete} is used.
! 1713: If the command word is a full pathname, a compspec for the full
! 1714: pathname is searched for first.
! 1715: If no compspec is found for the full pathname, an attempt is made to
! 1716: find a compspec for the portion following the final slash.
! 1717: If those searches do not result in a compspec, any compspec defined with
! 1718: the @option{-D} option to @code{complete} is used as the default.
! 1719:
! 1720: Once a compspec has been found, it is used to generate the list of
! 1721: matching words.
! 1722: If a compspec is not found, the default Bash completion
! 1723: described above (@pxref{Commands For Completion}) is performed.
! 1724:
! 1725: First, the actions specified by the compspec are used.
! 1726: Only matches which are prefixed by the word being completed are
! 1727: returned.
! 1728: When the @option{-f} or @option{-d} option is used for filename or
! 1729: directory name completion, the shell variable @env{FIGNORE} is
! 1730: used to filter the matches.
! 1731: @xref{Bash Variables}, for a description of @env{FIGNORE}.
! 1732:
! 1733: Any completions specified by a filename expansion pattern to the
! 1734: @option{-G} option are generated next.
! 1735: The words generated by the pattern need not match the word being completed.
! 1736: The @env{GLOBIGNORE} shell variable is not used to filter the matches,
! 1737: but the @env{FIGNORE} shell variable is used.
! 1738:
! 1739: Next, the string specified as the argument to the @option{-W} option
! 1740: is considered.
! 1741: The string is first split using the characters in the @env{IFS}
! 1742: special variable as delimiters.
! 1743: Shell quoting is honored.
! 1744: Each word is then expanded using
! 1745: brace expansion, tilde expansion, parameter and variable expansion,
! 1746: command substitution, and arithmetic expansion,
! 1747: as described above (@pxref{Shell Expansions}).
! 1748: The results are split using the rules described above
! 1749: (@pxref{Word Splitting}).
! 1750: The results of the expansion are prefix-matched against the word being
! 1751: completed, and the matching words become the possible completions.
! 1752:
! 1753: After these matches have been generated, any shell function or command
! 1754: specified with the @option{-F} and @option{-C} options is invoked.
! 1755: When the command or function is invoked, the @env{COMP_LINE},
! 1756: @env{COMP_POINT}, @env{COMP_KEY}, and @env{COMP_TYPE} variables are
! 1757: assigned values as described above (@pxref{Bash Variables}).
! 1758: If a shell function is being invoked, the @env{COMP_WORDS} and
! 1759: @env{COMP_CWORD} variables are also set.
! 1760: When the function or command is invoked, the first argument ($1) is the
! 1761: name of the command whose arguments are being completed, the
! 1762: second argument ($2) is the word being completed, and the third argument
! 1763: ($3) is the word preceding the word being completed on the current command
! 1764: line.
! 1765: No filtering of the generated completions against the word being completed
! 1766: is performed; the function or command has complete freedom in generating
! 1767: the matches.
! 1768:
! 1769: Any function specified with @option{-F} is invoked first.
! 1770: The function may use any of the shell facilities, including the
! 1771: @code{compgen} and @code{compopt} builtins described below
! 1772: (@pxref{Programmable Completion Builtins}), to generate the matches.
! 1773: It must put the possible completions in the @env{COMPREPLY} array
! 1774: variable, one per array element.
! 1775:
! 1776: Next, any command specified with the @option{-C} option is invoked
! 1777: in an environment equivalent to command substitution.
! 1778: It should print a list of completions, one per line, to
! 1779: the standard output.
! 1780: Backslash may be used to escape a newline, if necessary.
! 1781:
! 1782: After all of the possible completions are generated, any filter
! 1783: specified with the @option{-X} option is applied to the list.
! 1784: The filter is a pattern as used for pathname expansion; a @samp{&}
! 1785: in the pattern is replaced with the text of the word being completed.
! 1786: A literal @samp{&} may be escaped with a backslash; the backslash
! 1787: is removed before attempting a match.
! 1788: Any completion that matches the pattern will be removed from the list.
! 1789: A leading @samp{!} negates the pattern; in this case any completion
! 1790: not matching the pattern will be removed.
! 1791:
! 1792: Finally, any prefix and suffix specified with the @option{-P} and @option{-S}
! 1793: options are added to each member of the completion list, and the result is
! 1794: returned to the Readline completion code as the list of possible
! 1795: completions.
! 1796:
! 1797: If the previously-applied actions do not generate any matches, and the
! 1798: @option{-o dirnames} option was supplied to @code{complete} when the
! 1799: compspec was defined, directory name completion is attempted.
! 1800:
! 1801: If the @option{-o plusdirs} option was supplied to @code{complete} when
! 1802: the compspec was defined, directory name completion is attempted and any
! 1803: matches are added to the results of the other actions.
! 1804:
! 1805: By default, if a compspec is found, whatever it generates is returned to
! 1806: the completion code as the full set of possible completions.
! 1807: The default Bash completions are not attempted, and the Readline default
! 1808: of filename completion is disabled.
! 1809: If the @option{-o bashdefault} option was supplied to @code{complete} when
! 1810: the compspec was defined, the default Bash completions are attempted
! 1811: if the compspec generates no matches.
! 1812: If the @option{-o default} option was supplied to @code{complete} when the
! 1813: compspec was defined, Readline's default completion will be performed
! 1814: if the compspec (and, if attempted, the default Bash completions)
! 1815: generate no matches.
! 1816:
! 1817: When a compspec indicates that directory name completion is desired,
! 1818: the programmable completion functions force Readline to append a slash
! 1819: to completed names which are symbolic links to directories, subject to
! 1820: the value of the @var{mark-directories} Readline variable, regardless
! 1821: of the setting of the @var{mark-symlinked-directories} Readline variable.
! 1822:
! 1823: There is some support for dynamically modifying completions. This is
! 1824: most useful when used in combination with a default completion specified
! 1825: with @option{-D}. It's possible for shell functions executed as completion
! 1826: handlers to indicate that completion should be retried by returning an
! 1827: exit status of 124. If a shell function returns 124, and changes
! 1828: the compspec associated with the command on which completion is being
! 1829: attempted (supplied as the first argument when the function is executed),
! 1830: programmable completion restarts from the beginning, with an
! 1831: attempt to find a new compspec for that command. This allows a set of
! 1832: completions to be built dynamically as completion is attempted, rather than
! 1833: being loaded all at once.
! 1834:
! 1835: For instance, assuming that there is a library of compspecs, each kept in a
! 1836: file corresponding to the name of the command, the following default
! 1837: completion function would load completions dynamically:
! 1838:
! 1839: @example
! 1840: _completion_loader()
! 1841: @{
! 1842: . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
! 1843: @}
! 1844: complete -D -F _completion_loader -o bashdefault -o default
! 1845: @end example
! 1846:
! 1847: @node Programmable Completion Builtins
! 1848: @section Programmable Completion Builtins
! 1849: @cindex completion builtins
! 1850:
! 1851: Three builtin commands are available to manipulate the programmable completion
! 1852: facilities: one to specify how the arguments to a particular command are to
! 1853: be completed, and two to modify the completion as it is happening.
! 1854:
! 1855: @table @code
! 1856: @item compgen
! 1857: @btindex compgen
! 1858: @example
! 1859: @code{compgen [@var{option}] [@var{word}]}
! 1860: @end example
! 1861:
! 1862: Generate possible completion matches for @var{word} according to
! 1863: the @var{option}s, which may be any option accepted by the
! 1864: @code{complete}
! 1865: builtin with the exception of @option{-p} and @option{-r}, and write
! 1866: the matches to the standard output.
! 1867: When using the @option{-F} or @option{-C} options, the various shell variables
! 1868: set by the programmable completion facilities, while available, will not
! 1869: have useful values.
! 1870:
! 1871: The matches will be generated in the same way as if the programmable
! 1872: completion code had generated them directly from a completion specification
! 1873: with the same flags.
! 1874: If @var{word} is specified, only those completions matching @var{word}
! 1875: will be displayed.
! 1876:
! 1877: The return value is true unless an invalid option is supplied, or no
! 1878: matches were generated.
! 1879:
! 1880: @item complete
! 1881: @btindex complete
! 1882: @example
! 1883: @code{complete [-abcdefgjksuv] [-o @var{comp-option}] [-DE] [-A @var{action}] [-G @var{globpat}] [-W @var{wordlist}]
! 1884: [-F @var{function}] [-C @var{command}] [-X @var{filterpat}]
! 1885: [-P @var{prefix}] [-S @var{suffix}] @var{name} [@var{name} @dots{}]}
! 1886: @code{complete -pr [-DE] [@var{name} @dots{}]}
! 1887: @end example
! 1888:
! 1889: Specify how arguments to each @var{name} should be completed.
! 1890: If the @option{-p} option is supplied, or if no options are supplied, existing
! 1891: completion specifications are printed in a way that allows them to be
! 1892: reused as input.
! 1893: The @option{-r} option removes a completion specification for
! 1894: each @var{name}, or, if no @var{name}s are supplied, all
! 1895: completion specifications.
! 1896: The @option{-D} option indicates that the remaining options and actions should
! 1897: apply to the ``default'' command completion; that is, completion attempted
! 1898: on a command for which no completion has previously been defined.
! 1899: The @option{-E} option indicates that the remaining options and actions should
! 1900: apply to ``empty'' command completion; that is, completion attempted on a
! 1901: blank line.
! 1902:
! 1903: The process of applying these completion specifications when word completion
! 1904: is attempted is described above (@pxref{Programmable Completion}). The
! 1905: @option{-D} option takes precedence over @option{-E}.
! 1906:
! 1907: Other options, if specified, have the following meanings.
! 1908: The arguments to the @option{-G}, @option{-W}, and @option{-X} options
! 1909: (and, if necessary, the @option{-P} and @option{-S} options)
! 1910: should be quoted to protect them from expansion before the
! 1911: @code{complete} builtin is invoked.
! 1912:
! 1913:
! 1914: @table @code
! 1915: @item -o @var{comp-option}
! 1916: The @var{comp-option} controls several aspects of the compspec's behavior
! 1917: beyond the simple generation of completions.
! 1918: @var{comp-option} may be one of:
! 1919:
! 1920: @table @code
! 1921:
! 1922: @item bashdefault
! 1923: Perform the rest of the default Bash completions if the compspec
! 1924: generates no matches.
! 1925:
! 1926: @item default
! 1927: Use Readline's default filename completion if the compspec generates
! 1928: no matches.
! 1929:
! 1930: @item dirnames
! 1931: Perform directory name completion if the compspec generates no matches.
! 1932:
! 1933: @item filenames
! 1934: Tell Readline that the compspec generates filenames, so it can perform any
! 1935: filename-specific processing (like adding a slash to directory names
! 1936: quoting special characters, or suppressing trailing spaces).
! 1937: This option is intended to be used with shell functions specified
! 1938: with @option{-F}.
! 1939:
! 1940: @item noquote
! 1941: Tell Readline not to quote the completed words if they are filenames
! 1942: (quoting filenames is the default).
! 1943:
! 1944: @item nospace
! 1945: Tell Readline not to append a space (the default) to words completed at
! 1946: the end of the line.
! 1947:
! 1948: @item plusdirs
! 1949: After any matches defined by the compspec are generated,
! 1950: directory name completion is attempted and any
! 1951: matches are added to the results of the other actions.
! 1952:
! 1953: @end table
! 1954:
! 1955: @item -A @var{action}
! 1956: The @var{action} may be one of the following to generate a list of possible
! 1957: completions:
! 1958:
! 1959: @table @code
! 1960: @item alias
! 1961: Alias names. May also be specified as @option{-a}.
! 1962:
! 1963: @item arrayvar
! 1964: Array variable names.
! 1965:
! 1966: @item binding
! 1967: Readline key binding names (@pxref{Bindable Readline Commands}).
! 1968:
! 1969: @item builtin
! 1970: Names of shell builtin commands. May also be specified as @option{-b}.
! 1971:
! 1972: @item command
! 1973: Command names. May also be specified as @option{-c}.
! 1974:
! 1975: @item directory
! 1976: Directory names. May also be specified as @option{-d}.
! 1977:
! 1978: @item disabled
! 1979: Names of disabled shell builtins.
! 1980:
! 1981: @item enabled
! 1982: Names of enabled shell builtins.
! 1983:
! 1984: @item export
! 1985: Names of exported shell variables. May also be specified as @option{-e}.
! 1986:
! 1987: @item file
! 1988: File names. May also be specified as @option{-f}.
! 1989:
! 1990: @item function
! 1991: Names of shell functions.
! 1992:
! 1993: @item group
! 1994: Group names. May also be specified as @option{-g}.
! 1995:
! 1996: @item helptopic
! 1997: Help topics as accepted by the @code{help} builtin (@pxref{Bash Builtins}).
! 1998:
! 1999: @item hostname
! 2000: Hostnames, as taken from the file specified by the
! 2001: @env{HOSTFILE} shell variable (@pxref{Bash Variables}).
! 2002:
! 2003: @item job
! 2004: Job names, if job control is active. May also be specified as @option{-j}.
! 2005:
! 2006: @item keyword
! 2007: Shell reserved words. May also be specified as @option{-k}.
! 2008:
! 2009: @item running
! 2010: Names of running jobs, if job control is active.
! 2011:
! 2012: @item service
! 2013: Service names. May also be specified as @option{-s}.
! 2014:
! 2015: @item setopt
! 2016: Valid arguments for the @option{-o} option to the @code{set} builtin
! 2017: (@pxref{The Set Builtin}).
! 2018:
! 2019: @item shopt
! 2020: Shell option names as accepted by the @code{shopt} builtin
! 2021: (@pxref{Bash Builtins}).
! 2022:
! 2023: @item signal
! 2024: Signal names.
! 2025:
! 2026: @item stopped
! 2027: Names of stopped jobs, if job control is active.
! 2028:
! 2029: @item user
! 2030: User names. May also be specified as @option{-u}.
! 2031:
! 2032: @item variable
! 2033: Names of all shell variables. May also be specified as @option{-v}.
! 2034: @end table
! 2035:
! 2036: @item -C @var{command}
! 2037: @var{command} is executed in a subshell environment, and its output is
! 2038: used as the possible completions.
! 2039:
! 2040: @item -F @var{function}
! 2041: The shell function @var{function} is executed in the current shell
! 2042: environment.
! 2043: When it is executed, $1 is the name of the command whose arguments are
! 2044: being completed, $2 is the word being completed, and $3 is the word
! 2045: preceding the word being completed, as described above
! 2046: (@pxref{Programmable Completion}).
! 2047: When it finishes, the possible completions are retrieved from the value
! 2048: of the @env{COMPREPLY} array variable.
! 2049:
! 2050: @item -G @var{globpat}
! 2051: The filename expansion pattern @var{globpat} is expanded to generate
! 2052: the possible completions.
! 2053:
! 2054: @item -P @var{prefix}
! 2055: @var{prefix} is added at the beginning of each possible completion
! 2056: after all other options have been applied.
! 2057:
! 2058: @item -S @var{suffix}
! 2059: @var{suffix} is appended to each possible completion
! 2060: after all other options have been applied.
! 2061:
! 2062: @item -W @var{wordlist}
! 2063: The @var{wordlist} is split using the characters in the
! 2064: @env{IFS} special variable as delimiters, and each resultant word
! 2065: is expanded.
! 2066: The possible completions are the members of the resultant list which
! 2067: match the word being completed.
! 2068:
! 2069: @item -X @var{filterpat}
! 2070: @var{filterpat} is a pattern as used for filename expansion.
! 2071: It is applied to the list of possible completions generated by the
! 2072: preceding options and arguments, and each completion matching
! 2073: @var{filterpat} is removed from the list.
! 2074: A leading @samp{!} in @var{filterpat} negates the pattern; in this
! 2075: case, any completion not matching @var{filterpat} is removed.
! 2076: @end table
! 2077:
! 2078: The return value is true unless an invalid option is supplied, an option
! 2079: other than @option{-p} or @option{-r} is supplied without a @var{name}
! 2080: argument, an attempt is made to remove a completion specification for
! 2081: a @var{name} for which no specification exists, or
! 2082: an error occurs adding a completion specification.
! 2083:
! 2084: @item compopt
! 2085: @btindex compopt
! 2086: @example
! 2087: @code{compopt} [-o @var{option}] [-DE] [+o @var{option}] [@var{name}]
! 2088: @end example
! 2089: Modify completion options for each @var{name} according to the
! 2090: @var{option}s, or for the currently-executing completion if no @var{name}s
! 2091: are supplied.
! 2092: If no @var{option}s are given, display the completion options for each
! 2093: @var{name} or the current completion.
! 2094: The possible values of @var{option} are those valid for the @code{complete}
! 2095: builtin described above.
! 2096: The @option{-D} option indicates that the remaining options should
! 2097: apply to the ``default'' command completion; that is, completion attempted
! 2098: on a command for which no completion has previously been defined.
! 2099: The @option{-E} option indicates that the remaining options should
! 2100: apply to ``empty'' command completion; that is, completion attempted on a
! 2101: blank line.
! 2102:
! 2103: The @option{-D} option takes precedence over @option{-E}.
! 2104:
! 2105: The return value is true unless an invalid option is supplied, an attempt
! 2106: is made to modify the options for a @var{name} for which no completion
! 2107: specification exists, or an output error occurs.
! 2108:
! 2109: @end table
! 2110:
! 2111: @node A Programmable Completion Example
! 2112: @section A Programmable Completion Example
! 2113:
! 2114: The most common way to obtain additional completion functionality beyond
! 2115: the default actions @code{complete} and @code{compgen} provide is to use
! 2116: a shell function and bind it to a particular command using @code{complete -F}.
! 2117:
! 2118: The following function provides completions for the @code{cd} builtin.
! 2119: It is a reasonably good example of what shell functions must do when
! 2120: used for completion. This function uses the word passsed as @code{$2}
! 2121: to determine the directory name to complete. You can also use the
! 2122: @code{COMP_WORDS} array variable; the current word is indexed by the
! 2123: @code{COMP_CWORD} variable.
! 2124:
! 2125: The function relies on the @code{complete} and @code{compgen} builtins
! 2126: to do much of the work, adding only the things that the Bash @code{cd}
! 2127: does beyond accepting basic directory names:
! 2128: tilde expansion (@pxref{Tilde Expansion}),
! 2129: searching directories in @var{$CDPATH}, which is described above
! 2130: (@pxref{Bourne Shell Builtins}),
! 2131: and basic support for the @code{cdable_vars} shell option
! 2132: (@pxref{The Shopt Builtin}).
! 2133: @code{_comp_cd} modifies the value of @var{IFS} so that it contains only
! 2134: a newline to accommodate file names containing spaces and tabs --
! 2135: @code{compgen} prints the possible completions it generates one per line.
! 2136:
! 2137: Possible completions go into the @var{COMPREPLY} array variable, one
! 2138: completion per array element. The programmable completion system retrieves
! 2139: the completions from there when the function returns.
! 2140:
! 2141: @example
! 2142: # A completion function for the cd builtin
! 2143: # based on the cd completion function from the bash_completion package
! 2144: _comp_cd()
! 2145: @{
! 2146: local IFS=$' \t\n' # normalize IFS
! 2147: local cur _skipdot _cdpath
! 2148: local i j k
! 2149:
! 2150: # Tilde expansion, with side effect of expanding tilde to full pathname
! 2151: case "$2" in
! 2152: \~*) eval cur="$2" ;;
! 2153: *) cur=$2 ;;
! 2154: esac
! 2155:
! 2156: # no cdpath or absolute pathname -- straight directory completion
! 2157: if [[ -z "$@{CDPATH:-@}" ]] || [[ "$cur" == @@(./*|../*|/*) ]]; then
! 2158: # compgen prints paths one per line; could also use while loop
! 2159: IFS=$'\n'
! 2160: COMPREPLY=( $(compgen -d -- "$cur") )
! 2161: IFS=$' \t\n'
! 2162: # CDPATH+directories in the current directory if not in CDPATH
! 2163: else
! 2164: IFS=$'\n'
! 2165: _skipdot=false
! 2166: # preprocess CDPATH to convert null directory names to .
! 2167: _cdpath=$@{CDPATH/#:/.:@}
! 2168: _cdpath=$@{_cdpath//::/:.:@}
! 2169: _cdpath=$@{_cdpath/%:/:.@}
! 2170: for i in $@{_cdpath//:/$'\n'@}; do
! 2171: if [[ $i -ef . ]]; then _skipdot=true; fi
! 2172: k="$@{#COMPREPLY[@@]@}"
! 2173: for j in $( compgen -d -- "$i/$cur" ); do
! 2174: COMPREPLY[k++]=$@{j#$i/@} # cut off directory
! 2175: done
! 2176: done
! 2177: $_skipdot || COMPREPLY+=( $(compgen -d -- "$cur") )
! 2178: IFS=$' \t\n'
! 2179: fi
! 2180:
! 2181: # variable names if appropriate shell option set and no completions
! 2182: if shopt -q cdable_vars && [[ $@{#COMPREPLY[@@]@} -eq 0 ]]; then
! 2183: COMPREPLY=( $(compgen -v -- "$cur") )
! 2184: fi
! 2185:
! 2186: return 0
! 2187: @}
! 2188: @end example
! 2189:
! 2190: We install the completion function using the @option{-F} option to
! 2191: @code{complete}:
! 2192:
! 2193: @example
! 2194: # Tell readline to quote appropriate and append slashes to directories;
! 2195: # use the bash default completion for other arguments
! 2196: complete -o filenames -o nospace -o bashdefault -F _comp_cd cd
! 2197: @end example
! 2198:
! 2199: @noindent
! 2200: Since we'd like Bash and Readline to take care of some
! 2201: of the other details for us, we use several other options to tell Bash
! 2202: and Readline what to do. The @option{-o filenames} option tells Readline
! 2203: that the possible completions should be treated as filenames, and quoted
! 2204: appropriately. That option will also cause Readline to append a slash to
! 2205: filenames it can determine are directories (which is why we might want to
! 2206: extend @code{_comp_cd} to append a slash if we're using directories found
! 2207: via @var{CDPATH}: Readline can't tell those completions are directories).
! 2208: The @option{-o nospace} option tells Readline to not append a space
! 2209: character to the directory name, in case we want to append to it.
! 2210: The @option{-o bashdefault} option brings in the rest of the "Bash default"
! 2211: completions -- possible completion that Bash adds to the default Readline
! 2212: set. These include things like command name completion, variable completion
! 2213: for words beginning with @samp{@{}, completions containing pathname
! 2214: expansion patterns (@pxref{Filename Expansion}), and so on.
! 2215:
! 2216: Once installed using @code{complete}, @code{_comp_cd} will be called every
! 2217: time we attempt word completion for a @code{cd} command.
! 2218:
! 2219: Many more examples -- an extensive collection of completions for most of
! 2220: the common GNU, Unix, and Linux commands -- are available as part of the
! 2221: bash_completion project. This is installed by default on many GNU/Linux
! 2222: distributions. Originally written by Ian Macdonald, the project now lives
! 2223: at @url{http://bash-completion.alioth.debian.org/}. There are ports for
! 2224: other systems such as Solaris and Mac OS X.
! 2225:
! 2226: An older version of the bash_completion package is distributed with bash
! 2227: in the @file{examples/complete} subdirectory.
! 2228:
! 2229: @end ifset
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>