Всем привет!
В рамках своей разработки вынес отдельно пример кода, который реализует форму ввода. Хочу сделать ввод пароля в виде скрытых символов. Разобрался, что можно использовать регулярку в данном случае. В общем, попытался с простого примера:
#include <form.h>
int main() {
initscr();
curs_set(1);
WINDOW *win = newwin(5, 40, 10, 10);
keypad(win, TRUE);
box(win, 0, 0);
wrefresh(win);
FIELD *fields[2];
fields[0] = new_field(1, 20, 2, 2, 0, 0);
fields[1] = NULL;
set_field_type(fields[0], TYPE_REGEXP, "^[0-9]* *$");
set_field_opts(fields[0], O_VISIBLE | O_ACTIVE | O_EDIT);
FORM *form = new_form(fields);
set_form_win(form, win);
set_form_sub(form, derwin(win, 3, 38, 1, 1));
post_form(form);
wrefresh(win);
int ch;
while ((ch = wgetch(win)) != KEY_F(1)) {
int status = form_driver(form, ch);
if( status == E_OK ) {
status = form_driver(form, REQ_VALIDATION);
}
if (status == E_INVALID_FIELD) {
form_driver(form, REQ_DEL_PREV);
} else if (status == E_OK) {
wrefresh(win);
}
}
unpost_form(form);
free_form(form);
free_field(fields[0]);
endwin();
return 0;
}
Вводим пока что любые цифры. Не разобрался, как обойти ввод пробелов. Также при вводе некорректного символа пытаюсь его удалить, но form_driver
удаляет его в бэке, а на фронте оставляет символ под курсором. Не думаю, что похоже на баг. Скорее всего необходима правильная реализация по удалению.
В общем, гуглил примеры работы с формами ввода, ничего толкового не удалось найти. Прошу помощи гуру. Спасибо!