aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Fürmetz <fuermetz@mailbox.org>2019-02-01 20:23:51 +0100
committerGitHub <noreply@github.com>2019-02-01 20:23:51 +0100
commit52d45209b37c5f82fcc0bc6191642c5c8a8e609c (patch)
tree16c0dda8c20465c8ac4d96ee3154207f6510f3e2
parent17a8f44e6f42f0fbfdbdff2f88cbe8ac205019dc (diff)
parentf42b941f8e3368a676bd95e39a5fd98bba7906d6 (diff)
Merge pull request #51 from jixiuf/paste-and-undo
support paste and undo
-rw-r--r--vterm-module.c4
-rw-r--r--vterm.el30
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>")) {
diff --git a/vterm.el b/vterm.el
index 1419f97..3f8a47d 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)
@@ -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 ()