summaryrefslogtreecommitdiff
path: root/init-eshell.el
blob: da42443b9e83092fc87254efd63c18bd7366efe6 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
(require 'eshell)
(require 'shell-switcher)
(setq shell-switcher-mode t)
(add-hook 'eshell-mode-hook 'shell-switcher-manually-register-shell)
(setq eshell-history-size 10000)

;; author: KaiGrossjohann on EmacsWiki
(defun eshell/ff (&rest args)
  "Invoke `find-file' on the file.
    \"ff +42 foo\" also goes to line 42 in the buffer."
  (while args
    (if (string-match "\\`\\+\\([0-9]+\\)\\'" (car args))
        (let* ((line (string-to-number (match-string 1 (pop args))))
               (file (pop args)))
          (find-file file)
          (goto-line line))
      (find-file (pop args)))))


;; convenience functions to input the remote root/home dir when in a
;; directory on a remote host
(defun my/tramp-root ()
   "Print root directory on the remote host."
   (interactive)
   (let ((pieces (split-string (eshell/pwd) ":/")))
     (insert-string (if (> (length pieces) 1)
                        (concat (car pieces) ":/")
                      "/"))))

(defun my/tramp-home ()
   "Print home directory path on the remote host."
   (interactive)
   (let ((pieces (split-string (eshell/pwd) ":/")))
     (insert-string (if (> (length pieces) 1)
                        (concat (car pieces) ":~/")
                      "~/"))))

(add-hook 'eshell-mode-hook
          '(lambda () (define-key eshell-mode-map (kbd "C-c /") 'my/tramp-root)))
(add-hook 'eshell-mode-hook
          '(lambda () (define-key eshell-mode-map (kbd "C-c ~") 'my/tramp-home)))


;; start a hidden eshell on startup
(add-hook 'emacs-startup-hook #'(lambda ()
                                  (let ((default-directory (getenv "HOME")))
                                    (command-execute 'eshell)
                                    (bury-buffer))))

;; use cat as the pager in shell mode, because shell-mode is not an ANSI terminal
(setenv "PAGER" "cat")