Let display-buffer handle window placement for shells
This provides the same functionality, but makes it more configurable.
This commit is contained in:
parent
0ff7bba709
commit
47d7e31800
11
init.el
11
init.el
|
@ -623,11 +623,20 @@
|
|||
(side . right)
|
||||
(slot . 0)
|
||||
(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)))))
|
||||
(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))
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Reference in New Issue