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

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

[elpa] externals/vertico-posframe ebe07d5751 1/2: Add vertico-posframe-f


From: ELPA Syncer
Subject: [elpa] externals/vertico-posframe ebe07d5751 1/2: Add vertico-posframe-fallback-mode #16
Date: Mon, 19 Dec 2022 18:58:15 -0500 (EST)

branch: externals/vertico-posframe
commit ebe07d57514bf50dc5ebe7fc67b86b3237d7c82c
Author: Feng Shu <tumashu@163.com>
Commit: Feng Shu <tumashu@163.com>

    Add vertico-posframe-fallback-mode #16
---
 README.org          | 17 +++++++++++++++++
 vertico-posframe.el | 42 ++++++++++++++++++++++++++++++++----------
 2 files changed, 49 insertions(+), 10 deletions(-)

diff --git a/README.org b/README.org
index ce0004fd7e..a9546717b9 100644
--- a/README.org
+++ b/README.org
@@ -15,6 +15,23 @@ click.
 #+END_EXAMPLE
 
 ** Tips
+
+*** How to let vertico-posframe work well with vertico-multiform.
+#+begin_example
+(setq vertico-multiform-commands
+      '((consult-line
+         posframe
+         (vertico-posframe-poshandler . posframe-poshandler-frame-top-center)
+         (vertico-posframe-border-width . 10)
+         ;; NOTE: This is useful when emacs is used in both in X and
+         ;; terminal, for posframe do not work well in terminal, so
+         ;; vertico-buffer-mode will be used as fallback at the
+         ;; moment.
+         (vertico-posframe-fallback-mode . vertico-buffer-mode))
+        (t posframe)))
+(vertico-multiform-mode 1)
+#+end_example
+
 *** How to show fringe to vertico-posframe
 #+BEGIN_EXAMPLE
 (setq vertico-posframe-parameters
diff --git a/vertico-posframe.el b/vertico-posframe.el
index 595794e953..16ba6e3417 100644
--- a/vertico-posframe.el
+++ b/vertico-posframe.el
@@ -36,6 +36,22 @@
 ;; NOTE: vertico-posframe requires Emacs 26 and do not support mouse
 ;; click.
 
+;; ** How to let vertico-posframe work well with vertico-multiform.
+;; #+BEGIN_EXAMPLE
+;; (setq vertico-multiform-commands
+;;       '((consult-line
+;;          posframe
+;;          (vertico-posframe-poshandler . 
posframe-poshandler-frame-top-center)
+;;          (vertico-posframe-border-width . 10)
+;;          ;; NOTE: This is useful when emacs is used in both in X and
+;;          ;; terminal, for posframe do not work well in terminal, so
+;;          ;; vertico-buffer-mode will be used as fallback at the
+;;          ;; moment.
+;;          (vertico-posframe-fallback-mode . vertico-buffer-mode))
+;;         (t posframe)))
+;; (vertico-multiform-mode 1)
+;; #+END_EXAMPLE
+
 ;; ** How to enable vertico-posframe
 ;; #+BEGIN_EXAMPLE
 ;; (require 'vertico-posframe)
@@ -63,6 +79,10 @@
   "Using posframe to show vertico."
   :group 'vertico)
 
+(defcustom vertico-posframe-fallback-mode #'ignore
+  "When posframe is not workable, this mode will be used as fallback."
+  :type 'function)
+
 (defcustom vertico-posframe-font nil
   "The font used by vertico-posframe.
 When nil, Using current frame's font as fallback."
@@ -299,8 +319,7 @@ is called, window-point will be set to WINDOW-POINT."
   ;; `vertico--resize-window' have set `max-mini-window-height' to
   ;; 1.0, so I think setting it to 1.0 here is safe :-).
   (setq-local max-mini-window-height 1.0)
-  (when (posframe-workable-p)
-    (posframe-hide vertico-posframe--buffer)))
+  (posframe-hide vertico-posframe--buffer))
 
 (defun vertico-posframe--setup ()
   "Setup minibuffer overlay, which pushes the minibuffer content down."
@@ -319,15 +338,18 @@ is called, window-point will be set to WINDOW-POINT."
   "Display Vertico in posframe instead of the minibuffer."
   :global t
   (cond
-   ((and vertico-posframe-mode
-         (posframe-workable-p))
-    (advice-add #'vertico--display-candidates :after 
#'vertico-posframe--display)
-    (advice-add #'vertico--setup :after #'vertico-posframe--setup)
-    (advice-add #'vertico--resize-window :override #'ignore))
+   (vertico-posframe-mode
+    (if (not (posframe-workable-p))
+        (funcall (buffer-local-value 'vertico-posframe-fallback-mode 
(current-buffer)) 1)
+      (advice-add #'vertico--display-candidates :after 
#'vertico-posframe--display)
+      (advice-add #'vertico--setup :after #'vertico-posframe--setup)
+      (advice-add #'vertico--resize-window :override #'ignore)))
    (t
-    (advice-remove #'vertico--display-candidates #'vertico-posframe--display)
-    (advice-remove #'vertico--setup #'vertico-posframe--setup)
-    (advice-remove #'vertico--resize-window #'ignore))))
+    (if (not (posframe-workable-p))
+        (funcall (buffer-local-value 'vertico-posframe-fallback-mode 
(current-buffer)) -1)
+      (advice-remove #'vertico--display-candidates #'vertico-posframe--display)
+      (advice-remove #'vertico--setup #'vertico-posframe--setup)
+      (advice-remove #'vertico--resize-window #'ignore)))))
 
 (provide 'vertico-posframe)
 ;;; vertico-posframe.el ends here



reply via email to

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