1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- Notes on Defining Commands and Modes
- Cris Perdue
- 8/9/82
- File: pe:dispatch.doc
- These notes should be of use to anyone wishing to customize EMODE
- by defining commands (keystrokes) or new modes. Most of the
- current mode and keystroke definitions are contained in
- PE:DISPCH.SL. Read it for examples and the keystroke-function
- associations.
- define_prefix_character(char, prompt)
- Char must be a single character, possibly with Control and/or
- Meta turned on. This is used for "true prefix characters" such
- as CTRL-X and META-X, not prefixes for obtaining control or meta
- through multiple keystrokes. Those are defined using
- AddToKeyList and EstablishCurrentMode.
- AddToKeyList(listname, char, opr)
- Adds a keystroke-operation association to a "key list", whose
- name, an atom, is passed in. The value of the atom must be the
- actual list. See the information on CharSequence, below, for the
- format of the chr parameter. The opr must be a function of no
- arguments. Its value is ignored. AddToKeyList may also be used
- to change an association in a keylist. Three existing lists are
- BasicDispatchList, ReadOnlyTextDispatchList, and
- TextDispatchList.
- BasicDispatchList includes commands that do not modify the buffer
- and do not have to do with manipulating text in any way.
- ReadOnlyTextDispatchList contains the commands that have to do
- with manipulating text, but that do not modify the buffer.
- This list is for support of read-only buffers.
- TextDispatchList contains commands that modify the buffer.
- CharSequence([char])
- This is a macro analogous to "char". Where char takes a single
- "character specification", CharSequence takes a sequence. Both
- char and CharSequence forms may be used in the specification of
- KeyLists. At present two characters is the maximum sequence, due
- to the implementation of the actual dispatcher used when the user
- types commands to EMODE.
- SetKey(char opr)
- It is generally a mistake to use this function directly, but it
- is used internally be EstablishCurrentMode to activate a keylist.
- Takes a character as produced by "char" or a character sequence
- as produced by "CharSequence" and installs it in the (global)
- command key lookup tables. The first character of any character
- sequence must be defined as a prefix character. If the specified
- character is upper case, the corresponding lower case character
- is also defined.
- Does not add the definition to any mode, nor permanently to the
- buffer, so use things like AddToKeyList at user level.
- MODES
- AlterBufferEnv(BufferName, 'ModeEstablishExpressions, Exprs)
- Every buffer carries around an environment, which includes a list
- of PSL expressions that set up its current mode. To change
- modes, alter the ModeEstblishExpressions part of the buffer's
- environment as shown. The expressions will be evaluated in
- reverse order (first one last) immediately and then whenever the
- mode is "established" with EstablishCurrentMode. See
- PE:DISPCH.SL for examples of modes, including FundamentalTextMode.
- Expressions of the form (SetKeys <variable>) set up the
- keystroke-operation associations in a keylist.
- EstablishCurrentMode()
- Activates the current mode with its keylists. Key definitions
- made by AddToKeyList don't take effect until this is performed
- even if the keylist changed is part of the current mode.
|