Mercurial > emacs
changeset 28028:2999fcc88458
*** empty log message ***
author | Dave Love <fx@gnu.org> |
---|---|
date | Tue, 07 Mar 2000 12:02:52 +0000 |
parents | 79b84c42e967 |
children | f721aa64fc94 |
files | lisp/progmodes/autoconf.el |
diffstat | 1 files changed, 111 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/progmodes/autoconf.el Tue Mar 07 12:02:52 2000 +0000 @@ -0,0 +1,111 @@ +;;; autoconf.el --- Mode for editing Autoconf configure.in files. + +;; Copyright (C) 2000 Free Software Foundation, Inc. + +;; Author: Dave Love <fx@gnu.org> +;; Keywords: languages +;; $Revision: $ + +;; 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 +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;; Provides fairly minimal font-lock, imenu and indentation support +;; for editing configure.in files. Only Autoconf syntax is processed. +;; There is no attempt to deal with shell text -- probably that will +;; always lose. + +;; This is specialized for configure.in files. It doesn't inherit the +;; general M4 stuff from M4 mode. + +;; There is also an autoconf-mode.el in existence. That appears to be +;; for editing the Autoconf M4 source, rather than configure.in files. + +;;; Code: + +(defvar autoconf-mode-map (make-sparse-keymap)) + +(defvar autoconf-mode-hook nil + "Hook run by `autoconf-mode'.") + +(defconst autoconf-font-lock-syntactic-keywords + '(("\\<dnl\\>" 0 '(11)))) + +(defconst autoconf-definition-regexp + "AC_\\(SUBST\\|DEFINE\\(_UNQUOTED\\)?\\)(\\(\\sw+\\)") + +(defvar autoconf-font-lock-keywords + `(("A[CM]_\\sw+" . font-lock-keyword-face) + (,autoconf-definition-regexp + 3 font-lock-function-name-face) + ;; Are any other M4 keywords really appropriate for configure.in, + ;; given that we do `dnl'? + ("changequote" . font-lock-keyword-face))) + +(defvar autoconf-mode-syntax-table + (let ((table (make-syntax-table))) + (modify-syntax-entry ?\" "." table) + (modify-syntax-entry ?\n ">" table) + (modify-syntax-entry ?# "<" table) + table)) + +(defvar autoconf-imenu-generic-expression + (list (list nil autoconf-definition-regexp 3))) + +;; It's not clear how best to implement this. +(defun autoconf-current-defun-function () + "Function to use for `add-log-current-defun-function' in Autoconf mode. +This version looks back for an AC_DEFINE or AC_SUBST. It will stop +searching backwards at another AC_... command." + (save-excursion + (with-syntax-table autoconf-mode-syntax-table + (modify-syntax-entry ?_ "w") + (if (re-search-backward autoconf-definition-regexp + (save-excursion (beginning-of-defun) (point)) + t) + (match-string-no-properties 3))))) + +;;;###autoload +(defun autoconf-mode () + "Major mode for editing Autoconf configure.in files." + (interactive) + (kill-all-local-variables) + (use-local-map autoconf-mode-map) + (setq major-mode 'autoconf-mode) + (setq mode-name "Autoconf") + (set-syntax-table autoconf-mode-syntax-table) + (set (make-local-variable 'parens-require-spaces) nil) ; for M4 arg lists + (set (make-local-variable 'defun-prompt-regexp) + "^[ \t]*A[CM]_\\(\\sw\\|\\s_\\)+") + (set (make-local-variable 'comment-start) "dnl ") + (set (make-local-variable 'comment-start-skip) "\\(\\<dnl\\|#\\) +") + (set (make-local-variable 'font-lock-syntactic-keywords) + autoconf-font-lock-syntactic-keywords) + (set (make-local-variable 'font-lock-defaults) + `(autoconf-font-lock-keywords nil nil (("_" . "w")))) + (set (make-local-variable 'imenu-generic-expression) + autoconf-imenu-generic-expression) + (set (make-local-variable 'imenu-syntax-alist) '(("_" . "w"))) + (set (make-local-variable 'indent-line-function) #'indent-relative) + (set (make-local-variable 'add-log-current-defun-function) + #'autoconf-current-defun-function) + (run-hooks 'autoconf-mode-hook)) + +(provide 'autoconf-mode) + +;;; autoconf.el ends here