Mercurial > hg > xemacs-beta
diff lisp/modes/m4-mode.el @ 149:538048ae2ab8 r20-3b1
Import from CVS: tag r20-3b1
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:36:16 +0200 |
parents | 6a378aca36af |
children | 59463afc5666 |
line wrap: on
line diff
--- a/lisp/modes/m4-mode.el Mon Aug 13 09:35:15 2007 +0200 +++ b/lisp/modes/m4-mode.el Mon Aug 13 09:36:16 2007 +0200 @@ -4,7 +4,7 @@ ;; Maintainer: Andrew Csillag (drew@staff.prodigy.com) ;; Keywords: languages, faces -;; This file is (not yet) part of GNU Emacs. +;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by @@ -28,7 +28,7 @@ ;; It also sets the font-lock syntax stuff for colorization ;; By Drew Csillag (drew@staff.prodigy.com) -;; $Id: m4-mode.el,v 1.2 1997/01/23 05:29:30 steve Exp $ +;; $Id: m4-mode.el,v 1.3 1997/05/18 03:39:57 steve Exp $ ;; History: @@ -47,6 +47,16 @@ ;; fixed syntax table so _define_ isn't keywordified ;; 10/29/96 1.8 DC fixed a problem where comments go fontified incorrectly ;; if they had quotes in them +;; 11/21/96 1.9 DC collapsed 4 regexps into 1 and removed a duplicate, +;; removed a duplicate backslash +;; 05/16/97 1.10 DC added contributed fixes and enhancements from +;; Martin Buchholz +;; Can now specify options to m4 via m4-program-options +;; Now terminates m4 processes when the buffer send +is +;; done +;; dnl and m4_dnl recognized as comment starters + ;; To Do's: ;; * want to make m4-m4-(buffer|region) look sorta like M-x compile look&feel ? @@ -62,26 +72,42 @@ ;; (cons '(".*\\.m4$" . m4-mode) ;; auto-mode-alist)) - ;;; Thanks: ;;; to Akim Demaille and Terry Jones for the bug reports +;;; to Simon Marshall for the regexp tip +;;; to Martin Buchholz for some general fixes ;;; Code: ;;path to the m4 program -(defvar m4-program "/usr/bin/m4") +(defvar 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") + ) +) + +;;options to m4 +(defconst m4-program-options nil) +;;to use --prefix-builtins, you can use +;;(defconst m4-program-options '("-P")) +;;or +;;(defconst m4-program-options '("--prefix-builtins")) ;;thank god for make-regexp.el! (defvar m4-font-lock-keywords `( - ("^\\\#.*" . font-lock-comment-face) - ("\\\$\\\*" . font-lock-variable-name-face) - ("\\\$[0-9]" . font-lock-variable-name-face) - ("\\\$\\\#" . font-lock-variable-name-face) - ("\\\$\\\@" . font-lock-variable-name-face) - ("\\\$\\\*" . font-lock-variable-name-face) - ("\\b\\(builtin\\|change\\(com\\|quote\\|word\\)\\|d\\(e\\(bug\\(file\\|mode\\)\\|cr\\|f\\(ine\\|n\\)\\)\\|iv\\(ert\\|num\\)\\|nl\\|umpdef\\)\\|e\\(rrprint\\|syscmd\\|val\\)\\|f\\(ile\\|ormat\\)\\|gnu\\|i\\(f\\(def\\|else\\)\\|n\\(c\\(lude\\|r\\)\\|d\\(ex\\|ir\\)\\)\\)\\|l\\(en\\|ine\\)\\|m\\(4\\(exit\\|wrap\\)\\|aketemp\\)\\|p\\(atsubst\\|opdef\\|ushdef\\)\\|regexp\\|s\\(hift\\|include\\|ubstr\\|ys\\(cmd\\|val\\)\\)\\|tra\\(ceo\\(ff\\|n\\)\\|nslit\\)\\|un\\(d\\(efine\\|ivert\\)\\|ix\\)\\)\\b" . font-lock-keyword-face) - ("\\b\\(m4_\\(builtin\\|change\\(com\\|quote\\|word\\)\\|d\\(e\\(bug\\(file\\|mode\\)\\|cr\\|f\\(ine\\|n\\)\\)\\|iv\\(ert\\|num\\)\\|nl\\|umpdef\\)\\|e\\(rrprint\\|syscmd\\|val\\)\\|f\\(ile\\|ormat\\)\\|i\\(f\\(def\\|else\\)\\|n\\(c\\(lude\\|r\\)\\|d\\(ex\\|ir\\)\\)\\)\\|l\\(en\\|ine\\)\\|m\\(4\\(_undefine\\|exit\\|wrap\\)\\|aketemp\\)\\|p\\(atsubst\\|opdef\\|ushdef\\)\\|regexp\\|s\\(hift\\|include\\|ubstr\\|ys\\(cmd\\|val\\)\\)\\|tra\\(ceo\\(ff\\|n\\)\\|nslit\\)\\|undivert\\)\\)\\b" . font-lock-keyword-face) + ("\\(\\bdnl\\b\\|\\bm4_dnl\\b\\|^\\#\\).*$" . +font-lock-comment-face) + ("\\$[*#@0-9]" . font-lock-variable-name-face) + +("\\b\\(builtin\\|change\\(com\\|quote\\|word\\)\\|d\\(e\\(bug\\(file\\|mode\\)\\|cr\\|f\\(ine\\|n\\)\\)\\|iv\\(ert\\|num\\)\\|nl\\|umpdef\\)\\|e\\(rrprint\\|syscmd\\|val\\)\\|f\\(ile\\|ormat\\)\\|gnu\\|i\\(f\\(def\\|else\\)\\|n\\(c\\(lude\\|r\\)\\|d\\(ex\\|ir\\)\\)\\)\\|l\\(en\\|ine\\)\\|m\\(4\\(exit\\|wrap\\)\\|aketemp\\)\\|p\\(atsubst\\|opdef\\|ushdef\\)\\|regexp\\|s\\(hift\\|include\\|ubstr\\|ys\\(cmd\\|val\\)\\)\\|tra\\(ceo\\(ff\\|n\\)\\|nslit\\)\\|un\\(d\\(efine\\|ivert\\)\\|ix\\)\\)\\b" +. font-lock-keyword-face) + +("\\b\\(m4_\\(builtin\\|change\\(com\\|quote\\|word\\)\\|d\\(e\\(bug\\(file\\|mode\\)\\|cr\\|f\\(ine\\|n\\)\\)\\|iv\\(ert\\|num\\)\\|nl\\|umpdef\\)\\|e\\(rrprint\\|syscmd\\|val\\)\\|f\\(ile\\|ormat\\)\\|i\\(f\\(def\\|else\\)\\|n\\(c\\(lude\\|r\\)\\|d\\(ex\\|ir\\)\\)\\)\\|l\\(en\\|ine\\)\\|m\\(4\\(_undefine\\|exit\\|wrap\\)\\|aketemp\\)\\|p\\(atsubst\\|opdef\\|ushdef\\)\\|regexp\\|s\\(hift\\|include\\|ubstr\\|ys\\(cmd\\|val\\)\\)\\|tra\\(ceo\\(ff\\|n\\)\\|nslit\\)\\|undivert\\)\\)\\b" +. font-lock-keyword-face) "default font-lock-keywords") ) @@ -106,25 +132,38 @@ (define-key map "\C-c\C-c" 'comment-region) map)) +(defun m4-end-m4 (process event) + (cond ((equal event "kill\n") (princ "m4 process done")) + (t (princ + (format "Process: %s had the event `%s'" process event))))) + +(defun m4-start-m4 () + (eval (append (append '(start-process "m4process" "*m4 output*" +m4-program) + m4-program-options) '("-e"))) + (set-process-sentinel (get-process "m4process") 'm4-end-m4) +) + (defun m4-m4-buffer () "send contents of the current buffer to m4" (interactive) - (start-process "m4process" "*m4 output*" m4-program "-e") + (m4-start-m4) (process-send-region "m4process" (point-min) (point-max)) (process-send-eof "m4process") - (switch-to-buffer "*m4 output*") + (switch-to-buffer-other-window "*m4 output*") + (delete-process "m4process") ) + (defun m4-m4-region () "send contents of the current region to m4" (interactive) - (start-process "m4process" "*m4 output*" m4-program "-e") + (m4-start-m4) (process-send-region "m4process" (point) (mark)) (process-send-eof "m4process") - (switch-to-buffer "*m4 output*") + (switch-to-buffer-other-window "*m4 output*") ) -;;;###autoload (defun m4-mode () "A major-mode to edit m4 macro files \\{m4-mode-map} @@ -142,7 +181,7 @@ (make-local-variable 'font-lock-defaults) (setq major-mode 'm4-mode mode-name "m4" - font-lock-defaults `(m4-font-lock-keywords nil) + font-lock-defaults '(m4-font-lock-keywords nil) ) (set-syntax-table m4-mode-syntax-table) (run-hooks 'm4-mode-hook))