* etc/publicsuffix.txt: Update from source.
[bpt/emacs.git] / lisp / progmodes / m4-mode.el
index 20f91ce..b795b35 100644 (file)
@@ -1,6 +1,6 @@
 ;;; m4-mode.el --- m4 code editing commands for Emacs
 
-;; Copyright (C) 1996-1997, 2001-201 Free Software Foundation, Inc.
+;; Copyright (C) 1996-1997, 2001-2014 Free Software Foundation, Inc.
 
 ;; Author: Andrew Csillag <drew_csillag@geocities.com>
 ;; Maintainer: Andrew Csillag <drew_csillag@geocities.com>
   :prefix "m4-"
   :group 'languages)
 
-(defcustom m4-program
-  (cond
-   ((file-exists-p "/usr/local/bin/m4") "/usr/local/bin/m4")
-   ((file-exists-p "/usr/bin/m4") "/usr/bin/m4")
-   ((file-exists-p "/bin/m4") "/bin/m4")
-   ((file-exists-p "/usr/ccs/bin/m4") "/usr/ccs/bin/m4")
-   ( t "m4")
-   )
-  "File name of the m4 executable."
+(defcustom m4-program "m4"
+  "File name of the m4 executable.
+If m4 is not in your PATH, set this to an absolute file name."
+  :version "24.4"
   :type 'file
   :group 'm4)
 
   :group 'm4)
 
 ;;this may still need some work
-(defvar m4-mode-syntax-table nil
+(defvar m4-mode-syntax-table
+  (let ((table (make-syntax-table)))
+    (modify-syntax-entry ?` "('" table)
+    (modify-syntax-entry ?' ")`" table)
+    (modify-syntax-entry ?# "<\n" table)
+    (modify-syntax-entry ?\n ">#" table)
+    (modify-syntax-entry ?{  "_" table)
+    (modify-syntax-entry ?}  "_" table)
+    ;; FIXME: This symbol syntax for underscore looks OK on its own, but it's
+    ;; odd that it should have the same syntax as { and } are these really
+    ;; valid in m4 symbols?
+    (modify-syntax-entry ?_  "_" table)
+    ;; FIXME: These three chars with word syntax look wrong.
+    (modify-syntax-entry ?*  "w" table)
+    (modify-syntax-entry ?\"  "w" table)
+    (modify-syntax-entry ?\"  "w" table)
+    table)
   "Syntax table used while in `m4-mode'.")
-(setq m4-mode-syntax-table (make-syntax-table))
-(modify-syntax-entry ?` "('" m4-mode-syntax-table)
-(modify-syntax-entry ?' ")`" m4-mode-syntax-table)
-(modify-syntax-entry ?# "<\n" m4-mode-syntax-table)
-(modify-syntax-entry ?\n ">#" m4-mode-syntax-table)
-(modify-syntax-entry ?{  "_" m4-mode-syntax-table)
-(modify-syntax-entry ?}  "_" m4-mode-syntax-table)
-(modify-syntax-entry ?*  "w" m4-mode-syntax-table)
-(modify-syntax-entry ?_  "w" m4-mode-syntax-table)
-(modify-syntax-entry ?\"  "w" m4-mode-syntax-table)
-(modify-syntax-entry ?\"  "w" m4-mode-syntax-table)
 
 (defvar m4-mode-map
   (let ((map (make-sparse-keymap))
                  :help "Send contents of the current region to m4"))
     map))
 
-(defvar m4-mode-abbrev-table nil
-  "Abbrev table used while in `m4-mode'.")
-
-(unless m4-mode-abbrev-table
-  (define-abbrev-table 'm4-mode-abbrev-table ()))
-
 (defun m4-m4-buffer ()
   "Send contents of the current buffer to m4."
   (interactive)
    "*m4-output*" nil)
   (switch-to-buffer-other-window "*m4-output*"))
 
+(defun m4-current-defun-name ()
+  "Return the name of the M4 function at point, or nil."
+  (save-excursion
+    (if (re-search-backward
+        "^\\(\\(m4_\\)?define\\|A._DEFUN\\)(\\[?\\([A-Za-z0-9_]+\\)" nil t)
+       (match-string-no-properties 3))))
+
 ;;;###autoload
 (define-derived-mode m4-mode prog-mode "m4"
   "A major mode to edit m4 macro files."
-  :abbrev-table m4-mode-abbrev-table
-  (set (make-local-variable 'comment-start) "#")
-  (set (make-local-variable 'parse-sexp-ignore-comments) t)
-  (set (make-local-variable 'font-lock-defaults) '(m4-font-lock-keywords nil)))
+  (setq-local comment-start "#")
+  (setq-local parse-sexp-ignore-comments t)
+  (setq-local add-log-current-defun-function #'m4-current-defun-name)
+  (setq font-lock-defaults '(m4-font-lock-keywords nil)))
 
 (provide 'm4-mode)
 ;;stuff to play with for debugging