.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 (5350B)


      1 ;;; init-window.el --- windows manage packages -*- lexical-binding: t -*-
      2 
      3 ;;; Commentary:
      4 
      5 ;;; Code:
      6 
      7 (my-use-package window
      8   :straight nil
      9   :config
     10   (setq switch-to-buffer-obey-display-actions t))
     11 
     12 (my-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           "^\\*ielm"
     44           "^\\*Geiser"
     45           "^\\*pilish-input"
     46           "^\\*sly"
     47           "\\*discomfort\\*"
     48           "\\*Synonyms List\\*"
     49           bookmark-bmenu-mode
     50           lsp-bridge-ref-mode
     51           comint-mode
     52           compilation-mode
     53           help-mode helpful-mode
     54           tabulated-list-mode
     55           buffer-menu-mode
     56           occur-mode
     57           gnus-article-mode devdocs-mode
     58           grep-mode occur-mode rg-mode deadgrep-mode ag-mode pt-mode
     59           ivy-occur-mode ivy-occur-grep-mode
     60           process-menu-mode list-environment-mode cargo-process-mode
     61           youdao-dictionary-mode osx-dictionary-mode fanyi-mode
     62           ibuffer-mode
     63           my-elisp-macroexpand-mode
     64 
     65           "^\\*eshell.*\\*.*$" eshell-mode
     66           ".*eshell\\*$"
     67           "^\\*shell.*\\*.*$"  shell-mode
     68           "^\\*terminal.*\\*.*$" term-mode
     69           "^\\*vterm.*\\*.*$"  vterm-mode
     70           "^\\*ghostel.*\\*.*$"  ghostel-mode
     71 
     72           "\\*DAP Templates\\*$" dap-server-log-mode
     73           "\\*ELP Profiling Restuls\\*" profiler-report-mode
     74           "\\*Flycheck errors\\*$" " \\*Flycheck checker\\*$"
     75           "\\*Paradox Report\\*$" "\\*package update results\\*$" "\\*Package-Lint\\*$"
     76           "\\*ert\\*$" overseer-buffer-mode
     77           "\\*gud-debug\\*$"
     78           "\\*lsp-help\\*$" "\\*lsp session\\*$"
     79           "\\*quickrun\\*$"
     80           "\\*tldr\\*$"
     81           "\\*eldoc\\*"
     82           ;; "^\\*elfeed-entry\\*$"
     83           "^\\*macro expansion\\**"
     84           "\\*gt-result\\*"
     85 
     86           "\\*Agenda Commands\\*" "\\*Org Select\\*" "\\*Capture\\*" "^CAPTURE-.*\\.org*" "^CAPTURE-" "\\*Org Note\\*"
     87           "\\*Gofmt Errors\\*$" "\\*Go Test\\*$" godoc-mode
     88           "\\*docker-containers\\*" "\\*docker-images\\*" "\\*docker-networks\\*" "\\*docker-volumes\\*"
     89           "\\*prolog\\*" inferior-python-mode inf-ruby-mode swift-repl-mode
     90           "\\*rustfmt\\*$" rustic-compilation-mode rustic-cargo-clippy-mode
     91           rustic-cargo-outdated-mode rustic-cargo-test-mode
     92 
     93           "^\\*\\[D\\] FILE backlinks for" "^\\*Denote HEADING backlinks for"))
     94 
     95   (when (display-grayscale-p)
     96     (setq popper-mode-line
     97           '("[POP]")))
     98   (setq popper-echo-dispatch-actions t)
     99   (setq popper-group-function nil)
    100   (if *is-android*
    101       (general-def "C-M-w" #'my-popper-toggle-type-delete-other-window))
    102 
    103   (with-no-warnings
    104     (defun my-popper-fit-window-height (win)
    105       "Determine the height of popup window WIN by fitting it to the buffer's content."
    106       (fit-window-to-buffer
    107        win
    108        (floor (frame-height) 3)
    109        (floor (frame-height) 3)))
    110     (setq popper-window-height #'my-popper-fit-window-height)
    111 
    112     (defun my-popper-clear-sides-shown (&optional buffer)
    113       "Clear `window--sides-shown'."
    114       (with-current-buffer (get-buffer (or buffer (current-buffer)))
    115         (kill-local-variable 'window--sides-shown)))
    116     (advice-add #'popper-raise-popup :after #'my-popper-clear-sides-shown)
    117 
    118     (defun my-popper-toggle-type-delete-other-window ()
    119       "Toggle type of the current buffer; delete other windows when raising."
    120       (interactive)
    121       (let ((popup-p (buffer-local-value 'popper-popup-status (current-buffer))))
    122         (popper-toggle-type (current-buffer))
    123         (when popup-p
    124           (delete-other-windows))))
    125 
    126     (defun popper-close-window-hack (&rest _args)
    127       "Close popper window via `C-g'."
    128       (when (and (called-interactively-p 'interactive)
    129                  (not (region-active-p))
    130                  popper-open-popup-alist)
    131         (let ((window (caar popper-open-popup-alist))
    132               (buffer (cdar popper-open-popup-alist)))
    133           (when (and (window-live-p window)
    134                      (buffer-live-p buffer)
    135                      (not (with-current-buffer buffer
    136                             (derived-mode-p 'eshell-mode
    137                                             'ghostel-mode
    138                                             'shell-mode
    139                                             'term-mode))))
    140             (delete-window window)))))
    141     (advice-add #'keyboard-quit :before #'popper-close-window-hack))
    142 
    143   :config
    144   (popper-echo-mode 1))
    145 
    146 ;; windmove
    147 (my-use-package windmove
    148   :straight nil
    149   :hook
    150   (after-init . windmove-swap-states-default-keybindings))
    151 
    152 (provide 'init-window)
    153 ;;; init-window.el ends here