Wiki
Download
Manual
Eggs
API
Tests
Bugs
show
edit
history
You can edit this page using
wiki syntax
for markup.
Article contents:
== Outdated egg! This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for [[/eggref/5/readline|the CHICKEN 5 version of this egg]], if it exists. If it does not exist, there may be equivalent functionality provided by another egg; have a look at the [[https://wiki.call-cc.org/chicken-projects/egg-index-5.html|egg index]]. Otherwise, please consider porting this egg to the current version of CHICKEN. [[tags: egg]] [[toc:]] == Readline An interface to the GNU readline library == Interface === Toplevel Commands ==== ,!! Evaluates the previous command. This command is never added to the history list, sorry: it broke the Matrix. (j/k It caused an infinite loop when entered twice in a row, so I just made it so that the previous command can never be {{,!!}}). ==== ,h-clear Clears the current session's history list. ==== ,h-save Enable/disable saving session history on exit It is enabled by default. ==== ,h-rec Enable/disable recording history for the current session It's enabled by default. ==== ,h-load Read file contents into the history list for the current session. Currently, there might be a bug (I haven't checked) where the file's name has an extra space added to it unless you enter it on a separate line: ,h-load ~/.csi_hist ==== ,vi-mode Sets the current editing mode to Vi. The equivalent function call would be: (readline#parse-and-bind "set editing-mode vi") ==== ,emacs-mode Sets the current editing mode to Emacs === Variables ==== version <type>string</type> The current version string. ==== session <type>kvlist</type> A Key-value list of settings that affect how some of the egg's functions behave for the current session. ===== load-history-file <type>boolean</type> Used by {{install-history-file}}. Set to {{#t}} by default; when set to {{#f}}, the history file will '''NOT''' be loaded at start-up. ===== save-history-on-exit <type>boolean</type> Used by {{install-history-file}}. Set to {{#t}} by default; when set to {{#f}}, the current session's history will '''NOT''' be saved to the history file on exit. ===== record-history <type>boolean</type> Used by {{,rl-rec}}. Set to {{#t}} by default; when set to {{#f}} it disables recording history for the current session. ===== verify-history-expansions <type>boolean</type> Settings this to true makes {{,rl-!!}} wait for you to press enter instead of inserting {{EOL}} automatically. === Functions ==== use-legacy-bindings <procedure>(use-legacy-bindings)</procedure> Exports symbols aliasing the v1.993 API to the current API. Use this function only if you have legacy code that uses the older API. Returns {{(void)}} on success; will cause an error on fail. Example: (readline#use-legacy-bindings) (current-input-port (make-gnu-readline-port)) ==== readline <procedure>(readline prompt1 [prompt2] )</procedure> Reads a line using the GNU readline() function and returns a string. Both arguments must be strings; {{prompt2}} is optional. ==== %signal-cleanup <procedure>(%signal-cleanup)</procedure> Sets the state of the underlying readline environment to a clean slate. '''NOTE''' Calls {{free()}}; so using this more than once consecutively may result in undefined behavior, as in a segfault. ==== clear-history <procedure>(clear-history)</procedure> Clears the history buffer. ==== read-history <procedure>(read-history [file])</procedure> Reads contents of the provided file into the history buffer. When called without file-name, reads from ~/.history. Returns 0 on success, or errno on fail. ==== write-history <procedure>(write-history [file])</procedure> Writes the history buffer to {{file}} or ~/.history when no {{file}} is provided. Returns {{0}} on success; {{errno}} on fail. '''USE AT YOUR OWN RISK!''' Using this may clobber simultaneous sessions. ==== append-history <procedure>(append-history [file])</procedure> Appends history buffer from the ''current'' session to {{file}}. Returns {{0}} on success; {{errno}} on fail. ==== history-newlines <procedure>(history-newlines)</procedure> Returns the number of entries from the ''current'' session. ==== truncate-history <procedure>(truncate-history [file] [n])</procedure> Truncates provided history {{file}} to a maximum of {{n}} lines. Returns {{0}} on win; {{errno}} on fail. ==== install-history-file <procedure>(install-history-file [homedir] [filename] [nlines])</procedure> If you also want to make the command history span sessions, add the following to your {{~/.csirc}}: {{(install-history-file)}} 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 history-install-file-manager. If {{#f}} or no second argument is passed in, no history-file-pruning will take place. '''NOTE''' Do not use this in conjunction with {{rlwrap}}. The maintainer did so and experience some very weird behavior from {{csi}}. ==== make-readline-port <procedure>(make-readline-port [prompt] [prompt2])</procedure> 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. ==== set-bounce-ms <procedure>(set-bounce-ms ms)</procedure> Changes the time that the cursor spends bouncing on the matching parenthesis - the default 500ms. To turn bouncing off completely, set it to {{0}}. ==== parse-and-bind <procedure>(parse-and-bind string)</procedure> Passes {{string}} straight to the readline library for parsing (see the readline manual page for details). ==== history-list <procedure>(history-list)</procedure> Returns the history list as a newline separated list. ==== history-position <procedure>(history-position [pos])</procedure> Returns the current ''offset'' within the history list. Passing ''pos'' sets the current ''offset''. ==== add-history <procedure>(%history-add% string)</procedure> Adds ''string'' to the history list. '''NOTE''' This function exists primarily for testing purposes. Returns {{void}} ==== remove-history <procedure>(%remove-history% offset)</procedure> Removes and '''frees''' the specified history entry and its associated memory. ==== eval-last-history-line <procedure>(eval-last-history-line [script])</procedure> The function behind {{,rl-!!}}. This function is '''not''' added to the history unless ''script'' is true. DO '''NOT''' pass ''script'' as true, unless you know what you are doing: it makes it possible to accidentally cause an infinite loop if the previous command was also {{eval-last-history-line #t}}!! '''NOTE''' The line does not have to be from the current session. Also, I don't know what happens when there isn't said line, but I reckon it'd cause a segfault; I'll see about fixing that in the 3.1 release. == Building This extension supports static linking. === Examples % csi -quiet #;1> (use readline) #;2> (current-input-port (make-readline-port)) #;3> To get csi to use readline by default, and to keep a history, use the following (in your ~/.csirc file): (use readline) (current-input-port (make-readline-port)) (install-history-file #f "/.csi.history") To set readline to behave somewhat like vi: (parse-and-bind "set editing-mode vi") == Installation problems This extension requires GNU readline. You will receive errors if you don't have the C header files for your readline installation or if you use some versions of the BSD readline alternative, libedit. === Mac OS X ==== 10.8/10.9 (Snow Leopard/Mavericks) Using bash... brew install readline readline_version=$(brew list readline --versions) readline_version=${readline_version##* } export CSC_OPTIONS="-I/usr/local/Cellar/readline/$readline_version/include -L/usr/local/Cellar/readline/$readline_version/lib -Wl,-flat_namespace,-undefined,suppress" unset readline_version brew reinstall chicken chicken-install readline ==== 10.6 (Snow Leopard) 10.6 ships with a much older version of readline than this egg expects. Fortunately, recent versions of {{readline}} in MacPorts work. {{readline @6.0.000_2+darwin}} is confirmed to work with 10.6.2. First install the {{readline}} package from MacPorts and then do this: export CSC_OPTIONS="-I/opt/local/include -L/opt/local/lib" ...before the {{chicken-install}}. If this doesn't work, try an additional export LIBRARY_PATH=/opt/local/lib ==== Pre-10.6 Mac OS X versions prior to 10.5 (Leopard) ship with an older {{readline}}, 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}}. === Debian GNU/Linux and derivatives (such as Ubuntu) In the case of Debian, you should probably install the package {{libreadline-dev}}, which is not installed by default. == About this egg === Author Tony Garnock-Jones Maintained by Alexej Magura === Version history ; 4.1.1 : Slight changes to the toplevel commands interface. ; 4.1.0 : Necessary updates in light of the changes in Chicken v4.10 as compared to Chicken v4.9. ; 4.0.0 : Version bump due to v3.0b2 being considered newer than v3.1.1. ; 3.1.1 : Removes `regex` as a dependency (patch). ; 3.1 : Removes `current-history-line' and renames all of the history related functions. ; 3.0 : Removes a lot of the stuff introduced by 2.0; adds toplevel-commands for convience. ; 3.0b2 : Fixed memleaks in history-list function and str_unquotd ; 3.0b1 : Made a few tweaks to the API to keep it in sync with the documentation I've written. ; 3.0b : Lots of API additions and a few changes; more efficient memory usage; removed libbsd as an optional depend ; 2.4 : Fixed setup file and version string. ; 2.3 : Reverted back to v1.993 setup file due to that fixes a bug with automated builds; added checks for libbsd ; 2.2 : Fixed more bugs with the detection of unclosed expressions ; 2.1 : Fixed a bug with legacy support where the aliases pointed to uninterned symbols. ; 2.0 : Fixed a bug with the unclosed-exp-prompt, where {{"<NEWLINE>}} did not count as an unclosed expression. Added more history functions and other cool stuff (see soon-to-appear changelog for details) ; 1.993 : fixed buggy build bugs caused by repeated build "fixes" (Jim Ursetto) ; 1.992 : fixed buggy fixes made by felix (thanks to ewfalor) ; 1.991 : fixed buggy setup script (thanks to ewfalor) ; 1.99 : Ported to Chicken 4 ; 1.97 : Fixed an old typo that could conceivably cause errors [elf] ; 1.96 : Fixed build process for real this time (ensuring tests for lib availability actually do set, etc.) [elf] ; 1.95 : Fixed build process [elf] ; 1.94 : Added backtraces to control-c breaks [elf] ; 1.93 : Fixed history so that multiple sessions dont clobber each other. [elf] ; 1.92 : Added proper signal handling [elf] ; 1.91 : Added support for static linking [felix] ; 1.9 : Ignores duplicate history entries [Thanks to Toby Butzon] ; 1.8 : Empty lines are not added to history [Thanks to Dan Muresan] ; 1.7 : Added parenthesis bouncing, a new auto-complete [Heath Johns] ; 1.6 : Export *completion-entry-function* to support autocomplete [Alejandro Forero Cuervo] ; 1.5 : prompt argument to make-gnu-readline-port is optional [felix] ; 1.4 : Replaced use of (end-of-file) with #!eof ; 1.3 : Checks more possible libraries to link with at build time [Thanks to Peter Bex] ; 1.2 : Adapted to new setup scheme. ; 1.1 : More features, changed license to GPL, links with either libtermcap or libncurses. ; 1.0 : Initial release === License 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
Description of your changes:
I would like to authenticate
Authentication
Username:
Password:
Spam control
What do you get when you add 1 to 10?