Fix De Bruijn "No catch for tag" error

When using avy-goto-line and typing a line number with avy-style
de-bruijn, you would get an error after entering your line number and
pressing RET:

    No catch for tag: done, exit

I believe this is because avy-read is wrapped with (catch 'done ...) but
avy-read-de-bruijn doesn't catch done.  This adds the catch to
avy-read-de-bruijn.
This commit is contained in:
Dale Sedivec 2015-11-15 10:32:46 -06:00
parent f341c2f18f
commit 4a23a0d63e

51
avy.el
View File

@ -390,31 +390,32 @@ multiple DISPLAY-FN invokations."
;; possible that the path-len must be incremented, e.g., if we're matching ;; possible that the path-len must be incremented, e.g., if we're matching
;; for x and a buffer contains xaxbxcx only every second subsequence is ;; for x and a buffer contains xaxbxcx only every second subsequence is
;; usable for the four matches. ;; usable for the four matches.
(let* ((path-len (ceiling (log (length lst) (length keys)))) (catch 'done
(alist (avy--path-alist-1 lst path-len keys))) (let* ((path-len (ceiling (log (length lst) (length keys))))
(while (not alist) (alist (avy--path-alist-1 lst path-len keys)))
(cl-incf path-len) (while (not alist)
(setq alist (avy--path-alist-1 lst path-len keys))) (cl-incf path-len)
(let* ((len (length (caar alist))) (setq alist (avy--path-alist-1 lst path-len keys)))
(i 0)) (let* ((len (length (caar alist)))
(setq avy-current-path "") (i 0))
(while (< i len) (setq avy-current-path "")
(dolist (x (reverse alist)) (while (< i len)
(avy--overlay-at-full (reverse (car x)) (cdr x))) (dolist (x (reverse alist))
(let ((char (funcall avy-translate-char-function (read-key)))) (avy--overlay-at-full (reverse (car x)) (cdr x)))
(avy--remove-leading-chars) (let ((char (funcall avy-translate-char-function (read-key))))
(setq alist (avy--remove-leading-chars)
(delq nil (setq alist
(mapcar (lambda (x) (delq nil
(when (eq (caar x) char) (mapcar (lambda (x)
(cons (cdr (car x)) (cdr x)))) (when (eq (caar x) char)
alist))) (cons (cdr (car x)) (cdr x))))
(setq avy-current-path alist)))
(concat avy-current-path (string (avy--key-to-char char)))) (setq avy-current-path
(cl-incf i) (concat avy-current-path (string (avy--key-to-char char))))
(unless alist (cl-incf i)
(funcall avy-handler-function char)))) (unless alist
(cdar alist)))) (funcall avy-handler-function char))))
(cdar alist)))))
;;** Rest ;;** Rest
(defun avy-window-list () (defun avy-window-list ()