Merge pull request #310 from 0xACE/keyresize

Use KEY_RESIZE when prompting user input
This commit is contained in:
Mischievous Meerkat 2019-07-16 18:37:48 +05:30 committed by GitHub
commit 124ded8b5b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -548,6 +548,15 @@ static char *xitoa(uint val)
return &ascbuf[++i]; return &ascbuf[++i];
} }
#ifdef KEY_RESIZE
/* Clear the old prompt */
static inline void clearoldprompt()
{
move(xlines - 1, 0);
clrtoeol();
}
#endif
/* Messages show up at the bottom */ /* Messages show up at the bottom */
static inline void printmsg(const char *msg) static inline void printmsg(const char *msg)
{ {
@ -586,7 +595,20 @@ static int get_input(const char *prompt)
if (prompt) if (prompt)
printprompt(prompt); printprompt(prompt);
cleartimeout(); cleartimeout();
#ifdef KEY_RESIZE
do {
r = getch(); r = getch();
if ( r == KEY_RESIZE) {
if (prompt) {
clearoldprompt();
xlines = LINES;
printprompt(prompt);
}
}
} while ( r == KEY_RESIZE);
#else
r = getch();
#endif
settimeout(); settimeout();
return r; return r;
} }
@ -1667,6 +1689,13 @@ static int filterentries(char *path)
while ((r = get_wch(ch)) != ERR) { while ((r = get_wch(ch)) != ERR) {
switch (*ch) { switch (*ch) {
#ifdef KEY_RESIZE
case KEY_RESIZE:
clearoldprompt();
redraw(path);
printprompt(ln);
continue;
#endif
case KEY_DC: // fallthrough case KEY_DC: // fallthrough
case KEY_BACKSPACE: // fallthrough case KEY_BACKSPACE: // fallthrough
case '\b': // fallthrough case '\b': // fallthrough
@ -1787,7 +1816,7 @@ end:
static char *xreadline(char *prefill, char *prompt) static char *xreadline(char *prefill, char *prompt)
{ {
size_t len, pos; size_t len, pos;
int x, y, r; int x, r;
const int WCHAR_T_WIDTH = sizeof(wchar_t); const int WCHAR_T_WIDTH = sizeof(wchar_t);
wint_t ch[2] = {0}; wint_t ch[2] = {0};
wchar_t * const buf = malloc(sizeof(wchar_t) * CMD_LEN_MAX); wchar_t * const buf = malloc(sizeof(wchar_t) * CMD_LEN_MAX);
@ -1809,13 +1838,13 @@ static char *xreadline(char *prefill, char *prompt)
len = pos = 0; len = pos = 0;
} }
getyx(stdscr, y, x); x = getcurx(stdscr);
curs_set(TRUE); curs_set(TRUE);
while (1) { while (1) {
buf[len] = ' '; buf[len] = ' ';
mvaddnwstr(y, x, buf, len + 1); mvaddnwstr(xlines - 1, x, buf, len + 1);
move(y, x + wcswidth(buf, pos)); move(xlines - 1, x + wcswidth(buf, pos));
r = get_wch(ch); r = get_wch(ch);
if (r != ERR) { if (r != ERR) {
@ -1868,6 +1897,13 @@ static char *xreadline(char *prefill, char *prompt)
} }
} else { } else {
switch (*ch) { switch (*ch) {
#ifdef KEY_RESIZE
case KEY_RESIZE:
clearoldprompt();
xlines = LINES;
printprompt(prompt);
break;
#endif
case KEY_LEFT: case KEY_LEFT:
if (pos > 0) if (pos > 0)
--pos; --pos;