Provided by: rlwrap_0.46.1-1_amd64 bug

NAME

       rlwrap - readline wrapper

SYNOPSIS

       rlwrap [rlwrap-options] command ...

DESCRIPTION

       rlwrap  runs the specified command, intercepting user input in order to provide readline's
       line editing, persistent history and completion.

       rlwrap tries (and almost succeeds) to be completely transparent  -  you  (or  your  shell)
       shouldn't  notice  any  difference  between  command and rlwrap command - except the added
       readline functionality, of course.  This should even hold true when you are  re-directing,
       piping  and sending signals from and to command, and when command manipulates its terminal
       settings, working directory or (with the -U option) command line.

       There are many options to add (programmable) completion, handle multi-line  input,  colour
       and  re-write  prompts.  If you don't need them (and you probably don't), you can skip the
       rest of this manpage, although some of those options could make your command line quite  a
       bit more comfortable...

OPTIONS

       -a[password_prompt], --always-readline[=password_prompt]
              Always  remain  in  "readline  mode"  (see below), regardless of command's terminal
              settings.  If rlwrap "does nothing" this is  the  option  to  use,  as  command  is
              apparently  already  doing its own line editing.  NB: With this option, rlwrap will
              echo (and save)  passwords,  unless  you  give  command's  password  prompt  as  an
              argument.

              The  argument  is  optional;  if  given,  it  has to directly follow a short option
              without an intervening space (-aPassword:) and a long option with  an  equals  sign
              (--always-readline=Password:).

              The  -N  (--no-children)  option  can  be used to avoid wrapping pagers and editors
              called from command; this should make them much more usable

       -A[!], --ansi-colour-aware[=!]
              Prompts that use colour, or use other CSI codes to e.g. set window titles or enable
              bracketed-paste  will  confuse  rlwrap,  especially at the end of long input lines.
              This option will usually (but by no means always) make  rlwrap  better  behaved  in
              such cases.

              Giving '!' as an argument will make rlwrap remove all color codes from the prompt.

              The  argument  is  optional;  if  given,  it  has to directly follow a short option
              without an  intervening  space  (-A!)  and  a  long  option  with  an  equals  sign
              (--ansi-colour-aware=!).

       -b, --break-chars list_of_characters
              Consider   the   specified   characters   word-breaking   (whitespace   is   always
              word-breaking). This determines what is considered a "word", both  when  completing
              and  when  building  a  completion  word  list  from  files specified by -f options
              following (not preceding!) it.  Default list  (){}[],'+-=&^%$#@";|\  Unless  -c  is
              specified, / and . (period) are included in the default list.

       -c, --complete-filenames
              Complete  filenames (filename completion is always case-sensitive, even with the -i
              option). On Linux, OS X, FreeBSD and Solaris rlwrap will keep  track  of  command's
              working  directory,  so  that  relative  filenames  will  be completed as one would
              expect.

       -C, --command-name command_name|N
              Use command_name  instead  of  command  to  determine  the  names  of  history  and
              completion  files,  and  to  initialise  readline  (as  specified in ~/.inputrc). A
              numeric argument N > 0 means: use the Nth argument counting backwards from the  end
              of the argument list

       -D, --history-no-dupes n
              How  aggressively  to weed out duplicate entries from the input history.  If n = 0,
              all inputs are kept in the history list, if n = 1 (this is the default) consecutive
              duplicates  are  dropped  from  the  list,  while  n  = 2 will make rlwrap drop all
              previous occurrences (in the current session) of the current input from the list.

       -e, --extra-char-after-completion char
              By default, rlwrap appends a space after any inserted  completion  text.  Use  this
              option to change this to '' (don't insert anything) or some other character.

       -E, --always-echo
              By default, rlwrap avoids displaying passwords by echoing '***' whenever the client
              clears the ECHO flag on its input. This option will make rlwrap  ignore  this  ECHO
              flag and always echo the user's input. (-aPassword: will still work as expected)

       -f, --file file
              Split  file  into  words  (using  the  default  word-breaking  characters, or those
              specified by --break-chars), and add them to the completion word list. This  option
              can  be  given  more  than  once,  and  adds  to  the  default  completion  list in
              $RLWRAP_HOME or /usr/share/rlwrap/completions.

              Specifying -f . will make rlwrap use the current history file as a completion  word
              list.

       -g, --forget-matching regexp
              Forget  (i.e.  never  put  into  the history list) input lines that match the POSIX
              1003.2 regular expression regexp.  The match is always case-insensitive. perl-style
              character  classes  like  '\d'  are not recognised, use '[:digit:]'. For more about
              regular expressions, see regex (7)

       -h, --help
              Print a short help message.

       -H, --history-filename file
              Read command history from file (and write it back there if --histsize >= 0)

       -i, --case-insensitive
              Ignore case when completing  (filename  completion  remains  case-sensitive).  This
              option has to come before any -f options.

       -I, --pass-sigint-as-sigterm
              Send a TERM signal to command when an INT is received (e.g. when you press CTRL-C).

       -l, --logfile file
              When  in  readline  mode, append command's output (including echo'ed user input) to
              file (creating file when it doesn't exist).

       -m[newline_substitute], --multi-line[=newline_substitute]
              Enable multi-line input using a "newline substitute" character  sequence  ("  \  ",
              [space-backslash-space] by default). Newline substitutes are translated to newlines
              before sending the input to command. With this option, you  can  call  an  external
              editor  $RLWRAP_EDITOR  on the (expanded) current input with the rlwrap_call_editor
              key (CTRL-^ by default) The argument is optional; if  given,  it  has  to  directly
              follow  a short option without an intervening space (-m';;') and a long option with
              an equals sign (--multi-line=';;').

       -M, --multi-line-ext .ext
              Call multi-line-editor on temporary files with filename extension .ext (useful  for
              e.g. automatic syntax colouring)

       -n, --no-warnings
              Don't print warnings.

       -N, --no-children
              When  rlwrap  is invoked with the --always-readline option, editors and pagers that
              are called by the client will be pretty unusable, as they will see your  keypresses
              only  if  you press ENTER. rlwrap -N will avoid this problem by switching to direct
              mode if it thinks command is waiting for one of its children.

       -o, --one-shot
              Send an EOF to command after accepting the first line of input

       -O, --only-cook regexp
              Only ever "cook" prompts that match regexp, which can be preceded by  '!',  meaning
              that  all matching candidate prompts will be cooked immediately ("confident mode").

       -p[colour], --prompt-colour[=colour]
              Use  one  of  the  colour  names  black,  red,  green,  yellow,  blue, cyan, purple
              (=magenta) or white, or an  ANSI-conformant  <colour_spec>  to  colour  any  prompt
              displayed  by  command.  An  uppercase colour name (Yellow or YELLOW ) gives a bold
              prompt. Prompts that already contain  (colour)  escape  sequences  or  one  of  the
              readline  "ignore  markers"  (ASCII  0x01  and  0x02) are not coloured. This option
              implies  --ansi-colour-aware.   You  can  also  use  a  colour  spec  of  the  form
              <attr>;<fg>[;<bg>],  for  example   -p'1;31'  will  give  a  bold red prompt on the
              current background (this is the default when no  argument  is  given).  Google  for
              'ANSI color' to learn more about colour codes.  The argument is optional; if given,
              it has to directly follow a short option without an intervening space (-p'Red') and
              a long option with an equals sign (--prompt-colour='Red').

       -P, --pre-given text
              Start  rlwrap  with  text  in  its  edit  buffer  (this  will automatically set the
              --always-readline option).

       -q, --quote-characters list_of_characters
              Assume that the given characters act as quotes,  e.g.  when  matching  parentheses.
              Take  care  to  escape  the  list properly for your shell (example: -q "\"'", which
              happens to be the default, or -q "\"" which will be better for lisp-like input)

       -r, --remember
              Put all words seen on in- and output on the completion list.

       -R, --renice
              Make rlwrap nicer than  command  (cf  nice  (1)).  This  may  prevent  rlwrap  from
              interrupting  command  to  display  a prompt when command is still "thinking" about
              what to output next.

       -s, --histsize N
              Limit the history list to N entries, truncating the history file (default: 300).  A
              negative  size  -N  (even  -0)  means the same as N, but treats the history file as
              read-only.

       -S, --substitute-prompt prompt
              Substitute the specified prompt  for  command's  own  prompt.  Mainly  useful  when
              command doesn't have a prompt.

       -t, --set-term-name name
              Set  command's TERM to name. Programs that confuse rlwrap with fancy screen control
              codes can sometimes be tamed by specifying -t dumb

       -U, --mirror-arguments
              (linux only) Keep track of command's arguments as seen by the ps (1)  command,  and
              mirror  them  in  rlwrap's  own  arguments  This  can  be  useful for commands that
              overwrite command-line password arguments that would be exposed by  rlwrap  without
              this  option.  The  mirroring  takes place after the first user input, or every few
              milliseconds, if you use the --polling option.

       -v, --version
              Print rlwrap version.

       -w, --wait-before-prompt timeout
              In order to determine if command's last output is a prompt,  rlwrap  waits  timeout
              milliseconds  after  receiving  it.   Only  when  no more output has arrived, it is
              cooked (coloured, filtered and/or replaced by a substitute prompt) and displayed as
              a prompt.  Before this the prompt is displayed "uncooked". Most users won't notice,
              but heavy cookers can prepend the timeout with a minus  sign,  making  rlwrap  hold
              back  the  prompt  until  it  has  been  cooked ("patient mode"). This will prevent
              flashing of the prompt, but it will also interfere with long output lines and  make
              switches from direct to readline mode less reliable. Default timeout: 40 ms

       -W, --polling
              EXPERIMENTAL: Wake up every timeout millisecs, where timeout is the same as for the
              -w (--wait-before-prompt) option, 40 ms by default.  This  is  used  to  sense  the
              slave's  interrupt  character and ISIG flag and to adjust stdin's terminal settings
              accordingly, even before you press a key. Try this option  e.g.  when  CTRL-C  acts
              differently on command with, and without, rlwrap.

       -z, --filter some_filter
              Use  some_filter  to change rlwrap's behaviour. Filters can be used to keep certain
              input out of the history,  to  change  the  prompt,  to  implement  simple  macros,
              programmable  hotkeys  for  e.g. fuzzy history search, and programmable completion.
              rlwrap comes with a perl and a python module to  make  filter  writing  easy.  (cf.
              RlwrapFilter(3pm)  for the perl module, the python one is very similar) A number of
              example filters are installed in the directory /usr/share/rlwrap/filters.

                  rlwrap -z listing

              lists all currently installed filters, while

                  rlwrap -z some_filter

              displays information about some_filter

              If some_filter needs arguments, you should quote the whole filter command line:

                  rlwrap -z 'some_filter args' command ...
                  rlwrap -z 'pipeline filter1 ... : filter2 ... : ...' command ...

              If this command line contains shell metacharacters, rlwrap passes it to the  system
              shell for parsing.

              As  filters  have  to  follow  a special protocol, shell commands like sed and grep
              cannot be used as rwlrap filters. They can, however, be converted into  filters  by
              the makefilter filter:

                  rlwrap -z 'makefilter egrep -i --color "error|$"' command

              will color all occurrences of "error" (or "Error")  in command's output, while

                  rlwrap  -z  'makefilter  --message-type  history  sed  -e s"/whisky/lemonade/"'
              command

              sanitises your drinking history. Both filters can be combined  using  the  pipeline
              filter, of course.

EXAMPLES

       Run nc (netcat) with command-line editing and history
          rlwrap nc

       Wrap  smbclient  (which uses readline itself), keep passwords out of the history and don't
       interfere with pagers (like less) called by smbclient.
          rlwrap -aPassword: -N smbclient //PEANUT/C

       Wrap sensitive_app, hide password from ps (if sensitive_app does so) and  keep  all  input
       that starts with a space out of history:
          rlwrap -g '^ ' -U sensitive_app --password MySeCrEt

       Wrap  gauche  (a  Scheme  interpreter)  with a bold blue prompt, enable multi-line editing
       (using .scm as filename extension) and don't consider single quotes as quotes (so that the
       parentheses in e.g. (print 'q) match)
          rlwrap -pBlue -m -M .scm -q'"' gosh

       Wrap  sqlite3, use the pipeto filter to be able to pipe the output of SQL commands through
       grep and/or less, complete (case-insensitively) on the SQL keywords in 'sql_words'
          rlwrap -a -z pipeto -i -f sql_words sqlite3 contacts.db

       In a shell script, use rlwrap in 'one-shot' mode as a replacement for read
          order=$(rlwrap -pYellow -S 'Your pizza? ' -H past_orders -P Margherita -o cat)

DIRECT MODE AND READLINE MODE

       Most simple console commands put your terminal either in "cooked" or  in  "raw"  mode.  In
       cooked mode the terminal will wait until you press the ENTER key before handing the entire
       line to the program, in raw mode every key you press is handed down immediately. In cooked
       mode you generally can use the backspace key, but not the arrow keys, to edit your input.

       When  you  rlwrap  command,  rlwrap  will  run  it  a in a separate session, under its own
       (controlling) "pseudo-terminal" (pty), and monitor this pty to see whether it is  in  raw,
       or  in  cooked  mode.  In  the  first case, rlwrap will copy all input and output directly
       between command and your terminal ("direct mode"). In the second  case,  rlwrap  will  use
       readline  to  edit your input ("readline mode"), and monitor command's output - every last
       line that doesn't end with a newline  is  a  potential  prompt.  How  it  handles  such  a
       candidate prompt depends on its being in "patient" or "impatient" mode, see below.

       Simple console commands use cooked mode whenever they want whole input lines, and raw mode
       when they want single keypresses. Those are the progams for which rlwrap is  most  useful.
       More  sophisticated  commands  have  their  own line editor and hence use raw mode all the
       time.  With those commands, rlwrap will appear to "do nothing".  Therefore, if  rlwrap  is
       in  direct mode when the user presses ENTER for the first time it will give a warning that
       it needs --always-readline to do anything at all (warnings can be suppressed with  the  -n
       option)

PATIENT, IMPATIENT AND CONFIDENT MODE

       If  command writes a lot of output, it tends to be written (and read) in "chunks". Not all
       chunks will end with a newline, and we need to distinguish their  last  lines  ("candidate
       prompts")  from  real  prompts, especially if we want to re-write ("cook") prompts. rlwrap
       solves this (almost) by waiting a little, to see if there is more to come. "A  little"  is
       40  msec  by  default, but this can be changed with the -w option.  Normally rlwrap writes
       the candidate prompt as soon as it is received, replacing it with a "cooked" version after
       the  wait  time.  This  is  called "impatient" mode. If you don't like the flashing effect
       (which can become annoying when you "cook" the prompt  heavily)  you  can  put  rlwrap  in
       "patient mode" by specifying a negative value with -w (e.g. -w -40). Rlwrap will then hold
       back the prompt and only print if after cooking.  If prompts  always  match  some  regular
       expression  you  can  specify  "confident  mode"  with  --only-cook='!<regexp>'  (note the
       exclamation mark).  Then all candidate prompts that match (and only those) will be  cooked
       immediately.  They  will,  however,  not  be  "uncooked" if more output arrives, which can
       happen if they weren't prompts after all. Confident mode doesn't  work   with  a  negative
       value for the -w option.

COOKING PROMPTS

       If  and  when  rlwrap decides that it has a prompt, it will perform a number of actions on
       it, depending on the given options: filtering (-z), substituting (-S) and colouring  (-p),
       in  this  order.  The  resulting  "cooked" prompt is then printed (after erasing the "raw"
       prompt, if necessary)

SPECIAL KEYS AND BINDABLE COMMANDS

       Control + O
              Accept the current line, but don't put it in the history list. This  action  has  a
              readline command name rlwrap-accept-line-and-forget

       Control + ^
              Use  an  external  editor (see RLWRAP_EDITOR below) to edit the current input (this
              will only work if the -m option is set). This action has a  readline  command  name
              rlwrap-call-editor

       (Not currently bound)
              Any  key  (or key sequence, see below) can be bound to the readline command rlwrap-
              direct-keypress. This key (or keys) will then always be sent directly  to  command,
              even when rlwrap is not in direct mode.

       (Not currently bound)
              Any  key  or  key  combination  can be bound to the readline command rlwrap-direct-
              prefix. This makes it possible to define multi-key direct  keypresses  by  defining
              their first key(s) as a 'direct prefix'

       (Not currently bound)
              Any  key  can  be  bound  to the readline command rlwrap-hotkey. This key will then
              cause the  current  input  line  and  the  current  history  to  be  filtered  (cf.
              RlwrapFilter(3pm))  through  the  current filter (hence be a no-op when there is no
              filter), which then can re-write the input line, move the  cursor  and  update  the
              history. After that, the user can still edit the resulting input.

       (Not currently bound)
              rlwrap-hotkey-without-history  acts  like rlwrap-hotkey, but the history (which can
              be quite large) is not passed to the filter. This is more efficient if  the  filter
              wouldn't do anything useful with the history anyway.

       The special keys were chosen for no other reason than that they are not currently bound to
       any readline action. If you don't like them, (or your window manager swallows  them)  they
       (and  the  other  4  commands)  can  be re-bound more sensibly by including lines like the
       following in your ~/.inputrc:

          "\M-\C-m":  rlwrap-accept-line-and-forget         # ESC-ENTER to accept but keep out of history
          "\C-x":     rlwrap-call-editor                    # CTRL-x e to edit (multi-line) input in editor of your choice
           $if erl                                          # (only) for the Erlang shell:
              "\C-g": rlwrap-direct-keypress                # pass CTRL-g directly to enter 'user switch' command
           $endif
           "\C-t":    rlwrap-direct-prefix                  # make it possible to define direct keypresses that start with CTRL-t ...
           "\C-tx":   rlwrap-direct-keypress                # ... in that case: pass CTRL-t + x directly.
           "\C-y":    rlwrap-hotkey-without-history         # CTRL-y to filter input line (and e.g. insert X selection)

       cf. the readline(3) manpage. (NB: take care to not use keys that  are  already  caught  by
       your  window  manager,  or  by  the terminal driver, like CTRL+S, as rlwrap will never see
       those)

ENVIRONMENT

       RLWRAP_HOME:
              directory in which the history and completion files are kept.

       RLWRAP_EDITOR (or else EDITOR, or else VISUAL):
              editor to use for multi-line input (and rlwrap-edit-history). Example:

           export RLWRAP_EDITOR="vi +%L"
           export RLWRAP_EDITOR="vim '+call cursor(%L,%C)'"
           export RLWRAP_EDITOR="emacs +%L:%C %F"

       The first example above is the default; %L and %C are replaced by line and column  numbers
       corresponding  to  the  cursor position in rlwrap's edit buffer, %F is replaced by name of
       the (temporary) file.  If  %F  is  not  used,  this  name  is  put  after  the  (expanded)
       $RLWAP_EDITOR

       RLWRAP_FILTERDIR:
              Any  executable  along  your  PATH  can  in theory be used as a filter, but because
              filters have to follow a rather outlandish protocol (cf. RlwrapFilter (3)) it is  a
              good idea to keep them separate. This is why rlwrap adds a special filter directory
              in  front  of  $PATH  just  before  launching  a  filter.  By  default,   this   is
              /usr/share/rlwrap/filters, but $RLWRAP_FILTERDIR is used instead, if set.

SIGNALS

       A  number  of signals are forwarded to command: HUP INT QUIT USR1 USR2 TERM and (by way of
       resizing command's terminal) WINCH. Some care is taken to handle TSTP (usually a result of
       a  CTRL-Z from the terminal) sensibly - for example, after suspending rlwrap in the middle
       of a line edit, continuing (by typing 'fg') will land you at  the  exact  spot  where  you
       suspended it.

       A  filter  can  be  used  to  modify/ignore  signals,  or send output "out of band" to the
       rlwrapped command.

       Filters (except those that filter signals) that take more than 1 second to respond can  be
       interrupted by a CTRL-C from the terminal (although rlwrap will not survive this)

       If  command  changes  the keystrokes that send a particular signal from the keyboard (like
       emacs, which uses CTRL-G instead of CTRL-C) rlwrap will do the same (but  only  after  the
       next keystroke - use the --polling option to make rlwrap more transparent in this respect)

       When  command  is  killed  by a signal, rlwrap will clean up, reset its signal handlers an
       then commit suicide by sending the same signal to itself.  This means that your shell sees
       the same exit status as it would have seen without rlwrap.

REDIRECTION

       When  the  standard  input is not a terminal (or when run inside an emacs buffer), editing
       input doesn't make sense, so rlwrap will ignore all options and simply execute command  in
       place  of  itself.  When  stdout  (or stderr) is not a terminal, rlwrap will re-open it to
       /dev/tty (the users terminal) after it has started command, so that  command's  output  is
       redirected as expected, but keyboard input and rlwrap error messages are still visible.

       The  upshot  of  this  is  that  rlwrap  command  behaves  more  or less like command when
       redirecting.

EXIT STATUS

       non-zero after a rlwrap error, or else command's exit status. rlwrap will always leave the
       terminal in a tidy state, even after a crash.

FILES

       rlwrap expects its history and completion files in $RLWRAP_HOME, but uses .dotfiles in the
       user's home directory if this variable is not set. This will quickly become messy  if  you
       use rlwrap for many different commands.

       $RLWRAP_HOME/command_history, ~/.command_history
              History  for command (remember that command may be overridden by the --command-name
              (or -C) option)

       $RLWRAP_HOME/command_completions, ~/.command_completions
              Per-user completion word list for command. rlwrap never writes into this list,  but
              one  can  use -l logfile  and then -f logfile to simulate the effect of a -r option
              that works across invocations.

       /usr/share/rlwrap/completions/command
              System-wide completion word list for command. This file is only  consulted  if  the
              per-user completion word list is not found.

       $INPUTRC, ~/.inputrc
              Individual  readline  initialisation file (See readline (3) for its format). rlwrap
              sets its application name to command (this can be overridden  by  the  -C  option),
              enabling  different  behaviours  for  different  commands.   One could e.g. put the
              following lines in ~/.inputrc:

                 $if coqtop
                     set show-all-if-ambiguous On
                 $endif

              making rlwrap show all completions whenever it runs coqtop

BUGS and LIMITATIONS

       Though it is flexible, delivers the goods (readline functionality),  and  adheres  to  the
       Unix  "many  small  tools"  paradigm,  rlwrap  is a kludge. It doesn't know anything about
       command's internal state, which makes context-sensitive completion impossible.  Using  the
       GNU Readline library from within command is still by far the best option.

       Also,  as  "it  takes two to tango" there is no way for rlwrap to synchronise its internal
       state with command, resulting in a number of subtle race conditions,  where  e.g.  command
       may  have changed the state of its terminal before rlwrap has read command output that was
       written before the state change. You will notice these races especially on a busy  machine
       and  with  heavy  "cooking"  and  filtering,  when suddenly (and unpredictably) prompts or
       command output are garbled or incorrectly coloured.

       rlwrap can try, but often  fails  to,  handle  prompts  that  contain  control  characters
       (prompts,  and  the effect of -A and -t, can be analysed by the filter dissect_prompt). If
       -A (--ansi-colour-aware) doesn't help, a filter may be needed  to  clean  up  the  prompt.
       Specifying --set-term-name with a simpler, of even dumb, terminal may also help.

VERSION

       This manpage documents rlwrap version 0.46.1

AUTHORS

       The  GNU  Readline  library  (written  by Brian Fox and Chet Ramey) does all the hard work
       behind the scenes, the pty-handling code (written by Geoff C. Wing) was taken  practically
       unchanged  from  rxvt,  and  completion  word  lists  are  managed  by  Damian  Ivereigh's
       libredblack library. The rest was written by Hans Lub (hanslub42@gmail.com).

SEE ALSO

       readline(3), RlwrapFilter(3pm)

                                         October 20, 2022                               rlwrap(1)