aboutsummaryrefslogtreecommitdiff
path: root/.emacs.d/rul-lisp/packages/rul-terminals.el
diff options
context:
space:
mode:
Diffstat (limited to '.emacs.d/rul-lisp/packages/rul-terminals.el')
-rw-r--r--.emacs.d/rul-lisp/packages/rul-terminals.el54
1 files changed, 54 insertions, 0 deletions
diff --git a/.emacs.d/rul-lisp/packages/rul-terminals.el b/.emacs.d/rul-lisp/packages/rul-terminals.el
new file mode 100644
index 0000000..f6a8913
--- /dev/null
+++ b/.emacs.d/rul-lisp/packages/rul-terminals.el
@@ -0,0 +1,54 @@
+(use-package vterm
+ :ensure t
+ :init
+ (setq vterm-always-compile-module t
+ vterm-max-scrollback 100000)
+ :hook
+ (vterm-mode . goto-address-mode)
+ :bind
+ (:map vterm-mode-map
+ ("C-c C-t" . vterm-copy-mode)
+ ("C-l" . vterm-clear))
+ :config
+ (define-key vterm-mode-map (kbd "C-c C-c")
+ (lambda ()
+ (interactive)
+ (vterm-send-string "\C-c")))
+
+ (defun rul/vterm-copy-and-exit (beg end)
+ "Copy region and exit `vterm-copy-mode'."
+ (interactive "r")
+ (kill-ring-save beg end)
+ (vterm-copy-mode -1))
+
+ (define-key vterm-copy-mode-map (kbd "w") #'rul/vterm-copy-and-exit)
+ (define-key vterm-copy-mode-map (kbd "M-w") #'rul/vterm-copy-and-exit))
+
+(use-package multi-vterm
+ :ensure t
+ :after vterm
+ :bind (("C-c t" . multi-vterm))
+ :config
+ (setq vterm-kill-buffer-on-exit t)
+
+ (defvar-local rul/vterm-close-tab-on-kill nil
+ "When non-nil, close this buffer's tab when the vterm buffer is killed.")
+
+ (defun rul/vterm-maybe-close-tab ()
+ "Close the current tab if this vterm buffer was opened in its own tab."
+ (when rul/vterm-close-tab-on-kill
+ (tab-close)))
+
+ (defun rul/vterm-new-tab ()
+ "Create a new tab and open a new vterm."
+ (interactive)
+ (tab-new)
+ (multi-vterm)
+ (setq-local rul/vterm-close-tab-on-kill t)
+ (add-hook 'kill-buffer-hook #'rul/vterm-maybe-close-tab nil t))
+
+ ;; Inside vterm buffers, make C-c t spawn a new tab + vterm
+ (define-key vterm-mode-map (kbd "C-c t") #'rul/vterm-new-tab)
+ (define-key vterm-mode-map (kbd "C-S-t") #'rul/vterm-new-tab))
+
+(provide 'rul-terminals)
nihil fit ex nihilo