# The Tecla command-line editing library.

The tecla library provides UNIX and LINUX programs with interactive command line editing facilities, similar to those of the UNIX tcsh shell. In addition to simple command-line editing, it supports recall of previously entered command lines, TAB completion of file names or other tokens, and in-line wild-card expansion of filenames. The internal functions which perform file-name completion and wild-card expansion are also available externally for optional use by programs.

In addition, the library includes a path-searching module. This allows an application to provide completion and lookup of files located in UNIX style paths. Although not built into the line editor by default, it can easily be called from custom tab-completion callback functions. This was originally conceived for completing the names of executables and providing a way to look up their locations in the user's PATH environment variable, but it can easily be asked to look up and complete other types of files in any list of directories.

Note that special care has been taken to allow the use of this library in threaded programs. The option to enable this is discussed in the Makefile, and specific discussions of thread safety are presented in the included man pages.

The current version is version 1.6.2. This may be obtained from:

http://www.astro.caltech.edu/~mcs/tecla/libtecla-1.6.2.tar.gz

For the sake of automated scripts, the following URL always points to the latest version. Note that the version number can be found in the README file.

http://www.astro.caltech.edu/~mcs/tecla/libtecla.tar.gz

The library is distributed under a permissive non-copyleft free software license (the X11 license with the name of the copyright holder changed). This is compatible with, but not as restrictive as the GNU GPL.

## Release notes

The list of major changes that accompany each new release can be found here.

## Modifications

The gory details of changes in the latest and previous versions of the library can be found here.

## Library documentation

The following are html versions of the libtecla man pages:

- tecla - Documentation for users of programs which use gl_get_line().
- libtecla - A programmers introduction to the tecla library.
- gl_get_line - The interactive line-input function.
- gl_io_mode - Using gl_get_line() in a non-blocking fashion.
- cpl_complete_word - The word (eg. filename) completion function.
- ef_expand_file - The filename expansion function.
- pca_lookup_file - A directory-list based filename lookup and completion module.
- enhance - A program that adds command-line editing to third party programs.

## Portability

In principle, the standard version of the library should compile without any problems on any UNIX or UNIX like system. So far it has been reported to work on the following systems:

      Sun Solaris 2.5,2.6,7,8,9 with any of gcc, Sun C, or g++.
      Mandrake Linux 7.1 etc.., gcc
      Red Hat Linux 7 etc.., gcc
      Fedora Core 1, gcc
      Suse Linux 6.4, gcc
      IBM AIX 4.3.3, gcc
      HP-UX 10.20, HP-UX 11, gcc, c89
      FreeBSD, gcc
      Alpha OSF1, cc, gcc
      Mac OS X
      Cygwin (running under Windows)
      QNX
      NetBSD 1.6, 386, gcc
      SGI IRIX 6.5
      Linux in general

There haven't been many reports concerning the POSIX reentrant version, so the absence of any of the above from the following list of systems on which the reentrant version is known to work, shouldn't be taken as an indication that the reentrant version doesn't work.

      Sun Solaris 2.5,2.6,7,8,9 with any of gcc, Sun C, or g++.
      Mandrake Linux, gcc
      RedHat Linux, gcc
      Fedora Core, gcc
      SuSE Linux, gcc
      HP-UX 11, gcc
      IBM AIX 4.3.3, gcc
      Alpha OSF1, cc
      SGI IRIX 6.5
      Linux in general

The only system that is known to have issues with the reentrant version of the library is SCO UnixWare 7.1.1. The problem is in the system provided signal.h, which breaks when POSIX_C_SOURCE is defined. It has been reported that this can be "fixed" by editing signal.h.

If you compile the library on a system that isn't mentioned above, please send E-mail to mcs@astro.caltech.edu.

Martin Shepherd (11-Jun-2012)