Преглед изворни кода

Get rid of getch() ('Führer' works now)

master
Arun Prakash Jana пре 7 година
родитељ
комит
efc70f33e5
No known key found for this signature in database GPG Key ID: A75979F35C080412
1 измењених фајлова са 39 додато и 35 уклоњено
  1. +39
    -35
      nnn.c

+ 39
- 35
nnn.c Прегледај датотеку

@@ -930,7 +930,7 @@ filterentries(char *path)
curs_set(TRUE);
printprompt(ln);

while ((r = wget_wch(stdscr, ch)) != ERR)
while ((r = get_wch(ch)) != ERR)
if (r == OK)
switch (*ch) {
case '\r': // with nonl(), this is ENTER key value
@@ -974,7 +974,7 @@ filterentries(char *path)
if (len == 1)
cur = 0;

if (len == maxlen || !isprint(*ch))
if (len == maxlen)
break;

wln[len] = (wchar_t)*ch;
@@ -1027,7 +1027,8 @@ xreadline(char *fname)
{
int old_curs = curs_set(1);
size_t len, pos;
int c, x, y;
int x, y, r;
wint_t ch[2] = {0};
wchar_t *buf = (wchar_t *)g_buf;
size_t buflen = NAME_MAX - 1;

@@ -1048,41 +1049,44 @@ xreadline(char *fname)
mvaddnwstr(y, x, buf, len + 1);
move(y, x + pos);

c = getch();
if (c == KEY_ENTER || c == '\n' || c == '\r')
break;
if ((r = get_wch(ch)) != ERR) {
if (r == OK) {
if (*ch == KEY_ENTER || *ch == '\n' || *ch == '\r')
break;

if (isprint(c) && pos < buflen) {
memmove(buf + pos + 1, buf + pos, (len - pos) << 2);
buf[pos] = c;
++len, ++pos;
continue;
}
if (pos < buflen) {
memmove(buf + pos + 1, buf + pos, (len - pos) << 2);
buf[pos] = *ch;
++len, ++pos;
continue;
}

switch (c) {
case KEY_LEFT:
if (pos > 0)
--pos;
break;
case KEY_RIGHT:
if (pos < len)
++pos;
break;
case KEY_BACKSPACE:
if (pos > 0) {
memmove(buf + pos - 1, buf + pos, (len - pos) << 2);
--len, --pos;
}
break;
case KEY_DC:
if (pos < len) {
memmove(buf + pos, buf + pos + 1, (len - pos - 1) << 2);
--len;
} else {
switch (*ch) {
case KEY_LEFT:
if (pos > 0)
--pos;
break;
case KEY_RIGHT:
if (pos < len)
++pos;
break;
case KEY_BACKSPACE:
if (pos > 0) {
memmove(buf + pos - 1, buf + pos, (len - pos) << 2);
--len, --pos;
}
break;
case KEY_DC:
if (pos < len) {
memmove(buf + pos, buf + pos + 1, (len - pos - 1) << 2);
--len;
}
break;
default:
break;
}
}
break;
default:
break;
}
}



Loading…
Откажи
Сачувај