This document explains how to use abbreviations with JED. Overview ======== Abbreviations are possible only when `abbrev' mode is enabled. It can be toggled on and off on a buffer by buffer basis using the `abbrev_mode' command. If it is on, the word `abbrev' will appear on the status line. Each buffer can have its own abbreviation table or use the ``Global'' abbreviation table. If a table has not been defined for a given buffer, the ``Global'' table will be used. Typically, abbreviation tables are mode dependent and are usually assigned to the buffer when a mode is selected. An abbreviation table consists of abbreviations as well as a definition of characters that are allowed to appear in an abbreviation. By default, the characters that comprise a word are used. However, this is not always what is desired. For example, one might like to use abbreviations like `\be' for `\begin{equation}' in TeX mode. For this to happen, the `\' character should be included in the definition of a word. The examples below should shed more light on this concept. Using Abbreviations =================== Once abbreviations have been loaded into the editor (the mechanism is explained below), they can be used only if abbrev mode is turned on. This mode can be turned on or off by pressing `ESC X' and entering `abbrev_mode' at the prompt. It can also be turned on in a mode hook. After entering an abbreviation into the buffer, the abbreviation will be expanded if the next character inserted into the buffer immediately after the position of the abbreviation is NOT a member of the set of characters that is allowed in an abbreviation. Then the editor scans backward across the text until it finds a character that is NOT part of the set of special characters. Finally it attempts to expand the resulting abbreviation. For example, consider an abbreviation for TeX mode and assume that, when the abbreviation table was created, the characters `\', `a-z', `A-Z', and `0-9' were specified as the special set of characters that may be used in an abbreviation. This means that `\be' is a valid abbreviation but `@be' is not since `@' is not part of the above set. Suppose that `\be' is the abbreviation for `\begin{equation}' and `\be' is entered on a line as This is an equation.\be At this point nothing happens. However, if a SPACE is inserted, the editor will realize that the space is not part of the special abbreviation character set and scan back until another character NOT in the set is found. In this case, it will find a `.'. From this information, it looks up `\be' in the table, finds `\begin{equation}' and expands the line to look like: This is an equation.\begin{equation} However, if the line had looked like: This is an equation\be the expansion would have failed because the editor would have scanned back to the space character between `an' and `equation' and tried to expand `equation\be'. Although this sounds complex, it is trivial in practice. The Abbreviation File ====================== An abbreviation file is simply a file that contains the approrite S-Lang function calls to create abbreviation tables and assign abbreviations to the tables. It is loaded like any other S-Lang file, via `evalfile'. Simply turning abbreviations on via `abbrev_mode' is sufficient to cause JED to load the file. The variable `Abbrev_File' may be used to specify the name of the abbreviation file. If this variable is undefined, the file name defaults to `abbrevs.sl' on non-Unix systems and `.abbrevs.sl' on Unix. It is assumed to reside in the HOME directory. To specify a different name, e.g., `/usr/lib/jed/abbrev.sl', put variable Abbrev_File = "/usr/lib/jed/abbrev.sl"; in the JED startup file. Here is a simple file that is sufficient to create a global abbreviation table and a local table for TeX mode: % abbrevs.sl create_abbrev_table ("Global", ""); define_abbrev ("Global", "adn", "and"); define_abbrev ("Global", "amy", "amy.tch.harvard.edu"); create_abbrev_table ("TeX", "\\A-Za-z0-9"); define_abbrev ("TeX", "\\be", "\\begin{equation}"); define_abbrev ("TeX", "\\ee", "\\end{equation}"); Note that `create_abbrev_table' takes 2 parameters. The first parameter is simply the name of the table to be created and the second parameter represents the list of characters that are allowed to be in an abbreviation. If the second parameter is the empty string, JED's word definition willbe used. Also note that the backslash character must be typed twice for S-Lang to interpret it properly as a backslash character. The `define_abbrev' function takes 3 parameters: the name of the table, the abbreviation, and the expansion for the abbreviation. If the last character of the expansion is the backspace character (\010), then the character that triggered the expansion (e.g., a space) will not get inserted. For example, define_abbrev ("TeX", "\\s", "\\section{\010"); is preferable to define_abbrev ("TeX", "\\s", "\\section{"); There is really nothing special about an abbreviation file. The code that appears in it can also appear in the JED startup file. Usually the abbreviation mode is enabled in a hook. For example, to enable abbreviations for TeX mode, use a mode hook of the form: define tex_mode_hook () { set_abbrev_mode (1); } This way, when TeX mode is enabled, the abbreviation file will be automatically loaded if not already loaded and abbrev mode will be turned on. Creating Abbreviations ====================== There are two ways to create abbreviations: 1. Simply create an abbreviation file by hand. 2. Use the `define_abbreviation' function call. Here the latter method is explained. The `define_abbreviation' function uses the abbreviation table associated with the current buffer. If there is none explicitly associated with the buffer, the Global table will be used. If the table does not exist, it will be created. This function will prompt for an abbreviation. It may or may not prompt for an expansion. If a region is defined when `define_abbreviation' is called, the region will be taken as the expansion. This is useful if the expansion consists of of more than one word. If a region is not defined, the expansion will consist of the previous word as defined by the table. Only if that fails will the user be prompted for an expansion, e.g., this could happen if the Point is at the beginning of a line. Note that simply using `define_abbreviation' by itself does not save the abbreviation for future use. To save the abbreviations to the abbreviation file, use the function `save_abbrevs'. That is, press `ESC X' and enter `save_abbrevs' at the prompt. The editor will then prompt for a file name. Simply hitting RETURN at the prompt means that the `Abbrev_File' definition will be used. Enter a different filename to save them elsewhere. Note that entering a new file name will not change the value of `Abbrev_File'. Also, this function saves ALL currently defined abbreviation tables.