From 3e4d1a3744b081b276301e0c62e81d24ae85801c Mon Sep 17 00:00:00 2001 From: jixiufeng Date: Wed, 30 Jan 2019 20:51:36 +0800 Subject: support paste and undo --- vterm-module.c | 4 ++++ vterm.el | 17 ++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/vterm-module.c b/vterm-module.c index b8d4738..63bf8c0 100644 --- a/vterm-module.c +++ b/vterm-module.c @@ -492,6 +492,10 @@ static void term_process_key(Term *term, unsigned char *key, size_t len, VTermModifier modifier) { if (is_key(key, len, "")) { vterm_keyboard_key(term->vt, VTERM_KEY_ENTER, modifier); + }else if (is_key(key, len, "")) { + vterm_keyboard_start_paste(term->vt); + }else if (is_key(key, len, "")) { + vterm_keyboard_end_paste(term->vt); } else if (is_key(key, len, "")) { vterm_keyboard_key(term->vt, VTERM_KEY_TAB, modifier); } else if (is_key(key, len, "")) { diff --git a/vterm.el b/vterm.el index 018fd4e..bf906bf 100644 --- a/vterm.el +++ b/vterm.el @@ -137,6 +137,7 @@ for different shell. " (define-key vterm-mode-map (kbd "C-c C-c") #'vterm-send-ctrl-c) (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) ;; Function keys and most of C- and M- bindings (mapcar (lambda (key) @@ -176,16 +177,26 @@ for different shell. " (interactive) (vterm-send-key "c" nil nil t)) +(defun vterm-undo () + "Sends C-_ to the libvterm" + (interactive) + (vterm-send-key "_" nil nil t)) + (defun vterm-yank () "Implementation of `yank' (paste) in vterm." (interactive) - (vterm-send-string (current-kill 0))) + (vterm-send-string (current-kill 0) + (not current-prefix-arg))) -(defun vterm-send-string (string) +(defun vterm-send-string (string &optional paste-p) "Send the string STRING to vterm." (when vterm--term + (when paste-p + (vterm--update vterm--term "" nil nil nil)) (dolist (char (string-to-list string)) - (vterm--update vterm--term (char-to-string char) nil nil nil)))) + (vterm--update vterm--term (char-to-string char) nil nil nil)) + (when paste-p + (vterm--update vterm--term "" nil nil nil)))) (defvar vterm--redraw-timer nil) (make-variable-buffer-local 'vterm--redraw-timer) -- cgit v1.0 From f42b941f8e3368a676bd95e39a5fd98bba7906d6 Mon Sep 17 00:00:00 2001 From: jixiufeng Date: Wed, 30 Jan 2019 21:19:40 +0800 Subject: check buffer-live-p in vterm--delayed-redraw --- vterm.el | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/vterm.el b/vterm.el index bf906bf..a79f8f1 100644 --- a/vterm.el +++ b/vterm.el @@ -215,12 +215,13 @@ If nil, never delay") (vterm--delayed-redraw (current-buffer)))) (defun vterm--delayed-redraw(buffer) - (with-current-buffer buffer - (let ((inhibit-redisplay t) - (inhibit-read-only t)) - (when vterm--term - (vterm--redraw vterm--term))) - (setq vterm--redraw-timer nil))) + (when (buffer-live-p buffer) + (with-current-buffer buffer + (let ((inhibit-redisplay t) + (inhibit-read-only t)) + (when vterm--term + (vterm--redraw vterm--term))) + (setq vterm--redraw-timer nil)))) ;;;###autoload (defun vterm () -- cgit v1.0