| Did you know ... | Search Documentation: |
| editline.pl -- BSD libedit based command line editing |
This library wraps the BSD libedit command line editor. The binding provides a high level API to enable command line editing on the Prolog user streams and low level predicates to apply the library on other streams and program the library.
el_wrap is det
el_wrap(+Options) is detuser_input
is connected to a terminal. This is the high level predicate used
for most purposes. The remainder of the library interface deals with
low level predicates that allows for applying and programming
libedit in non-standard situations.
The library is registered with ProgName set to swipl (see
el_wrap/4).
Options processed:
history or 100 if this flag is not defined.
enable_bracketed_paste(+Input) is det[private]-v or -e.
enable_word_motion(+Input) is det[private]ESC[1;5D and ESC[1;5C
for these key combinations (see packages/xpce/src/txt/terminal.c);
most xterm-compatible terminals use the same sequences. In vi
mode the binding is installed in both the insert keymap and the
command (alternative) keymap. Called after the el_setup/1 hooks
since those may switch editor.
This complements the readline emulation, which already binds these sequences in its initialisation.
enable_windows_eof(+Input) is det[private]^Z to send end-of-file on Windows, matching the platform
convention (compare with ^D on Unix). Routed through libedit's
built-in em-delete-or-list (emacs) or vi-list-or-eof (vi), both
of which return EOF on an empty line.
el_wrap(+ProgName:atom, +In:stream, +Out:stream, +Error:stream) is det
el_wrap(+ProgName:atom, +In:stream, +Out:stream, +Error:stream, +Options) is detforall(el_setup(Input), true) after the
input stream has been wrapped, the default Prolog commands have been
added and the default user setup file has been sourced using
el_source/2. It can be used to define and bind additional commands.
el_wrapped(+In:stream) is semidet
el_unwrap(+In:stream) is det
el_source(+In:stream, +File) is det$HOME/.editrc
el_bind(+In:stream, +Args) is detbind command with the given arguments. The
example below lists the current key bindings.
?- el_bind(user_input, ['-a']).
The predicate el_bind/2 is typically used to bind commands defined using el_addfn/4. Note that the C proxy function has only the last character of the command as context to find the Prolog binding. This implies we cannot both bind e.g., "^[?" and "?" to a Prolog function.
el_addfn(+Input:stream, +Command, +Help, :Goal) is detbind -a (see el_bind/2) and Goal is called of the
associated key-binding is activated. Goal is called as
call(:Goal, +Input, +Char, -Continue)
where Input is the input stream providing access to the editor, Char
the activating character and Continue must be instantated with one
of the known continuation codes as defined by libedit: norm,
newline, eof, arghack, refresh, refresh_beep, cursor,
redisplay, error or fatal. In addition, the following Continue
code is provided.
The registered Goal typically used el_line/2 to fetch the input line and el_cursor/2, el_insertstr/2 and/or el_deletestr/2 to manipulate the input line.
Normally el_bind/2 is used to associate the defined command with a keyboard sequence.
el_set(+Input:stream, +Action) is semidetel_set() and el_wset(). Currently provided values for
Action are:
el_wsey() EL_WORDCHARS, which is only provided
in some recent versions of libedit.ESC[200~ /
ESC[201~ before each prompt, which the default bindings
route through bracketed_paste/3. Disabling sends the matching
ESC[?2004l sequence immediately. enable_bracketed_paste/1
manages this based on the current editor; you normally do not
need to set it directly.This predicate fails silently of Action is not implemented. Illegal input raises in an exception.
el_get(+Input:stream, ?Property) is semidetel_get(). Currently supported Property terms:
emacs or vi, reflecting the current
keymap selected via el_bind/2 with -e / -v.
Any other Property raises a domain_error(editline_property, _).
el_line(+Input:stream, -Line) is detline(Before,
After), where Before is a string holding the text before the
cursor and After is a string holding the text after the cursor.
el_cursor(+Input:stream, +Move:integer) is det
el_insertstr(+Input:stream, +Text) is det
el_deletestr(+Input:stream, +Count) is det
el_history(+In:stream, ?Action) is dethistory() from libedit. Supported actions are:
el_history() using H_GETSIZE,
which returns the number of currently saved events. The number
of saved events may be computed from first and last or
using el_history_events/2.first is the most recent event and
last the oldest.history() API, retrieving a numbered event without changing
the current notion.
el_history_events(+In:stream, -Events:list(pair)) is detNum-String, where
Num is the event number and String is the associated string
without terminating newline.
el_add_history(+In:stream, +Line:text) is det
el_read_history(+In:stream, +File:file) is det
el_write_history(+In:stream, +File:file) is det
el_version(-Version)LIBEDIT_MAJOR*10000 + LIBEDIT_MINOR*100.
The version is generated from the include file histedit.h,
which implies that the actual version of the shared library may be
different.
prolog:history(+Input, ?Action) is semidet[multifile]
compat_read_history(+Input, +File) is det[private]swipl-win.exe before migrating to SDL.
bind_electric(+Input) is det[private]
electric(+Input, +Char, -Continue) is det[private]
complete(+Input, +Char, -Continue) is det[private]complete editline function. The
predicate is called with three arguments, the first being the input
stream used to access the libedit functions and the second the
activating character. The last argument tells libedit what to do.
Consult el_set(3), EL_ADDFN for details.
show_completions(+Input, +Char, -Continue) is det[private]
common_competion(+Alternatives, -Common) is det[private]
common_prefix(+Atoms, -Common) is det[private]
common_prefix(+A1, +A2, -Prefix:string) is det[private]
list_alternatives(+Alternatives)[private]
isearch_history(+Input, +Char, -Continue) is det[private]
paste_quoted(+Input, +Char, -Continue) is det[private]
bracketed_paste(+Input, +Char, -Continue) is det[private]The terminal is asked to enable bracketed paste mode (ESC[?2004h) from the C layer each time a prompt is issued.
collect_paste(+Input, +RevAcc, -RevResult) is det[private]
paste_char(+Raw, -Char) is det[private]