aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLute Kamstra2005-03-31 14:54:46 +0000
committerLute Kamstra2005-03-31 14:54:46 +0000
commit66e181ad2ead63cec125aaf560b924857e35e04d (patch)
tree89e6baa159510eac6888b61dff44167d6ffb3b31
parent2a3a044ce6b81e261862c1bebb8ce560e344bb91 (diff)
downloademacs-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/ChangeLog9
-rw-r--r--lisp/generic.el50
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 @@
12005-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
12005-03-31 Kim F. Storm <storm@cua.dk> 102005-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
217additional setup. 217additional setup.
218 218
219See the file generic-x.el for some examples of `define-generic-mode'." 219See 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.
395Done if the first few lines of a file in Fundamental mode look like an 407Done if the first few lines of a file in Fundamental mode look like an
396INI file. This hook is NOT installed by default." 408INI 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