emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 2a06fc1: (widget-choose) Let numeric keypad work


From: Nicolas Richard
Subject: [Emacs-diffs] master 2a06fc1: (widget-choose) Let numeric keypad work
Date: Fri, 05 Dec 2014 16:49:43 +0000

branch: master
commit 2a06fc15b2a3e6287f18025806fb2eabec801fc0
Author: Nicolas Richard <address@hidden>
Commit: Nicolas Richard <address@hidden>

    (widget-choose) Let numeric keypad work
    
    Fixes: debbugs:19268
    
    * wid-edit.el (widget-choose): Let numeric keypad work
    and remove old menu-related code.
---
 lisp/ChangeLog   |    5 ++++
 lisp/wid-edit.el |   69 ++++++++++++++++++++---------------------------------
 2 files changed, 31 insertions(+), 43 deletions(-)

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 2fc3562..72adfb1 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2014-12-05  Nicolas Richard  <address@hidden>
+
+       * wid-edit.el (widget-choose): Let numeric keypad work (bug#19268)
+       and remove old menu-related code.
+
 2014-12-05  Lars Magne Ingebrigtsen  <address@hidden>
 
        * net/eww.el (eww-display-pdf): Let mailcap determine how to
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index 92e52bf..e901431 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -232,23 +232,20 @@ minibuffer."
        (t
         ;; Construct a menu of the choices
         ;; and then use it for prompting for a single character.
-        (let* ((overriding-terminal-local-map (make-sparse-keymap))
-               (next-digit ?0)
-               map choice some-choice-enabled value)
-          ;; Define SPC as a prefix char to get to this menu.
-          (define-key overriding-terminal-local-map " "
-            (setq map (make-sparse-keymap title)))
+        (let* ((next-digit ?0)
+               (map (make-sparse-keymap))
+                choice some-choice-enabled value)
           (with-current-buffer (get-buffer-create " widget-choose")
             (erase-buffer)
             (insert "Available choices:\n\n")
             (while items
-              (setq choice (car items) items (cdr items))
-              (if (consp choice)
-                  (let* ((name (car choice))
-                        (function (cdr choice)))
-                    (insert (format "%c = %s\n" next-digit name))
-                    (define-key map (vector next-digit) function)
-                    (setq some-choice-enabled t)))
+              (setq choice (pop items))
+              (when (consp choice)
+                 (let* ((name (car choice))
+                        (function (cdr choice)))
+                   (insert (format "%c = %s\n" next-digit name))
+                   (define-key map (vector next-digit) function)
+                   (setq some-choice-enabled t)))
               ;; Allocate digits to disabled alternatives
               ;; so that the digit of a given alternative never varies.
               (setq next-digit (1+ next-digit)))
@@ -257,43 +254,29 @@ minibuffer."
             (forward-line))
           (or some-choice-enabled
               (error "None of the choices is currently meaningful"))
-          (define-key map [?\C-g] 'keyboard-quit)
-          (define-key map [t] 'keyboard-quit)
           (define-key map [?\M-\C-v] 'scroll-other-window)
           (define-key map [?\M--] 'negative-argument)
-          (setcdr map (nreverse (cdr map)))
-          ;; Read a char with the menu, and return the result
-          ;; that corresponds to it.
           (save-window-excursion
             (let ((buf (get-buffer " widget-choose")))
               (fit-window-to-buffer (display-buffer buf))
               (let ((cursor-in-echo-area t)
-                    keys
-                    (char 0)
                     (arg 1))
-                (while (not (or (and (integerp char)
-                                     (>= char ?0) (< char next-digit))
-                                (eq value 'keyboard-quit)))
-                  ;; Unread a SPC to lead to our new menu.
-                  (setq unread-command-events (cons ?\s unread-command-events))
-                  (setq keys (read-key-sequence title))
-                  (setq value
-                        (lookup-key overriding-terminal-local-map keys t)
-                        char (aref keys 1))
-                  (cond ((eq value 'scroll-other-window)
-                         (let ((minibuffer-scroll-window
-                                (get-buffer-window buf)))
-                           (if (> 0 arg)
-                               (scroll-other-window-down
-                                (window-height minibuffer-scroll-window))
-                             (scroll-other-window))
-                           (setq arg 1)))
-                        ((eq value 'negative-argument)
-                         (setq arg -1))
-                        (t
-                         (setq arg 1)))))))
-          (when (eq value 'keyboard-quit)
-            (error "Canceled"))
+                 (while (not value)
+                   (setq value (lookup-key map (read-key-sequence (format "%s: 
" title))))
+                   (unless value
+                     (user-error "Canceled"))
+                   (when
+                       (cond ((eq value 'scroll-other-window)
+                               (let ((minibuffer-scroll-window
+                                      (get-buffer-window buf)))
+                                 (if (> 0 arg)
+                                     (scroll-other-window-down
+                                      (window-height minibuffer-scroll-window))
+                                   (scroll-other-window))
+                                 (setq arg 1)))
+                              ((eq value 'negative-argument)
+                               (setq arg -1)))
+                     (setq value nil))))))
           value))))
 
 ;;; Widget text specifications.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]