From 572da4e4144dace69cc9b78f3978cc5046cfb87c Mon Sep 17 00:00:00 2001 From: Dominik Richter Date: Sun, 10 Apr 2016 16:08:05 -0400 Subject: [PATCH] fix ansi-escaped word-movement Grab ANSI-based movement keys which result in `\e[1;5D` and `\e[1;5C`. Extend the escape handler to chain these and then add both to the list of pre-defined handlers --- lib/coolline/coolline.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/coolline/coolline.rb b/lib/coolline/coolline.rb index 1a54750..58fb9a4 100644 --- a/lib/coolline/coolline.rb +++ b/lib/coolline/coolline.rb @@ -53,6 +53,8 @@ class Coolline Handler.new(/\A\e(?:\C-h|\x7F)\z/, &:kill_backward_word), Handler.new("\eb", &:backward_word), Handler.new("\ef", &:forward_word), + Handler.new("\e[1;5D", &:backward_word), + Handler.new("\e[1;5C", &:forward_word), Handler.new("\e[A", &:previous_history_line), Handler.new("\e[B", &:next_history_line), Handler.new("\e[3~", &:kill_current_char), @@ -481,7 +483,8 @@ def handle(char) def handle_escape(char) if char == "[" && @accumulator =~ /\A\e?\e\z/ or - char =~ /\d/ && @accumulator =~ /\A\e?\e\[\d*\z/ or + char =~ /\d/ && @accumulator =~ /\A\e?\e\[(\d+;)?\d*\z/ or + char == ';' && @accumulator =~ /\A\e?\e\[\d+\z/ or char == "\e" && @accumulator == "\e" or char == "O" && @accumulator == "\e" @accumulator << char