You are looking at historical revision 6280 of this page. It may differ significantly from its current revision.
A binding for the GNU readline library.
[procedure] (gnu-readline PROMPT)
Reads a line using the GNU readline() function and returns a string. PROMPT should also be a string.
Clears the history buffer.
[procedure] (gnu-readline-read-history FILENAME)
Reads the history buffer from the file FILENAME (or ~/.history if FILENAME is #f). Returns 0 on success.
[procedure] (gnu-readline-write-history FILENAME)
Writes the history buffer to the file FILENAME (or ~/.history if FILENAME is #f). Returns 0 on success.
[procedure] (gnu-readline-truncate-history FILENAME NUMLINES)
Truncates the history file FILENAME (or ~/.history if FILENAME is #f) to NUMLINES lines. Returns 0 on success.
[procedure] (gnu-history-install-file-manager FILENAME [NUMLINES])
If you also want to make the command history span sessions, add the following:
(gnu-history-install-file-manager (string-append (or (getenv "HOME") ".") "/.csi.history"))
By default this will save 1000 lines of history between sessions (it will prune the history file to 1000 lines at startup). For a different history size, pass the desired number of lines as the (optional) second argument to gnu-history-install-file-manager. If #f is passed in, no history-file-pruning will take place.
[procedure] (make-gnu-readline-port [PROMPT] [PROMPT2])
Returns an input-port that uses the GNU readline facility. If PROMPT is not given, the value returned by (repl-prompt) is used for generating the current prompt (see the Chicken manual for more details about repl-prompt). PROMPT2 is used when there are still unclosed parenthesis; if not given, an appropriate default is generated.
[procedure] (gnu-readline-set-bounce-ms TIME)
Changes the time that the cursor spends bouncing on the matching parenthesis - the default 500ms. To turn bouncing off completely, set to zero.
[procedure] (gnu-readline-parse-and-bind CONFIG)
Passes string CONFIG straight to the readline library for parsing (see the readline manual page for details). This extension supports static linking.
% csi -quiet >>> (require 'readline) >>> (current-input-port (make-gnu-readline-port "csi> ")) csi>
To get csi to keep a history use the following (in your ~/.csirc file):
(require 'readline 'regex) (current-input-port (make-gnu-readline-port)) (gnu-history-install-file-manager (string-append (or (getenv "HOME") ".") "/.csi.history"))
To set readline to behave somewhat like vi:
(gnu-readline-parse-and-bind "set editing-mode vi")
This extension requires GNU readline; you will receive errors if you use the BSD alternative libedit.
In particular, on OS X, Apple links /usr/lib/libreadline.dylib to libedit, causing the following error when you install this egg:
/usr/bin/ld: Undefined symbols: _history_truncate_file
To fix this, install a copy of GNU readline in /usr/local/lib or, if you're using MacPorts, symlink it:
ln -s /opt/local/lib/libreadline.dylib /usr/local/lib
Do not modify the readline link in /usr/lib.
About this egg
- Added support for static linking [felix]
- Ignores duplicate history entries [Thanks to Toby Butzon]
- Empty lines are not added to history [Thanks to Dan Muresan]
- Added parenthesis bouncing, a new auto-complete [Heath Johns]
- Export *completion-entry-function* to support autocomplete [Alejandro Forero Cuervo]
- prompt argument to make-gnu-readline-port is optional [felix]
- Replaced use of (end-of-file) with #!eof
- Checks more possible libraries to link with at build time [Thanks to Peter Bex]
- Adapted to new setup scheme.
- More features, changed license to GPL, links with either libtermcap or libncurses.
- Initial release
Copyright (c) 2002 Tony Garnock-Jones Copyright (c) 2006 Heath Johns (paren bouncing and auto-completion code) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA