From 2646d51a0bb2551e1d53d164cea2a6a15be44b6e Mon Sep 17 00:00:00 2001 From: Kurtis Rader Date: Sun, 31 Jan 2016 17:37:51 -0800 Subject: change default escape timeout This changes the default escape timeout for the default keybindings (emacs mode) to 300ms and the default for vi keybindings to 10ms. I couldn't resist fixing a few nits in the fish_vi_key_bindings.fish file since I was touching it to set the escape timeout. --- tests/bind.expect | 122 +++++++++++++++++++++++++++++++------------------- tests/bind.expect.out | 21 +++++---- 2 files changed, 89 insertions(+), 54 deletions(-) (limited to 'tests') diff --git a/tests/bind.expect b/tests/bind.expect index f8caa166..6b5278ee 100644 --- a/tests/bind.expect +++ b/tests/bind.expect @@ -2,94 +2,128 @@ spawn $fish expect_prompt -# Test switching key bindings to vi mode. This should leave the mode in the -# appropriate state (i.e., insert mode). These initial tests assume the -# default escape timeout of 500ms is in effect. +# Fish should start in default-mode (i.e., emacs) bindings. The default escape +# timeout is 300ms. +# Verify the emacs transpose word (\et) behavior using various delays, +# including none, after the escape character. + +# Start by testing with no delay. This should transpose the words. +send "echo abc def" +send "\033t\r" +expect_prompt -re {\r\ndef abc\r\n} { + puts "emacs transpose words, default timeout: no delay" +} unmatched { + puts stderr "emacs transpose words fail, default timeout: no delay" +} + +# Now test with a delay > 0 and < the escape timeout. This should transpose +# the words. +send "echo ghi jkl" +send "\033" +sleep 0.200 +send "t\r" +expect_prompt -re {\r\njkl ghi\r\n} { + puts "emacs transpose words, default timeout: short delay" +} unmatched { + puts stderr "emacs transpose words fail, default timeout: short delay" +} + +# Now test with a delay > the escape timeout. The transposition should not +# occur and the "t" should become part of the text that is echoed. +send "echo mno pqr" +send "\033" +sleep 0.400 +send "t\r" +expect_prompt -re {\r\nmno pqrt\r\n} { + puts "emacs transpose words, default timeout: long delay" +} unmatched { + puts stderr "emacs transpose words fail, default timeout: long delay" +} + +# Test vi key bindings. +# This should leave vi mode in the insert state. send "set -g fish_key_bindings fish_vi_key_bindings\r" expect_prompt +# These vi tests assume the fish_vi_key_bindings default escape timeout of +# 10ms is in effect; not the 300ms timeout for the default-mode. +# # This test is only present to make the Travis-CI framework succeed -# consistently. It's not clear why the following tests succeed without this +# consistently. It's not clear why the subsequent tests succeed without this # test when executed on a local machine but not in the Travis-CI framework. send "echo success: default escape timeout\r" expect_prompt -re {\r\nsuccess: default escape timeout\r\n} { - puts "prime vi mode: default escape timeout" + puts "prime vi mode, default timeout" } unmatched { - puts stderr "prime vi mode fail: default escape timeout" + puts stderr "prime vi mode, default timeout" } send "echo fail: default escape timeout" send "\033" # Delay needed to allow fish to transition to vi "normal" mode. -sleep 0.550 +sleep 0.020 send "ddi" send "echo success: default escape timeout\r" expect_prompt -re {\r\nsuccess: default escape timeout\r\n} { - puts "vi replace line: default escape timeout" + puts "vi replace line, default timeout: long delay" } unmatched { - puts stderr "vi replace line fail: default escape timeout" + puts stderr "vi replace line, default timeout: long delay" } # Verify that a human can transpose words using \et (which is an emacs default -# binding but should be valid while in vi insert mode). +# binding but should be valid while in vi insert or normal mode). send "echo abc def" send "\033" -# Fish should still be in vi insert mode after this delay to simulate a slow -# typist. -sleep 0.400 +sleep 0.005 send "t\r" expect_prompt -re {\r\ndef abc\r\n} { - puts "vi transpose words: default escape timeout" + puts "vi transpose words, default timeout: short delay" } unmatched { - puts stderr "vi transpose words fail: default escape timeout" + puts stderr "vi transpose words, default timeout: short delay" } # Test replacing a single character. send "echo TEXT" send "\033" # Delay needed to allow fish to transition to vi "normal" mode. -sleep 0.550 +sleep 0.020 send "hhrAi\r" expect_prompt -re {\r\nTAXT\r\n} { - puts "vi mode replace: default escape timeout" -} -nounmatched -re {\r\nfail} { - puts stderr "vi mode replace fail: default escape timeout" + puts "vi mode replace char, default timeout: long delay" } unmatched { - puts stderr "couldn't find expected output 'TAXT': default escape timeout" + puts stderr "vi mode replace char, default timeout: long delay" } -# Verify that changing the escape timeout has an effect. The vi key bindings -# should still be in effect. +# Verify that changing the escape timeout has an effect. send "set -g fish_escape_delay_ms 100\r" expect_prompt -send "echo fail: shortened escape timeout" +send "echo fail: lengthened escape timeout" send "\033" sleep 0.150 send "ddi" -send "echo success: shortened escape timeout\r" -expect_prompt -re {\r\nsuccess: shortened escape timeout\r\n} { - puts "vi replace line: shortened escape timeout" -} -nounmatched -re {\r\nfail} { - puts stderr "vi replace line fail: shortened escape timeout" +send "echo success: lengthened escape timeout\r" +expect_prompt -re {\r\nsuccess: lengthened escape timeout\r\n} { + puts "vi replace line, 100ms timeout: long delay" } unmatched { - puts stderr "couldn't find expected output: replace_line, shortened escape timeout" + puts stderr "vi replace line, 100ms timeout: long delay" } # Verify that we don't switch to vi normal mode if we don't wait long enough -# after sending escape. The vi key bindings should still be in effect. +# after sending escape. send "echo fail: no normal mode" send "\033" sleep 0.050 send "ddi" send "inserted\r" expect_prompt -re {\r\nfail: no normal modediinserted\r\n} { - puts "vi normal mode: shortened escape timeout" + puts "vi replace line, 100ms timeout: short delay" } unmatched { - puts stderr "couldn't find expected output: no normal mode" + puts stderr "vi replace line, 100ms timeout: short delay" } # Switch back to regular (emacs mode) key bindings. +# The custom escape timeout of 100ms set earlier should still be in effect. send "set -g fish_key_bindings fish_default_key_bindings\r" expect_prompt @@ -98,36 +132,34 @@ expect_prompt # Start by testing with no delay. This should transpose the words. send "echo abc def" -send "\033t\r" +send "\033" +send "t\r" expect_prompt -re {\r\ndef abc\r\n} { - puts "emacs transpose words: no escape delay" + puts "emacs transpose words, 100ms timeout: no delay" } unmatched { - puts stderr "emacs transpose words fail: no escape delay" + puts stderr "emacs transpose words fail, 100ms timeout: no delay" } -# Now test with a delay > 0 and < the escape timeout. This should transpose -# the words. -send "set -g fish_escape_delay_ms 100\r" -expect_prompt +# Same test as above but with a slight delay less than the escape timeout. send "echo ghi jkl" send "\033" -sleep 0.050 +sleep 0.080 send "t\r" expect_prompt -re {\r\njkl ghi\r\n} { - puts "emacs transpose words: short escape delay" + puts "emacs transpose words, 100ms timeout: short delay" } unmatched { - puts stderr "emacs transpose words fail: short escape delay" + puts stderr "emacs transpose words fail, 100ms timeout: short delay" } # Now test with a delay > the escape timeout. The transposition should not # occur and the "t" should become part of the text that is echoed. send "echo mno pqr" send "\033" -sleep 0.150 +sleep 0.120 send "t\r" expect_prompt -re {\r\nmno pqrt\r\n} { - puts "emacs transpose words: long escape delay" + puts "emacs transpose words, 100ms timeout: long delay" } unmatched { - puts stderr "emacs transpose words fail: long escape delay" + puts stderr "emacs transpose words fail, 100ms timeout: long delay" } diff --git a/tests/bind.expect.out b/tests/bind.expect.out index 2bb2dfe0..07902427 100644 --- a/tests/bind.expect.out +++ b/tests/bind.expect.out @@ -1,9 +1,12 @@ -prime vi mode: default escape timeout -vi replace line: default escape timeout -vi transpose words: default escape timeout -vi mode replace: default escape timeout -vi replace line: shortened escape timeout -vi normal mode: shortened escape timeout -emacs transpose words: no escape delay -emacs transpose words: short escape delay -emacs transpose words: long escape delay +emacs transpose words, default timeout: no delay +emacs transpose words, default timeout: short delay +emacs transpose words, default timeout: long delay +prime vi mode, default timeout +vi replace line, default timeout: long delay +vi transpose words, default timeout: short delay +vi mode replace char, default timeout: long delay +vi replace line, 100ms timeout: long delay +vi replace line, 100ms timeout: short delay +emacs transpose words, 100ms timeout: no delay +emacs transpose words, 100ms timeout: short delay +emacs transpose words, 100ms timeout: long delay -- cgit v1.2.3