From: Bastien Guerry Date: Mon, 13 Jan 2014 22:13:44 +0000 (+0100) Subject: `define-alternatives' bugfix and UI enhancement X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~390 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=e3f33e5dbbdf45eb28a88d82f8d7a8d03384fdc2;p=emacs.git `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. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index dbba63d8d2c..22a31f336ac 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2014-01-13 Bastien Guerry + + * 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 * vc/log-edit.el: Fix highlighting of summary when it's the first line. diff --git a/lisp/simple.el b/lisp/simple.el index ae18ae65fb5..8ff6b9c55f4 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -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)))))))