Compare commits

..

2 Commits

Author SHA1 Message Date
47d7e31800
Let display-buffer handle window placement for shells
This provides the same functionality, but makes it more configurable.
2023-02-13 13:22:51 +01:00
0ff7bba709
Explicitly make Help reuse windows whenever available
I think this is the default anyway, but let's make it clear.
2023-02-13 13:12:08 +01:00
3 changed files with 26 additions and 17 deletions

16
init.el
View File

@ -622,7 +622,21 @@
(display-buffer-in-side-window) (display-buffer-in-side-window)
(side . right) (side . right)
(slot . 0) (slot . 0)
(window-width . 0.33))))) (window-width . 0.33)))
;; Inspired by masteringemacs
(add-to-list 'display-buffer-alist
'("^\\*Help\\*"
(display-buffer-reuse-window
display-buffer-pop-up-window)
(inhibit-same-window . t)))
;; Inspired by masteringemacs
(add-to-list 'display-buffer-alist
'("^\\*e?shell\\*"
display-buffer-in-direction
(direction . bottom)
(window . root)
(window-height . 0.33)
(dedicated . t)))))
(use-package winner (use-package winner
:commands (winner-mode winner-undo winner-redo)) :commands (winner-mode winner-undo winner-redo))

View File

@ -23,10 +23,8 @@
;; Various ;; Various
(defun db/run-or-hide-eshell (arg) (defun db/run-or-hide-eshell (arg)
"Opens an eshell buffer if not already in one, and otherwise "Opens an eshell buffer if not already in one.
returns to where we have been before." Otherwise moves the cursor to the window where we have been before."
;; idea to split the current window is from
;; http://howardism.org/Technical/Emacs/eshell-fun.html
(interactive "P") (interactive "P")
(if (derived-mode-p 'eshell-mode) (if (derived-mode-p 'eshell-mode)
;; bury buffer; reopen with current working directory if arg is given ;; bury buffer; reopen with current working directory if arg is given
@ -35,17 +33,16 @@
(and arg (db/run-or-hide-eshell arg))) (and arg (db/run-or-hide-eshell arg)))
(if-let ((eshell-window (db/find-window-by-buffer-mode 'eshell-mode))) (if-let ((eshell-window (db/find-window-by-buffer-mode 'eshell-mode)))
(select-window eshell-window) (select-window eshell-window)
;; open eshell ;; No running eshell found, open new one.
(let* ((current-dir (expand-file-name default-directory)) (let* ((current-dir (expand-file-name default-directory)))
(height (/ (frame-text-lines) 3))) (--if-let (display-buffer (eshell 1))
(select-window (split-window (frame-root-window) (- height) 'below)) (select-window it)
(eshell 1) (error "Could not start eshell (`display-buffer' returned nil)"))
(when arg (when arg
(end-of-line) (end-of-line)
(eshell-kill-input) (eshell-kill-input)
(insert (format "cd '%s'" current-dir)) (insert (format "cd '%s'" current-dir))
(eshell-send-input)))) (eshell-send-input))))))
(set-window-dedicated-p (selected-window) t)))
(defun eshell-clear-buffer () (defun eshell-clear-buffer ()
"Clear terminal." "Clear terminal."

View File

@ -74,11 +74,9 @@ If already in `*ansi-term*' buffer, bury it."
(cl-flet ((change-to-shell () (cl-flet ((change-to-shell ()
(if-let ((shell-window (db/find-window-by-buffer-mode 'shell-mode))) (if-let ((shell-window (db/find-window-by-buffer-mode 'shell-mode)))
(select-window shell-window) (select-window shell-window)
;; open shell in buffer with height of ⅓ of current window (--if-let (display-buffer (shell))
(let ((height (/ (frame-text-lines) 3))) (select-window it)
(select-window (split-window (frame-root-window) (- height) 'below)) (error "Could not start shell (`display-buffer' returned nil)")))))
(shell)))
(set-window-dedicated-p (selected-window) t)))
(if (not arg) (if (not arg)
;; toggle shell window ;; toggle shell window
(if (not (derived-mode-p 'shell-mode)) (if (not (derived-mode-p 'shell-mode))