diff options
author | John Hawthorn <john@hawthorn.email> | 2018-09-09 13:05:12 -0700 |
---|---|---|
committer | John Hawthorn <john@hawthorn.email> | 2018-09-09 13:32:10 -0700 |
commit | 757b31309434d7adcd1361be26c1cd2a44d6ec9b (patch) | |
tree | 6fb282e9ae75c879aa9a78695a72c1f9f39a8bce | |
parent | 42e9ffd27db2c9634ddc8f82cd736a2caa6728cc (diff) |
Disable line wrap when printing candidates
This solves the line wrapping issue with much simpler code, which also
works better with Unicode characters and when the terminal is resized.
-rw-r--r-- | src/tty_interface.c | 22 | ||||
-rw-r--r-- | test/acceptance/acceptance_test.rb | 12 |
2 files changed, 20 insertions, 14 deletions
diff --git a/src/tty_interface.c b/src/tty_interface.c index a76cfa9..746da4d 100644 --- a/src/tty_interface.c +++ b/src/tty_interface.c @@ -42,15 +42,12 @@ static void draw_match(tty_interface_t *state, const char *choice, int selected) score_t score = match_positions(search, choice, &positions[0]); - size_t maxwidth = tty_getwidth(tty); - - if (options->show_scores && maxwidth >= 9) { + if (options->show_scores) { if (score == SCORE_MIN) { tty_printf(tty, "( ) "); } else { tty_printf(tty, "(%5.2f) ", score); } - maxwidth -= 8; } if (selected) @@ -60,20 +57,17 @@ static void draw_match(tty_interface_t *state, const char *choice, int selected) tty_setinvert(tty); #endif + tty_setnowrap(tty); for (size_t i = 0, p = 0; choice[i] != '\0'; i++) { - if (i + 1 < maxwidth) { - if (positions[p] == i) { - tty_setfg(tty, TTY_COLOR_HIGHLIGHT); - p++; - } else { - tty_setfg(tty, TTY_COLOR_NORMAL); - } - tty_printf(tty, "%c", choice[i]); + if (positions[p] == i) { + tty_setfg(tty, TTY_COLOR_HIGHLIGHT); + p++; } else { - tty_printf(tty, "$"); - break; + tty_setfg(tty, TTY_COLOR_NORMAL); } + tty_printf(tty, "%c", choice[i]); } + tty_setwrap(tty); tty_setnormal(tty); } diff --git a/test/acceptance/acceptance_test.rb b/test/acceptance/acceptance_test.rb index 6123b2d..6ab8b34 100644 --- a/test/acceptance/acceptance_test.rb +++ b/test/acceptance/acceptance_test.rb @@ -430,6 +430,18 @@ class FzyTest < Minitest::Test @tty.assert_cursor_position(y: 0, x: 8) end + def test_long_strings + ascii = "LongStringOfText" * 6 + unicode = "LongStringOfText" * 3 + + @tty = interactive_fzy(input: [ascii, unicode]) + @tty.assert_matches <<~TTY + > + LongStringOfTextLongStringOfTextLongStringOfTextLongStringOfTextLongStringOfText + LongStringOfTextLongStringOfTextLongStri + TTY + end + def test_help @tty = TTYtest.new_terminal(%{#{FZY_PATH} --help}) @tty.assert_matches <<TTY |