# HG changeset patch # User Richard M. Stallman # Date 1157844039 0 # Node ID 88fd4983fe7849d3773ab8117f52dc800e2ba134 # Parent 0a277f9db7613066b953b216d8dd33aa3baf9947 (conf-space-mode): Use hack-local-variables-hook instead of calling hack-local-variables. (conf-space-keywords-override): New variable. diff -r 0a277f9db761 -r 88fd4983fe78 lisp/textmodes/conf-mode.el --- 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]"