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)
(side . right)
(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
:commands (winner-mode winner-undo winner-redo))

View File

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

View File

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