aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Fürmetz <fuermetz@mailbox.org>2019-07-31 14:39:45 +0200
committerLukas Fürmetz <fuermetz@mailbox.org>2019-07-31 14:39:45 +0200
commitecd362b5d92f62626b18258eeef2b2a04706c86e (patch)
tree6bc826dd39fb90213064720c5136643b4dcc0503
parent7765a7e03e62c954c7ac0a606d513c7e2f59611d (diff)
Add support for backtab
Fixes #69
-rw-r--r--vterm-module.c2
-rw-r--r--vterm.el14
2 files changed, 13 insertions, 3 deletions
diff --git a/vterm-module.c b/vterm-module.c
index 02daed5..371c5b7 100644
--- a/vterm-module.c
+++ b/vterm-module.c
@@ -544,6 +544,8 @@ static void term_process_key(Term *term, unsigned char *key, size_t len,
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, "<backtab>") || is_key(key, len, "<iso-lefttab>")) {
+ vterm_keyboard_key(term->vt, VTERM_KEY_TAB, VTERM_MOD_SHIFT);
} else if (is_key(key, len, "<backspace>")) {
vterm_keyboard_key(term->vt, VTERM_KEY_BACKSPACE, modifier);
} else if (is_key(key, len, "<escape>")) {
diff --git a/vterm.el b/vterm.el
index 43cd4e8..1ac9275 100644
--- a/vterm.el
+++ b/vterm.el
@@ -163,6 +163,7 @@ for different shell"
;; Keybindings
(define-key vterm-mode-map [tab] #'vterm--self-insert)
+(define-key vterm-mode-map [backtab] #'vterm--self-insert)
(define-key vterm-mode-map [backspace] #'vterm--self-insert)
(define-key vterm-mode-map [M-backspace] #'vterm--self-insert)
(define-key vterm-mode-map [return] #'vterm--self-insert)
@@ -194,6 +195,15 @@ for different shell"
unless (member key vterm-keymap-exceptions)
collect key))))
+(defun vterm-event-basic-type (event)
+ "Same as `event-basic-type', except the downcasing of EVENT."
+ (if (consp event)
+ (setq event (car event)))
+ (if (symbolp event)
+ (car (get event 'event-symbol-elements))
+ (let* ((base (logand event (1- ?\A-\^@))))
+ (if (< base 32) (logior base 64) base))))
+
(defun vterm--self-insert ()
"Sends invoking key to libvterm."
(interactive)
@@ -202,7 +212,7 @@ for different shell"
(shift (memq 'shift modifiers))
(meta (memq 'meta modifiers))
(ctrl (memq 'control modifiers)))
- (when-let ((key (key-description (vector (event-basic-type last-input-event)))))
+ (when-let ((key (key-description (vector (vterm-event-basic-type last-input-event)))))
(vterm-send-key key shift meta ctrl)))))
(defun vterm-send-key (key &optional shift meta ctrl)
@@ -210,8 +220,6 @@ for different shell"
(when vterm--term
(let ((inhibit-redisplay t)
(inhibit-read-only t))
- (when (and shift (not meta) (not ctrl))
- (setq key (upcase key)))
(vterm--update vterm--term key shift meta ctrl))))
(defun vterm-send-ctrl-c ()