#+begin_src emacs-lisp
(use-package eshell
- :defer t
+ :defer 1
:commands eshell
:config
(eval-when-compile (defvar eshell-prompt-regexp))
"h h p" 'helpful-at-point))
#+end_src
-** [[https://github.com/kyagi/shell-pop-el][shell-pop]]
+** [[https://github.com/knu/shell-toggle.el][shell-toggle]]
#+begin_src emacs-lisp
-(use-package shell-pop
- :defer 1
- :general (amin--leader-keys "a s" 'shell-pop)
- :init
- (setq shell-pop-universal-key "C-c e"
- shell-pop-shell-type '("eshell" "*eshell*" (lambda nil (eshell)))))
+(use-package shell-toggle
+ :after eshell
+ :general (amin--leader-keys "a s" 'amin/shell-toggle)
+ :bind ("C-c e" . amin/shell-toggle)
+ :config
+ (defun amin/shell-toggle (make-cd)
+ "Toggle between the shell buffer and whatever buffer you are editing.
+With a prefix argument MAKE-CD also insert a \"cd DIR\" command
+into the shell, where DIR is the directory of the current buffer.
+
+When called in the shell buffer returns you to the buffer you were editing
+before calling this the first time.
+
+Options: `shell-toggle-goto-eob'"
+ (interactive "P")
+ ;; Try to decide on one of three possibilities:
+ ;; If not in shell-buffer, switch to it.
+ ;; If in shell-buffer, return to state before going to the shell-buffer
+ (if (eq (current-buffer) shell-toggle-shell-buffer)
+ (shell-toggle-buffer-return-from-shell)
+ (progn
+ (shell-toggle-buffer-goto-shell make-cd)
+ (if shell-toggle-full-screen-window-only (delete-other-windows)))))
+
+ ;; override to split horizontally instead
+ (defun shell-toggle-buffer-switch-to-other-window ()
+ "Switch to other window.
+If the current window is the only window in the current frame,
+create a new window and switch to it.
+
+\(This is less intrusive to the current window configuration than
+`switch-buffer-other-window')"
+ (let ((this-window (selected-window)))
+ (other-window 1)
+ ;; If we did not switch window then we only have one window and need to
+ ;; create a new one.
+ (if (eq this-window (selected-window))
+ (progn
+ (split-window-horizontally)
+ (other-window 1)))))
+
+ :custom
+ (shell-toggle-launch-shell 'shell-toggle-eshell))
#+end_src
** [[https://github.com/EricCrosson/unkillable-scratch][unkillable-scratch]]