;; -*- lexical-binding: t; -*- ;; Restore old window configurations (use-package winner :ensure nil :commands (winner-undo winner-redo) :hook elpaca-after-init :init (setq winner-boring-buffers '("*Completions*" "*Compile-Log*" "*inferior-lisp*" "*Fuzzy Completions*" "*Apropos*" "*Help*" "*cvs*" "*Buffer List*" "*Ibuffer*" "*esh command on file*"))) (defun split-window-horizontally-instead () "Kill other windows and split the current window horizontally." (interactive) (let* ((next-window (next-window)) (other-buffer (and next-window (window-buffer next-window)))) (delete-other-windows) (split-window-horizontally) (when other-buffer (set-window-buffer (next-window) other-buffer)))) (defun split-window-vertically-instead () "Kill other windows and split the current window vertically." (interactive) (let* ((next-window (next-window)) (other-buffer (and next-window (window-buffer next-window)))) (delete-other-windows) (split-window-vertically) (when other-buffer (set-window-buffer (next-window) other-buffer)))) (use-package ace-window :hook (emacs-startup . ace-window-display-mode) :bind (([remap other-window] . ace-window) ("M-o" . ace-window) ("C-c w" . ace-window-hydra/body)) :custom (aw-scope 'frame) :pretty-hydra (("Actions" (("TAB" other-window "switch") ("x" ace-delete-window "delete") ("X" ace-delete-other-windows "delete other" :exit t) ("s" ace-swap-window "swap") ("a" ace-select-window "select" :exit t) ("m" maximize-window "maximize" :exit t) ("u" toggle-frame-fullscreen "fullscreen" :exit t)) "Resize" (("h" shrink-window-horizontally "←") ("j" enlarge-window "↓") ("k" shrink-window "↑") ("l" enlarge-window-horizontally "→") ("n" balance-windows "balance")) "Split" (("r" split-window-right "horizontally") ("R" split-window-horizontally-instead "split-window-horizontally-instead") ("v" split-window-below "vertically") ("V" split-window-vertically-instead "split-window-vertically-instead")) "Zoom" (("+" text-scale-increase "in") ("=" text-scale-increase "in") ("-" text-scale-decrease "out") ("0" (text-scale-increase 0) "reset")) "Misc" (("o" set-frame-font "frame font") ("f" make-frame-command "new frame") ("d" delete-frame "delete frame") ("" winner-undo "winner undo") ("" winner-redo "winner redo"))))) (use-package popper :custom (popper-group-function #'popper-group-by-directory) (popper-echo-dispatch-actions t) :bind (:map popper-mode-map ("C-h z" . popper-toggle) ("C-" . popper-cycle) ("C-M-" . popper-toggle-type)) :hook (emacs-startup . popper-echo-mode) :init (setq popper-mode-line "" popper-reference-buffers '("\\*Messages\\*$" "Output\\*$" "\\*Pp Eval Output\\*$" "^\\*eldoc.*\\*$" "\\*Compile-Log\\*$" "\\*Completions\\*$" "\\*Warnings\\*$" "\\*Async Shell Command\\*$" "\\*Apropos\\*$" "\\*Backtrace\\*$" "\\*Calendar\\*$" "\\*Fd\\*$" "\\*Find\\*$" "\\*Finder\\*$" "\\*Kill Ring\\*$" "\\*Embark \\(Collect\\|Live\\):.*\\*$" bookmark-bmenu-mode comint-mode compilation-mode help-mode helpful-mode tabulated-list-mode Buffer-menu-mode flymake-diagnostics-buffer-mode gnus-article-mode devdocs-mode grep-mode occur-mode rg-mode osx-dictionary-mode fanyi-mode "^\\*gt-result\\*$" "^\\*gt-log\\*$" "^\\*Process List\\*$" process-menu-mode list-environment-mode cargo-process-mode "^\\*.*eat.*\\*.*$" "^\\*.*eshell.*\\*.*$" "^\\*.*shell.*\\*.*$" "^\\*.*terminal.*\\*.*$" "^\\*.*vterm[inal]*.*\\*.*$" "\\*DAP Templates\\*$" dap-server-log-mode "\\*ELP Profiling Restuls\\*" profiler-report-mode "\\*package update results\\*$" "\\*Package-Lint\\*$" "\\*[Wo]*Man.*\\*$" "\\*ert\\*$" overseer-buffer-mode "\\*gud-debug\\*$" "\\*lsp-help\\*$" "\\*lsp session\\*$" "\\*quickrun\\*$" "\\*tldr\\*$" "\\*vc-.*\\**" "\\*diff-hl\\**" "^\\*macro expansion\\**" "\\*Agenda Commands\\*" "\\*Org Select\\*" "\\*Capture\\*" "^CAPTURE-.*\\.org*" "\\*Gofmt Errors\\*$" "\\*Go Test\\*$" godoc-mode "\\*docker-.+\\*" "\\*prolog\\*" inferior-python-mode inf-ruby-mode swift-repl-mode "\\*rustfmt\\*$" rustic-compilation-mode rustic-cargo-clippy-mode rustic-cargo-outdated-mode rustic-cargo-run-mode rustic-cargo-test-mode "\\*haskell\\*")) (add-to-list 'display-buffer-alist '("\\*OCaml\\*" (display-buffer-reuse-window display-buffer-in-direction) (direction . right) (window-width . 0.5))) :config (with-no-warnings (defun my-popper-fit-window-height (win) "Adjust the height of popup window WIN to fit the buffer's content." (let ((desired-height (floor (/ (frame-height) 3)))) (fit-window-to-buffer win desired-height desired-height))) (setq popper-window-height #'my-popper-fit-window-height) (defun popper-close-window-hack (&rest _args) "Close popper window via `C-g'." (when (and ; (called-interactively-p 'interactive) (not (region-active-p)) popper-open-popup-alist) (let ((window (caar popper-open-popup-alist)) (buffer (cdar popper-open-popup-alist))) (when (and (window-live-p window) (buffer-live-p buffer) (not (with-current-buffer buffer (derived-mode-p 'eshell-mode 'shell-mode 'term-mode 'vterm-mode)))) (delete-window window))))) (advice-add #'keyboard-quit :before #'popper-close-window-hack))) (provide 'init-window) ;;; init-window.el ends here