summaryrefslogtreecommitdiffstats
path: root/init.org
diff options
context:
space:
mode:
authorAmin Bandali <bandali@gnu.org>2018-12-03 08:56:58 -0500
committerAmin Bandali <bandali@gnu.org>2018-12-03 08:58:50 -0500
commit1b93c5be9d8a530d837fe680b33772f1968c248b (patch)
tree00b06d4a28a6e2c4c6ffd00ce71a471012a62546 /init.org
parente505cb8c77c605e8bd1341e4a463635a367500af (diff)
downloadconfigs-1b93c5be9d8a530d837fe680b33772f1968c248b.tar.gz
configs-1b93c5be9d8a530d837fe680b33772f1968c248b.tar.xz
configs-1b93c5be9d8a530d837fe680b33772f1968c248b.zip
[emacs] switch from shell-pop to shell-toggle
for some reason, shell-pop wouldn’t save eshell history
Diffstat (limited to 'init.org')
-rw-r--r--init.org53
1 files changed, 45 insertions, 8 deletions
diff --git a/init.org b/init.org
index 4ff8b94..5c24b9e 100644
--- a/init.org
+++ b/init.org
@@ -1059,7 +1059,7 @@ There's no way I could top that, so I won't attempt to.
#+begin_src emacs-lisp
(use-package eshell
- :defer t
+ :defer 1
:commands eshell
:config
(eval-when-compile (defvar eshell-prompt-regexp))
@@ -1808,15 +1808,52 @@ Emacs package that displays available keybindings in popup
"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]]