From c926a73b2bc7eb887bcf0abd0c12008733da7598 Mon Sep 17 00:00:00 2001 From: Dave Love Date: Tue, 7 Mar 2000 12:02:52 +0000 Subject: [PATCH] *** empty log message *** --- lisp/progmodes/autoconf.el | 111 +++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 lisp/progmodes/autoconf.el diff --git a/lisp/progmodes/autoconf.el b/lisp/progmodes/autoconf.el new file mode 100644 index 00000000000..a90e9766d61 --- /dev/null +++ b/lisp/progmodes/autoconf.el @@ -0,0 +1,111 @@ +;;; autoconf.el --- Mode for editing Autoconf configure.in files. + +;; Copyright (C) 2000 Free Software Foundation, Inc. + +;; Author: Dave Love +;; 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 + '(("\\" 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) "\\(\\