Rewrite `db/run-or-hide-shell' to mimic EShell counterpart

This commit is contained in:
Daniel - 2020-07-31 15:58:37 +02:00
parent 6cca84cdb5
commit 25abde2d9c
No known key found for this signature in database
GPG Key ID: 1C7071A75BB72D64
1 changed files with 25 additions and 8 deletions

View File

@ -61,14 +61,31 @@ If already in `*ansi-term*' buffer, bury it."
(interactive)
(find-file user-init-file))
(defun db/run-or-hide-shell ()
"Opens an shell buffer if not already in one, and closes it
otherwise."
(interactive "")
(if (not (eq 'shell-mode major-mode))
(shell)
(bury-buffer)
(delete-window)))
(defun db/run-or-hide-shell (arg)
"Opens a shell buffer in new window if not already in one.
Otherwise, closes the current shell window. With ARG, switch
to `default-directory' first."
;; idea to split the current window is from
;; http://howardism.org/Technical/Emacs/eshell-fun.html
(interactive "P")
(if (derived-mode-p 'shell-mode)
;; bury buffer; reopen with current working directory if arg is given
(progn
(bury-buffer)
(delete-window)
(and arg (db/run-or-hide-shell arg)))
(if-let ((shell-window (db/find-window-by-buffer-mode 'shell-mode)))
(select-window shell-window)
;; open shell
(let ((current-dir (expand-file-name default-directory))
(height (/ (window-total-height) 3)))
(shell)
(enlarge-window (- height (window-total-height)))
(when arg
(end-of-line)
(comint-kill-input)
(insert (format "cd '%s'" current-dir))
(comint-send-input))))))
;;; General Utilities