[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