emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] master 3b75d95 005/110: Make "C-g" and "ESC" fail silently when r


From: Oleh Krehel
Subject: [elpa] master 3b75d95 005/110: Make "C-g" and "ESC" fail silently when reading char
Date: Sat, 11 May 2019 10:15:33 -0400 (EDT)

branch: master
commit 3b75d9520d76711f2e9b6505403a241c31022115
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>

    Make "C-g" and "ESC" fail silently when reading char
    
    * avy.el (avy-ignored-modes): Add type.
    (avy-handler-default): Silence "C-g" and "ESC".
    (avy-goto-line): Call `avy-handler-function' instead of
    `avy-handler-default'.
    (avy-timeout-seconds): Add type.
    
    Fixes #137
---
 avy.el | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/avy.el b/avy.el
index ff45502..78e5d63 100644
--- a/avy.el
+++ b/avy.el
@@ -165,7 +165,8 @@ When nil, punctuation chars will not be matched.
 
 (defcustom avy-ignored-modes '(image-mode doc-view-mode pdf-view-mode)
   "List of modes to ignore when searching for candidates.
-Typically, these modes don't use the text representation.")
+Typically, these modes don't use the text representation."
+  :type 'list)
 
 (defvar avy-ring (make-ring 20)
   "Hold the window and point history.")
@@ -352,12 +353,15 @@ KEYS is the path from the root of `avy-tree' to LEAF."
 (defun avy-handler-default (char)
   "The default handler for a bad CHAR."
   (let (dispatch)
-    (if (setq dispatch (assoc char avy-dispatch-alist))
-        (progn
-          (setq avy-action (cdr dispatch))
-          (throw 'done 'restart))
-      (signal 'user-error (list "No such candidate" char))
-      (throw 'done nil))))
+    (cond ((setq dispatch (assoc char avy-dispatch-alist))
+           (setq avy-action (cdr dispatch))
+           (throw 'done 'restart))
+          ((memq char '(27 ?\C-g))
+           ;; exit silently
+           (throw 'done 'exit))
+          (t
+           (signal 'user-error (list "No such candidate" char))
+           (throw 'done nil)))))
 
 (defvar avy-handler-function 'avy-handler-default
   "A function to call for a bad `read-key' in `avy-read'.")
@@ -1090,11 +1094,12 @@ Otherwise, forward to `goto-line' with ARG."
         (goto-char (point-min))
         (forward-line (1- arg)))
     (avy-with avy-goto-line
-      (let* ((avy-handler-function
+      (let* ((avy-handler-old avy-handler-function)
+             (avy-handler-function
               (lambda (char)
                 (if (or (< char ?0)
                         (> char ?9))
-                    (avy-handler-default char)
+                    (funcall avy-handler-old char)
                   (let ((line (read-from-minibuffer
                                "Goto line: " (string char))))
                     (when line
@@ -1223,7 +1228,8 @@ The window scope is determined by `avy-all-windows' or
     '(define-key isearch-mode-map (kbd "C-'") 'avy-isearch)))
 
 (defcustom avy-timeout-seconds 0.5
-  "How many seconds to wait for the second char.")
+  "How many seconds to wait for the second char."
+  :type 'float)
 
 (defun avy--read-candidates ()
   "Read as many chars as possible and return their occurences.



reply via email to

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