diff options
| author | Leo Liu | 2014-10-23 16:07:40 +0800 |
|---|---|---|
| committer | Leo Liu | 2014-10-23 16:07:40 +0800 |
| commit | a55a7307108d4c609f92f481b6f520becaa3454e (patch) | |
| tree | 46bf5a17ad96c45dd2650b6ad6ed49eaaa7b0fbf | |
| parent | 285ac870226e2ecc565925013e9ae8e7fe2657c0 (diff) | |
| download | emacs-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/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 715e132c432..c766b833118 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,10 @@ | |||
| 1 | 2014-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 | |||
| 1 | 2014-10-23 Stefan Monnier <monnier@iro.umontreal.ca> | 8 | 2014-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'. |
| 1309 | Note: defun name is separated by space such as `body | ||
| 1310 | package_method opencsw' and imenu will replace spaces according | ||
| 1311 | to `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" |