Lynx Line Editor Bash-Like Key Binding

# +++BASH-LIKE BINDING+++

Lynx invokes a built-in Line Editor for entering strings in response to prompts, in forms, and for email messages if an external editor has not been defined. Several sets of key-bindings can be offered by configuring with --enable-alt-bindings or by adding them in LYEditmap.c before compiling Lynx. If available, they may be selected via the 'o'ptions menu, or by editing lineedit_mode in the '.lynxrc' file.

Note: setting emacs/vi keys ON has no direct effect on line-editor bindings.

This is the Bash-like Binding keymap.

## Basic commands

         ENTER  Input complete        -  Enter, RETURN
         TAB    Completion [2]/ Next  -  TAB, Do
         ABORT  Cancel / Undo Change  -  C-g, C-_
         ERASE  Erase the line        -  M-k, C-x k

         BACK   Cursor back     char  -  Left-Arrow,  C-b
         FORW   Cursor forward  char  -  Right-Arrow, C-f
         BACKW  Cursor back     word  -  M-b, C-r
         FORWW  Cursor forward  word  -  M-f, C-s [5]
         BOL    Go to begin of  line  -  C-a, Home, Find
         EOL    Go to end   of  line  -  C-e [4], End,  Select

         DELP   Delete prev     char  -  C-h, Backspace, Rubout
         DELN   Delete next [1] char  -  C-d, Delete, Remove
         DELPW  Delete prev     word  -  C-w [3], M-Backspace, M-Delete (?)
         DELNW  Delete next     word  -  M-d
         DELBL  Delete to beg of line -  C-u
         DELEL  Delete to end of line -  C-k [4]

         UPPER  Upper case the line   -  M-u
         LOWER  Lower case the line   -  M-l

         LKCMD  Invoke cmd prompt     -  C-v [FORM]
         SWMAP  Switch input keymap   -  C-^ (if compiled in)

    Special commands for use in textarea fields [FORM]:

         PASS!  Textarea external edit  - C-e C-e [4], C-x e
         PASS!  Insert file in textarea - C-x i
         PASS!  Grow textarea           - C-x g

Here is a little textarea for practice:
This text cannot be submitted. Normally lines like these would be part of a form that is filled out and then submitted. You can move around here and delete or add text as you like, using the Line-Editor keys.

    Advanced emacs-like commands:

        TPOS    Transpose characters                   -  C-t
        SETMARK Set mark at current position in line   -  C-@
        XPMARK  Exchange current position with mark    -  C-x C-x
        KILLREG Kill region between mark and position  -  C-x C-w [3]
        YANK    Insert text last killed (with KILLREG) -  C-y

## Notes

`C-key means Control+`key`. `C-x` key means first Control+`x`, then `key`. M-key means Meta+`key`, where Meta is a modifier that can be entered in a variety of ways:`

- First ESC, then the `key`. This doesn't work with all systems or on all connections, and if it does may not work for some keys (because the ESC character is also part of code sequences for "normal" function keys).
- Alt+`key`. This works if the terminal, console, or comm program is set up to interpret Alt as a modifier to send ESC. The Linux console acts like that by default for most keys; Kermit can be set up to do it, xterm can be for some keys, and so on. But the same caveats as for the previous item apply. This Alt mapping may also be possible, independent of the ESC character, for some keys in Lynx for DOS/i386 or for Win32.
- C-x `key`. Actually, currently the same internal table is used for Meta and the C-x prefix. Therefore all M-`key` combinations can also be typed as C-x `key`, and vice versa.

    [1] "next" means the character "under" a box or underline style cursor; it
        means "to the immediate right of" an I-beam (between characters) type
        cursor.
    [2] For entering strings in response to prompts (that is, when not editing
        form text fields), some keys have different actions: TAB tries to
        complete input based on previous response; Up-Arrow and Down-Arrow
        may offer previous response and next response, respectively, from
        recall buffer for some prompts.
    [3] C-w can only be used for editing functions if its default KEYMAP
        to REFRESH is changed.  This can be done in the lynx.cfg file,
        for example with the line "KEYMAP:^W:DO_NOTHING".  This also applies
        for other keys: as long as the key's action is mapped to REFRESH,
        either with an explicit KEYMAP in lynx.cfg or by default, the
        key's Line Editor binding is disabled.
    [4] These keys invoke special behavior when pressed twice in a row:
        C-e C-e calls the external editor for changing the text in a
        textarea (if available).  C-k C-k will move to the next link,
        so that all lines in a textarea can be conveniently cleared by
        repeating C-k.
    [5] Key is likely unavailable for Lynx, because it is interpreted by
        operating system, comm program, or curses library, or swallowed
        as part of escape sequence recognition.  Binding is provided for
        the benefit of those where this doesn't apply.
    [FORM] In form text fields, only.  Ignored by Line Editor elsewhere.

    More notes

       When a text input field, including a textarea line, is selected,
       the Line Editor functions get a first grab at the keys entered.
       If a key has no function defined in the Line Editor binding, it
       can either be ignored, or passed on for normal key command handling,
       where modifiers like C-x or Meta currently have no effect (see the
       Key Map Page accessible with the key K for current information).

## Additional details on other keys, for the curious (very much subject to change)

    Normal key action when used in form fields, subject to remapping
    with KEYMAP: [FORM (except Up-Arrow, Down-Arrow)]
                C-l [3], C-o, C-z [5], C-\ [5], C-] [5]
                C-n [emacskey], C-p [emacskey]
                Up-Arrow [2], Down-Arrow [2]
                Page-Up, Page-Down, F1, Back-Tab

    Normal key command with Meta modifier ignored when used in form fields,
    subject to remapping with KEYMAP: [FORM (except Up-Arrow, Down-Arrow)]
                M-C-l [3], M-C-o [!], M-C-z [5], M-C-\ [5], M-C-] [5]
                M-C-u, M-/, M-n
                M-Up-Arrow [2][!], M-Down-Arrow [2][!]
                M-Page-Up [!], M-Page-Down [!], M-Home, M-End

    Passed as specific command:
                         lynx action    duplicates by default
                         -----------    ---------------------
                M-C-d    NEXT_LINK      Down-Arrow
                M-C-e    EDITTEXTAREA   C-e C-e
                M-C-k    LPOS_NEXT_LINK (none, Down-Arrow suggested)
                M-e      EDITTEXTAREA   C-e C-e
                M-g      GROWTEXTAREA   (none, C-v $ suggested?)
                M-i      INSERTFILE     (none, C-v # suggested?)
                M-<      HOME           M-Home
                M->      END            M-End
                M-F1     DWIMHELP       F1
                M-Find   WHEREIS        C-v /
                M-Select NEXT           C-v n

    Duplicates function of other key(s):
                         edit action    duplicates
                         -----------    ----------
                M-C-b    BACKW          M-b, C-r
                M-C-f    FORWW          M-f
                M-C-n    FORWW          M-f
                M-C-p    BACKW          M-b, C-r
                M-C-r    BACKW          M-b, C-r
                M-a      BOL            C-a, Home, ...

    Modifier ignored, and duplicates function of other key(s):
                         edit action    duplicates
                         -----------    ----------
                M-C-a    BOL            C-a, Home, ...
                M-C-g    ABORT          C-g, ...
                M-TAB    TAB            C-i [!]
                M-C-j    ENTER          C-m, C-j, Enter / RETURN
                M-RETURN ENTER          C-m, C-j, Enter / RETURN
                M-C-y    YANK           C-y [!]
                M-C-^    SWMAP          C-^ [!] (if compiled in)
           M-Right-Arrow FORW           Right-Arrow [!], C-f
            M-Left-Arrow BACK           Left-Arrow [!],  C-b
                M-Do     TAB            C-i [!]

    Key completely ignored:
                C-q, Insert
                M-C-q, M-C-s [5], M-C-t, M-C-v, M-ESC
                M-C-@, M-C-_, M-Remove, M-Insert [!]

    Meta + other (mostly, printable character) keys:
                  Modifier ignored, or sequence swallowed (see [5]).
                M-@, M-E...M-Z [5], M-\, M-^, M-_ attempt to interpret
                  as 7-bit escape representation for character in 8-bit
                  control (C1) range if appropriate according to
                  Display Character Set.

    [emacskey] Normal key action subject to emacs_keys setting.
    [!] Action of key with Meta modifier follows action of key without
        Meta.  If you manage to enter the Meta key while Line-Editor
        Binding is not set to Bash-Like, and the unmodified binding
        is different from that listed here, M-<key> will act
        like <key>.