emacs - fix bug emacs here
[dotfiles.git] / emacs.d / config.org
index 1b39c87..9a2ec74 100644 (file)
@@ -1188,63 +1188,38 @@ Occur search key bindings
 #+END_SRC
 
 * Eshell
-
-Eshell alias
-
+*** Eshell alias
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
   (defalias 'e 'ido-find-file)
   (defalias 'ff 'ido-find-file)
   (defalias 'ee 'ido-find-file-other-window)
-
 #+END_SRC
 
-Quickly start eshll in split window below, refer [[http://www.howardism.org/Technical/Emacs/eshell-fun.html][eshell-here]]
-
+*** Eshell erase buffer
 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
-  (defun eshell-x ()
-    (insert "exit")
-    (eshell-send-input)
-    (delete-window))
-
-  (defun eshell-here ()
-    "Opens up a new shell in the directory associated with the
-  current buffer's file. The eshell is renamed to match that
-  directory to make multiple eshell windows easier."
+  (defun sd/eshell-clear-buffer ()
+    "Clear eshell buffer"
     (interactive)
-    (let* ((parent (if (buffer-file-name)
-                       (file-name-directory (buffer-file-name))
-                     default-directory))
-           (height (/ (window-total-height) 3))
-           (name   (car (last (split-string parent "/" t))))
-           (eshell-name (concat "*eshell: " name "*")))
-      (split-window-vertically (- height))
-      (other-window 1)
-      (if (get-buffer eshell-name)
-          (progn
-            (message "buffer exist")
-            (switch-to-buffer eshell-name))
-        (progn
-          (eshell "new")
-          (rename-buffer eshell-name)
-
-          (insert (concat "ls"))
-          (eshell-send-input)))))
+    (let ((inhibit-read-only t))
+      (erase-buffer)
+      (eshell-send-input)))
 
-  (global-unset-key (kbd "M-`"))
-  (global-set-key (kbd "M-`") #'eshell-here)
+   (add-hook 'eshell-mode-hook (lambda ()
+                                (local-set-key (kbd "C-l") 'sd/eshell-clear-buffer)))
 #+END_SRC
 
+*** Toggle Eshell
+Toggle an eshell in split window below, refer [[http://www.howardism.org/Technical/Emacs/eshell-fun.html][eshell-here]]
 #+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))))
+      (walk-windows (lambda (window)
+                      (if (equal (with-current-buffer (window-buffer window) major-mode)
+                                 'eshell-mode)
+                          (setq ret window)))
+                    nil nil)
       ret))
 
   (defun sd/toggle-eshell-here ()
@@ -1252,20 +1227,23 @@ Quickly start eshll in split window below, refer [[http://www.howardism.org/Tech
     (interactive)
     (if (sd/window-has-eshell)
         (if (equal major-mode 'eshell-mode)
-            (delete-window)
+            (progn
+              (if (equal (length (window-list)) 1)
+                  (mode-line-other-buffer)
+                (delete-window)))
           (select-window (sd/window-has-eshell)))
       (progn
-        (split-window-vertically (- (/ (window-total-height) 3)))
-        (other-window 1)
-        (unless (get-buffer eshell-buffer-name)
-          (eshell))
-        (switch-to-buffer eshell-buffer-name)
-        (goto-char (point-max))
-        (eshell-kill-input)
-        (message "wowo is %s" default-directory)
-        (message "wowo is %s" (file-name-directory (buffer-name)))
-        (insert (format "cd %s" default-directory))
-        (eshell-send-input))))
+        (let ((dir default-directory))
+          
+          (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" dir))
+          (eshell-send-input)))))
 
   (global-unset-key (kbd "M-`"))
   (global-set-key (kbd "M-`") 'sd/toggle-eshell-here)