From d314fe16f72fc758639c83848a16e4d2ed7efa9e Mon Sep 17 00:00:00 2001 From: John Turner Date: Fri, 7 Oct 2022 02:13:54 -0400 Subject: [PATCH] created display-buffer-in-side-window wrapper function The old display-buffer-alist thing did not work like I expected it to, so we removed it. Instead of trying to update display-buffer-alist when the screen resizes via a hook, we just create our own display function that can be used in display-buffer-alist directly. The function takes a "which-side" property in the alist, the property holds a function that returns which side the new buffer will snap to when invoked. The display function then creates a new alist with the side property and any other properties were passed in, and calls display-buffer-in-side-window with the new alist. This allows us to use this function as if it were display-buffer-in-side-window, but with an extra property to decide which side the window snaps to each time the function is invoked. This is useful if you want side windows to snap to different parts of the screen based on the current size of the frame, or anything else. --- config/display-buffer/config-display-buffer-alist.el | 6 ------ .../display-buffer/config-display-buffer-best-side.el | 7 +++++++ config/display-buffer/config-display-buffer.el | 2 +- config/flycheck/config-flycheck.el | 10 ++++++---- config/flymake/config-flymake.el | 9 +++++---- 5 files changed, 19 insertions(+), 15 deletions(-) delete mode 100644 config/display-buffer/config-display-buffer-alist.el create mode 100644 config/display-buffer/config-display-buffer-best-side.el diff --git a/config/display-buffer/config-display-buffer-alist.el b/config/display-buffer/config-display-buffer-alist.el deleted file mode 100644 index e64f109..0000000 --- a/config/display-buffer/config-display-buffer-alist.el +++ /dev/null @@ -1,6 +0,0 @@ -(defvar config-display-buffer-gaps-width 20) - -(defun config-display-buffer-which-side () - (if (> (+ (frame-pixel-width) config-display-buffer-gaps-width) (/ (x-display-pixel-width) 2)) - 'right - 'bottom)) diff --git a/config/display-buffer/config-display-buffer-best-side.el b/config/display-buffer/config-display-buffer-best-side.el new file mode 100644 index 0000000..9a2ff48 --- /dev/null +++ b/config/display-buffer/config-display-buffer-best-side.el @@ -0,0 +1,7 @@ +(defun config-display-buffer-frame-wide-p () + (> (frame-pixel-width) (/ (x-display-pixel-width) 2))) + +(defun config-display-buffer-best-side (buffer alist) + (let* ((side (funcall (alist-get 'which-side alist))) + (alist (append (cdr alist) (list (cons 'side side))))) + (display-buffer-in-side-window buffer alist))) diff --git a/config/display-buffer/config-display-buffer.el b/config/display-buffer/config-display-buffer.el index c36d35f..022b1df 100644 --- a/config/display-buffer/config-display-buffer.el +++ b/config/display-buffer/config-display-buffer.el @@ -1,5 +1,5 @@ (setq display-buffer-base-action '(display-buffer-same-window display-buffer-reuse-window)) -(load "config-display-buffer-alist") +(load "config-display-buffer-best-side") (provide 'config-display-buffer) diff --git a/config/flycheck/config-flycheck.el b/config/flycheck/config-flycheck.el index 0c1ae1b..95c0b49 100644 --- a/config/flycheck/config-flycheck.el +++ b/config/flycheck/config-flycheck.el @@ -5,9 +5,11 @@ (add-hook 'flycheck-error-list-mode-hook (lambda () (visual-line-mode 1))) (add-to-list 'display-buffer-alist '("\\*Flycheck errors.*" - (display-buffer-in-side-window) - (side . (config-display-buffer-which-side)) - (window-height . 15) - (window-width . 75))) + (config-display-buffer-best-side) + (which-side . (lambda () + (if (config-display-buffer-frame-wide-p) + 'right + 'bottom))))) + (provide 'config-flycheck) diff --git a/config/flymake/config-flymake.el b/config/flymake/config-flymake.el index c691bee..c9a3dfe 100644 --- a/config/flymake/config-flymake.el +++ b/config/flymake/config-flymake.el @@ -3,9 +3,10 @@ (load "config-flymake-hooks") (add-to-list 'display-buffer-alist '("\\*Flymake diagnostics.*" - (display-buffer-in-side-window) - (side . (config-display-buffer-which-side)) - (window-height . 15) - (window-width . 75))) + (config-display-buffer-best-side) + (which-side . (lambda () + (if (config-display-buffer-frame-wide-p) + 'right + 'bottom))))) (provide 'config-flymake)