From e7a4e388a2c18f409078bdb2bf17cf57dca7a281 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCnchbach?= Date: Sun, 23 Apr 2023 15:19:35 +0200 Subject: [PATCH 1/5] Add command options for cursor mode and key 'press' input to listview driver --- test/drive_listview.cc | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/test/drive_listview.cc b/test/drive_listview.cc index 9938431b..e1563089 100644 --- a/test/drive_listview.cc +++ b/test/drive_listview.cc @@ -98,8 +98,12 @@ main(int argc, char* argv[]) lv.set_window(win); noecho(); - while ((c = getopt(argc, argv, "y:t:l:r:h:w")) != -1) { + while ((c = getopt(argc, argv, "cy:t:k:l:r:h:w")) != -1) { switch (c) { + case 'c': + // Enable cursor mode + lv.set_selectable(true); + break; case 'y': lv.set_y(atoi(optarg)); break; @@ -107,6 +111,15 @@ main(int argc, char* argv[]) lv.set_height(vis_line_t(atoi(optarg))); set_height = true; break; + case 'k': { + // Treats the string argument as sequence of key presses (only + // individual characters supported as key input) + for (char* ptr = optarg; ptr != nullptr && *ptr != '\0'; ++ptr) + { + lv.handle_key(static_cast(*ptr)); + } + break; + } case 't': lv.set_top(vis_line_t(atoi(optarg))); break; From 6c642abad664630cf2dffcb313e1d166f517656f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCnchbach?= Date: Sun, 23 Apr 2023 15:20:42 +0200 Subject: [PATCH 2/5] Prefix selected line in listview driver output with '+' --- test/drive_listview.cc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/drive_listview.cc b/test/drive_listview.cc index e1563089..cb3317ba 100644 --- a/test/drive_listview.cc +++ b/test/drive_listview.cc @@ -53,15 +53,15 @@ public: vector& rows) { for (auto& value_out : rows) { - if (row == 0) { - value_out = "Hello"; - } else if (row == 1) { - value_out = "World!"; - } else if (row < this->ms_rows) { - char buffer[32]; + value_out = (lv.is_selectable() && row == lv.get_selection()) ? "+" + : ""; - snprintf(buffer, sizeof(buffer), "%d", (int) row); - value_out = string(buffer); + if (row == 0) { + value_out.al_string += "Hello"; + } else if (row == 1) { + value_out.al_string += "World!"; + } else if (row < this->ms_rows) { + value_out.al_string += std::to_string(static_cast(row)); } else { assert(0); } From ea5d59e7e24f1c831ea5528bfb006de7b59fa5f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCnchbach?= Date: Sun, 23 Apr 2023 15:21:41 +0200 Subject: [PATCH 3/5] Use set_selection instead set_top in listview driver --- test/drive_listview.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/drive_listview.cc b/test/drive_listview.cc index cb3317ba..76d3df8f 100644 --- a/test/drive_listview.cc +++ b/test/drive_listview.cc @@ -121,7 +121,7 @@ main(int argc, char* argv[]) break; } case 't': - lv.set_top(vis_line_t(atoi(optarg))); + lv.set_selection(vis_line_t(atoi(optarg))); break; case 'l': lv.set_left(atoi(optarg)); From 4d7f929d9a7f1cd6ecd1d67d5cc52629e37852e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCnchbach?= Date: Sun, 23 Apr 2023 15:25:24 +0200 Subject: [PATCH 4/5] Add test cases for cursor mode --- test/listview_output_cursor.0 | 70 +++++++++++++++++++++++++++++++++++ test/listview_output_cursor.1 | 70 +++++++++++++++++++++++++++++++++++ test/listview_output_cursor.2 | 70 +++++++++++++++++++++++++++++++++++ test/listview_output_cursor.3 | 25 +++++++++++++ test/listview_output_cursor.4 | 25 +++++++++++++ test/listview_output_cursor.5 | 35 ++++++++++++++++++ test/listview_output_cursor.6 | 35 ++++++++++++++++++ test/test_listview.sh | 47 +++++++++++++++++++++++ 8 files changed, 377 insertions(+) create mode 100644 test/listview_output_cursor.0 create mode 100644 test/listview_output_cursor.1 create mode 100644 test/listview_output_cursor.2 create mode 100644 test/listview_output_cursor.3 create mode 100644 test/listview_output_cursor.4 create mode 100644 test/listview_output_cursor.5 create mode 100644 test/listview_output_cursor.6 diff --git a/test/listview_output_cursor.0 b/test/listview_output_cursor.0 new file mode 100644 index 00000000..1e38f6b4 --- /dev/null +++ b/test/listview_output_cursor.0 @@ -0,0 +1,70 @@ +CTRL Use alt charset +CTRL save cursor +CSI Use alternate screen buffer +CSI set scrolling region 1-24 +S -1 ┋ ┋ +A └ normal +CSI Reset Replace mode +CSI Erase all +S 1 ┋+Hello x┋ +A └┛ alt +S 2 ┋World! x┋ +A └┛ alt +S 3 ┋ x┋ +A └┛ alt +S 4 ┋ x┋ +A └┛ alt +S 5 ┋ x┋ +A └┛ alt +S 6 ┋ x┋ +A └┛ alt +S 7 ┋ x┋ +A └┛ alt +S 8 ┋ x┋ +A └┛ alt +S 9 ┋ x┋ +A └┛ alt +S 10 ┋ x┋ +A └┛ alt +S 11 ┋ x┋ +A └┛ alt +S 12 ┋ x┋ +A └┛ alt +S 13 ┋ x┋ +A └┛ alt +S 14 ┋ x┋ +A └┛ alt +S 15 ┋ x┋ +A └┛ alt +S 16 ┋ x┋ +A └┛ alt +S 17 ┋ x┋ +A └┛ alt +S 18 ┋ x┋ +A └┛ alt +S 19 ┋ x┋ +A └┛ alt +S 20 ┋ x┋ +A └┛ alt +S 21 ┋ x┋ +A └┛ alt +S 22 ┋ x┋ +A └┛ alt +S 23 ┋ x┋ +A └┛ alt +S 24 ┋ x ┋ +A ···············································································└ backspace +A └┛ alt +A ···············································································└ backspace +CSI Set Replace mode +S 24 ┋ ┋ +CSI Reset Replace mode +S 24 ┋ ┋ +A ···············································································└ carriage-return +CSI Erase all +CSI Use normal screen buffer +CTRL restore cursor +S 24 ┋ ┋ +A └ carriage-return +CSI Normal cursor keys +CTRL Normal keypad diff --git a/test/listview_output_cursor.1 b/test/listview_output_cursor.1 new file mode 100644 index 00000000..26594ccd --- /dev/null +++ b/test/listview_output_cursor.1 @@ -0,0 +1,70 @@ +CTRL Use alt charset +CTRL save cursor +CSI Use alternate screen buffer +CSI set scrolling region 1-24 +S -1 ┋ ┋ +A └ normal +CSI Reset Replace mode +CSI Erase all +S 1 ┋Hello x┋ +A └┛ alt +S 2 ┋World! x┋ +A └┛ alt +S 3 ┋2 x┋ +A └┛ alt +S 4 ┋3 x┋ +A └┛ alt +S 5 ┋4 x┋ +A └┛ alt +S 6 ┋+5 x┋ +A └┛ alt +S 7 ┋6 x┋ +A └┛ alt +S 8 ┋7 x┋ +A └┛ alt +S 9 ┋8 x┋ +A └┛ alt +S 10 ┋9 x┋ +A └┛ alt +S 11 ┋10 x┋ +A └┛ alt +S 12 ┋11 x┋ +A └┛ alt +S 13 ┋12 x┋ +A └┛ alt +S 14 ┋13 x┋ +A └┛ alt +S 15 ┋14 x┋ +A └┛ alt +S 16 ┋15 x┋ +A └┛ alt +S 17 ┋16 x┋ +A └┛ alt +S 18 ┋17 x┋ +A └┛ alt +S 19 ┋18 x┋ +A └┛ alt +S 20 ┋19 x┋ +A └┛ alt +S 21 ┋ x┋ +A └┛ alt +S 22 ┋ x┋ +A └┛ alt +S 23 ┋ x┋ +A └┛ alt +S 24 ┋ x ┋ +A ···············································································└ backspace +A └┛ alt +A ···············································································└ backspace +CSI Set Replace mode +S 24 ┋ ┋ +CSI Reset Replace mode +S 24 ┋ ┋ +A ···············································································└ carriage-return +CSI Erase all +CSI Use normal screen buffer +CTRL restore cursor +S 24 ┋ ┋ +A └ carriage-return +CSI Normal cursor keys +CTRL Normal keypad diff --git a/test/listview_output_cursor.2 b/test/listview_output_cursor.2 new file mode 100644 index 00000000..0c8fd608 --- /dev/null +++ b/test/listview_output_cursor.2 @@ -0,0 +1,70 @@ +CTRL Use alt charset +CTRL save cursor +CSI Use alternate screen buffer +CSI set scrolling region 1-24 +S -1 ┋ ┋ +A └ normal +CSI Reset Replace mode +CSI Erase all +S 1 ┋Hello x┋ +A └┛ alt +S 2 ┋World! x┋ +A └┛ alt +S 3 ┋2 x┋ +A └┛ alt +S 4 ┋+3 x┋ +A └┛ alt +S 5 ┋4 x┋ +A └┛ alt +S 6 ┋5 x┋ +A └┛ alt +S 7 ┋6 x┋ +A └┛ alt +S 8 ┋7 x┋ +A └┛ alt +S 9 ┋8 x┋ +A └┛ alt +S 10 ┋9 x┋ +A └┛ alt +S 11 ┋10 x┋ +A └┛ alt +S 12 ┋11 x┋ +A └┛ alt +S 13 ┋12 x┋ +A └┛ alt +S 14 ┋13 x┋ +A └┛ alt +S 15 ┋14 x┋ +A └┛ alt +S 16 ┋15 x┋ +A └┛ alt +S 17 ┋16 x┋ +A └┛ alt +S 18 ┋17 x┋ +A └┛ alt +S 19 ┋18 x┋ +A └┛ alt +S 20 ┋19 x┋ +A └┛ alt +S 21 ┋ x┋ +A └┛ alt +S 22 ┋ x┋ +A └┛ alt +S 23 ┋ x┋ +A └┛ alt +S 24 ┋ x ┋ +A ···············································································└ backspace +A └┛ alt +A ···············································································└ backspace +CSI Set Replace mode +S 24 ┋ ┋ +CSI Reset Replace mode +S 24 ┋ ┋ +A ···············································································└ carriage-return +CSI Erase all +CSI Use normal screen buffer +CTRL restore cursor +S 24 ┋ ┋ +A └ carriage-return +CSI Normal cursor keys +CTRL Normal keypad diff --git a/test/listview_output_cursor.3 b/test/listview_output_cursor.3 new file mode 100644 index 00000000..62ae2345 --- /dev/null +++ b/test/listview_output_cursor.3 @@ -0,0 +1,25 @@ +CTRL Use alt charset +CTRL save cursor +CSI Use alternate screen buffer +CSI set scrolling region 1-24 +S -1 ┋ ┋ +A └ normal +CSI Reset Replace mode +CSI Erase all +S 1 ┋World! x┋ +A └┛ alt +S 2 ┋2 x┋ +A └┛ alt +S 3 ┋3 x┋ +A └┛ alt +S 4 ┋+4 x┋ +A └┛ alt +S 5 ┋5 x┋ +A └┛ alt +CSI Erase all +CSI Use normal screen buffer +CTRL restore cursor +S 24 ┋ ┋ +A └ carriage-return +CSI Normal cursor keys +CTRL Normal keypad diff --git a/test/listview_output_cursor.4 b/test/listview_output_cursor.4 new file mode 100644 index 00000000..3980a0ba --- /dev/null +++ b/test/listview_output_cursor.4 @@ -0,0 +1,25 @@ +CTRL Use alt charset +CTRL save cursor +CSI Use alternate screen buffer +CSI set scrolling region 1-24 +S -1 ┋ ┋ +A └ normal +CSI Reset Replace mode +CSI Erase all +S 1 ┋Hello x┋ +A └┛ alt +S 2 ┋World! x┋ +A └┛ alt +S 3 ┋2 x┋ +A └┛ alt +S 4 ┋+3 x┋ +A └┛ alt +S 5 ┋4 x┋ +A └┛ alt +CSI Erase all +CSI Use normal screen buffer +CTRL restore cursor +S 24 ┋ ┋ +A └ carriage-return +CSI Normal cursor keys +CTRL Normal keypad diff --git a/test/listview_output_cursor.5 b/test/listview_output_cursor.5 new file mode 100644 index 00000000..f25061e7 --- /dev/null +++ b/test/listview_output_cursor.5 @@ -0,0 +1,35 @@ +CTRL Use alt charset +CTRL save cursor +CSI Use alternate screen buffer +CSI set scrolling region 1-24 +S -1 ┋ ┋ +A └ normal +CSI Reset Replace mode +CSI Erase all +S 1 ┋+18 x┋ +A └┛ alt +S 2 ┋19 x┋ +A └┛ alt +S 3 ┋20 x┋ +A └┛ alt +S 4 ┋21 x┋ +A └┛ alt +S 5 ┋22 x┋ +A └┛ alt +S 6 ┋23 x┋ +A └┛ alt +S 7 ┋24 x┋ +A └┛ alt +S 8 ┋25 x┋ +A └┛ alt +S 9 ┋26 x┋ +A └┛ alt +S 10 ┋27 x┋ +A └┛ alt +CSI Erase all +CSI Use normal screen buffer +CTRL restore cursor +S 24 ┋ ┋ +A └ carriage-return +CSI Normal cursor keys +CTRL Normal keypad diff --git a/test/listview_output_cursor.6 b/test/listview_output_cursor.6 new file mode 100644 index 00000000..9706e382 --- /dev/null +++ b/test/listview_output_cursor.6 @@ -0,0 +1,35 @@ +CTRL Use alt charset +CTRL save cursor +CSI Use alternate screen buffer +CSI set scrolling region 1-24 +S -1 ┋ ┋ +A └ normal +CSI Reset Replace mode +CSI Erase all +S 1 ┋9 x┋ +A └┛ alt +S 2 ┋10 x┋ +A └┛ alt +S 3 ┋11 x┋ +A └┛ alt +S 4 ┋12 x┋ +A └┛ alt +S 5 ┋13 x┋ +A └┛ alt +S 6 ┋14 x┋ +A └┛ alt +S 7 ┋15 x┋ +A └┛ alt +S 8 ┋16 x┋ +A └┛ alt +S 9 ┋+17 x┋ +A └┛ alt +S 10 ┋18 x┋ +A └┛ alt +CSI Erase all +CSI Use normal screen buffer +CTRL restore cursor +S 24 ┋ ┋ +A └ carriage-return +CSI Normal cursor keys +CTRL Normal keypad diff --git a/test/test_listview.sh b/test/test_listview.sh index 38634da9..5529008d 100644 --- a/test/test_listview.sh +++ b/test/test_listview.sh @@ -34,3 +34,50 @@ run_test ./scripty -n -e ${srcdir}/listview_output.6 -- \ ./drive_listview -y 1 -r 50 -h -1 -t 1 < /dev/null on_error_fail_with "Listview didn't move down (2)?" + +### +# Cursor mode tests +### + +# Cursor appears on first line +run_test ./scripty -n -e ${srcdir}/listview_output_cursor.0 -- \ + ./drive_listview -c < /dev/null + +on_error_fail_with "Listview Cursor Mode: Didn't enable (not selectable)" + +# Move down within visible area between top (at 0) and tail space +run_test ./scripty -n -e ${srcdir}/listview_output_cursor.1 -- \ + ./drive_listview -r 20 -c -k jjjjj < /dev/null + +on_error_fail_with "Listview Cursor Mode: Didn-t move cursor down?" + +# Move up within visible area between top (at 0) and tail space +run_test ./scripty -n -e ${srcdir}/listview_output_cursor.2 -- \ + ./drive_listview -r 20 -c -k jjjjjkk < /dev/null + +on_error_fail_with "Listview Cursor Mode: Didn't move cursor up?" + + +# Scroll file when reaching tail space +run_test ./scripty -n -e ${srcdir}/listview_output_cursor.3 -- \ + ./drive_listview -r 30 -h 5 -c -k jjjj < /dev/null + +on_error_fail_with "Listview Cursor Mode: Didn't scroll down when reaching tail space?" + +# Do not scroll up when moving up after reaching tail space +run_test ./scripty -n -e ${srcdir}/listview_output_cursor.4 -- \ + ./drive_listview -r 30 -h 5 -c -k jjjjk < /dev/null + +on_error_fail_with "Listview Cursor Mode: scrolled when moving up from tail space?" + +# Page down move +run_test ./scripty -n -e ${srcdir}/listview_output_cursor.5 -- \ + ./drive_listview -r 30 -h 10 -c -k ' ' < /dev/null + +on_error_fail_with "Listview Cursor Mode: didn't moved down on page jump?" + +# Page up move +run_test ./scripty -n -e ${srcdir}/listview_output_cursor.6 -- \ + ./drive_listview -r 30 -h 10 -c -k ' b' < /dev/null + +on_error_fail_with "Listview Cursor Mode: didn't moved up on page jump?" From 1b250cc1247adf6b7427919b9335eeb1e172c0ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCnchbach?= Date: Tue, 25 Apr 2023 21:38:53 +0200 Subject: [PATCH 5/5] Add test input files to Makefile --- test/Makefile.am | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/Makefile.am b/test/Makefile.am index e1f52128..ad7e2f7f 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -277,6 +277,13 @@ dist_noinst_DATA = \ listview_output.4 \ listview_output.5 \ listview_output.6 \ + listview_output_cursor.0 \ + listview_output_cursor.1 \ + listview_output_cursor.2 \ + listview_output_cursor.3 \ + listview_output_cursor.4 \ + listview_output_cursor.5 \ + listview_output_cursor.6 \ log.clog \ logfile_access_log.0 \ logfile_access_log.1 \