diff options
-rw-r--r-- | init.el | 1 | ||||
-rw-r--r-- | init/term-setup.el | 46 |
2 files changed, 47 insertions, 0 deletions
diff --git a/init.el b/init.el index f237d17013a1..aedee7b5dd5e 100644 --- a/init.el +++ b/init.el @@ -32,6 +32,7 @@ settings modes bindings + term-setup eshell-setup haskell-setup rust-setup diff --git a/init/term-setup.el b/init/term-setup.el new file mode 100644 index 000000000000..e8c74387150c --- /dev/null +++ b/init/term-setup.el @@ -0,0 +1,46 @@ +;; Configuration for multi-term mode: + +(require 'multi-term) + +(defun open-or-create-term-buffer (buffer-name) + "Switch to the buffer with BUFFER-NAME or create a + new (multi-)term-mode buffer." + (let ((buffer (get-buffer buffer-name))) + (if (not buffer) + (multi-term) + (switch-to-buffer buffer)))) + +(defun counsel-switch-to-term () + "Switch to a (multi-)term buffer or create one." + (interactive) + (let ((terms (counsel-list-buffers-with-mode 'term-mode))) + (if terms + (ivy-read "Switch to term buffer: " + (cons "New terminal" terms) + :caller 'counsel-switch-to-term + :require-match t + :action #'open-or-create-term-buffer) + (multi-term)))) + +(defun term-rename () + "Rename the current terminal buffer." + (interactive) + (let* ((buffer (get-buffer (buffer-name))) + (mode (buffer-local-value 'major-mode buffer))) + (if (equal 'term-mode mode) + (rename-buffer (format "*terminal<%s>*" (read-string "New terminal name: "))) + (error "This function is only intended to rename terminal buffers.")))) + +(global-set-key (kbd "C-x t") #'counsel-switch-to-term) + +;; term-mode's attempt to use isearch is not my favourite thing in the +;; world. +(delete '("C-r" . isearch-backward) term-bind-key-alist) +(delete '("C-s" . isearch-forward) term-bind-key-alist) + +(add-to-list 'term-bind-key-alist '("C-r" . term-send-reverse-search-history)) +(add-to-list 'term-bind-key-alist '("C-c C-l" . term-line-mode)) +(add-to-list 'term-bind-key-alist '("C-s" . swiper)) +(add-to-list 'term-bind-key-alist '("C-c C-r" . term-rename)) + +(provide 'term-setup) |