From 8324b43cc25a60d0f6088bfd5d5c20170f9ece77 Mon Sep 17 00:00:00 2001 From: Paris Kasidiaris Date: Mon, 22 Aug 2016 17:17:58 +0300 Subject: [PATCH] Fix Alt + Arrow movement Fix #239 --- src/xterm.js | 48 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/src/xterm.js b/src/xterm.js index b7032b39..bb74a3e2 100644 --- a/src/xterm.js +++ b/src/xterm.js @@ -2907,39 +2907,63 @@ break; // left-arrow case 37: - if (modifiers) + if (modifiers) { result.key = '\x1b[1;' + (modifiers + 1) + 'D'; - else if (this.applicationCursor) + // HACK: Make Alt + left-arrow behave like Ctrl + left-arrow: move one word backwards + // http://unix.stackexchange.com/a/108106 + if (result.key == '\x1b[1;3D') { + result.key = '\x1b[1;5D'; + } + } else if (this.applicationCursor) { result.key = '\x1bOD'; - else + } else { result.key = '\x1b[D'; + } break; // right-arrow case 39: - if (modifiers) + if (modifiers) { result.key = '\x1b[1;' + (modifiers + 1) + 'C'; - else if (this.applicationCursor) + // HACK: Make Alt + right-arrow behave like Ctrl + right-arrow: move one word forward + // http://unix.stackexchange.com/a/108106 + if (result.key == '\x1b[1;3C') { + result.key = '\x1b[1;5C'; + } + } else if (this.applicationCursor) { result.key = '\x1bOC'; - else + } else { result.key = '\x1b[C'; + } break; // up-arrow case 38: - if (modifiers) + if (modifiers) { result.key = '\x1b[1;' + (modifiers + 1) + 'A'; - else if (this.applicationCursor) + // HACK: Make Alt + up-arrow behave like Ctrl + up-arrow + // http://unix.stackexchange.com/a/108106 + if (result.key == '\x1b[1;3A') { + result.key = '\x1b[1;5A'; + } + } else if (this.applicationCursor) { result.key = '\x1bOA'; - else + } else { result.key = '\x1b[A'; + } break; // down-arrow case 40: - if (modifiers) + if (modifiers) { result.key = '\x1b[1;' + (modifiers + 1) + 'B'; - else if (this.applicationCursor) + // HACK: Make Alt + down-arrow behave like Ctrl + down-arrow + // http://unix.stackexchange.com/a/108106 + if (result.key == '\x1b[1;3B') { + result.key = '\x1b[1;5B'; + } + } else if (this.applicationCursor) { result.key = '\x1bOB'; - else + } else { result.key = '\x1b[B'; + } break; // insert case 45: