From e006b3cd93b56b93ec65e884a8c19efc7b3e0dbe Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 19 Sep 2002 01:21:46 +0000 Subject: [PATCH] (makefile-cleanup-continuations-p): Rename to makefile-cleanup-continuations. (makefile-mode): Use write-file-functions. (makefile-fill-paragraph): Use match-string-no-properties. (makefile-fill-paragraph): Use line-end-position. (makefile-add-log-defun): Simplify. --- lisp/progmodes/make-mode.el | 73 +++++++++++++++---------------------- 1 file changed, 30 insertions(+), 43 deletions(-) diff --git a/lisp/progmodes/make-mode.el b/lisp/progmodes/make-mode.el index b2b8b5194e1..ad635c0c3e4 100644 --- a/lisp/progmodes/make-mode.el +++ b/lisp/progmodes/make-mode.el @@ -192,7 +192,7 @@ Otherwise filenames are omitted." :type 'boolean :group 'makefile) -(defcustom makefile-cleanup-continuations-p t +(defcustom makefile-cleanup-continuations t "*If non-nil, automatically clean up continuation lines when saving. A line is cleaned up by removing all whitespace following a trailing backslash. This is done silently. @@ -545,7 +545,7 @@ Makefile mode can be configured by modifying the following variables: (i.e. it calls `makefile-pickup-filenames-as-targets'), otherwise filenames are omitted. -`makefile-cleanup-continuations-p': +`makefile-cleanup-continuations': If this variable is set to a non-nil value then Makefile mode will assure that no line in the file ends with a backslash (the continuation character) followed by any whitespace. @@ -565,9 +565,10 @@ Makefile mode can be configured by modifying the following variables: (interactive) (kill-all-local-variables) - (make-local-variable 'local-write-file-hooks) - (setq local-write-file-hooks - '(makefile-cleanup-continuations makefile-warn-suspicious-lines)) + (add-hook 'write-file-functions + 'makefile-warn-suspicious-lines nil t) + (add-hook 'write-file-functions + 'makefile-cleanup-continuations nil t) (make-local-variable 'makefile-target-table) (make-local-variable 'makefile-macro-table) (make-local-variable 'makefile-has-prereqs) @@ -749,7 +750,7 @@ Anywhere else just self-inserts." (setq makefile-has-prereqs nil) (save-excursion (goto-char (point-min)) - (while (re-search-forward makefile-dependency-regex (point-max) t) + (while (re-search-forward makefile-dependency-regex nil t) (makefile-add-this-line-targets))) (message "Read targets OK."))) @@ -783,7 +784,7 @@ Anywhere else just self-inserts." (setq makefile-macro-table nil) (save-excursion (goto-char (point-min)) - (while (re-search-forward makefile-macroassign-regex (point-max) t) + (while (re-search-forward makefile-macroassign-regex nil t) (makefile-add-this-line-macro) (forward-line 1))) (message "Read macros OK."))) @@ -792,15 +793,15 @@ Anywhere else just self-inserts." (save-excursion (beginning-of-line) (skip-chars-forward " \t") - (if (not (eolp)) - (let* ((start-of-macro-name (point)) - (line-number (1+ (count-lines (point-min) (point)))) - (macro-name (progn - (skip-chars-forward "^ \t:#=*") - (buffer-substring start-of-macro-name (point))))) - (if (makefile-remember-macro macro-name) - (message "Picked up macro \"%s\" from line %d" - macro-name line-number)))))) + (unless (eolp) + (let* ((start-of-macro-name (point)) + (line-number (1+ (count-lines (point-min) (point)))) + (macro-name (progn + (skip-chars-forward "^ \t:#=*") + (buffer-substring start-of-macro-name (point))))) + (if (makefile-remember-macro macro-name) + (message "Picked up macro \"%s\" from line %d" + macro-name line-number)))))) (defun makefile-pickup-everything (arg) "Notice names of all macros and targets in Makefile. @@ -1014,8 +1015,7 @@ definition and conveniently use this command." ;; Found a comment. Set the fill prefix, and find the paragraph ;; boundaries by searching for lines that look like comment-only ;; lines. - (let ((fill-prefix (buffer-substring-no-properties (match-beginning 0) - (match-end 0))) + (let ((fill-prefix (match-string-no-properties 0)) (fill-paragraph-function nil)) (save-excursion (save-restriction @@ -1038,13 +1038,8 @@ definition and conveniently use this command." ;; Must look for backslashed-region before looking for variable ;; assignment. - ((save-excursion - (end-of-line) - (or - (= (preceding-char) ?\\) - (progn - (end-of-line -1) - (= (preceding-char) ?\\)))) + ((or (eq (char-before (line-end-position 1)) ?\\) + (eq (char-before (line-end-position 0)) ?\\)) ;; A backslash region. Find beginning and end, remove ;; backslashes, fill, and then reapply backslahes. (end-of-line) @@ -1370,11 +1365,11 @@ and generates the overview, one line per target name." (defun makefile-cleanup-continuations () (if (eq major-mode 'makefile-mode) - (if (and makefile-cleanup-continuations-p + (if (and makefile-cleanup-continuations (not buffer-read-only)) (save-excursion (goto-char (point-min)) - (while (re-search-forward "\\\\[ \t]+$" (point-max) t) + (while (re-search-forward "\\\\[ \t]+$" nil t) (replace-match "\\" t t)))))) @@ -1522,22 +1517,14 @@ If it isn't in one, return nil." ;; Scan back line by line, noticing when we come to a ;; variable or rule definition, and giving up when we see ;; a line that is not part of either of those. - (while (not found) - (cond - ((looking-at makefile-macroassign-regex) - (setq found (buffer-substring-no-properties (match-beginning 1) - (match-end 1)))) - ((looking-at makefile-dependency-regex) - (setq found (buffer-substring-no-properties (match-beginning 1) - (match-end 1)))) - ;; Don't keep looking across a blank line or comment. Give up. - ((looking-at "$\\|#") - (setq found 'bobp)) - ((bobp) - (setq found 'bobp))) - (or found - (forward-line -1))) - (if (stringp found) found)))) + (while (not (or (setq found + (when (or (looking-at makefile-macroassign-regex) + (looking-at makefile-dependency-regex)) + (match-string-no-properties 1))) + ;; Don't keep looking across a blank line or comment. + (looking-at "$\\|#") + (not (zerop (forward-line -1)))))) + found))) (provide 'make-mode) -- 2.39.2