`define-alternatives' bugfix and UI enhancement

* simple.el (define-alternatives): Call the selected command
interactively.  When setting `COMMAND--implementation' for the
first time, tell the user how to chose another implementation.
Enhance the docstring.
This commit is contained in:
Bastien Guerry 2014-01-13 23:13:44 +01:00
parent d6b738fcf5
commit e3f33e5dbb
2 changed files with 32 additions and 9 deletions

View file

@ -1,3 +1,10 @@
2014-01-13 Bastien Guerry <bzg@gnu.org>
* simple.el (define-alternatives): Call the selected command
interactively. When setting `COMMAND--implementation' for the
first time, tell the user how to chose another implementation.
Enhance the docstring.
2014-01-13 Stefan Monnier <monnier@iro.umontreal.ca>
* vc/log-edit.el: Fix highlighting of summary when it's the first line.

View file

@ -7654,10 +7654,20 @@ warning using STRING as the message.")
;; ;;;###autoload (push '("My impl name" . my-impl-symbol) COMMAND-alternatives
(defmacro define-alternatives (command &rest customizations)
"Define new command `COMMAND'.
The variable `COMMAND-alternatives' will contain alternative
implementations of COMMAND, so that running `C-u M-x COMMAND'
will allow the user to chose among them.
"Define the new command `COMMAND'.
The argument `COMMAND' should be a symbol.
Running `M-x COMMAND RET' for the first time prompts for which
alternative to use and record the selected command as a custom
variable.
Running `C-u M-x COMMAND RET' prompts again and overwrite the
previous choice.
The variable `COMMAND-alternatives' contains an alist with
alternative implementations of COMMAND.
CUSTOMIZATIONS, if non-nil, should be composed of alternating
`defcustom' keywords and values to add to the declaration of
`COMMAND-alternatives' (typically :group and :version)."
@ -7688,13 +7698,19 @@ contains the list of implementations currently supported for this command."
(interactive "P")
(when (or arg (null ,varimp-sym))
(let ((val (completing-read
,(format "Select implementation for command `%s': " command-name)
,varalt-sym nil t)))
,(format "Select implementation for command `%s': "
command-name)
,varalt-sym nil t)))
(unless (string-equal val "")
(customize-save-variable ',varimp-sym
(cdr (assoc-string val ,varalt-sym))))))
(when (null ,varimp-sym)
(message
"Use `C-u M-x %s RET' to select another implementation"
,command-name)
(sit-for 3))
(customize-save-variable ',varimp-sym
(cdr (assoc-string val ,varalt-sym))))))
(if ,varimp-sym
(funcall ,varimp-sym)
(call-interactively ,varimp-sym)
(message ,(format "No implementation selected for command `%s'"
command-name)))))))