From 4f0cb66bbe335cdfa9fdb728c4e30b1f8c095a87 Mon Sep 17 00:00:00 2001 From: James Nguyen Date: Tue, 21 May 2019 19:04:35 -0700 Subject: [PATCH] Vterm: Add a way to send ESC to vterm process --- evil-collection-vterm.el | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/evil-collection-vterm.el b/evil-collection-vterm.el index f8fd553..6df5466 100644 --- a/evil-collection-vterm.el +++ b/evil-collection-vterm.el @@ -50,6 +50,27 @@ Credits: https://github.com/akermu/emacs-libvterm/pull/70" (interactive) (process-send-string vterm--process "\C-m")) +(defvar-local evil-collection-vterm-send-escape-to-vterm-p nil + "Track whether or not we send ESC to `vterm' or `emacs'.") + +(defun evil-collection-vterm-toggle-send-escape () + "Toggle where ESC is sent between `vterm' and `emacs'. + +This is needed for programs that use ESC, e.g. vim or an ssh'd emacs that +also uses `evil-mode'." + (interactive) + (if evil-collection-vterm-send-escape-to-vterm-p + (evil-collection-define-key 'insert 'vterm-mode-map (kbd "") + (lookup-key evil-insert-state-map (kbd ""))) + (evil-collection-define-key 'insert 'vterm-mode-map + (kbd "") 'vterm--self-insert)) + (setq evil-collection-vterm-send-escape-to-vterm-p + (not evil-collection-vterm-send-escape-to-vterm-p)) + (message (format "Sending ESC to %s." + (if evil-collection-vterm-send-escape-to-vterm-p + "vterm" + "emacs")))) + ;;;###autoload (defun evil-collection-vterm-setup () "Set up `evil' bindings for `vterm'." @@ -60,7 +81,12 @@ Credits: https://github.com/akermu/emacs-libvterm/pull/70" ;; FIXME: Remove this once https://github.com/akermu/emacs-libvterm/pull/70 ;; is in. - (evil-collection-define-key 'insert 'vterm-mode-map [return] #'evil-collection-vterm-send-return) + (evil-collection-define-key 'insert 'vterm-mode-map + [return] #'evil-collection-vterm-send-return) + + ;; Open to a better binding... + (evil-collection-define-key '(normal insert) 'vterm-mode-map + (kbd "C-c C-z") 'evil-collection-vterm-toggle-send-escape) ;; Evil has some "C-" bindings in insert state that shadow regular terminal ;; bindings. Don't raw-send "C-c" (prefix key) nor "C-h" (help prefix).