LINUX.ORG.RU

Сообщения azhirov1991

 

Реализация окна ввода пароля на ncurses

Форум — Development

Всем привет!

В рамках своей разработки вынес отдельно пример кода, который реализует форму ввода. Хочу сделать ввод пароля в виде скрытых символов. Разобрался, что можно использовать регулярку в данном случае. В общем, попытался с простого примера:

#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 удаляет его в бэке, а на фронте оставляет символ под курсором. Не думаю, что похоже на баг. Скорее всего необходима правильная реализация по удалению.

В общем, гуглил примеры работы с формами ввода, ничего толкового не удалось найти. Прошу помощи гуру. Спасибо!

 , ,

azhirov1991
()

RSS подписка на новые темы