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

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

[elpa] externals/ivy-posframe 4474956 194/195: let ivy-posframe-swiper-a


From: Feng Shu
Subject: [elpa] externals/ivy-posframe 4474956 194/195: let ivy-posframe-swiper-avy work when do not use ivy-posframe function
Date: Sat, 3 Oct 2020 07:12:12 -0400 (EDT)

branch: externals/ivy-posframe
commit 44749562a9e68bd43ccaa225b31311476fab1251
Author: Feng Shu <tumashu@163.com>
Commit: Feng Shu <tumashu@163.com>

    let ivy-posframe-swiper-avy work when do not use ivy-posframe function
---
 ivy-posframe.el | 74 ++++++++++++++++++++++++++++++++-------------------------
 1 file changed, 41 insertions(+), 33 deletions(-)

diff --git a/ivy-posframe.el b/ivy-posframe.el
index e459cc1..e0c3f0a 100644
--- a/ivy-posframe.el
+++ b/ivy-posframe.el
@@ -451,39 +451,47 @@ selection, non-nil otherwise."
 (defun ivy-posframe-swiper-avy ()
   "Jump to one of the current swiper candidates."
   (interactive)
-  (unless (require 'avy nil 'noerror)
-    (error "Package avy isn't installed"))
-  (unless (require 'avy nil 'noerror)
-    (error "Package avy isn't installed"))
-  (cl-case (length ivy-text)
-    (0
-     (user-error "Need at least one char of input"))
-    (1
-     (let ((swiper-min-highlight 1))
-       (swiper--update-input-ivy))))
-  (unless (string= ivy-text "")
-    (let ((candidate (ivy-posframe--swiper-avy-candidate)))
-      (cond ((eq (cdr candidate) (ivy-posframe--window))
-             (let ((cand-text (with-current-buffer ivy-posframe-buffer
-                                (save-excursion
-                                  (goto-char (car candidate))
-                                  (buffer-substring
-                                   (line-beginning-position)
-                                   (line-end-position))))))
-               (ivy-set-index
-                ;; cand-text may include "> ", using a hack way
-                ;; to deal with it.
-                (or (cl-some (lambda (n)
-                               (cl-position (substring cand-text n) 
ivy--old-cands :test #'string=))
-                             '(0 1 2 3 4))
-                    0))
-               (ivy--exhibit)
-               (ivy-done)
-               (ivy-call)))
-            ((or (consp candidate)
-                 (number-or-marker-p candidate))
-             (ivy-quit-and-run
-               (avy-action-goto (avy-candidate-beg candidate))))))))
+  (if (not (string-match-p "^ivy-posframe-display"
+                           (symbol-name ivy--display-function)))
+      ;; if swiper is not use ivy-posframe's display function.
+      ;; call `swiper-avy'.
+
+      ;; FIXME: This assume all ivy-posframe display functions are
+      ;; prefixed with ivy-posframe-display.
+      (swiper-avy)
+    (unless (require 'avy nil 'noerror)
+      (error "Package avy isn't installed"))
+    (unless (require 'avy nil 'noerror)
+      (error "Package avy isn't installed"))
+    (cl-case (length ivy-text)
+      (0
+       (user-error "Need at least one char of input"))
+      (1
+       (let ((swiper-min-highlight 1))
+         (swiper--update-input-ivy))))
+    (unless (string= ivy-text "")
+      (let ((candidate (ivy-posframe--swiper-avy-candidate)))
+        (cond ((eq (cdr candidate) (ivy-posframe--window))
+               (let ((cand-text (with-current-buffer ivy-posframe-buffer
+                                  (save-excursion
+                                    (goto-char (car candidate))
+                                    (buffer-substring
+                                     (line-beginning-position)
+                                     (line-end-position))))))
+                 (ivy-set-index
+                  ;; cand-text may include "> ", using a hack way
+                  ;; to deal with it.
+                  (or (cl-some (lambda (n)
+                                 (cl-position (substring cand-text n) 
ivy--old-cands :test #'string=))
+                               '(0 1 2 3 4))
+                      0))
+                 (ivy--exhibit)
+                 (ivy-done)
+                 (ivy-call)))
+              ((or (consp candidate)
+                   (number-or-marker-p candidate))
+               (ivy-quit-and-run
+                 (avy-action-goto (avy-candidate-beg candidate)))))))))
 
 ;;; Variables
 



reply via email to

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