#+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 ()
(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 (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))))
+ (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)