summaryrefslogtreecommitdiff
path: root/lib/draw/curses.c
diff options
context:
space:
mode:
authorJari Vetoniemi <mailroxas@gmail.com>2014-04-14 19:00:15 +0300
committerJari Vetoniemi <mailroxas@gmail.com>2014-04-14 19:00:15 +0300
commit5b873de2ded661416d64dc589c1d10bde2c5dfc0 (patch)
tree6f0ad7af6601b44ccfe06d7120a825018c4aa526 /lib/draw/curses.c
parent066c5c2e61d1b91f04564115ec061968a0716533 (diff)
downloadbemenu-5b873de2ded661416d64dc589c1d10bde2c5dfc0.tar.gz
bemenu-5b873de2ded661416d64dc589c1d10bde2c5dfc0.tar.bz2
bemenu-5b873de2ded661416d64dc589c1d10bde2c5dfc0.zip
Better input scroll logic.
Diffstat (limited to 'lib/draw/curses.c')
-rw-r--r--lib/draw/curses.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/draw/curses.c b/lib/draw/curses.c
index 5cd1335..4ae63d7 100644
--- a/lib/draw/curses.c
+++ b/lib/draw/curses.c
@@ -208,12 +208,12 @@ static void _bmDrawCursesRender(const bmMenu *menu)
unsigned int titleLen = (menu->title ? strlen(menu->title) + 1 : 0);
unsigned int ncols = curses.getmaxx(curses.stdscr);
unsigned int ccols = ncols - titleLen - 1;
- unsigned int doffset = (menu->cursesCursor < ccols ? 0 : menu->cursesCursor - ccols);
+ unsigned int dcols = 0, doffset = menu->cursor;
- if (doffset > 0) {
- /* find offset where we won't break the UTF8 string */
- doffset += _bmUtf8RuneNext(menu->filter, doffset);
- doffset -= _bmUtf8RunePrev(menu->filter, doffset);
+ while (doffset > 0 && dcols < ccols) {
+ int prev = _bmUtf8RunePrev(menu->filter, doffset);
+ dcols += _bmUtf8RuneWidth(menu->filter + doffset - prev, prev);
+ doffset -= (prev ? prev : 1);
}
_bmDrawCursesDrawLine(0, 0, "%*s%s", titleLen, "", (menu->filter ? menu->filter + doffset : ""));