Next: S-Lang Programming Hints (Debugging) Up: Customization Previous: Predefined Variables Contents

## Hooks

A hook is a user defined function that jed calls under certain conditions which allow the user to modify default actions. For example, when jed starts up it looks for the existence of a user defined function `command_line_hook`. If this function exists, jed calls the function. What the function does is completely arbitrary and is left to the discretion of the user. The startup file, `site.sl`, defines such a function which reads in the files listed on the command line. It is also this function which loads the `jed.rc` startup file. Unlike the other hooks, this one must be present in the file `site.sl` since it is the only file loaded before calling the hook.

After the startup files are loaded, jed calls the hook `jed_startup_hook` immediately before entering the main editor loop. This hook is useful to modify certain data structures which may not have existed when the startup files were loaded.

In addition to the above hooks, jed currently also looks for:

`suspend_hook`
function to be executed before suspending

`resume_hook`
function that gets carried out after suspension

`exit_hook`
gets executed before exiting jed

`mode_hook`
sets buffer mode based on filename extension

`find_file_hook`
called before file is read into a buffer. It currently checks for presence of autosave file and warns user if it is more recent than file.

See `site.sl` for explicit examples of the above hooks.

Another useful hook is `is_paragraph_separator`. This hook is called when jed searches for the beginning or end of a paragraph. This search is performed by all paragraph formatting functions as well as the forward and backward paragraph movement commands. As jed performs the search, it moves from one line to another testing the line to see if it separates a paragraph. The function of the hook is to make this decision and return zero if the line does not separate paragraphs or return one if it does. The default value of this hook may be written in S-Lang as

         define is_paragraph_separator ()
         {
           bol ();
           if (looking_at ("\\")) return 1;
           if (looking_at ("%")) return 1;
           skip_white(); eolp ();
         }

A related hook called after a paragraph is formatted is `format_paragraph_hook`. This hook is only called if either `format_paragraph` or `narrow_paragraph` is called with a prefix digit argument. For example, `format_paragraph` is bound to ESC Q. Simply pressing this key sequence will call `format_paragraph` but `format_paragraph_hook` will not be called. However, pressing ESC 1 followed by ESC Q will result in a call to `format_paragraph_hook`. Currently, this hook simply justifies the paragraph. That is, it fills each line in the paragraph such that the line ends at the right margin, which is defined by the `WRAP` variable.

Next: S-Lang Programming Hints (Debugging) Up: Customization Previous: Predefined Variables Contents