[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r118091: * progmodes/cfengine.el (cfengine3-defuns,
From: |
Leo Liu |
Subject: |
[Emacs-diffs] trunk r118091: * progmodes/cfengine.el (cfengine3-defuns, cfengine3-vartypes): |
Date: |
Sat, 11 Oct 2014 14:13:27 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 118091
revision-id: address@hidden
parent: address@hidden
committer: Leo Liu <address@hidden>
branch nick: trunk
timestamp: Sat 2014-10-11 22:11:03 +0800
message:
* progmodes/cfengine.el (cfengine3-defuns, cfengine3-vartypes):
Use strings.
(cfengine3-create-imenu-index): New function.
(cfengine3-mode): Use it for `imenu-create-index-function'.
(cfengine-auto-mode): Improve and prefer cfengine3-mode when
buffer is empty.
modified:
lisp/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1432
lisp/progmodes/cfengine.el
cfengine.el-20091113204419-o5vbwnq5f7feedwu-2944
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2014-10-11 08:28:11 +0000
+++ b/lisp/ChangeLog 2014-10-11 14:11:03 +0000
@@ -1,3 +1,12 @@
+2014-10-11 Leo Liu <address@hidden>
+
+ * progmodes/cfengine.el (cfengine3-defuns, cfengine3-vartypes):
+ Use strings.
+ (cfengine3-create-imenu-index): New function.
+ (cfengine3-mode): Use it for `imenu-create-index-function'.
+ (cfengine-auto-mode): Improve and prefer cfengine3-mode when
+ buffer is empty.
+
2014-10-11 Jan Djärv <address@hidden>
* cus-start.el (all): Add ns-use-fullscreen-animation.
=== modified file 'lisp/progmodes/cfengine.el'
--- a/lisp/progmodes/cfengine.el 2014-10-08 15:34:58 +0000
+++ b/lisp/progmodes/cfengine.el 2014-10-11 14:11:03 +0000
@@ -27,9 +27,6 @@
;; Provides support for editing GNU Cfengine files, including
;; font-locking, Imenu and indentation, but with no special keybindings.
-;; The CFEngine 3.x support doesn't have Imenu support but patches are
-;; welcome.
-
;; By default, CFEngine 3.x syntax is used.
;; You can set it up so either `cfengine2-mode' (2.x and earlier) or
@@ -56,7 +53,6 @@
;;; Code:
(autoload 'json-read "json")
-(autoload 'regexp-opt "regexp-opt")
(defgroup cfengine ()
"Editing CFEngine files."
@@ -815,24 +811,18 @@
"List of the action keywords supported by Cfengine.
This includes those for cfservd as well as cfagent.")
- (defconst cfengine3-defuns
- (mapcar
- 'symbol-name
- '(bundle body))
+ (defconst cfengine3-defuns '("bundle" "body")
"List of the CFEngine 3.x defun headings.")
- (defconst cfengine3-defuns-regex
- (regexp-opt cfengine3-defuns t)
+ (defconst cfengine3-defuns-regex (regexp-opt cfengine3-defuns t)
"Regex to match the CFEngine 3.x defuns.")
(defconst cfengine3-class-selector-regex "\\([[:alnum:]_().&|!:]+\\)::")
(defconst cfengine3-category-regex "\\([[:alnum:]_]+\\):")
- (defconst cfengine3-vartypes
- (mapcar
- 'symbol-name
- '(string int real slist ilist rlist irange rrange counter data))
+ (defconst cfengine3-vartypes '("string" "int" "real" "slist" "ilist" "rlist"
+ "irange" "rrange" "counter" "data")
"List of the CFEngine 3.x variable types."))
(defvar cfengine2-font-lock-keywords
@@ -1308,6 +1298,20 @@
("=>" . ?⇒)
("::" . ?∷)))
+(defun cfengine3-create-imenu-index ()
+ "A function for `imenu-create-index-function'."
+ (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) ".")
+ (copy-marker (match-beginning 3)))
+ defuns))
+ (nreverse defuns)))
+
;;;###autoload
(define-derived-mode cfengine3-mode prog-mode "CFE3"
"Major mode for editing CFEngine3 input.
@@ -1334,17 +1338,16 @@
(when buffer-file-name
(shell-quote-argument buffer-file-name)))))
- (set (make-local-variable 'eldoc-documentation-function)
- #'cfengine3-documentation-function)
+ (setq-local eldoc-documentation-function #'cfengine3-documentation-function)
(add-hook 'completion-at-point-functions
#'cfengine3-completion-function nil t)
;; Use defuns as the essential syntax block.
- (set (make-local-variable 'beginning-of-defun-function)
- #'cfengine3-beginning-of-defun)
- (set (make-local-variable 'end-of-defun-function)
- #'cfengine3-end-of-defun))
+ (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))
;;;###autoload
(define-derived-mode cfengine2-mode prog-mode "CFE2"
@@ -1378,15 +1381,18 @@
;;;###autoload
(defun cfengine-auto-mode ()
- "Choose between `cfengine2-mode' and `cfengine3-mode' depending
-on the buffer contents"
- (let ((v3 nil))
- (save-restriction
- (goto-char (point-min))
- (while (not (or (eobp) v3))
- (setq v3 (looking-at (concat cfengine3-defuns-regex "\\_>")))
- (forward-line)))
- (if v3 (cfengine3-mode) (cfengine2-mode))))
+ "Choose `cfengine2-mode' or `cfengine3-mode' by buffer contents."
+ (interactive)
+ (if (save-excursion
+ (save-restriction
+ (widen)
+ (goto-char (point-min))
+ (forward-comment (point-max))
+ (or (eobp)
+ (re-search-forward
+ (concat "^\\s-*" cfengine3-defuns-regex "\\_>") nil t))))
+ (cfengine3-mode)
+ (cfengine2-mode)))
(defalias 'cfengine-mode 'cfengine3-mode)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r118091: * progmodes/cfengine.el (cfengine3-defuns, cfengine3-vartypes):,
Leo Liu <=