- continue;
- } else if (c == 0x1B) {
- /* ESCAPE KEY */
- continue;
- } else if (acs && (i < (unsigned int)len - 1)) {
- value[i++] = c;
- wechochar(main_sub, c);
+ case KEY_DC:
+ /* righthandside DELETE */
+ if (i > 0) {
+ if (x == i)
+ x--;
+ mvwdelch(gv_win, 0, x);
+ wrefresh(gv_win);
+ i--;
+ }
+ break;
+ case KEY_LEFT:
+ if (x > 0) {
+ wmove(gv_win, 0, --x);
+ wrefresh(gv_win);
+ }
+ break;
+ case KEY_RIGHT:
+ if (x < i) {
+ wmove(gv_win, 0, ++x);
+ wrefresh(gv_win);
+ }
+ break;
+ case KEY_HOME:
+ wmove(gv_win, 0, 0);
+ wrefresh(gv_win);
+ break;
+ case KEY_END:
+ wmove(gv_win, 0, (i == len - 1 ? i - 1 : i));
+ wrefresh(gv_win);
+ break;
+ case KEY_IC:
+ mode = (mode == INSERT ? OVERWRITE : INSERT);
+ curs_set(mode == INSERT ? 1 : 2);
+ break;
+ case 0x0A:
+ /* ENTER KEY */
+ if (i > 0 || zerolen_perm)
+ goto away;
+
+ break;
+ default:
+ if (acs && (c < 0x100)) {
+ if (mode == INSERT) {
+ if (i < len - 1) {
+ winsch(gv_win, c);
+ i++;
+ wmove(gv_win, 0, ++x);
+ wrefresh(gv_win);
+ }
+ } else {
+ if (i <= len - 1) {
+// wechochar(gv_win, c);
+ waddch(gv_win, c);
+ if (x == i)
+ i++;
+ wmove(gv_win, 0, ++x);
+ wrefresh(gv_win);
+ }
+ }
+ }