GNU bug report logs -
#9820
24.0.90; Behaviour of add-file-local-variable
Previous Next
Reported by: Jambunathan K <kjambunathan <at> gmail.com>
Date: Fri, 21 Oct 2011 05:14:02 UTC
Severity: wishlist
Found in version 24.0.90
Fixed in version 24.3.50
Done: Juri Linkov <juri <at> jurta.org>
Bug is archived. No further changes may be made.
Full log
Message #32 received at 9820 <at> debbugs.gnu.org (full text, mbox):
> But please eliminate this code duplication.
Code duplication is eliminated by adding a new function
`modify-file-local-variable-message' that now also performs
more checks to decide when to display the message:
=== modified file 'lisp/files-x.el'
--- lisp/files-x.el 2013-06-15 22:44:38 +0000
+++ lisp/files-x.el 2013-06-17 22:34:33 +0000
@@ -115,7 +115,38 @@ (defun read-file-local-variable-mode ()
((and (stringp mode) (fboundp (intern mode))) (intern mode))
(t mode))))
-(defun modify-file-local-variable (variable value op)
+(defun modify-file-local-variable-message (variable value op)
+ (let* ((not-value (make-symbol ""))
+ (old-value (cond ((eq variable 'mode)
+ major-mode)
+ ((eq variable 'coding)
+ buffer-file-coding-system)
+ (t (if (and (symbolp variable)
+ (boundp variable))
+ (symbol-value variable)
+ not-value))))
+ (new-value (if (eq op 'delete)
+ (cond ((eq variable 'mode)
+ (default-value 'major-mode))
+ ((eq variable 'coding)
+ (default-value 'buffer-file-coding-system))
+ (t (if (and (symbolp variable)
+ (default-boundp variable))
+ (default-value variable)
+ not-value)))
+ (cond ((eq variable 'mode)
+ (let ((string (format "%S" value)))
+ (if (string-match-p "-mode\\'" string)
+ value
+ (intern (concat string "-mode")))))
+ (t value)))))
+ (when (or (eq old-value not-value)
+ (eq new-value not-value)
+ (not (equal old-value new-value)))
+ (message "%s" (substitute-command-keys
+ "For this change to take effect revisit file using \\[revert-buffer]")))))
+
+(defun modify-file-local-variable (variable value op &optional interactive)
"Modify file-local VARIABLE in Local Variables depending on operation OP.
If OP is `add-or-replace' then delete all existing settings of
@@ -198,10 +229,13 @@ (defun modify-file-local-variable (varia
((eq variable 'mode) (goto-char beg))
((null replaced-pos) (goto-char end))
(replaced-pos (goto-char replaced-pos)))
- (insert (format "%s%S: %S%s\n" prefix variable value suffix)))))))
+ (insert (format "%s%S: %S%s\n" prefix variable value suffix))))
+
+ (when interactive
+ (modify-file-local-variable-message variable value op)))))
;;;###autoload
-(defun add-file-local-variable (variable value)
+(defun add-file-local-variable (variable value &optional interactive)
"Add file-local VARIABLE with its VALUE to the Local Variables list.
This command deletes all existing settings of VARIABLE (except `mode'
@@ -213,17 +247,17 @@ (defun add-file-local-variable (variable
`Local Variables:' and the last line containing the string `End:'."
(interactive
(let ((variable (read-file-local-variable "Add file-local variable")))
- (list variable (read-file-local-variable-value variable))))
- (modify-file-local-variable variable value 'add-or-replace))
+ (list variable (read-file-local-variable-value variable) t)))
+ (modify-file-local-variable variable value 'add-or-replace interactive))
;;;###autoload
-(defun delete-file-local-variable (variable)
+(defun delete-file-local-variable (variable &optional interactive)
"Delete all settings of file-local VARIABLE from the Local Variables list."
(interactive
- (list (read-file-local-variable "Delete file-local variable")))
- (modify-file-local-variable variable nil 'delete))
+ (list (read-file-local-variable "Delete file-local variable") t))
+ (modify-file-local-variable variable nil 'delete interactive))
-(defun modify-file-local-variable-prop-line (variable value op)
+(defun modify-file-local-variable-prop-line (variable value op &optional interactive)
"Modify file-local VARIABLE in the -*- line depending on operation OP.
If OP is `add-or-replace' then delete all existing settings of
@@ -337,10 +371,13 @@ (defun modify-file-local-variable-prop-l
(insert ";"))
(unless (eq (char-before) ?\s) (insert " "))
(insert (format "%S: %S;" variable value))
- (unless (eq (char-after) ?\s) (insert " "))))))))
+ (unless (eq (char-after) ?\s) (insert " ")))))
+
+ (when interactive
+ (modify-file-local-variable-message variable value op)))))
;;;###autoload
-(defun add-file-local-variable-prop-line (variable value)
+(defun add-file-local-variable-prop-line (variable value &optional interactive)
"Add file-local VARIABLE with its VALUE to the -*- line.
This command deletes all existing settings of VARIABLE (except `mode'
@@ -355,15 +394,15 @@ (defun add-file-local-variable-prop-line
then this function adds it."
(interactive
(let ((variable (read-file-local-variable "Add -*- file-local variable")))
- (list variable (read-file-local-variable-value variable))))
- (modify-file-local-variable-prop-line variable value 'add-or-replace))
+ (list variable (read-file-local-variable-value variable) t)))
+ (modify-file-local-variable-prop-line variable value 'add-or-replace interactive))
;;;###autoload
-(defun delete-file-local-variable-prop-line (variable)
+(defun delete-file-local-variable-prop-line (variable &optional interactive)
"Delete all settings of file-local VARIABLE from the -*- line."
(interactive
- (list (read-file-local-variable "Delete -*- file-local variable")))
- (modify-file-local-variable-prop-line variable nil 'delete))
+ (list (read-file-local-variable "Delete -*- file-local variable") t))
+ (modify-file-local-variable-prop-line variable nil 'delete interactive))
(defvar auto-insert) ; from autoinsert.el
This bug report was last modified 12 years and 61 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.