diff options
| author | Lukas Fürmetz <fuermetz@mailbox.org> | 2019-02-01 20:23:51 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-02-01 20:23:51 +0100 |
| commit | 52d45209b37c5f82fcc0bc6191642c5c8a8e609c (patch) | |
| tree | 16c0dda8c20465c8ac4d96ee3154207f6510f3e2 | |
| parent | 17a8f44e6f42f0fbfdbdff2f88cbe8ac205019dc (diff) | |
| parent | f42b941f8e3368a676bd95e39a5fd98bba7906d6 (diff) | |
Merge pull request #51 from jixiuf/paste-and-undo
support paste and undo
| -rw-r--r-- | vterm-module.c | 4 | ||||
| -rw-r--r-- | vterm.el | 30 |
2 files changed, 25 insertions, 9 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) @@ -204,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 () |
