changeset 6146:1a2a8ef9b4af

(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".
author Richard M. Stallman <rms@gnu.org>
date Wed, 02 Mar 1994 07:57:04 +0000
parents 843ce3f872c2
children f89879182407
files lisp/progmodes/make-mode.el
diffstat 1 files changed, 43 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/progmodes/make-mode.el	Wed Mar 02 06:45:38 1994 +0000
+++ b/lisp/progmodes/make-mode.el	Wed Mar 02 07:57:04 1994 +0000
@@ -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 @@
     ("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 @@
    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 @@
   ;; 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 @@
       (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 @@
 	    (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 @@
 (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)))