.emacs.d

the most bloated Emacs config on this planet
git clone https://git.trogloxene.org/.emacs.d.git
Log | Files | Refs

init-window.el (5052B)


      1 ;;; init-window.el --- windows manage packages -*- lexical-binding: t -*-
      2 
      3 ;;; Commentary:
      4 
      5 ;;; Code:
      6 
      7 (use-package window
      8   :straight nil
      9   :config
     10   (setq switch-to-buffer-obey-display-actions t))
     11 
     12 (use-package popper
     13   :defines
     14   popper-echo-dispatch-actions
     15   :commands
     16   popper-group-by-directory
     17   :hook
     18   (after-init . popper-mode)
     19 
     20   :init
     21   (setq popper-reference-buffers
     22         '("\\*Messages\\*"
     23           "Output\\*$" "\\*Pp Eval Output\\*$"
     24           "\\*Compile-Log\\*"
     25           "\\*Completions\\*"
     26           "\\*Warnings\\*"
     27           "\\*Flymake diagnostics.*\\*"
     28           "\\*Async Shell Command\\*"
     29           "\\*Apropos\\*"
     30           "\\*Backtrace\\*"
     31           "\\*prodigy\\*"
     32           "\\*Calendar\\*"
     33           "\\*Holidays\\*"
     34           "\\*Embark Actions\\*"
     35           "\\*Finder\\*"
     36           "\\*Kill Ring\\*"
     37           "\\*Embark Export:.*\\*"
     38           "\\*Edit Annotation.*\\*"
     39           "\\*Flutter\\*"
     40           "\\*Ibuffer\\*"
     41           "^\\*Finder-"
     42           "Buffers\\*$"
     43           "^\\*Geiser"
     44           "^\\*pi-coding-agent-input"
     45           "^\\*sly"
     46           "\\*discomfort\\*"
     47           "\\*Synonyms List\\*"
     48           bookmark-bmenu-mode
     49           lsp-bridge-ref-mode
     50           comint-mode
     51           compilation-mode
     52           help-mode helpful-mode
     53           tabulated-list-mode
     54           buffer-menu-mode
     55           occur-mode
     56           gnus-article-mode devdocs-mode
     57           grep-mode occur-mode rg-mode deadgrep-mode ag-mode pt-mode
     58           ivy-occur-mode ivy-occur-grep-mode
     59           process-menu-mode list-environment-mode cargo-process-mode
     60           youdao-dictionary-mode osx-dictionary-mode fanyi-mode
     61           ibuffer-mode
     62 
     63           "^\\*eshell.*\\*.*$" eshell-mode
     64           ".*eshell\\*$"
     65           "^\\*shell.*\\*.*$"  shell-mode
     66           "^\\*terminal.*\\*.*$" term-mode
     67           "^\\*vterm.*\\*.*$"  vterm-mode
     68           "^\\*ghostel.*\\*.*$"  ghostel-mode
     69 
     70           "\\*DAP Templates\\*$" dap-server-log-mode
     71           "\\*ELP Profiling Restuls\\*" profiler-report-mode
     72           "\\*Flycheck errors\\*$" " \\*Flycheck checker\\*$"
     73           "\\*Paradox Report\\*$" "\\*package update results\\*$" "\\*Package-Lint\\*$"
     74           "\\*ert\\*$" overseer-buffer-mode
     75           "\\*gud-debug\\*$"
     76           "\\*lsp-help\\*$" "\\*lsp session\\*$"
     77           "\\*quickrun\\*$"
     78           "\\*tldr\\*$"
     79           "\\*eldoc\\*"
     80           ;; "^\\*elfeed-entry\\*$"
     81           "^\\*macro expansion\\**"
     82           "\\*gt-result\\*"
     83 
     84           "\\*Agenda Commands\\*" "\\*Org Select\\*" "\\*Capture\\*" "^CAPTURE-.*\\.org*" "^CAPTURE-" "\\*Org Note\\*"
     85           "\\*Gofmt Errors\\*$" "\\*Go Test\\*$" godoc-mode
     86           "\\*docker-containers\\*" "\\*docker-images\\*" "\\*docker-networks\\*" "\\*docker-volumes\\*"
     87           "\\*prolog\\*" inferior-python-mode inf-ruby-mode swift-repl-mode
     88           "\\*rustfmt\\*$" rustic-compilation-mode rustic-cargo-clippy-mode
     89           rustic-cargo-outdated-mode rustic-cargo-test-mode
     90 
     91           "^\\*\\[D\\] FILE backlinks for" "^\\*Denote HEADING backlinks for"))
     92 
     93   (when (display-grayscale-p)
     94     (setq popper-mode-line
     95           '("[POP]")))
     96   (setq popper-echo-dispatch-actions t)
     97   (setq popper-group-function nil)
     98 
     99   :config
    100   (popper-echo-mode 1)
    101 
    102   (with-no-warnings
    103     (defun my-popper-fit-window-height (win)
    104       "Determine the height of popup window WIN by fitting it to the buffer's content."
    105       (fit-window-to-buffer
    106        win
    107        (floor (frame-height) 3)
    108        (floor (frame-height) 3)))
    109     (setq popper-window-height #'my-popper-fit-window-height)
    110 
    111     (defun my-popper-clear-sides-shown (&optional buffer)
    112       "Clear `window--sides-shown'."
    113       (with-current-buffer (get-buffer (or buffer (current-buffer)))
    114         (kill-local-variable 'window--sides-shown)))
    115     (advice-add #'popper-raise-popup :after #'my-popper-clear-sides-shown)
    116 
    117     (defun popper-toggle-type-delete-other-window()
    118       "Toggle type of popper window and delete other window."
    119       (interactive)
    120       (popper-toggle-type)
    121       (delete-other-windows))
    122 
    123     (defun popper-close-window-hack (&rest _args)
    124       "Close popper window via `C-g'."
    125       (when (and (called-interactively-p 'interactive)
    126                  (not (region-active-p))
    127                  popper-open-popup-alist)
    128         (let ((window (caar popper-open-popup-alist))
    129               (buffer (cdar popper-open-popup-alist)))
    130           (when (and (window-live-p window)
    131                      (buffer-live-p buffer)
    132                      (not (with-current-buffer buffer
    133                             (derived-mode-p 'eshell-mode
    134                                             'ghostel-mode
    135                                             'shell-mode
    136                                             'term-mode))))
    137             (delete-window window)))))
    138     (advice-add #'keyboard-quit :before #'popper-close-window-hack)))
    139 
    140 ;; windmove
    141 (use-package windmove
    142   :straight nil
    143   :hook
    144   (after-init . windmove-swap-states-default-keybindings))
    145 
    146 (provide 'init-window)
    147 ;;; init-window.el ends here