LINUX.ORG.RU

Считывание с клавиатуры в терминале

 , ,


1

2

Подскажите, куда копать. Нужно отлавливать и обрабатывать нажатия кнопок клавиатуры в консольной программе. В какой части стандартной библиотеки искать? Речь не про stdin.

★★★

А про что тогда речь? Curses или аналоги используешь? Готов читать файл линукс-специфичный устройства? Если нет, то как ты это все себе представляешь, на каком таком уровне абстракции?

t184256 ★★★★★
()
Ответ на: комментарий от dataman

ему нужен такой чтобы он мог дописать экшн на определённые комбинации. Скорее всего питоновским скриптом заюзать библиотеку input_чтототамеще

monkdt
()
Последнее исправление: monkdt (всего исправлений: 1)
Ответ на: комментарий от t184256

Просто консоль(вывод через stdout), но требуется прямой доступ к клавиатуре, без stdin. Вне линукса использоваться не будет, поэтому на переносимость плевать.

Werenter ★★★
() автор топика
Последнее исправление: Werenter (всего исправлений: 1)
Ответ на: комментарий от dataman

То и значит, обрабатывать события клавиатуры

Werenter ★★★
() автор топика
Ответ на: комментарий от Werenter

но требуется прямой доступ к клавиатуре, без stdin

Ну открой файл клавиатуры и читай события из неё. Просто чтобы разупороться и понять, что тебе это не надо.

t184256 ★★★★★
()

Возьми ncurses. Кажется под капотом там нужно что-то типа передать управляющие последовательности терминала чтобы отключить буферизацию и эхо, и тогда бы сможешь читать по одной клавише из stdin. Не алфацифровые клавиши наверняка будут кодироваться в несколько байт. Всё это будет отличаться в разных терминалах и локалях. Поэтому возьми ncurses, он это детали абстрагирует. Либо более современную библиотеку с не таким ублюдским интерфейсом, например notcurses. По части клавиатуры последняя умеет например продвинутый протокол kitty который позволяет ловить отпускания клавиш.

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

умеет например продвинутый протокол kitty

И использовать его программа сможет только в kitty, wezterm, может и в ещё каком ЭТ.

dataman ★★★★★
()
Ответ на: комментарий от dataman

Программа будет запускаться через SSH в терминале Konsole, причем клавиатура находится на клиенте(там, где ЭТ).

Werenter ★★★
() автор топика
Ответ на: комментарий от slovazap

Возьми ncurses. Кажется под капотом там нужно что-то типа передать управляющие последовательности терминала чтобы отключить буферизацию и эхо, и тогда бы сможешь читать по одной клавише из stdin.

можно без ncusrses - достаточно tcgetattr, tcsetattr;

хордкорно и без попсовых новоделов :-)

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

можно без ncusrses - достаточно tcgetattr, tcsetattr;

fzy и fnf из недавней новости, именно так и делают. :)

dataman ★★★★★
()
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от mittorn

«а почему это моя прога по ssh с другого компа не работает?»

t184256 ★★★★★
()

В итоге остановился на ncurses, проверенном временем решении, которое есть везде, то есть нет лишних зависимостей.

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