aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeo Liu2014-10-23 16:07:40 +0800
committerLeo Liu2014-10-23 16:07:40 +0800
commita55a7307108d4c609f92f481b6f520becaa3454e (patch)
tree46bf5a17ad96c45dd2650b6ad6ed49eaaa7b0fbf
parent285ac870226e2ecc565925013e9ae8e7fe2657c0 (diff)
downloademacs-a55a7307108d4c609f92f481b6f520becaa3454e.tar.gz
emacs-a55a7307108d4c609f92f481b6f520becaa3454e.zip
* 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/ChangeLog7
-rw-r--r--lisp/progmodes/cfengine.el31
2 files changed, 29 insertions, 9 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 715e132c432..c766b833118 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,10 @@
12014-10-23 Leo Liu <sdl.web@gmail.com>
2
3 * progmodes/cfengine.el (cfengine3-defun-full-re): New var.
4 (cfengine3-create-imenu-index): Use it and use ` ' for separation.
5 (cfengine3-current-defun): New function.
6 (cfengine3-mode): Set add-log-current-defun-function.
7
12014-10-23 Stefan Monnier <monnier@iro.umontreal.ca> 82014-10-23 Stefan Monnier <monnier@iro.umontreal.ca>
2 9
3 * select.el: Use lexical-binding. 10 * 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.")
817 (defconst cfengine3-defuns-regex (regexp-opt cfengine3-defuns t) 817 (defconst cfengine3-defuns-regex (regexp-opt cfengine3-defuns t)
818 "Regex to match the CFEngine 3.x defuns.") 818 "Regex to match the CFEngine 3.x defuns.")
819 819
820 (defconst cfengine3-defun-full-re (concat "^\\s-*" cfengine3-defuns-regex
821 "\\s-+\\(\\(?:\\w\\|\\s_\\)+\\)" ;type
822 "\\s-+\\(\\(?:\\w\\|\\s_\\)+\\)" ;id
823 )
824 "Regexp matching full defun declaration (excluding argument list).")
825
820 (defconst cfengine3-class-selector-regex "\\([[:alnum:]_().&|!:]+\\)::") 826 (defconst cfengine3-class-selector-regex "\\([[:alnum:]_().&|!:]+\\)::")
821 827
822 (defconst cfengine3-category-regex "\\([[:alnum:]_]+\\):") 828 (defconst cfengine3-category-regex "\\([[:alnum:]_]+\\):")
@@ -1299,19 +1305,25 @@ Use it by enabling `eldoc-mode'."
1299 ("::" . ?∷))) 1305 ("::" . ?∷)))
1300 1306
1301(defun cfengine3-create-imenu-index () 1307(defun cfengine3-create-imenu-index ()
1302 "A function for `imenu-create-index-function'." 1308 "A function for `imenu-create-index-function'.
1309Note: defun name is separated by space such as `body
1310package_method opencsw' and imenu will replace spaces according
1311to `imenu-space-replacement' (which see)."
1303 (goto-char (point-min)) 1312 (goto-char (point-min))
1304 (let ((re (concat "^\\s-*" cfengine3-defuns-regex 1313 (let ((defuns ()))
1305 "\\s-+\\(\\(?:\\w\\|\\s_\\)+\\)" ;type 1314 (while (re-search-forward cfengine3-defun-full-re nil t)
1306 "\\s-+\\(\\(?:\\w\\|\\s_\\)+\\)" ;id 1315 (push (cons (mapconcat #'match-string '(1 2 3) " ")
1307 ))
1308 (defuns ()))
1309 (while (re-search-forward re nil t)
1310 (push (cons (mapconcat #'match-string '(1 2 3) ".")
1311 (copy-marker (match-beginning 3))) 1316 (copy-marker (match-beginning 3)))
1312 defuns)) 1317 defuns))
1313 (nreverse defuns))) 1318 (nreverse defuns)))
1314 1319
1320(defun cfengine3-current-defun ()
1321 "A function for `add-log-current-defun-function'."
1322 (end-of-line)
1323 (beginning-of-defun)
1324 (and (looking-at cfengine3-defun-full-re)
1325 (mapconcat #'match-string '(1 2 3) " ")))
1326
1315;;;###autoload 1327;;;###autoload
1316(define-derived-mode cfengine3-mode prog-mode "CFE3" 1328(define-derived-mode cfengine3-mode prog-mode "CFE3"
1317 "Major mode for editing CFEngine3 input. 1329 "Major mode for editing CFEngine3 input.
@@ -1347,7 +1359,8 @@ to the action header."
1347 (setq-local beginning-of-defun-function #'cfengine3-beginning-of-defun) 1359 (setq-local beginning-of-defun-function #'cfengine3-beginning-of-defun)
1348 (setq-local end-of-defun-function #'cfengine3-end-of-defun) 1360 (setq-local end-of-defun-function #'cfengine3-end-of-defun)
1349 1361
1350 (setq-local imenu-create-index-function #'cfengine3-create-imenu-index)) 1362 (setq-local imenu-create-index-function #'cfengine3-create-imenu-index)
1363 (setq-local add-log-current-defun-function #'cfengine3-current-defun))
1351 1364
1352;;;###autoload 1365;;;###autoload
1353(define-derived-mode cfengine2-mode prog-mode "CFE2" 1366(define-derived-mode cfengine2-mode prog-mode "CFE2"