* lisp/files-x.el (read-file-local-variable-value): Use read-from-minibuffer

for values and use read--expression for expressions.
(read-file-local-variable): Avoid setq.
(read-file-local-variable-mode): Use minor-mode-list.

Fixes: debbugs:14710
This commit is contained in:
Stefan Monnier 2013-06-25 09:07:04 -04:00
parent bceff1894c
commit c763842b88
2 changed files with 49 additions and 43 deletions

View file

@ -1,3 +1,10 @@
2013-06-25 Stefan Monnier <monnier@iro.umontreal.ca>
* files-x.el (read-file-local-variable-value): Use read-from-minibuffer
for values and use read--expression for expressions (bug#14710).
(read-file-local-variable): Avoid setq.
(read-file-local-variable-mode): Use minor-mode-list.
2013-06-25 Rüdiger Sonderfeld <ruediger@c-plusplus.de>
* lisp/textmodes/bibtex.el (bibtex-generate-url-list): Add support
@ -31,7 +38,7 @@
* net/shr.el (shr-browse-url): Use an external browser if given a
prefix.
* net/eww.el (eww-external-browser): Moved to shr.
* net/eww.el (eww-external-browser): Move to shr.
2013-06-24 Ivan Kanis <ivan@kanis.fr>
@ -119,8 +126,8 @@
2013-06-21 Dmitry Gutov <dgutov@yandex.ru>
* progmodes/ruby-mode.el (ruby-font-lock-keywords): Highlight
keyword-like methods on Kernel and Module with
* progmodes/ruby-mode.el (ruby-font-lock-keywords):
Highlight keyword-like methods on Kernel and Module with
font-lock-builtin-face.
(auto-mode-alist): Consolidate different entries into one regexp
and add more *file-s.
@ -606,8 +613,8 @@
2013-06-19 Michael Albinus <michael.albinus@gmx.de>
* net/secrets.el (secrets-struct-secret-content-type): Replace
check of introspection data by a test call of "CreateItem".
* net/secrets.el (secrets-struct-secret-content-type):
Replace check of introspection data by a test call of "CreateItem".
Some servers do not offer introspection.
2013-06-19 Stefan Monnier <monnier@iro.umontreal.ca>

View file

@ -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,46 @@ 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)))))
(defun read-file-local-variable-mode ()
"Read per-directory file-local variable's mode using completion.
@ -108,7 +105,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)