]> git.eshelyaron.com Git - emacs.git/commitdiff
`define-alternatives' bugfix and UI enhancement
authorBastien Guerry <bzg@gnu.org>
Mon, 13 Jan 2014 22:13:44 +0000 (23:13 +0100)
committerBastien Guerry <bzg@gnu.org>
Mon, 13 Jan 2014 22:13:44 +0000 (23:13 +0100)
* 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.

lisp/ChangeLog
lisp/simple.el

index dbba63d8d2c4ba464097b48adce0913d97a05999..22a31f336ac07460fe62b75c3927f24f0478f8d3 100644 (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.
index ae18ae65fb540b506cf41754132ab033aeb2fee5..8ff6b9c55f490d018a9cd94cc06f7eea06c26fc4 100644 (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)))))))