[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/popper 4b27799fb3 044/102: Added hiding feature.
From: |
ELPA Syncer |
Subject: |
[elpa] externals/popper 4b27799fb3 044/102: Added hiding feature. |
Date: |
Fri, 8 Sep 2023 15:58:52 -0400 (EDT) |
branch: externals/popper
commit 4b27799fb3e6c9b5a3f35948da65e819a51f5788
Author: Karthik Chikmagalur <karthikchikmagalur@gmail.com>
Commit: Karthik Chikmagalur <karthikchikmagalur@gmail.com>
Added hiding feature.
To specify a popup type as hidden, add an entry like this in popup-reference
buffers:
'("buffer-name" . hide)
---
popper.el | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++------------
1 file changed, 89 insertions(+), 21 deletions(-)
diff --git a/popper.el b/popper.el
index 6acb863b8b..b17db7b80b 100644
--- a/popper.el
+++ b/popper.el
@@ -193,6 +193,24 @@ the frame height.
(defvar popper-reference-modes nil
"List of buffer major-modes whose buffers are treated as popups.")
+(defvar popper-reference-predicates nil
+ "List of predicates to test if a buffer is treated as a popup.
+
+Each predicate takes a buffer as an argument and returns t if it
+should be considered a popup")
+
+(defvar popper-suppressed-names nil
+ "List of buffer names whose windows are treated as suppressed
+ popups.")
+
+(defvar popper-suppressed-modes nil
+ "List of buffer major-modes whose windows are treated as
+ suppressed popups.")
+
+(defvar popper-suppressed-predicates nil
+ "List of predicates for which matching buffers are treated as
+ suppressed popups.")
+
(defvar popper-open-popup-alist nil
"Alist of currently live (window . buffer)s that are treated as popups.")
@@ -230,7 +248,8 @@ grouped by the predicate `popper-group-function'.")
(or (seq-some (lambda (buf-regexp)
(string-match-p buf-regexp (buffer-name buf)))
popper-reference-names)
- (member (buffer-local-value 'major-mode buf) popper-reference-modes)))
+ (member (buffer-local-value 'major-mode buf) popper-reference-modes)
+ (seq-some (lambda (pred) (funcall pred buf))
popper-reference-predicates)))
(defun popper-display-control-p (buf &optional _act)
"Predicate to test if display of buffer BUF needs to be handled by popper.
@@ -296,7 +315,9 @@ Each element of the alist is a cons cell of the form
(window . buffer)."
(popper-popup-p b)))
(with-current-buffer b
(setq popper-popup-status (or popup-status
- 'popup)))
+ (if (popper-suppress-p b)
+ 'suppressed
+ 'popup))))
(push (cons (get-buffer-window b) b)
open-popups))))))
@@ -382,11 +403,7 @@ Each element of the alist is a cons cell of the form
(window . buffer)."
(with-selected-window win
(bury-buffer)
;;only close window when window has a parent or in a child frame:
- (if (and (window-valid-p win)
- (window-parent win))
- (delete-window win)
- (if (frame-parent)
- (delete-frame)))))))
+ (popper--delete-popup win)))))
(defun popper-open-latest (&optional group)
"Open the last closed popup.
@@ -410,6 +427,14 @@ a popup buffer to open."
(popper-open-latest))
(message no-popup-msg)))))
+(defun popper--delete-popup (win)
+ "Delete popup window WIN in a manner appropriate to its type."
+ (if (and (window-valid-p win)
+ (window-parent win))
+ (delete-window win)
+ (if (frame-parent)
+ (delete-frame))))
+
(defun popper-modified-mode-line ()
"Return modified mode-line string."
(when popper-mode-line
@@ -528,22 +553,59 @@ If BUFFER is not specified act on the current buffer
instead."
(interactive)
(cl-destructuring-bind ((win . buf) . rest) popper-open-popup-alist
(pop popper-open-popup-alist)
- (if (and (window-valid-p win)
- (window-parent win))
- (delete-window win)
- (if (frame-parent)
- (delete-frame)))
+ (popper--delete-popup win)
(kill-buffer buf)))
+(defun popper-suppress-p (buf)
+ "Predicate to check if popup-buffer BUF needs to be suppressed."
+ (or (seq-some (lambda (buf-regexp)
+ (string-match-p buf-regexp (buffer-name buf)))
+ popper-suppressed-names)
+ (member (buffer-local-value 'major-mode buf) popper-suppressed-modes)
+ (seq-some (lambda (pred) (funcall pred buf))
popper-suppressed-predicates)))
+
(defun popper-suppress-popups ()
"TODO: Suppress open popups in the user-defined
`popper-suppress-buffers' list. This should run after
`popper-update-popups' in `window-configuration-change-hook'."
-;;(popper-find-popups ())
+ ;; Check if popup-status for any open popup is 'suppressed. If yes, change
+ ;; its popup-status to 'popup and hide it.
+
+ (let ((configuration-changed-p))
+ (cl-loop for (win . buf) in popper-open-popup-alist do
+ (when (eq (buffer-local-value 'popper-popup-status buf)
'suppressed)
+ (setq configuration-changed-p t)
+ (with-selected-window win
+ (setq-local popper-popup-status 'popup)
+ ;; If window was previously showing a different buffer,
switch to it
+ (if-let ((wpb (window-prev-buffers win))
+ (switch-to-buffer-preserve-window-point t))
+ (switch-to-buffer (caar wpb))
+ ;; otherwise kill this window/frame
+ (popper--delete-popup win))
+ (message (format "Popup suppressed: %s" (buffer-name buf))))))
+ (when configuration-changed-p
+ (popper-update-popups))))
+
+(defun popper--set-reference-vars ()
+ "Unpack `popper-reference-buffers' to`set the values of various
+ popper-reference- variables."
+ (defun popper--insert-element-type (elm)
+ (pcase elm
+ ((pred stringp) (cl-pushnew elm popper-reference-names))
+ ((pred symbolp) (cl-pushnew elm popper-reference-modes))
+ ;; ((pred functionp) (push elm predlist)) ;; TODO
+ ((pred consp)
+ (progn (when (eq (cdr elm) 'hide)
+ (pcase (car elm)
+ ((pred stringp) (cl-pushnew (car elm)
popper-suppressed-names))
+ ((pred symbolp) (cl-pushnew (car elm)
popper-suppressed-modes))))
+ (popper--insert-element-type
+ (car elm))))))
-
-)
+ (dolist (entry popper-reference-buffers nil)
+ (popper--insert-element-type entry)))
;;;###autoload
(define-minor-mode popper-mode
@@ -552,30 +614,36 @@ windows as popups, a class of window that can be summoned
or
dismissed with a command. See the customization options for
details on how to designate buffer types as popups."
:global t
- :version "0.30"
+ :version "0.40"
:lighter ""
:group 'popper
:keymap (let ((map (make-sparse-keymap))) map)
(if popper-mode
;; Turning the mode ON
(progn
- (setq popper-reference-names
- (cl-remove-if-not #'stringp popper-reference-buffers)
- popper-reference-modes
- (cl-remove-if-not #'symbolp popper-reference-buffers))
+ (popper--set-reference-vars)
(popper-find-buried-popups)
(popper-update-popups)
+ ;; popper-suppress-popups should run after popper-update-popups, so
it's
+ ;; added first.
+ (add-hook 'window-configuration-change-hook #'popper-suppress-popups)
(add-hook 'window-configuration-change-hook #'popper-update-popups)
(add-to-list 'display-buffer-alist
`(popper-display-control-p
(,popper-display-function))))
;; Turning the mode OFF
(remove-hook 'window-configuration-change-hook #'popper-update-popups)
+ (remove-hook 'window-configuration-change-hook #'popper-suppress-popups)
(cl-loop for (_ . win-buf-alist) in popper-buried-popup-alist do
(popper-restore-mode-lines win-buf-alist))
(popper-restore-mode-lines popper-open-popup-alist)
+ ;; TODO: Clean this up
(setq popper-buried-popup-alist nil
- popper-open-popup-alist nil)
+ popper-open-popup-alist nil
+ popper-reference-names nil
+ popper-reference-modes nil
+ popper-suppressed-names nil
+ popper-suppressed-modes nil)
(setq display-buffer-alist
(cl-remove 'popper-display-control-p
display-buffer-alist
- [elpa] branch externals/popper created (now 031e4d093c), ELPA Syncer, 2023/09/08
- [elpa] externals/popper 1fada4f342 001/102: Initial commit - renamed popup-buffers to popper, ELPA Syncer, 2023/09/08
- [elpa] externals/popper 86978d34bc 002/102: Cleaning up as preparation for MELPA., ELPA Syncer, 2023/09/08
- [elpa] externals/popper 7a6ee7b2d1 003/102: Fix minimum version, ELPA Syncer, 2023/09/08
- [elpa] externals/popper e45500829f 028/102: Added link to demo video in package description, ELPA Syncer, 2023/09/08
- [elpa] externals/popper 2cc313e04d 017/102: package-lint & checkdoc suggestions, ELPA Syncer, 2023/09/08
- [elpa] externals/popper 2408f9fb74 018/102: group popup-buffers by arbitrary predicate, ELPA Syncer, 2023/09/08
- [elpa] externals/popper 4b27799fb3 044/102: Added hiding feature.,
ELPA Syncer <=
- [elpa] externals/popper ba7467b62b 010/102: More logic bugs fixed, ELPA Syncer, 2023/09/08
- [elpa] externals/popper e1773ae3e4 033/102: More README flourishes, ELPA Syncer, 2023/09/08
- [elpa] externals/popper 2341669327 026/102: Linted in preparation for merge into master, ELPA Syncer, 2023/09/08
- [elpa] externals/popper 62c82810a9 035/102: More README edits, ELPA Syncer, 2023/09/08
- [elpa] externals/popper 4e2fe1d86a 048/102: Added video demo of buffer hiding, ELPA Syncer, 2023/09/08
- [elpa] externals/popper a3dee00e3b 056/102: Renamed some functions to be internal, as popper--*, ELPA Syncer, 2023/09/08
- [elpa] externals/popper ca7d7312fc 071/102: Hiding popups with predicate - bug fix, ELPA Syncer, 2023/09/08
- [elpa] externals/popper 1ffc269afa 074/102: Simplify usage section of README, ELPA Syncer, 2023/09/08
- [elpa] externals/popper 8af5e6b3bb 078/102: Don't error in popper-kill-latest-popup (#18), ELPA Syncer, 2023/09/08
- [elpa] externals/popper 9118307349 016/102: Finished integration with project.el, ELPA Syncer, 2023/09/08