Version 14 of eltclsh

Updated 2013-02-28 18:57:39 by pooryorick
 What: eltclsh
 Where: http://freshmeat.net/projects/eltclsh/ (out of date, refers to v1.5)
        http://www.openrobots.org/wiki/eltclsh
        http://homepages.laas.fr/mallet/soft/shell/eltclsh
 Description: editline tcl shell is an interactive shell for the Tcl
        language.  It provides command line editing, history browsing,
        and variable/command completion, thanks to editline features.
        The completion engine is programmable, and comes with built
        in completion for all of Tk.  The package also includes elwish,
        an interactive interpreter for Tcl/Tk.  
        Currently at version 1.12.
 Updated: 05/2012
 Contact: See web site

Summary

aspect: The eltclsh distribution packages eltclsh as an extension, which the binary simply package requires into the interpreter it creates. The extension includes a signal handler and the editline binding itself.

build

on FreeBSD: need gmake, and to touch eltclsh.1.cat in the unpacked eltclsh-1.9 directory; before running ./configure --with-tk=no;gmake install clean


Build for a Tcl/Tk8.5 system:

  • eltclsh has proved to operate correctly.
  • elwish did not show up the initial Tk window (eltclsh with package require Tk does).

Upon a sample build session of eltcsh with editline a link error (missing lXss) has been encountered (on a debian-based machine). This could be resolved by installing libxss-dev.

Use

To get eltclsh as the completion engine for your standard tclsh in interactive mode (similar to how it is done on tclreadline), simply add something like the following to your .tclshrc:

if {![file exists /usr/local/share/eltcl/pkgIndex.tcl] || [catch {
    lappend ::auto_path /usr/local/share/eltcl
    package require eltclsh
    set ::el::prompt1 {list tclsh [info patchlevel] %}
    set ::el::prompt2 {list tclsh ...... >}
    interactive
    exit
}]} {
    puts "Failed to load eltclsh!"
}

.. at this point you could try to fall back on tclreadline, or the standard tclsh prompt (which is default behaviour with the above code). The "interactive" command is eltclsh's equivalent of "::tclreadline::Loop". Loading eltclsh in this manner has at least a few advantages: you don't have to retrain your fingers from typing "tclsh", and the same mechanism can work against multiple tclsh versions, without having to link multiple "eltclsh" binaries.

The eltclsh code is quite tidy and straightforward. Noteworthy is tools/complete.tcl, which sets up a variable ::el::completionPatterns which it uses to do argument completion of core Tcl commands.