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

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

[elpa] externals/ivy-posframe e76a15d 162/195: Merge pull request #53 fr


From: Feng Shu
Subject: [elpa] externals/ivy-posframe e76a15d 162/195: Merge pull request #53 from gagbo/patch-1
Date: Sat, 3 Oct 2020 07:12:05 -0400 (EDT)

branch: externals/ivy-posframe
commit e76a15dbe37ca428fe583a9eee6b395bc30b8e18
Merge: c654366 556c9a9
Author: tumashu <tumashu@163.com>
Commit: GitHub <noreply@github.com>

    Merge pull request #53 from gagbo/patch-1
    
    Check (display-graphic-p) dynamically in advices
---
 ivy-posframe.el | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/ivy-posframe.el b/ivy-posframe.el
index 5392f6e..63c5906 100644
--- a/ivy-posframe.el
+++ b/ivy-posframe.el
@@ -467,6 +467,20 @@ selection, non-nil otherwise."
 
 ;;; Advice
 
+(defun ivy-posframe--posframe-p-advice (advice-fn &rest args)
+  "Advice function of ADVICE-FN, used to bypass the advice from
+`ivy-posframe-advice-alist' if the posframe cannot be displayed.
+
+ADVICE-FN should be a value from `ivy-posframe-advice-alist', but
+the function only errors if ARGS is empty. There should at least be
+the advised function there (a key from `ivy-posframe-advice-alist')."
+  (unless (< 0 (length args))
+    (error "This function should advise an advice, so args should be at least 
a key from ivy-posframe-advice-alist"))
+  (if (display-graphic-p)
+      (apply advice-fn args)
+    (apply (car args) (cdr args)))
+  )
+
 (defun ivy-posframe--minibuffer-setup (fn &rest args)
   "Advice function of FN, `ivy--minibuffer-setup' with ARGS."
   (let ((ivy-fixed-height-minibuffer nil))
@@ -532,10 +546,14 @@ selection, non-nil otherwise."
   (let ((advices ivy-posframe-advice-alist))
     (if ivy-posframe-mode
         (mapcar (lambda (elm)
-                  (advice-add (car elm) :around (cdr elm)))
+                  (progn
+                    (advice-add (cdr elm) :around 
'ivy-posframe--posframe-p-advice)
+                    (advice-add (car elm) :around (cdr elm))))
                 advices)
       (mapcar (lambda (elm)
-                (advice-remove (car elm) (cdr elm)))
+                (progn
+                  (advice-remove (cdr elm) 'ivy-posframe--posframe-p-advice)
+                  (advice-remove (car elm) (cdr elm))))
               advices))))
 
 ;;;###autoload



reply via email to

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