Only treat automatically named (e)shell buffers special
This allows to have custom named (e)shell buffers that are treated like any other buffer, and not as the special bottom shell buffers.
This commit is contained in:
parent
9904e24333
commit
2f1868da43
|
@ -17,21 +17,32 @@
|
||||||
(require 'em-dirs)
|
(require 'em-dirs)
|
||||||
(require 'em-hist)
|
(require 'em-hist)
|
||||||
(autoload 'magit-status "magit")
|
(autoload 'magit-status "magit")
|
||||||
(autoload 'db/find-window-by-buffer-mode "db-utils")
|
|
||||||
|
|
||||||
|
|
||||||
;; 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.
|
"Opens an eshell buffer if not already in one.
|
||||||
Otherwise moves the cursor to the window where we have been before."
|
|
||||||
|
Otherwise moves the cursor to the window where we have been before.
|
||||||
|
|
||||||
|
The buffer's name has to start with “*eshell*” to be recognized
|
||||||
|
by this function. Otherwise the current buffer is not treated as
|
||||||
|
an eshell buffer.
|
||||||
|
|
||||||
|
When ARG is given, also switch to `default-directory'."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(if (derived-mode-p 'eshell-mode)
|
(if (and (derived-mode-p 'eshell-mode)
|
||||||
|
(string-match-p "^\\*eshell\\*" (buffer-name)))
|
||||||
;; bury buffer; reopen with current working directory if arg is given
|
;; bury buffer; reopen with current working directory if arg is given
|
||||||
(progn
|
(progn
|
||||||
(bury-buffer)
|
(bury-buffer)
|
||||||
(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 (cl-find-if (lambda (window)
|
||||||
|
(with-current-buffer (window-buffer window)
|
||||||
|
(and (derived-mode-p 'eshell-mode)
|
||||||
|
(string-match-p "^\\*eshell\\*" (buffer-name)))))
|
||||||
|
(window-list-1))))
|
||||||
(select-window eshell-window)
|
(select-window eshell-window)
|
||||||
;; No running eshell found, open new one.
|
;; No running eshell found, open new one.
|
||||||
(let* ((current-dir (expand-file-name default-directory)))
|
(let* ((current-dir (expand-file-name default-directory)))
|
||||||
|
|
|
@ -66,22 +66,31 @@ If already in `*ansi-term*' buffer, bury it."
|
||||||
|
|
||||||
(defun db/run-or-hide-shell (arg)
|
(defun db/run-or-hide-shell (arg)
|
||||||
"Opens a shell buffer in new window if not already in one.
|
"Opens a shell buffer in new window if not already in one.
|
||||||
Otherwise, closes the current shell window. With ARG, switch
|
|
||||||
to `default-directory' of the current buffer first."
|
Otherwise, closes the current shell window.
|
||||||
;; idea to split the current window is from
|
|
||||||
;; http://howardism.org/Technical/Emacs/eshell-fun.html
|
The buffer's name has to start with “*shell*” to be recognized
|
||||||
|
by this function. Otherwise the current buffer is not treated as
|
||||||
|
a shell buffer.
|
||||||
|
|
||||||
|
With ARG, switch to `default-directory' of the current buffer first."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(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 (cl-find-if (lambda (window)
|
||||||
|
(with-current-buffer (window-buffer window)
|
||||||
|
(and (derived-mode-p 'shell-mode)
|
||||||
|
(string-match-p "^\\*shell\\*" (buffer-name)))))
|
||||||
|
(window-list-1))))
|
||||||
(select-window shell-window)
|
(select-window shell-window)
|
||||||
(--if-let (display-buffer (shell))
|
(--if-let (display-buffer (shell))
|
||||||
(select-window it)
|
(select-window it)
|
||||||
(error "Could not start shell (`display-buffer' returned nil)")))))
|
(error "Could not start shell (`display-buffer' returned nil)")))))
|
||||||
(if (not arg)
|
(if (not arg)
|
||||||
;; toggle shell window
|
;; toggle shell window
|
||||||
(if (not (derived-mode-p 'shell-mode))
|
(if (and (derived-mode-p 'shell-mode)
|
||||||
(change-to-shell)
|
(string-match-p "^\\*shell\\*" (buffer-name)))
|
||||||
(bury-buffer))
|
(bury-buffer)
|
||||||
|
(change-to-shell))
|
||||||
|
|
||||||
;; unconditionally go to shell, and also change to cwd
|
;; unconditionally go to shell, and also change to cwd
|
||||||
(let ((current-dir (expand-file-name default-directory)))
|
(let ((current-dir (expand-file-name default-directory)))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user