From: Leo Liu Date: Thu, 23 Oct 2014 08:07:40 +0000 (+0800) Subject: * lisp/progmodes/cfengine.el (cfengine3-defun-full-re): New var. X-Git-Tag: emacs-25.0.90~2635^2~670 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a55a7307108d4c609f92f481b6f520becaa3454e;p=emacs.git * 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. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 715e132c432..c766b833118 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2014-10-23 Leo Liu + + * 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 * select.el: Use lexical-binding. diff --git a/lisp/progmodes/cfengine.el b/lisp/progmodes/cfengine.el index 8e43c812470..53d5be90cab 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"