forked from redguardtoo/emacs.d
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinit-term-mode.el
92 lines (80 loc) · 2.74 KB
/
init-term-mode.el
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
;; @see http://stackoverflow.com/questions/2886184/copy-paste-in-emacs-ansi-term-shell/2886539#2886539
(defun ash-term-hooks ()
;; dabbrev-expand in term
(define-key term-raw-escape-map "/"
(lambda ()
(interactive)
(let ((beg (point)))
(dabbrev-expand nil)
(kill-region beg (point)))
(term-send-raw-string (substring-no-properties (current-kill 0)))))
;; yank in term (bound to C-c C-y)
(define-key term-raw-escape-map "\C-y"
(lambda ()
(interactive)
(term-send-raw-string (current-kill 0)))))
(add-hook 'term-mode-hook 'ash-term-hooks)
;; {{ @see http://emacs-journey.blogspot.com.au/2012/06/improving-ansi-term.html
;; kill the buffer when terminal is exited
(defadvice term-sentinel (around my-advice-term-sentinel (proc msg))
(if (memq (process-status proc) '(signal exit))
(let ((buffer (process-buffer proc)))
ad-do-it
(kill-buffer buffer))
ad-do-it))
(ad-activate 'term-sentinel)
;; always use bash
(defvar my-term-shell "/bin/bash")
(defadvice ansi-term (before force-bash)
(interactive (list my-term-shell)))
(ad-activate 'ansi-term)
;; utf8
(defun my-term-use-utf8 ()
(set-buffer-process-coding-system 'utf-8-unix 'utf-8-unix))
(add-hook 'term-exec-hook 'my-term-use-utf8)
;; }}
;; {{ multi-term
(defun last-term-buffer (l)
"Return most recently used term buffer."
(when l
(if (eq 'term-mode (with-current-buffer (car l) major-mode))
(car l) (last-term-buffer (cdr l)))))
(defun get-term ()
"Switch to the term buffer last used, or create a new one if
none exists, or if the current buffer is already a term."
(interactive)
(let ((b (last-term-buffer (buffer-list))))
(if (or (not b) (eq 'term-mode major-mode))
(multi-term)
(switch-to-buffer b))))
(define-key global-map (kbd "C-x e") 'multi-term)
(defun term-send-kill-whole-line ()
"Kill whole line in term mode."
(interactive)
(term-send-raw-string "\C-a")
(term-send-raw-string "\C-k"))
(defun term-send-kill-line ()
"Kill line in term mode."
(interactive)
(term-send-raw-string "\C-k"))
(setq multi-term-program "/bin/bash")
(setq term-unbind-key-list '("C-x" "<ESC>"))
(setq term-bind-key-alist
'(("C-c" . term-interrupt-subjob)
("C-p" . term-send-up)
("C-n" . term-send-down)
("C-s" . isearch-forward)
("C-r" . term-send-reverse-search-history)
("C-m" . term-send-raw)
("C-k" . term-send-kill-whole-line)
("C-y" . yank)
("C-_" . term-send-raw)
("M-f" . term-send-forward-word)
("M-b" . term-send-backward-word)
("M-K" . term-send-kill-line)
("M-p" . previous-line)
("M-n" . next-line)
("M-y" . yank-pop)
("M-." . term-send-raw-meta)))
;; }}
(provide 'init-term-mode)