summaryrefslogtreecommitdiff
path: root/lisp/progmodes/make-mode.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1994-03-02 07:57:04 +0000
committerRichard M. Stallman <rms@gnu.org>1994-03-02 07:57:04 +0000
commitb8ca7cc378582397657c3a825131612d4eb2e80f (patch)
tree5aa1a4229ede142e0fa37f3a10c58efba4e6377e /lisp/progmodes/make-mode.el
parentda41135a678cea39bd3ef9797b9f989ed5c0f650 (diff)
downloademacs-b8ca7cc378582397657c3a825131612d4eb2e80f.tar.gz
(makefile-mode): Set local-write-file-hooks, not write-file-hooks.
Version 1.16. (makefile-mode): Correct `make-variable-buffer-local' to `make-local-variable'. Set indent-tabs-mode to t. (makefile-insert-macro-ref): Do not append a space to the inserted macro reference. (makefile-insert-macro-ref): Likewise if the reference is to one of makefile-runtime-macros-list. (makefile-format-macro-ref): If the name of the macro ref starts with a '(' or '{' then the enclosing parentheses are not added. (makefile-warn-suspicious-lines): New function. Changed mode name to "Makefile" instead of "makefile".
Diffstat (limited to 'lisp/progmodes/make-mode.el')
-rw-r--r--lisp/progmodes/make-mode.el61
1 files changed, 43 insertions, 18 deletions
diff --git a/lisp/progmodes/make-mode.el b/lisp/progmodes/make-mode.el
index d7b53e62608..042ca570ac1 100644
--- a/lisp/progmodes/make-mode.el
+++ b/lisp/progmodes/make-mode.el
@@ -1,6 +1,6 @@
;;; makefile.el --- makefile editing commands for Emacs
-;; Copyright (C) 1992 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 1994 Free Software Foundation, Inc.
;; Author: Thomas Neumann <tom@smart.bo.open.de>
;; Eric S. Raymond <esr@snark.thyrsus.com>
@@ -14,11 +14,10 @@
;; via M-TAB completion, not by preempting insertion of references.
;; Also, the doc strings need fixing: the first line doesn't stand alone,
;; and other usage is not high quality. Symbol names don't have `...'.
-;; The Mode names is written as makefile-mode instead of Makefile mode.
;; So, for the meantime, this is not the default mode for makefiles.
-;; $Id: makefile.el,v 1.11 1994/01/06 09:59:12 rms Exp rms $
+;; $Id: makefile.el,v 1.16 1994/02/28 18:05:55 tom Exp $
;; This file is part of GNU Emacs.
@@ -74,7 +73,7 @@
;;; Configurable stuff
;;; ------------------------------------------------------------
-(defconst makefile-mode-name "makefile"
+(defconst makefile-mode-name "Makefile"
"The \"pretty name\" of makefile-mode, as it appears in the modeline.")
(defvar makefile-browser-buffer-name "*Macros and Targets*"
@@ -319,7 +318,7 @@ using makefile-pickup-macros.")
("foreach" "Variable" "List" "Text")
("origin" "Variable")
("shell" "Command"))
- "A list of GNU make 3.62 function names associated with
+ "A list of GNU make function names associated with
the prompts for each function.
This is used in the function makefile-insert-gmake-function .")
@@ -410,14 +409,14 @@ makefile-special-targets-list:
at the beginning of a line in makefile-mode."
(interactive)
(kill-all-local-variables)
- (if (not (memq 'makefile-cleanup-continuations write-file-hooks))
- (setq write-file-hooks
- (append write-file-hooks (list 'makefile-cleanup-continuations))))
- (make-variable-buffer-local 'makefile-target-table)
- (make-variable-buffer-local 'makefile-macro-table)
- (make-variable-buffer-local 'makefile-has-prereqs)
- (make-variable-buffer-local 'makefile-need-target-pickup)
- (make-variable-buffer-local 'makefile-need-macro-pickup)
+ (make-local-file 'local-write-file-hooks)
+ (setq local-write-file-hooks
+ '(makefile-cleanup-continuations 'makefile-warn-suspicious-lines))
+ (make-local-variable 'makefile-target-table)
+ (make-local-variable 'makefile-macro-table)
+ (make-local-variable 'makefile-has-prereqs)
+ (make-local-variable 'makefile-need-target-pickup)
+ (make-local-variable 'makefile-need-macro-pickup)
(make-local-variable 'comment-start)
(make-local-variable 'comment-end)
(make-local-variable 'comment-start-skip)
@@ -430,6 +429,7 @@ makefile-special-targets-list:
;; activate keymap
(use-local-map makefile-mode-map)
(set-syntax-table makefile-mode-syntax-table)
+ (setq indent-tabs-mode t) ;real TABs are important in makefiles
(run-hooks 'makefile-mode-hook))
(defun makefile-next-dependency ()
@@ -502,8 +502,8 @@ Anywhere else just insert a dot."
(completing-read "Refer to macro: " makefile-macro-table nil nil nil))))
(if (not (zerop (length macro-name)))
(if (assoc macro-name makefile-runtime-macros-list)
- (insert (format "$%s " macro-name))
- (insert (makefile-format-macro-ref macro-name) " "))))
+ (insert (format "$%s" macro-name))
+ (insert (makefile-format-macro-ref macro-name)))))
(defun makefile-insert-target (target-name)
"Prepare definition of a new target (dependency line)."
@@ -924,6 +924,28 @@ and generates the overview, one line per target name."
(while (re-search-forward "\\\\[ \t]+$" (point-max) t)
(replace-match "\\" t t))))))
+
+;;; ------------------------------------------------------------
+;;; Warn of suspicious lines
+;;; ------------------------------------------------------------
+
+(defun makefile-warn-suspicious-lines ()
+ (let ((dont-save nil))
+ (if (eq major-mode 'makefile-mode)
+ (let ((suspicious
+ (save-excursion
+ (goto-char (point-min))
+ (re-search-forward
+ "\\(^[\t]+$\\)\\|\\(^[ ]+[\t]\\)" (point-max) t))))
+ (if suspicious
+ (let ((line-nr (count-lines (point-min) suspicious)))
+ (setq dont-save
+ (not (y-or-n-p
+ (format "Suspicious line %d. Save anyway "
+ line-nr))))))))
+ dont-save))
+
+
;;; ------------------------------------------------------------
;;; GNU make function support
;;; ------------------------------------------------------------
@@ -1016,9 +1038,12 @@ This accts according to the value of makefile-tab-after-target-colon ."
(defun makefile-format-macro-ref (macro-name)
"Format a macro reference according to the value of the
configuration variable makefile-use-curly-braces-for-macros-p ."
- (if makefile-use-curly-braces-for-macros-p
- (format "${%s}" macro-name)
- (format "$(%s)" macro-name)))
+ (if (or (char-equal ?\( (string-to-char macro-name))
+ (char-equal ?\{ (string-to-char macro-name)))
+ (format "$%s" macro-name)
+ (if makefile-use-curly-braces-for-macros-p
+ (format "${%s}" macro-name)
+ (format "$(%s)" macro-name))))
(defun makefile-browser-get-state-for-line (n)
(aref makefile-browser-selection-vector (1- n)))