X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/292c880c7e219e5740726f8a28a77921b12d5965..c57b0e4b243a7a4a92549e833c7266b0be39f906:/lisp/files-x.el diff --git a/lisp/files-x.el b/lisp/files-x.el index 6864e9a7b1..a130ffcf92 100644 --- a/lisp/files-x.el +++ b/lisp/files-x.el @@ -1,9 +1,9 @@ ;;; files-x.el --- extended file handling commands -;; Copyright (C) 2009-2013 Free Software Foundation, Inc. +;; Copyright (C) 2009-2015 Free Software Foundation, Inc. ;; Author: Juri Linkov -;; Maintainer: FSF +;; Maintainer: emacs-devel@gnu.org ;; Keywords: files ;; Package: emacs @@ -38,11 +38,10 @@ Intended to be used in the `interactive' spec of `add-file-local-variable', `delete-file-local-variable', `add-dir-local-variable', `delete-dir-local-variable'." - (let (default variable) - (setq default (variable-at-point)) - (setq default (and (symbolp default) (boundp default) + (let* ((default (variable-at-point)) + (default (and (symbolp default) (boundp default) (symbol-name default))) - (setq variable + (variable (completing-read (if default (format "%s (default %s): " prompt default) @@ -52,48 +51,47 @@ Intended to be used in the `interactive' spec of (or (custom-variable-p sym) (get sym 'safe-local-variable) (memq sym '(mode eval coding unibyte)))) - nil nil nil default nil)) + nil nil nil default nil))) (and (stringp variable) (intern variable)))) (defun read-file-local-variable-value (variable) "Read value of file-local VARIABLE using completion. Intended to be used in the `interactive' spec of `add-file-local-variable' and `add-dir-local-variable'." - (let (default value) - (cond - ((eq variable 'mode) - (setq default (and (symbolp major-mode) (symbol-name major-mode))) - (setq value - (completing-read - (if default - (format "Add %s with value (default %s): " variable default) - (format "Add %s with value: " variable)) - obarray - (lambda (sym) - (string-match-p "-mode\\'" (symbol-name sym))) - nil nil nil default nil)) + (cond + ((eq variable 'mode) + (let* ((default (and (symbolp major-mode) (symbol-name major-mode))) + (value + (completing-read + (if default + (format "Add %s with value (default %s): " variable default) + (format "Add %s with value: " variable)) + obarray + (lambda (sym) + (string-match-p "-mode\\'" (symbol-name sym))) + nil nil nil default nil))) (and (stringp value) - (intern (replace-regexp-in-string "-mode\\'" "" value)))) - ((eq variable 'eval) - (let ((minibuffer-completing-symbol t)) - (read-from-minibuffer (format "Add %s with expression: " variable) - nil read-expression-map t - 'read-expression-history))) - ((eq variable 'coding) - (setq default (and (symbolp buffer-file-coding-system) - (symbol-name buffer-file-coding-system))) + (intern (replace-regexp-in-string "-mode\\'" "" value))))) + ((eq variable 'eval) + (read--expression (format "Add %s with expression: " variable))) + ((eq variable 'coding) + (let ((default (and (symbolp buffer-file-coding-system) + (symbol-name buffer-file-coding-system)))) (read-coding-system (if default - (format "Add %s with value (default %s): " variable default) - (format "Add %s with value: " variable)) - default)) - (t - (read (read-string (format "Add %s with value: " variable) - nil 'set-variable-value-history - (format "%S" - (cond ((eq variable 'unibyte) t) - ((boundp variable) - (symbol-value variable)))))))))) + (format "Add %s with value (default %s): " variable default) + (format "Add %s with value: " variable)) + default))) + (t + (let ((default (format "%S" + (cond ((eq variable 'unibyte) t) + ((boundp variable) + (symbol-value variable))))) + (minibuffer-completing-symbol t)) + (read-from-minibuffer (format "Add %s with value: " variable) + nil read-expression-map t + 'set-variable-value-history + default))))) (defun read-file-local-variable-mode () "Read per-directory file-local variable's mode using completion. @@ -108,7 +106,9 @@ Intended to be used in the `interactive' spec of obarray (lambda (sym) (and (string-match-p "-mode\\'" (symbol-name sym)) - (not (string-match-p "-minor-mode\\'" (symbol-name sym))))) + (not (or (memq sym minor-mode-list) + (string-match-p "-minor-mode\\'" + (symbol-name sym)))))) nil nil nil default nil))) (cond ((equal mode "nil") nil) @@ -247,7 +247,14 @@ then this function adds the first line containing the string `Local Variables:' and the last line containing the string `End:'." (interactive (let ((variable (read-file-local-variable "Add file-local variable"))) + ;; Error before reading value. + (if (equal variable 'lexical-binding) + (user-error "The `%s' variable must be set at the start of the file" + variable)) (list variable (read-file-local-variable-value variable) t))) + (if (equal variable 'lexical-binding) + (user-error "The `%s' variable must be set at the start of the file" + variable)) (modify-file-local-variable variable value 'add-or-replace interactive)) ;;;###autoload @@ -476,7 +483,7 @@ from the MODE alist ignoring the input argument VALUE." ;; Insert modified alist of directory-local variables. (insert ";;; Directory Local Variables\n") - (insert ";;; See Info node `(emacs) Directory Variables' for more information.\n\n") + (insert ";;; For more information see (info \"(emacs) Directory Variables\")\n\n") (pp (sort variables (lambda (a b) (cond