diff options
| author | Lute Kamstra | 2005-03-31 14:54:46 +0000 |
|---|---|---|
| committer | Lute Kamstra | 2005-03-31 14:54:46 +0000 |
| commit | 66e181ad2ead63cec125aaf560b924857e35e04d (patch) | |
| tree | 89e6baa159510eac6888b61dff44167d6ffb3b31 | |
| parent | 2a3a044ce6b81e261862c1bebb8ce560e344bb91 (diff) | |
| download | emacs-66e181ad2ead63cec125aaf560b924857e35e04d.tar.gz emacs-66e181ad2ead63cec125aaf560b924857e35e04d.zip | |
(define-generic-mode): Add debug declaration. Add defcustom for the
mode hook.
(generic-mode-internal): Use run-mode-hooks.
| -rw-r--r-- | lisp/ChangeLog | 9 | ||||
| -rw-r--r-- | lisp/generic.el | 50 |
2 files changed, 40 insertions, 19 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b9779b18bfd..cd2043e3f3a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,12 @@ | |||
| 1 | 2005-03-31 Lute Kamstra <lute@gnu.org> | ||
| 2 | |||
| 3 | * emacs-lisp/easy-mmode.el (easy-mmode-define-global-mode) | ||
| 4 | (define-minor-mode): Call custom-current-group at load-time. | ||
| 5 | |||
| 6 | * generic.el (define-generic-mode): Add debug declaration. | ||
| 7 | Add defcustom for the mode hook. | ||
| 8 | (generic-mode-internal): Use run-mode-hooks. | ||
| 9 | |||
| 1 | 2005-03-31 Kim F. Storm <storm@cua.dk> | 10 | 2005-03-31 Kim F. Storm <storm@cua.dk> |
| 2 | 11 | ||
| 3 | * mouse.el (mouse-1-click-follows-link): Increase to 450 ms. | 12 | * mouse.el (mouse-1-click-follows-link): Increase to 450 ms. |
diff --git a/lisp/generic.el b/lisp/generic.el index e20f73688c7..22fc8b012f3 100644 --- a/lisp/generic.el +++ b/lisp/generic.el | |||
| @@ -217,58 +217,70 @@ FUNCTION-LIST is a list of functions to call to do some | |||
| 217 | additional setup. | 217 | additional setup. |
| 218 | 218 | ||
| 219 | See the file generic-x.el for some examples of `define-generic-mode'." | 219 | See the file generic-x.el for some examples of `define-generic-mode'." |
| 220 | (let* ((name-unquoted (if (eq (car-safe mode) 'quote) ; Backward compatibility. | 220 | (declare (debug (sexp def-form def-form def-form form def-form &optional stringp))) |
| 221 | (eval mode) | 221 | |
| 222 | mode)) | 222 | ;; Backward compatibility. |
| 223 | (name-string (symbol-name name-unquoted)) | 223 | (when (eq (car-safe mode) 'quote) |
| 224 | (setq mode (eval mode))) | ||
| 225 | (let* ((mode-name (symbol-name mode)) | ||
| 224 | (pretty-name (capitalize (replace-regexp-in-string | 226 | (pretty-name (capitalize (replace-regexp-in-string |
| 225 | "-mode\\'" "" name-string)))) | 227 | "-mode\\'" "" mode-name))) |
| 228 | (mode-hook (intern (concat mode-name "-hook")))) | ||
| 226 | 229 | ||
| 227 | `(progn | 230 | `(progn |
| 228 | ;; Add a new entry. | 231 | ;; Add a new entry. |
| 229 | (add-to-list 'generic-mode-list ,name-string) | 232 | (add-to-list 'generic-mode-list ,mode-name) |
| 230 | 233 | ||
| 231 | ;; Add it to auto-mode-alist | 234 | ;; Add it to auto-mode-alist |
| 232 | (dolist (re ,auto-mode-list) | 235 | (dolist (re ,auto-mode-list) |
| 233 | (add-to-list 'auto-mode-alist (cons re ',name-unquoted))) | 236 | (add-to-list 'auto-mode-alist (cons re ',mode))) |
| 237 | |||
| 238 | (defcustom ,mode-hook nil | ||
| 239 | ,(concat "Hook run when entering " pretty-name " mode.") | ||
| 240 | :type 'hook | ||
| 241 | :group (or (custom-current-group) | ||
| 242 | ',(intern (replace-regexp-in-string | ||
| 243 | "-mode\\'" "" mode-name)))) | ||
| 234 | 244 | ||
| 235 | (defun ,name-unquoted () | 245 | (defun ,mode () |
| 236 | ,(or docstring | 246 | ,(or docstring |
| 237 | (concat pretty-name " mode.\n" | 247 | (concat pretty-name " mode.\n" |
| 238 | "This a generic mode defined with `define-generic-mode'.")) | 248 | "This a generic mode defined with `define-generic-mode'.")) |
| 239 | (interactive) | 249 | (interactive) |
| 240 | (generic-mode-internal ',name-unquoted ,comment-list ,keyword-list | 250 | (generic-mode-internal ',mode ,comment-list ,keyword-list |
| 241 | ,font-lock-list ,function-list))))) | 251 | ,font-lock-list ,function-list))))) |
| 242 | 252 | ||
| 243 | ;;;###autoload | 253 | ;;;###autoload |
| 244 | (defun generic-mode-internal (mode comments keywords font-lock-list funs) | 254 | (defun generic-mode-internal (mode comment-list keyword-list |
| 255 | font-lock-list function-list) | ||
| 245 | "Go into the generic mode MODE." | 256 | "Go into the generic mode MODE." |
| 246 | (let* ((modename (symbol-name mode)) | 257 | (let* ((mode-name (symbol-name mode)) |
| 247 | (generic-mode-hooks (intern (concat modename "-hook"))) | ||
| 248 | (pretty-name (capitalize (replace-regexp-in-string | 258 | (pretty-name (capitalize (replace-regexp-in-string |
| 249 | "-mode\\'" "" modename)))) | 259 | "-mode\\'" "" mode-name))) |
| 260 | (mode-hook (intern (concat mode-name "-hook")))) | ||
| 250 | 261 | ||
| 251 | (kill-all-local-variables) | 262 | (kill-all-local-variables) |
| 252 | 263 | ||
| 253 | (setq major-mode mode | 264 | (setq major-mode mode |
| 254 | mode-name pretty-name) | 265 | mode-name pretty-name) |
| 255 | 266 | ||
| 256 | (generic-mode-set-comments comments) | 267 | (generic-mode-set-comments comment-list) |
| 257 | 268 | ||
| 258 | ;; Font-lock functionality. | 269 | ;; Font-lock functionality. |
| 259 | ;; Font-lock-defaults is always set even if there are no keywords | 270 | ;; Font-lock-defaults is always set even if there are no keywords |
| 260 | ;; or font-lock expressions, so comments can be highlighted. | 271 | ;; or font-lock expressions, so comments can be highlighted. |
| 261 | (setq generic-font-lock-keywords | 272 | (setq generic-font-lock-keywords |
| 262 | (append | 273 | (append |
| 263 | (when keywords | 274 | (when keyword-list |
| 264 | (list (generic-make-keywords-list keywords font-lock-keyword-face))) | 275 | (list (generic-make-keywords-list keyword-list |
| 276 | font-lock-keyword-face))) | ||
| 265 | font-lock-list)) | 277 | font-lock-list)) |
| 266 | (setq font-lock-defaults '(generic-font-lock-keywords nil)) | 278 | (setq font-lock-defaults '(generic-font-lock-keywords nil)) |
| 267 | 279 | ||
| 268 | ;; Call a list of functions | 280 | ;; Call a list of functions |
| 269 | (mapcar 'funcall funs) | 281 | (mapcar 'funcall function-list) |
| 270 | 282 | ||
| 271 | (run-hooks generic-mode-hooks))) | 283 | (run-mode-hooks mode-hook))) |
| 272 | 284 | ||
| 273 | ;;;###autoload | 285 | ;;;###autoload |
| 274 | (defun generic-mode (mode) | 286 | (defun generic-mode (mode) |
| @@ -392,7 +404,7 @@ This hook will be installed if the variable | |||
| 392 | 404 | ||
| 393 | (defun generic-mode-ini-file-find-file-hook () | 405 | (defun generic-mode-ini-file-find-file-hook () |
| 394 | "Hook function to enter Default-Generic mode automatically for INI files. | 406 | "Hook function to enter Default-Generic mode automatically for INI files. |
| 395 | Done if the first few lines of a file in Fundamental mode look like an | 407 | Done if the first few lines of a file in Fundamental mode look like an |
| 396 | INI file. This hook is NOT installed by default." | 408 | INI file. This hook is NOT installed by default." |
| 397 | (and (eq major-mode 'fundamental-mode) | 409 | (and (eq major-mode 'fundamental-mode) |
| 398 | (save-excursion | 410 | (save-excursion |