40 lines
2 KiB
Markdown
40 lines
2 KiB
Markdown
# Links
|
||
- [Tutorial for ncurses](https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/helloworld.html)
|
||
# Построчная буферизация
|
||
Построчная буферизация означает, что символы не отправляются программе сразу, а сначала накапливаются в буфере пока пользователь не нажмет `Enter`.
|
||
Визуальное описание выглядит примерно так:
|
||
*Режим cooked*
|
||
```
|
||
Пользователь печатает: h e l l o [backspace] [backspace] i
|
||
Что видит пользователь: helli
|
||
Буфер терминала: helli
|
||
↓ [Enter]
|
||
Программа получает: "helli\n" (только после Enter!)
|
||
```
|
||
*Режим cbreak*
|
||
```
|
||
Пользователь печатает: h
|
||
Программа получает: 'h' ← сразу!
|
||
|
||
Пользователь печатает: e
|
||
Программа получает: 'e' ← сразу!
|
||
|
||
Пользователь печатает: l
|
||
Программа получает: 'l' ← сразу!
|
||
```
|
||
# Режимы инициализации
|
||
## raw() vs cbreak()
|
||
У терминалов есть 3 режима работы:
|
||
1. Cooked mode (по умолчанию)
|
||
Это когда - ввод буферизиуется построчно, пользователь должен нажать Enter, работают сигналы по типу Ctrl-C, Ctrl-Z, работает backspace для редактирования строки.
|
||
2. Cbreak mode
|
||
Это когда:
|
||
- Ввод передается немедленно, без ожидания Enter;
|
||
- Сигналы работают;
|
||
- Нет буферизации по строкам;
|
||
- Каждый символ доступен сразу после нажатия.
|
||
3. Raw mode
|
||
Это когда:
|
||
- Ввод передается немедленно;
|
||
- Полный контроль над всеми клавишами;
|
||
- Не работают сигналы
|