aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjixiufeng <jixiufeng@luojilab.com>2019-01-30 20:51:36 +0800
committerLukas Fürmetz <fuermetz@mailbox.org>2019-02-01 20:10:37 +0100
commit3e4d1a3744b081b276301e0c62e81d24ae85801c (patch)
treeebd4953f6b3cdd661d82801b9d46b984ddada03f
parent976c3f27b5908cedbe7d80ac2f63c00a976e82cd (diff)
support paste and undo
-rw-r--r--vterm-module.c4
-rw-r--r--vterm.el17
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, "<return>")) {
vterm_keyboard_key(term->vt, VTERM_KEY_ENTER, modifier);
+ }else if (is_key(key, len, "<start_paste>")) {
+ vterm_keyboard_start_paste(term->vt);
+ }else if (is_key(key, len, "<end_paste>")) {
+ vterm_keyboard_end_paste(term->vt);
} else if (is_key(key, len, "<tab>")) {
vterm_keyboard_key(term->vt, VTERM_KEY_TAB, modifier);
} else if (is_key(key, len, "<backspace>")) {
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 "<start_paste>" 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 "<end_paste>" nil nil nil))))
(defvar vterm--redraw-timer nil)
(make-variable-buffer-local 'vterm--redraw-timer)