diff options
author | Jordan Rupprecht <rupprecht@google.com> | 2019-11-12 11:37:23 -0800 |
---|---|---|
committer | Jordan Rupprecht <rupprecht@google.com> | 2019-11-14 11:41:11 -0800 |
commit | f2e65447b3cb6340883957e033e77095a025ebdc (patch) | |
tree | ff624f85141d3970a74056e5300265a879f30e85 /lldb/packages/Python/lldbsuite/test | |
parent | baacd1891851b1ba0bd303e2a75f1d3af324fca6 (diff) | |
download | bcm5719-llvm-f2e65447b3cb6340883957e033e77095a025ebdc.tar.gz bcm5719-llvm-f2e65447b3cb6340883957e033e77095a025ebdc.zip |
[lldb][Editline] Support ctrl+left/right arrow word navigation.
Summary:
This adds several 5C/5D escape codes that allow moving forward/backward words similar to bash command line navigation.
On my terminal, `ctrl+v ctrl+<left arrow>` prints `^[[1;5D`. However, it seems inputrc also maps other escape variants of this to forward/backward word, so I've included those too. Similar for 5C = ctrl+right arrow.
Reviewers: JDevlieghere, labath
Reviewed By: JDevlieghere, labath
Subscribers: merge_guards_bot, lldb-commits
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D70137
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test')
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/terminal/TestEditline.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/terminal/TestEditline.py b/lldb/packages/Python/lldbsuite/test/terminal/TestEditline.py new file mode 100644 index 00000000000..49a46f2de53 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/terminal/TestEditline.py @@ -0,0 +1,49 @@ +""" +Test that the lldb editline handling is configured correctly. +""" + +from __future__ import print_function + + +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil +from lldbsuite.test.lldbpexpect import PExpectTest + + +class EditlineTest(PExpectTest): + + mydir = TestBase.compute_mydir(__file__) + + def test_left_right_arrow(self): + """Test that ctrl+left/right arrow navigates words correctly. + + Note: just sending escape characters to pexpect and checking the buffer + doesn't work well, so we run real commands. We want to type + "help command" while exercising word-navigation, so type it as below, + where [] indicates cursor position. + + 1. Send "el ommand" -> "el ommand[]" + 2. Ctrl+left once -> "el []ommand" + 3. Send "c" -> "el c[]ommand" + 4. Ctrl+left twice -> "[]el command" + 5. Send "h" -> "h[]el command" + 6. Ctrl+right -> "hel[] command" + 7. Send "p" -> "help command" + """ + self.launch() + + # Run help for different commands for escape variants to make sure each + # one matches uniquely (the buffer isn't cleared in between matches). + cases = [ + ("print", "\x1b[1;5D", "\x1b[1;5C"), + ("step", "\x1b[5D", "\x1b[5C"), + ("exit", "\x1b\x1b[D", "\x1b\x1b[C"), + ] + for (cmd, l_escape, r_escape) in cases: + self.expect("el {cmd_tail}{L}{cmd_head}{L}{L}h{R}p".format( + cmd_head=cmd[0], cmd_tail=cmd[1:], L=l_escape, R=r_escape), + substrs=["Syntax: %s" % cmd]) + + self.quit() |