diff options
author | Leo Liu <sdl.web@gmail.com> | 2014-10-23 16:07:40 +0800 |
---|---|---|
committer | Leo Liu <sdl.web@gmail.com> | 2014-10-23 16:07:40 +0800 |
commit | a55a7307108d4c609f92f481b6f520becaa3454e (patch) | |
tree | 46bf5a17ad96c45dd2650b6ad6ed49eaaa7b0fbf | |
parent | 285ac870226e2ecc565925013e9ae8e7fe2657c0 (diff) |
* lisp/progmodes/cfengine.el (cfengine3-defun-full-re): New var.
(cfengine3-create-imenu-index): Use it and use ` ' for separation.
(cfengine3-current-defun): New function.
(cfengine3-mode): Set add-log-current-defun-function.
-rw-r--r-- | lisp/ChangeLog | 7 | ||||
-rw-r--r-- | lisp/progmodes/cfengine.el | 31 |
2 files changed, 29 insertions, 9 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 715e132c43..c766b83311 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2014-10-23 Leo Liu <sdl.web@gmail.com> + + * progmodes/cfengine.el (cfengine3-defun-full-re): New var. + (cfengine3-create-imenu-index): Use it and use ` ' for separation. + (cfengine3-current-defun): New function. + (cfengine3-mode): Set add-log-current-defun-function. + 2014-10-23 Stefan Monnier <monnier@iro.umontreal.ca> * select.el: Use lexical-binding. diff --git a/lisp/progmodes/cfengine.el b/lisp/progmodes/cfengine.el index 8e43c81247..53d5be90ca 100644 --- a/lisp/progmodes/cfengine.el +++ b/lisp/progmodes/cfengine.el @@ -817,6 +817,12 @@ This includes those for cfservd as well as cfagent.") (defconst cfengine3-defuns-regex (regexp-opt cfengine3-defuns t) "Regex to match the CFEngine 3.x defuns.") + (defconst cfengine3-defun-full-re (concat "^\\s-*" cfengine3-defuns-regex + "\\s-+\\(\\(?:\\w\\|\\s_\\)+\\)" ;type + "\\s-+\\(\\(?:\\w\\|\\s_\\)+\\)" ;id + ) + "Regexp matching full defun declaration (excluding argument list).") + (defconst cfengine3-class-selector-regex "\\([[:alnum:]_().&|!:]+\\)::") (defconst cfengine3-category-regex "\\([[:alnum:]_]+\\):") @@ -1299,19 +1305,25 @@ Use it by enabling `eldoc-mode'." ("::" . ?∷))) (defun cfengine3-create-imenu-index () - "A function for `imenu-create-index-function'." + "A function for `imenu-create-index-function'. +Note: defun name is separated by space such as `body +package_method opencsw' and imenu will replace spaces according +to `imenu-space-replacement' (which see)." (goto-char (point-min)) - (let ((re (concat "^\\s-*" cfengine3-defuns-regex - "\\s-+\\(\\(?:\\w\\|\\s_\\)+\\)" ;type - "\\s-+\\(\\(?:\\w\\|\\s_\\)+\\)" ;id - )) - (defuns ())) - (while (re-search-forward re nil t) - (push (cons (mapconcat #'match-string '(1 2 3) ".") + (let ((defuns ())) + (while (re-search-forward cfengine3-defun-full-re nil t) + (push (cons (mapconcat #'match-string '(1 2 3) " ") (copy-marker (match-beginning 3))) defuns)) (nreverse defuns))) +(defun cfengine3-current-defun () + "A function for `add-log-current-defun-function'." + (end-of-line) + (beginning-of-defun) + (and (looking-at cfengine3-defun-full-re) + (mapconcat #'match-string '(1 2 3) " "))) + ;;;###autoload (define-derived-mode cfengine3-mode prog-mode "CFE3" "Major mode for editing CFEngine3 input. @@ -1347,7 +1359,8 @@ to the action header." (setq-local beginning-of-defun-function #'cfengine3-beginning-of-defun) (setq-local end-of-defun-function #'cfengine3-end-of-defun) - (setq-local imenu-create-index-function #'cfengine3-create-imenu-index)) + (setq-local imenu-create-index-function #'cfengine3-create-imenu-index) + (setq-local add-log-current-defun-function #'cfengine3-current-defun)) ;;;###autoload (define-derived-mode cfengine2-mode prog-mode "CFE2" |