emacs - fix bug sd/eshell-here
[dotfiles.git] / emacs.d / config.org
index e7e50e1..90b3ad1 100644 (file)
@@ -827,26 +827,23 @@ extend org-mode's easy templates, refer to [[http://coldnew.github.io/coldnew-em
 
 [[https://github.com/magit/magit][Magit]] is a very cool git interface on Emacs.
 
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+and Defined keys, using vi keybindings, Refer abo-abo's setting [[https://github.com/abo-abo/oremacs/blob/c5cafdcebc88afe9e73cc8bd40c49b70675509c7/modes/ora-nextmagit.el][here]]
 
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
   (use-package magit
     :ensure t
-    :commands magit-status magit-blame)
-
-#+END_SRC
-
-Defined keys, using vi keybindings, Refer abo-abo's setting [[https://github.com/abo-abo/oremacs/blob/c5cafdcebc88afe9e73cc8bd40c49b70675509c7/modes/ora-nextmagit.el][here]]
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-  (dolist (map (list magit-status-mode-map
-                     magit-log-mode-map
-                     magit-diff-mode-map
-                     magit-staged-section-map))
-    (define-key map "j" 'magit-section-forward)
-    (define-key map "k" 'magit-section-backward)
-    (define-key map "n" nil)
-    (define-key map "p" nil)
-    (define-key map "v" 'recenter-top-bottom)
-    (define-key map "i" 'magit-section-toggle))
+    :commands magit-status magit-blame
+    :config
+    (dolist (map (list magit-status-mode-map
+                       magit-log-mode-map
+                       magit-diff-mode-map
+                       magit-staged-section-map))
+      (define-key map "j" 'magit-section-forward)
+      (define-key map "k" 'magit-section-backward)
+      (define-key map "n" nil)
+      (define-key map "p" nil)
+      (define-key map "v" 'recenter-top-bottom)
+      (define-key map "i" 'magit-section-toggle)))
 #+END_SRC
 
 * IDO & SMEX
@@ -1238,6 +1235,40 @@ Quickly start eshll in split window below, refer [[http://www.howardism.org/Tech
   (global-set-key (kbd "M-`") #'eshell-here)
 #+END_SRC
 
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+  (defun sd/window-has-eshell ()
+    "Check if current windows list has a eshell buffer, and return the window"
+    (interactive)
+    (let ((ret nil))
+      (dolist (window (window-list))
+        (let ((modename (with-current-buffer (window-buffer window)
+                          major-mode)))
+          (if (equal modename 'eshell-mode)
+              (setq ret window))))
+      ret))
+
+  (defun sd/toggle-eshell-here ()
+    "Toggle a eshell buffer vertically"
+    (interactive)
+    (if (sd/window-has-eshell)
+        (if (equal major-mode 'eshell-mode)
+            (delete-window)
+          (select-window (sd/window-has-eshell)))
+      (progn
+        (split-window-vertically (- (/ (window-total-height) 3)))
+        (other-window 1)
+        (unless (and (boundp 'eshell-buffer-name) (get-buffer eshell-buffer-name))
+          (eshell))
+        (switch-to-buffer eshell-buffer-name)
+        (goto-char (point-max))
+        (eshell-kill-input)
+        (insert (format "cd %s" default-directory))
+        (eshell-send-input))))
+
+  (global-unset-key (kbd "M-`"))
+  (global-set-key (kbd "M-`") 'sd/toggle-eshell-here)
+#+END_SRC
+
 * Misc Settings
 
 ** [[https://github.com/abo-abo/hydra][Hydra]]
@@ -1323,7 +1354,7 @@ Refer [[https://github.com/abo-abo/hydra/blob/master/hydra-examples.el][hydra-ex
            (interactive)
            (split-window-below)
            (windmove-down))
-     "horz" :exit)
+     "horz" :exit t)
     ("o" delete-other-windows "one" :exit t)
     ("a" ace-window "ace")
     ("s" ace-swap-window "swap")