summaryrefslogtreecommitdiff
path: root/emacs/.config/emacs-kj/lisp/kj-popup.el
diff options
context:
space:
mode:
authorKjetil Orbekk <kj@orbekk.com>2023-03-12 12:07:09 -0400
committerKjetil Orbekk <kj@orbekk.com>2023-03-12 12:07:09 -0400
commit6eb0161f8ed3b869aa402806b352505dc754c72e (patch)
tree5bebb033d3daf66a8ca8e7f8e0ad5f854ffc3238 /emacs/.config/emacs-kj/lisp/kj-popup.el
parent200a440c8448595b081a8225464f6cf97ef4c03f (diff)
config
Diffstat (limited to 'emacs/.config/emacs-kj/lisp/kj-popup.el')
-rw-r--r--emacs/.config/emacs-kj/lisp/kj-popup.el83
1 files changed, 83 insertions, 0 deletions
diff --git a/emacs/.config/emacs-kj/lisp/kj-popup.el b/emacs/.config/emacs-kj/lisp/kj-popup.el
new file mode 100644
index 0000000..6bda93d
--- /dev/null
+++ b/emacs/.config/emacs-kj/lisp/kj-popup.el
@@ -0,0 +1,83 @@
+;;; -*- lexical-binding: t; -*-
+;;; Window placement
+;;; TODO: Test popper.el.
+(global-set-key (kbd "C-`") #'window-toggle-side-windows)
+(global-set-key (kbd "M-`") #'kj/popup-toggle-override)
+(setq window-sides-slots '(0 0 2 2)) ; 2 right side windows
+(setq switch-to-buffer-obey-display-actions t)
+(setq switch-to-buffer-in-dedicated-window 'pop)
+
+(defvar kj/popup-override nil)
+
+(defun kj/popup-clear-overrides ()
+ (interactive)
+ (dolist (buffer (buffer-list))
+ (with-current-buffer buffer
+ (kill-local-variable 'kj/popup-override))))
+
+(defun kj/popup-toggle-override ()
+ (interactive)
+ (if (local-variable-p 'kj/popup-override)
+ (kill-local-variable 'kj/popup-override)
+ (setq-local kj/popup-override
+ (not (kj/popup-buffer-base (buffer-name)))))
+ (let ((buffer (buffer-name)))
+ (switch-to-prev-buffer)
+ (switch-to-buffer buffer)))
+
+(defun kj/popup-buffer-base (buffer &optional condition)
+ (or
+ (s-matches-p
+ (rx (| "*Help*"
+ "*info*"
+ (seq "*scratch*")
+ (seq "*Messages*")
+ (seq "*Warnings*")
+ (seq "*Backtrace*")
+ (seq "*eldoc " (* anything) "*")
+ (seq "*WoMan " (* anything) "*")
+ (seq "*man " (* anything) "*")
+ (seq "fig: " (* anything))
+ (seq "*htop*" (* anything))
+ (seq "*Proced*" (* anything))
+ (seq "*eshell*" (* anything))
+ (seq "*shell*" (* anything))
+ "*Occur*")) buffer)
+ (with-current-buffer buffer
+ (apply #'derived-mode-p
+ '(magit-mode
+ compilation-mode
+ shell-mode
+ comint-mode
+ Custom-mode ; For customization
+ fig-commit-mode)))))
+
+(defun kj/popup-buffer (buffer &optional condition)
+ (with-current-buffer buffer
+ (if (local-variable-p 'kj/popup-override)
+ kj/popup-override
+ (kj/popup-buffer-base buffer condition))))
+
+(setq transient-display-buffer-action
+ '(display-buffer-in-best-side
+ (slot . 1)
+ (inhibit-same-window . t)
+ (window-parameters
+ (no-other-window . t))))
+
+(defun display-buffer-in-best-side (buffer alist)
+ (display-buffer-in-side-window
+ buffer
+ (append (if (> (frame-width) 160)
+ '((side . right)
+ (window-width . 85))
+ '((side . bottom)
+ (window-height . 0.5)))
+ alist)))
+
+(add-to-list 'display-buffer-alist
+ `(kj/popup-buffer
+ (display-buffer-in-best-side)
+ (slot . 0)))
+
+(provide 'kj-popup)