Commit 066555eedbae

Vincent Demeester <vincent@sbr.pm>
2025-04-13 23:19:02
tools/emacs: trying out auto-side-windows
So far, kind-of good, but may get in the way for the terminal. Signed-off-by: Vincent Demeester <vincent@sbr.pm>
1 parent 70d2aba
Changed files (2)
tools/emacs/config/config-buffers.el
@@ -77,29 +77,29 @@
                      (unless (eq ibuffer-sorting-mode 'filename/process)
                        (ibuffer-do-sort-by-filename/process)))))
 
-(unless noninteractive
-  (require 'popper)
-  (setq popper-reference-buffers
-        '("\\*Messages\\*"
-          "Output\\*$"
-          "\\*Async Shell Command\\*"
-	  "\\*Warnings\\*"
-	  "\\*Compile-Log\\*"
-          help-mode
-	  helpful-mode
-          compilation-mode
-	  flymake-diagnostics-buffer-mode
-	  flymake-project-diagnostics-mode
-	  Man-mode
-	  woman-mode))
-  (global-set-key (kbd "C-`") 'popper-toggle)
-  (global-set-key (kbd "M-`") 'popper-cycle)
-  (global-set-key (kbd "C-M-`") 'popper-toggle-type)
-  (popper-mode +1)
-
-  ;; For echo-area hints
-  (require 'popper-echo)
-  (popper-echo-mode +1))
+;; (unless noninteractive
+;;   (require 'popper)
+;;   (setq popper-reference-buffers
+;;         '("\\*Messages\\*"
+;;           "Output\\*$"
+;;           "\\*Async Shell Command\\*"
+;; 	  "\\*Warnings\\*"
+;; 	  "\\*Compile-Log\\*"
+;;           help-mode
+;; 	  helpful-mode
+;;           compilation-mode
+;; 	  flymake-diagnostics-buffer-mode
+;; 	  flymake-project-diagnostics-mode
+;; 	  Man-mode
+;; 	  woman-mode))
+;;   (global-set-key (kbd "C-`") 'popper-toggle)
+;;   (global-set-key (kbd "M-`") 'popper-cycle)
+;;   (global-set-key (kbd "C-M-`") 'popper-toggle-type)
+;;   (popper-mode +1)
+;; 
+;;   ;; For echo-area hints
+;;   (require 'popper-echo)
+;;   (popper-echo-mode +1))
 
 (use-package goto-addr
   :hook ((text-mode . goto-address-mode)
tools/emacs/config/config-windows.el
@@ -168,60 +168,134 @@ use in `display-buffer-alist'."
       (and (not (derived-mode-p 'message-mode 'text-mode))
            (derived-mode-p 'eshell-mode 'shell-mode 'comint-mode 'fundamental-mode)))))
 
-(setq display-buffer-alist
-      `(;; Default to no window
-	("\\`\\*Async Shell Command\\*\\'"
-	 (display-buffer-no-window))
-	("\\`\\*Warnings\\*\\'"
-         (display-buffer-no-window)
-	 (allow-no-window . t))
-	("\\`\\*\\(Compile-Log\\|Org Links\\)\\*\\'"
-         (display-buffer-no-window))
-	;; bottom side window
-        ("\\*Org \\(Select\\|Note\\)\\*" ; the `org-capture' key selection and `org-add-log-note'
-         (display-buffer-in-side-window)
-         (dedicated . t)
-         (side . bottom)
-         (slot . 0)
-         (window-parameters . ((mode-line-format . none))))
-	;; bottom buffer (NOT side window)
-        ((or . ((derived-mode . flymake-diagnostics-buffer-mode)
-                (derived-mode . flymake-project-diagnostics-mode)
-                (derived-mode . messages-buffer-mode)
-                (derived-mode . backtrace-mode)))
-         (display-buffer-reuse-mode-window display-buffer-at-bottom)
-         (window-height . 0.3)
-         (dedicated . t)
-         (preserve-size . (t . t)))
-	;; ((or . ((derived-mode . Man-mode)
-	;; 	(derived-mode . woman-mode)
-	;; 	"\\*\\(Man\\|woman\\).*"))
-	;;  (display-buffer-reuse-mode-window display-buffer-below-selected)
-        ;;  (window-height . 0.3) ; note this is literal lines, not relative
-        ;;  (dedicated . t)
-        ;;  (preserve-size . (t . t)))
-	;; below current window
-	("\\(\\*Capture\\*\\|CAPTURE-.*\\)"
-         (display-buffer-reuse-mode-window display-buffer-below-selected))
-	((derived-mode . reb-mode) ; M-x re-builder
-         (display-buffer-reuse-mode-window display-buffer-below-selected)
-         (window-height . 4) ; note this is literal lines, not relative
-         (dedicated . t)
-         (preserve-size . (t . t)))
-	((or . ((derived-mode . occur-mode)
-                (derived-mode . grep-mode)
-                (derived-mode . Buffer-menu-mode)
-                (derived-mode . log-view-mode)
-		(derived-mode . helpful-mode)
-                (derived-mode . help-mode) ; See the hooks for `visual-line-mode'
-                "\\*\\(|Buffer List\\|Occur\\|vc-change-log\\).*"
-                prot-window-shell-or-term-p
-                ,world-clock-buffer-name))
-         (prot-window-display-buffer-below-or-pop)
-         (dedicated . t)
-         (body-function . prot-window-select-fit-size))
-	))
+;; (setq display-buffer-alist
+;;       `(;; Default to no window
+;; 	("\\`\\*Async Shell Command\\*\\'"
+;; 	 (display-buffer-no-window))
+;; 	("\\`\\*Warnings\\*\\'"
+;;          (display-buffer-no-window)
+;; 	 (allow-no-window . t))
+;; 	("\\`\\*\\(Compile-Log\\|Org Links\\)\\*\\'"
+;;          (display-buffer-no-window))
+;; 	;; bottom side window
+;;         ("\\*Org \\(Select\\|Note\\)\\*" ; the `org-capture' key selection and `org-add-log-note'
+;;          (display-buffer-in-side-window)
+;;          (dedicated . t)
+;;          (side . bottom)
+;;          (slot . 0)
+;;          (window-parameters . ((mode-line-format . none))))
+;; 	;; bottom buffer (NOT side window)
+;;         ((or . ((derived-mode . flymake-diagnostics-buffer-mode)
+;;                 (derived-mode . flymake-project-diagnostics-mode)
+;;                 (derived-mode . messages-buffer-mode)
+;;                 (derived-mode . backtrace-mode)))
+;;          (display-buffer-reuse-mode-window display-buffer-at-bottom)
+;;          (window-height . 0.3)
+;;          (dedicated . t)
+;;          (preserve-size . (t . t)))
+;; 	;; ((or . ((derived-mode . Man-mode)
+;; 	;; 	(derived-mode . woman-mode)
+;; 	;; 	"\\*\\(Man\\|woman\\).*"))
+;; 	;;  (display-buffer-reuse-mode-window display-buffer-below-selected)
+;;         ;;  (window-height . 0.3) ; note this is literal lines, not relative
+;;         ;;  (dedicated . t)
+;;         ;;  (preserve-size . (t . t)))
+;; 	;; below current window
+;; 	("\\(\\*Capture\\*\\|CAPTURE-.*\\)"
+;;          (display-buffer-reuse-mode-window display-buffer-below-selected))
+;; 	((derived-mode . reb-mode) ; M-x re-builder
+;;          (display-buffer-reuse-mode-window display-buffer-below-selected)
+;;          (window-height . 4) ; note this is literal lines, not relative
+;;          (dedicated . t)
+;;          (preserve-size . (t . t)))
+;; 	((or . ((derived-mode . occur-mode)
+;;                 (derived-mode . grep-mode)
+;;                 (derived-mode . Buffer-menu-mode)
+;;                 (derived-mode . log-view-mode)
+;; 		(derived-mode . helpful-mode)
+;;                 (derived-mode . help-mode) ; See the hooks for `visual-line-mode'
+;;                 "\\*\\(|Buffer List\\|Occur\\|vc-change-log\\).*"
+;;                 prot-window-shell-or-term-p
+;;                 ,world-clock-buffer-name))
+;;          (prot-window-display-buffer-below-or-pop)
+;;          (dedicated . t)
+;;          (body-function . prot-window-select-fit-size))
+;; 	))
 
+(use-package auto-side-windows
+  :custom
+  ;; Top side window configurations
+  (auto-side-windows-top-buffer-names
+   '("^\\*Backtrace\\*$" "^\\*Compile-Log\\*$" "^COMMIT_EDITMSG$"
+     "^\\*Org Src.*\\*" "^\\*Agenda Commands\\*$" "^\\*Org Agenda\\*$"
+     "^\\*Quick Help\\*$" "^\\*Multiple Choice Help\\*$" "^\\*TeX Help\\*$"
+     "^\\*TeX errors\\*$" "^\\*Warnings\\*$" "^\\*diff-hl\\*$"
+     "^\\*Process List\\*$"))
+  (auto-side-windows-top-buffer-modes
+   '(flymake-diagnostics-buffer-mode locate-mode occur-mode grep-mode
+                                     xref--xref-buffer-mode))
+
+  ;; Bottom side window configurations
+  (auto-side-windows-bottom-buffer-names
+   '("^\\*.*eshell.*\\*$" "^\\*.*shell.*\\*$" "^\\*.*term.*\\*$"
+     "^\\*.*vterm.*\\*$"))
+  (auto-side-windows-bottom-buffer-modes
+   '(eshell-mode shell-mode term-mode vterm-mode comint-mode debugger-mode))
+
+  ;; Right side window configurations
+  (auto-side-windows-right-buffer-names
+   '("^\\*eldoc.*\\*$" "^\\*info\\*$" "^\\*Metahelp\\*$"))
+  (auto-side-windows-right-buffer-modes
+   '(Info-mode TeX-output-mode pdf-view-mode eldoc-mode help-mode
+               helpful-mode shortdoc-mode))
+
+  ;; Example: Custom parameters for top windows (e.g., fit height to buffer)
+  ;; (auto-side-windows-top-alist '((window-height . fit-window-to-buffer)))
+  ;; (auto-side-windows-top-window-parameters '((mode-line-format . ...))) ;; Adjust mode-line
+
+  ;; Maximum number of side windows on the left, top, right and bottom
+  (window-sides-slots '(1 1 1 1)) ; Example: Allow one window per side
+
+  ;; Force left and right side windows to occupy full frame height
+  (window-sides-vertical t)
+  (window-combination-resize t)
+
+  ;; Make changes to tab-/header- and mode-line-format persistent when toggleling windows visibility
+  (window-persistent-parameters
+   (append window-persistent-parameters
+           '((tab-line-format . t)
+             (header-line-format . t)
+             (mode-line-format . t))))
+  :bind ;; Example keybindings (adjust prefix as needed)
+  (:map global-map ; Or your preferred keymap prefix
+        ("C-c w t" . auto-side-windows-display-buffer-top)
+        ("C-c w b" . auto-side-windows-display-buffer-bottom)
+        ("C-c w l" . auto-side-windows-display-buffer-left)
+        ("C-c w r" . auto-side-windows-display-buffer-right)
+        ("C-c w T" . auto-side-windows-toggle-side-window)) ; Toggle current buffer in/out of side window
+  :hook
+  (after-init . auto-side-windows-mode)) ; Activate the mode
+
+(use-package popper
+  :after auto-side-windows ; Ensure auto-side-windows variables are defined
+  :hook (auto-side-windows-mode . popper-mode) ; Activate popper alongside
+  :custom
+  ;; Tell Popper to consider buffers matching auto-side-windows rules as popups
+  (popper-reference-buffers
+   (append auto-side-windows-top-buffer-names auto-side-windows-top-buffer-modes
+           auto-side-windows-left-buffer-names auto-side-windows-left-buffer-modes
+           auto-side-windows-right-buffer-names auto-side-windows-right-buffer-modes
+           auto-side-windows-bottom-buffer-names auto-side-windows-bottom-buffer-modes))
+  ;; Optional: Don't let Popper decide where to display, auto-side-windows handles that
+  (popper-display-control nil) ; Or 'user if you prefer popper commands for display
+  :config
+  (require 'popper-echo)
+  (popper-mode +1) ; Enable popper-mode
+  (popper-echo-mode +1) ; Optional: echo area notifications
+  :bind
+  (("C-`" . popper-toggle)
+   ("C-M-`" . popper-toggle-type)
+   ("M-`" . popper-cycle)))
 ;; TODO: Move display-buffer-alist here
 
 (provide 'config-windows)