LINUX.ORG.RU

Терминал - обработка специальных клавиш


0

1

Подскажите как получить и обрабатывать нажатия shortcut в консольном приложении. Умею читать ввод только с помощью «scanf()» или «cout <<» (или аналогичных функций). А как терминальные программы обрабатывают Ctrl+letter к примеру (emacs?) И как они отображают символы в произвольных позициях окна терминала (например, рамки консольных «окон»), которые не смещаются при каждом '\n'? — как это сделано в alsamix. Где можно об этом почитать? Насколько зависит это от используемой программы (xterm, konsole) и оболочки, из которой было запущено это консольное приложение? Слышал, многие подобные программы используют консольные псевдографические библиотеки вроде ncurses, но интересует как это сделано, без привлечения многотонных довесков . спасибо

[20:17:09][aitap@Tarkus ~]> ldd $(which alsamixer) | grep curses
        libncursesw.so.5 => /lib/libncursesw.so.5 (0xb7682000)
[20:17:14][aitap@Tarkus ~]> ldd $(which vim) | grep curses
        libncurses.so.5 => /lib/libncurses.so.5 (0xb70e9000)
[20:17:26][aitap@Tarkus ~]> ldd $(which screen) | grep curses
        libncursesw.so.5 => /lib/libncursesw.so.5 (0xb77e4000)
[20:18:00][aitap@Tarkus ~]> 

Похоже, все пользуются curses.

AITap ★★★★★
()

«On teletypewriters and early keyboards, holding down the Control key while pressing another key zeroed the leftmost 2 bits of the 7 bits in the generated ASCII character. This allowed the operator to produce the first 32 characters in the ASCII table. These are non-printing characters that signal the computer to control where the next character will be placed on the display device, eject a printed page or erase the screen, ring the terminal bell, or some other operation. Aptly, these characters are also called control characters.»

Esc эквивалентна Control-[. Alt + символ эквивалентна Esc, за которым следует символ.

geekless ★★
()

Отключаете обработку спецклавиш и echo через tcsetattr(), и парсите выхлоп fgets().

anon_666
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.