From d0225168a726144e699f6b049e98e167daf0705f Mon Sep 17 00:00:00 2001 From: jixiuf Date: Thu, 1 Aug 2019 11:04:43 +0800 Subject: add vterm-copy-mode. +When you enable `vterm-copy-mode`,the terminal buffer would behave like a normal `read-only` text buffer. +Then you can search in the output terminal, copy text, etc. +the default keybinding is `C-cC-t`. --- README.md | 4 ++++ vterm.el | 18 +++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 308621b..8dc78c6 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,10 @@ Open a terminal in the current window. ## `vterm-other-window` Open a terminal in another window. +## `vterm-copy-mode` +When you enable `vterm-copy-mode`,the terminal buffer would behave like a normal `read-only` text buffer. +Then you can search in the output terminal, copy text, etc. +the default keybinding is `C-cC-t`. # Customization diff --git a/vterm.el b/vterm.el index 1c9e8f4..da80143 100644 --- a/vterm.el +++ b/vterm.el @@ -232,7 +232,7 @@ If nil, never delay") :name "vterm" :buffer (current-buffer) :command `("/bin/sh" "-c" - ,(format "stty -nl sane iutf8 erase ^? rows %d columns %d >/dev/null && exec %s" + ,(format "stty -nl sane ixon iutf8 erase ^? rows %d columns %d >/dev/null && exec %s" (window-body-height) (window-body-width) vterm-shell)) @@ -262,6 +262,7 @@ If nil, never delay") (define-key vterm-mode-map (kbd "C-_") #'vterm--self-insert) (define-key vterm-mode-map (kbd "C-SPC") #'vterm--self-insert) (define-key vterm-mode-map (kbd "C-/") #'vterm-undo) +(define-key vterm-mode-map (kbd "C-c C-t") #'vterm-copy-mode) ;; Function keys and most of C- and M- bindings (mapc (lambda (key) @@ -276,6 +277,21 @@ If nil, never delay") unless (member key vterm-keymap-exceptions) collect key)))) +(defvar vterm-copy-map (make-sparse-keymap)) +(define-key vterm-copy-map (kbd "C-c C-t") #'vterm-copy-mode) + +(define-minor-mode vterm-copy-mode + "Toggle vterm copy mode." + :group 'vterm + :lighter " VTermCopy" + :keymap vterm-copy-map + (if vterm-copy-mode + (progn ;enable vterm-copy-mode + (use-local-map nil) + (vterm-send-key "s" nil nil t)) + (use-local-map vterm-mode-map) + (vterm-send-key "q" nil nil t))) + (defun vterm--self-insert () "Sends invoking key to libvterm." (interactive) -- cgit v1.0