[emacs] switch from shell-pop to shell-toggle
authorAmin Bandali <bandali@gnu.org>
Mon, 3 Dec 2018 13:56:58 +0000 (08:56 -0500)
committerAmin Bandali <bandali@gnu.org>
Mon, 3 Dec 2018 13:58:50 +0000 (08:58 -0500)
for some reason, shell-pop wouldn’t save eshell history

.gitmodules
init.org
lib/shell-pop [deleted submodule]
lib/shell-toggle [new submodule]

index c16e0b2..bbf0f16 100644 (file)
 [submodule "s"]
        path = lib/s
        url = git@github.com:magnars/s.el.git
-[submodule "shell-pop"]
-       path = lib/shell-pop
-       url = git@github.com:kyagi/shell-pop-el.git
+[submodule "shell-toggle"]
+       path = lib/shell-toggle
+       url = git@github.com:knu/shell-toggle.el.git
 [submodule "shrink-path"]
        path = lib/shrink-path
        url = git@gitlab.com:bennya/shrink-path.el.git
index 4ff8b94..5c24b9e 100644 (file)
--- 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]]
diff --git a/lib/shell-pop b/lib/shell-pop
deleted file mode 160000 (submodule)
index 4a3a9d0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 4a3a9d093ad1add792bba764c601aa28de302b34
diff --git a/lib/shell-toggle b/lib/shell-toggle
new file mode 160000 (submodule)
index 0000000..0d01bd9
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 0d01bd9a780fdb7fe6609c552523f4498649a3b9