Term::ReadLine::Gnu#
Interactive line editing, command history, and configurable key bindings, backed by the GNU Readline library.
Install a readline instance, hand it a prompt, and you get the usual
bash-style editing: cursor motion, word-wise kill and yank, incremental
history search, filename completion, and an inputrc-controlled key
map. The module is a thick binding over libreadline.so — nearly one
hundred entry points expose readline’s C surface directly, organised
here by the same section names the GNU Readline manual uses.
A typical script calls new to obtain the readline object, then
readline in a loop with add_history after each accepted line.
Scripts that customise behaviour reach for rl_parse_and_bind and
rl_variable_bind for inputrc-style configuration, or install
completion by binding rl_completion_entry_function via the
Attribs tied hash.
Functions#
Constructors#
do_perl_setup#
Force the module’s deferred Perl-side setup (%Attribs tie, AUTOLOAD, constants) to run now.
gnu_new#
Construct a Term::ReadLine::Gnu object, wiring $NAME into rl_readline_name for inputrc dispatch.
gnu_readline_name#
Return the string "Term::ReadLine::Gnu" for the Term::ReadLine backend-probing protocol.
Basic readline#
rl_readline#
Display a prompt, read one line with full editing, and return the entered string (or undef on EOF).
rl_initialize#
Initialise (or re-initialise) readline’s internal state and re-read the inputrc. Returns 0 on success.
History#
add_history#
Append $line to the end of the history list so it shows up in later Up-arrow recalls and searches.
clear_history#
Delete every entry from the in-memory history list.
using_history#
Reset the history offset pointer back to the end of the list so previous_history starts from the newest entry.
where_history#
Return the current offset into the history list (the index a subsequent current_history would read).
history_set_pos#
Move the history cursor to $pos. Returns 1 on success, 0 if the position is out of range.
current_history#
Return the line at the current history cursor, or undef if the cursor is past the end.
history_get#
Return the history line at absolute $offset, or undef if no such entry exists.
previous_history#
Move the history cursor one step back and return that entry, or undef if already at the oldest line.
next_history#
Move the history cursor one step forward and return that entry, or undef if already past the newest line.
remove_history#
Delete the history entry at $which and return its text.
replace_history_entry#
Replace the history entry at $which with $line and return the previous text, or undef if out of range.
stifle_history#
Cap the history list at $max entries, or lift the cap when $max is undef. Returns the effective cap.
unstifle_history#
Remove any stifling cap on the history list and return the previous cap (or a negative value if none was set).
history_is_stifled#
Return non-zero if the history list is currently stifled (length-capped), zero otherwise.
history_total_bytes#
Return the total number of bytes occupied by all history lines in memory.
read_history_range#
Load lines from a history file into memory. Reads the whole file by default, or lines $from..$to when given.
write_history#
Write every entry in the current history list to $filename, overwriting the file. Returns 0 on success.
append_history#
Append the last $nelements entries of the in-memory history to $filename, preserving existing contents.
history_truncate_file#
Truncate $filename to at most $nlines of history, keeping the newest lines. Returns 0 on success.
history_expand#
Apply csh-style history expansion (!!, !$, ^old^new^) to $line. Returns (code, expanded).
Synopsis
my ($code, $expanded) = $term->history_expand($input);
**$code: 0 no change, 1 expanded, -1 error, 2 print-only**
history_search#
Search the history for an entry that contains $string, moving the cursor to the match. Returns the match offset or -1.
history_search_prefix#
Same as history_search, but matches only when the history entry starts with $string.
history_search_pos#
Search the history starting at absolute $pos (default: current cursor). Returns match offset or -1.
history_tokenize#
Split $text into tokens the way Bash history expansion does (word-splitting, quote awareness). Returns a list.
Display#
rl_redisplay#
Repaint the current line from readline’s in-memory buffer. Call this after you edit the buffer programmatically.
rl_forced_update_display#
Force a full repaint even if readline thinks nothing changed. Useful after background output corrupts the screen.
rl_on_new_line#
Tell readline that the cursor is now on a fresh line, so the next redisplay reprints the prompt.
rl_on_new_line_with_prompt#
Like rl_on_new_line, but asserts the prompt is already physically on screen — skip the reprint.
rl_reset_line_state#
Reset the display state so the next rl_redisplay assumes a clean line (no partial output pending).
rl_message#
Overlay $text as a status message in place of the prompt until rl_clear_message is called.
rl_clear_message#
Remove the status message installed by rl_message and restore the original prompt.
rl_crlf#
Emit a newline (CRLF) on the output stream, moving readline’s cursor tracking with it.
rl_ding#
Ring the terminal bell (or flash, depending on the bell-style inputrc setting).
rl_show_char#
Display character $c using readline’s usual control-character rendering (e.g. ^A for byte 1).
rl_save_prompt#
Save the current prompt and line state so it can be restored after a temporary message or sub-prompt.
rl_restore_prompt#
Restore the prompt and line state previously stashed by rl_save_prompt.
rl_set_prompt#
Change the prompt to $prompt for the next redisplay. Accepts \[…\] escapes to mark invisible regions.
rl_expand_prompt#
Parse a prompt string for invisible-character escapes and return its visible length.
Line editing#
rl_insert_text#
Insert $text into the line buffer at point, advancing the cursor past the inserted characters.
rl_delete_text#
Delete the characters of the current line in the half-open range [$start, $end). Returns the number removed.
rl_copy_text#
Return a copy of the line buffer in the half-open range [$start, $end) without modifying the buffer.
rl_kill_text#
Delete text in [$start, $end) and push it onto the kill ring so it becomes yankable with C-y.
rl_replace_line#
Replace the entire line buffer with $text. Passing a truthy $clear_undo also drops the undo list.
rl_push_macro_input#
Queue $macro as pending input so readline re-reads it character-by-character on the next key request.
Input#
rl_read_key#
Block until one key is available on rl_instream and return its byte value.
rl_getc#
Read one byte from $stream (defaulting to rl_instream), bypassing readline’s macro and timeout logic.
rl_stuff_char#
Inject one byte onto readline’s pending-input queue, as if the user had just pressed it.
rl_execute_next#
Arrange for the next call to rl_read_key to return $c without doing any terminal I/O.
rl_clear_pending_input#
Discard any input queued with rl_stuff_char or rl_execute_next.
rl_set_keyboard_input_timeout#
Set the multi-byte escape-sequence timeout in microseconds. Returns the previous value.
Terminal#
rl_prep_terminal#
Put the terminal into raw mode for line editing. Pass a truthy $meta_flag to enable 8-bit input.
rl_deprep_terminal#
Undo rl_prep_terminal and restore the terminal to cooked mode.
rl_reset_terminal#
Re-query termcap for $terminal_name (default $ENV{TERM}), refreshing readline’s idea of the terminal.
rl_set_screen_size#
Override readline’s idea of the window size with $rows and $cols.
rl_get_screen_size#
Return the terminal size readline is currently assuming as ($rows, $cols).
rl_resize_terminal#
Re-read the terminal size from the OS — typically called from a SIGWINCH handler.
rl_reset_screen_size#
Force readline to re-query TIOCGWINSZ and reset screenheight/screenwidth from scratch.
Character classification#
rl_alphabetic#
Return non-zero if byte $c is a word-constituent character under readline’s locale-aware rules.
Undo#
rl_begin_undo_group#
Open a new undo group so a sequence of edits collapses into one user-visible undo step.
rl_end_undo_group#
Close the undo group opened by rl_begin_undo_group.
rl_do_undo#
Perform one undo step. Returns 0 when no further undo is available.
rl_free_undo_list#
Drop the entire undo history for the current line.
rl_modifying#
Record the range [$start, $end) of the line buffer on the undo stack before you modify it by hand.
Parse and configuration#
rl_parse_and_bind#
Apply a single line of inputrc syntax ("\\C-x\\C-r": re-read-init-file, set editing-mode vi, …).
rl_read_init_file#
Load and apply an inputrc file. Defaults to $ENV{INPUTRC} or ~/.inputrc.
rl_variable_bind#
Set inputrc variable $name to the string $value (e.g. completion-ignore-case, On).
rl_variable_value#
Return the current value of inputrc variable $variable as a string, or undef if it is unknown.
rl_variable_dumper#
Print every inputrc variable and its current value to rl_outstream. Pass truthy $readable for inputrc syntax.
rl_function_dumper#
Print every named readline command and the keys bound to it. Pass truthy $readable for inputrc-style output.
rl_macro_dumper#
Print every key macro bound in the current keymap. Pass truthy $readable for inputrc-style output.
rl_get_termcap#
Look up the termcap capability named $cap and return its string value, or undef if not defined.
Signal handling#
rl_cleanup_after_signal#
Restore the terminal to cooked mode and reset signal handlers — call this from your own signal handler.
rl_free_line_state#
Free the partially-edited line buffer so a signal-handling exit leaves readline in a clean state.
rl_reset_after_signal#
Re-prepare the terminal and reinstall readline’s signal handlers after a SIGCONT or similar resumption.
rl_check_signals#
Give readline a chance to run any deferred signal handlers.
rl_echo_signal_char#
Echo the tty-configured character for signal $sig (e.g. ^C for SIGINT).
rl_pending_signal#
Return the number of a signal readline has observed but not yet dispatched, or 0 if none is pending.
rl_set_signals#
Install readline’s default signal handlers (for SIGINT, SIGTERM, SIGQUIT, SIGWINCH, SIGHUP, …).
rl_clear_signals#
Remove the signal handlers installed by rl_set_signals.
State save and restore#
rl_save_state#
Snapshot readline’s internal state and return an opaque handle you can later pass to rl_restore_state.
rl_restore_state#
Reinstall the state previously captured by rl_save_state.
Variable access (tied Attribs)#
rl_fetch_str#
Return readline’s string global at table slot $id (used by the tied %Attribs hash).
rl_store_str#
Write string $value into readline’s global at table slot $id (used by the tied %Attribs hash).
rl_store_rl_line_buffer#
Replace rl_line_buffer with $value and clamp rl_point/rl_end to the new length.
rl_fetch_int#
Return readline’s integer global at table slot $id, widening the native type to Perl IV.
rl_store_int#
Write integer $value into readline’s global at table slot $id, narrowing to the native type.
rl_store_iostream#
Set rl_instream ($id == 0) or rl_outstream ($id == 1) to the given FILE*.
rl_fetch_keymap#
Return the current executing-keymap ($id == 0) or binding-keymap ($id == 1) as an opaque pointer.
rl_store_function#
Install a Perl code reference as the callback backing function-pointer slot $id.
rl_fetch_function#
Return the Perl code reference currently stored in function-pointer slot $id, or undef.
rl_fetch_last_func#
Return a pointer (as an integer) to the last readline command function that ran.
Other Functions#
stub#
Stand-in for every XS entry when libreadline.so cannot be loaded — croaks with an install hint.