diff options
| author | jixiufeng <jixiufeng@luojilab.com> | 2019-01-30 20:51:36 +0800 |
|---|---|---|
| committer | Lukas Fürmetz <fuermetz@mailbox.org> | 2019-02-01 20:10:37 +0100 |
| commit | 3e4d1a3744b081b276301e0c62e81d24ae85801c (patch) | |
| tree | ebd4953f6b3cdd661d82801b9d46b984ddada03f | |
| parent | 976c3f27b5908cedbe7d80ac2f63c00a976e82cd (diff) | |
support paste and undo
| -rw-r--r-- | vterm-module.c | 4 | ||||
| -rw-r--r-- | 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, "<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>")) { @@ -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) |
