| rlfe (ReadLine Front-End) is a "universal wrapper" around readline. |
| You specify an interactive program to run (typically a shell), and |
| readline is used to edit input lines. |
| |
| There are other such front-ends; what distinguishes this one is that |
| it monitors the state of the inferior pty, and if the inferior program |
| switches its terminal to raw mode, then rlfe passes your characters |
| through directly. This basically means you can run your entire |
| session (including bash and terminal-mode emacs) under rlfe. |
| |
| FEATURES |
| |
| * Can use all readline commands (and history) in commands that |
| read input lines in "canonical mode" - even 'cat'! |
| |
| * Automatically switches between "readline-editing mode" and "raw mode" |
| depending on the terminal mode. If the inferior program invokes |
| readline itself, it will do its own line editing. (The inferior |
| readline will not know about rlfe, and it will have its own history.) |
| You can even run programs like 'emavs -nw' and 'vi' under rlfe. |
| The goal is you could leave rlfe always on without even knowing |
| about it. (We're not quite there, but it works tolerably well.) |
| |
| * The input line (after any prompt) is changed to bold-face. |
| |
| INSTALL |
| |
| The usual: ./configure && make && make install |
| |
| Note so far rlfe has only been tested on GNU Linux (Fedora Core 2) |
| and Mac OS X (10.3). |
| |
| This assumes readline header files and libraries are in the default |
| places. If not, you can create a link named readline pointing to the |
| readline sources. To link with libreadline.a and libhistory.a |
| you can copy or link them, or add LDFLAGS='-/path/to/readline' to |
| the make command-line. |
| |
| USAGE |
| |
| Just run it. That by default runs bash. You can run some other |
| command by giving it as command-line arguments. |
| |
| There are a few tweaks: -h allows you to name the history file, |
| and -s allows you to specify its size. It default to "emacs" mode, |
| but if the the environment variable EDITOR is set to "vi" that |
| mode is chosen. |
| |
| ISSUES |
| |
| * The mode switching depends on the terminal mode set by the inferior |
| program. Thus ssh/telnet/screen-type programs will typically be in |
| raw mode, so rlfe won't be much use, even if remote programs run in |
| canonical mode. The work-around is to run rlfe on the remote end. |
| |
| * Echo supression and prompt recognition are somewhat fragile. |
| (A protocol so that the o/s tty code can reliably communicate its |
| state to rlfe could solve this problem, and the previous one.) |
| |
| * See the intro to rlfe.c for more notes. |
| |
| * Assumes a VT100-compatible terminal, though that could be generalized |
| if anybody cares. |
| |
| * Requires ncurses. |
| |
| * It would be useful to integrate rlfe's logic in a terminal emulator. |
| That would make it easier to reposition the edit position with a mouse, |
| integrate cut-and-paste with the system clipboard, and more robustly |
| handle escape sequence and multi-byte characters more robustly. |
| |
| AUTHOR |
| |
| Per Bothner <per@bothner.com> |
| |
| LICENSE |
| |
| GPL. |