Mercurial > emacs
changeset 72764:88fd4983fe78
(conf-space-mode): Use hack-local-variables-hook instead of calling
hack-local-variables.
(conf-space-keywords-override): New variable.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 09 Sep 2006 23:20:39 +0000 |
parents | 0a277f9db761 |
children | d46f55287c80 |
files | lisp/textmodes/conf-mode.el |
diffstat | 1 files changed, 39 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/textmodes/conf-mode.el Sat Sep 09 22:36:01 2006 +0000 +++ b/lisp/textmodes/conf-mode.el Sat Sep 09 23:20:39 2006 +0000 @@ -442,6 +442,9 @@ (setq imenu-generic-expression '(("Parameters" "^[ \t]*\\(.+?\\)[=: \t]" 1)))) +(defvar conf-space-keywords-override nil + "Value to be put in `conf-space-keywords' after `conf-space-mode'.") + ;;;###autoload (define-derived-mode conf-space-mode conf-unix-mode "Conf[Space]" "Conf Mode starter for space separated conf files. @@ -465,34 +468,44 @@ add /dev/audio desktop add /dev/mixer desktop" (conf-mode-initialize "#" 'conf-space-font-lock-keywords) - (set (make-local-variable 'conf-assignment-sign) - nil) - ;; This doesn't seem right, but the next two depend on conf-space-keywords - ;; being set, while after-change-major-mode-hook might set up imenu, needing - ;; the following result: - (hack-local-variables-prop-line) - (hack-local-variables) + (make-local-variable 'conf-assignment-sign) + (setq conf-assignment-sign nil) (cond (current-prefix-arg - (set (make-local-variable 'conf-space-keywords) - (if (> (prefix-numeric-value current-prefix-arg) 0) - (read-string "Regexp to match keywords: ")))) - (conf-space-keywords) + (make-local-variable 'conf-space-keywords-override) + ;; By setting conf-space-keywords-override + ;; we arrange for the hook function below + ;; to override any value of conf-space-keywords + ;; specified in a local variables list. + (setq conf-space-keywords-override + (if (> (prefix-numeric-value current-prefix-arg) 0) + (read-string "Regexp to match keywords: ")))) (buffer-file-name - (set (make-local-variable 'conf-space-keywords) - (assoc-default buffer-file-name conf-space-keywords-alist - 'string-match)))) - (set (make-local-variable 'conf-assignment-regexp) - (if conf-space-keywords - (concat "\\(?:" conf-space-keywords "\\)[ \t]+.+?\\([ \t]+\\|$\\)") - ".+?\\([ \t]+\\|$\\)")) - (setq imenu-generic-expression - `(,@(cdr imenu-generic-expression) - ("Parameters" - ,(if conf-space-keywords - (concat "^[ \t]*\\(?:" conf-space-keywords - "\\)[ \t]+\\([^ \t\n]+\\)\\(?:[ \t]\\|$\\)") - "^[ \t]*\\([^ \t\n[]+\\)\\(?:[ \t]\\|$\\)") - 1)))) + ;; By setting conf-space-keywords directly, + ;; we let a value in the local variables list take precedence. + (make-local-variable 'conf-space-keywords) + (setq conf-space-keywords + (assoc-default buffer-file-name conf-space-keywords-alist + 'string-match)))) + ;; This is stuff to be done after parsing the local variables, once + ;; any local variable spec fo rconf-space-keywords is already in effect. + (push (lambda () + (when conf-space-keywords-override + (setq conf-space-keywords + conf-space-keywords-override)) + (make-local-variable 'conf-assignment-regexp) + (setq conf-assignment-regexp + (if conf-space-keywords + (concat "\\(?:" conf-space-keywords "\\)[ \t]+.+?\\([ \t]+\\|$\\)") + ".+?\\([ \t]+\\|$\\)")) + (setq imenu-generic-expression + `(,@(cdr imenu-generic-expression) + ("Parameters" + ,(if conf-space-keywords + (concat "^[ \t]*\\(?:" conf-space-keywords + "\\)[ \t]+\\([^ \t\n]+\\)\\(?:[ \t]\\|$\\)") + "^[ \t]*\\([^ \t\n[]+\\)\\(?:[ \t]\\|$\\)") + 1)))) + hack-local-variables-hook)) ;;;###autoload (define-derived-mode conf-colon-mode conf-unix-mode "Conf[Colon]"