From da121a44b79bef2f76a8fa0ee2606a12f604951a Mon Sep 17 00:00:00 2001 From: jixiufeng Date: Mon, 8 Jul 2019 21:21:57 +0800 Subject: support yank-pop --- vterm.el | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/vterm.el b/vterm.el index 4a4069b..6160a88 100644 --- a/vterm.el +++ b/vterm.el @@ -84,7 +84,7 @@ :type 'number :group 'vterm) -(defcustom vterm-keymap-exceptions '("C-c" "C-x" "C-u" "C-g" "C-h" "M-x" "M-o" "C-v" "M-v" "C-y") +(defcustom vterm-keymap-exceptions '("C-c" "C-x" "C-u" "C-g" "C-h" "M-x" "M-o" "C-v" "M-v" "C-y" "M-y") "Exceptions for vterm-keymap. If you use a keybinding with a prefix-key, add that prefix-key to @@ -274,6 +274,7 @@ If nil, never delay") (define-key vterm-mode-map [end] #'vterm--self-insert) (define-key vterm-mode-map [escape] #'vterm--self-insert) (define-key vterm-mode-map [remap yank] #'vterm-yank) +(define-key vterm-mode-map [remap yank-pop] #'vterm-yank-pop) (define-key vterm-mode-map (kbd "C-SPC") #'vterm--self-insert) (define-key vterm-mode-map (kbd "C-_") #'vterm--self-insert) (define-key vterm-mode-map (kbd "C-/") #'vterm-undo) @@ -391,11 +392,22 @@ If nil, never delay") (interactive) (vterm-send-key "_" nil nil t)) -(defun vterm-yank () +(defun vterm-yank (&optional arg) "Implementation of `yank' (paste) in vterm." - (interactive) - (vterm-send-string (current-kill 0) - (not current-prefix-arg))) + (interactive "P") + (let ((inhibit-read-only t)) + (cl-letf (((symbol-function 'insert-for-yank) + #'(lambda(str) (vterm-send-string str t)))) + (yank arg)))) + +(defun vterm-yank-pop(&optional arg) + "Implementation of `yank-pop' in vterm." + (interactive "p") + (let ((inhibit-read-only t) + (yank-undo-function #'(lambda(_start _end) (vterm-undo)))) + (cl-letf (((symbol-function 'insert-for-yank) + #'(lambda(str) (vterm-send-string str t)))) + (yank-pop arg)))) (defun vterm-send-string (string &optional paste-p) "Send the string STRING to vterm. -- cgit v1.0