Previous: Formatting Lisp Functions, Up: Internals

17.5.7.9 Hooks

Hooks are variables which contain Lisp functions (or lists of functions) which are called at various times. Calc defines a number of hooks that help you to customize it in various ways. Calc uses the Lisp function run-hooks to invoke the hooks shown below. Several other customization-related variables are also described here.

— Variable: calc-load-hook

This hook is called at the end of calc.el, after the file has been loaded, before any functions in it have been called, but after calc-mode-map and similar variables have been set up.

— Variable: calc-ext-load-hook

This hook is called at the end of calc-ext.el.

— Variable: calc-start-hook

This hook is called as the last step in a M-x calc command. At this point, the Calc buffer has been created and initialized if necessary, the Calc window and trail window have been created, and the “Welcome to Calc” message has been displayed.

— Variable: calc-mode-hook

This hook is called when the Calc buffer is being created. Usually this will only happen once per Emacs session. The hook is called after Emacs has switched to the new buffer, the mode-settings file has been read if necessary, and all other buffer-local variables have been set up. After this hook returns, Calc will perform a calc-refresh operation, set up the mode line display, then evaluate any deferred calc-define properties that have not been evaluated yet.

— Variable: calc-trail-mode-hook

This hook is called when the Calc Trail buffer is being created. It is called as the very last step of setting up the Trail buffer. Like calc-mode-hook, this will normally happen only once per Emacs session.

— Variable: calc-end-hook

This hook is called by calc-quit, generally because the user presses q or C-x * c while in Calc. The Calc buffer will be the current buffer. The hook is called as the very first step, before the Calc window is destroyed.

— Variable: calc-window-hook

If this hook is non-nil, it is called to create the Calc window. Upon return, this new Calc window should be the current window. (The Calc buffer will already be the current buffer when the hook is called.) If the hook is not defined, Calc will generally use split-window, set-window-buffer, and select-window to create the Calc window.

— Variable: calc-trail-window-hook

If this hook is non-nil, it is called to create the Calc Trail window. The variable calc-trail-buffer will contain the buffer which the window should use. Unlike calc-window-hook, this hook must not switch into the new window.

— Variable: calc-embedded-mode-hook

This hook is called the first time that Embedded mode is entered.

— Variable: calc-embedded-new-buffer-hook

This hook is called each time that Embedded mode is entered in a new buffer.

— Variable: calc-embedded-new-formula-hook

This hook is called each time that Embedded mode is enabled for a new formula.

— Variable: calc-edit-mode-hook

This hook is called by calc-edit (and the other “edit” commands) when the temporary editing buffer is being created. The buffer will have been selected and set up to be in calc-edit-mode, but will not yet have been filled with text. (In fact it may still have leftover text from a previous calc-edit command.)

— Variable: calc-mode-save-hook

This hook is called by the calc-save-modes command, after Calc's own mode features have been inserted into the Calc init file and just before the “End of mode settings” message is inserted.

— Variable: calc-reset-hook

This hook is called after C-x * 0 (calc-reset) has reset all modes. The Calc buffer will be the current buffer.

— Variable: calc-other-modes

This variable contains a list of strings. The strings are concatenated at the end of the modes portion of the Calc mode line (after standard modes such as “Deg”, “Inv” and “Hyp”). Each string should be a short, single word followed by a space. The variable is nil by default.

— Variable: calc-mode-map

This is the keymap that is used by Calc mode. The best time to adjust it is probably in a calc-mode-hook. If the Calc extensions package (calc-ext.el) has not yet been loaded, many of these keys will be bound to calc-missing-key, which is a command that loads the extensions package and “retypes” the key. If your calc-mode-hook rebinds one of these keys, it will probably be overridden when the extensions are loaded.

— Variable: calc-digit-map

This is the keymap that is used during numeric entry. Numeric entry uses the minibuffer, but this map binds every non-numeric key to calcDigit-nondigit which generally calls exit-minibuffer and “retypes” the key.

— Variable: calc-alg-ent-map

This is the keymap that is used during algebraic entry. This is mostly a copy of minibuffer-local-map.

— Variable: calc-store-var-map

This is the keymap that is used during entry of variable names for commands like calc-store and calc-recall. This is mostly a copy of minibuffer-local-completion-map.

— Variable: calc-edit-mode-map

This is the (sparse) keymap used by calc-edit and other temporary editing commands. It binds <RET>, <LFD>, and C-c C-c to calc-edit-finish.

— Variable: calc-mode-var-list

This is a list of variables which are saved by calc-save-modes. Each entry is a list of two items, the variable (as a Lisp symbol) and its default value. When modes are being saved, each variable is compared with its default value (using equal) and any non-default variables are written out.

— Variable: calc-local-var-list

This is a list of variables which should be buffer-local to the Calc buffer. Each entry is a variable name (as a Lisp symbol). These variables also have their default values manipulated by the calc and calc-quit commands; see Multiple Calculators. Since calc-mode-hook is called after this list has been used the first time, your hook should add a variable to the list and also call make-local-variable itself.