From 754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sun, 7 Apr 2024 13:41:34 -0500 Subject: new repository --- devdocs/elisp/mode-hooks.html | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 devdocs/elisp/mode-hooks.html (limited to 'devdocs/elisp/mode-hooks.html') diff --git a/devdocs/elisp/mode-hooks.html b/devdocs/elisp/mode-hooks.html new file mode 100644 index 00000000..11ccd28c --- /dev/null +++ b/devdocs/elisp/mode-hooks.html @@ -0,0 +1,18 @@ +

Mode Hooks

Every major mode command should finish by running the mode-independent normal hook change-major-mode-after-body-hook, its mode hook, and the normal hook after-change-major-mode-hook. It does this by calling run-mode-hooks. If the major mode is a derived mode, that is if it calls another major mode (the parent mode) in its body, it should do this inside delay-mode-hooks so that the parent won’t run these hooks itself. Instead, the derived mode’s call to run-mode-hooks runs the parent’s mode hook too. See Major Mode Conventions.

Emacs versions before Emacs 22 did not have delay-mode-hooks. Versions before 24 did not have change-major-mode-after-body-hook. When user-implemented major modes do not use run-mode-hooks and have not been updated to use these newer features, they won’t entirely follow these conventions: they may run the parent’s mode hook too early, or fail to run after-change-major-mode-hook. If you encounter such a major mode, please correct it to follow these conventions.

When you define a major mode using define-derived-mode, it automatically makes sure these conventions are followed. If you define a major mode “by hand”, not using define-derived-mode, use the following functions to handle these conventions automatically.

Function: run-mode-hooks &rest hookvars +
+

Major modes should run their mode hook using this function. It is similar to run-hooks (see Hooks), but it also runs change-major-mode-after-body-hook, hack-local-variables (when the buffer is visiting a file) (see File Local Variables), and after-change-major-mode-hook. The last thing it does is to evaluate any :after-hook forms declared by parent modes (see Derived Modes).

When this function is called during the execution of a delay-mode-hooks form, it does not run the hooks or hack-local-variables or evaluate the forms immediately. Instead, it arranges for the next call to run-mode-hooks to run them.

+
+
Macro: delay-mode-hooks body… +
+

When one major mode command calls another, it should do so inside of delay-mode-hooks.

This macro executes body, but tells all run-mode-hooks calls during the execution of body to delay running their hooks. The hooks will actually run during the next call to run-mode-hooks after the end of the delay-mode-hooks construct.

+
+
Variable: change-major-mode-after-body-hook +

This is a normal hook run by run-mode-hooks. It is run before the mode hooks.

+
Variable: after-change-major-mode-hook +

This is a normal hook run by run-mode-hooks. It is run at the very end of every properly-written major mode command.

+
+

+ Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
+ https://www.gnu.org/software/emacs/manual/html_node/elisp/Mode-Hooks.html +

+
-- cgit v1.2.3