Я использую stty raw -echo
в моей программе терминалов tcl. Я хочу сделать некоторые действия только для нескольких событий нажатия клавиш, таких как Вкладка. Для остальных ключевых пресс-мероприятий, которые я хочу делегировать rlwrap или другую программу обработки по умолчанию, такие как ←, чтобы переместить курсор к левой стороне и вставить текст в котором находится курсор, или Ctrl + C в прекратите выполнение программы. Есть ли способ сделать это?Как передать управление нажатием клавиши для обращения в терминале необработанного режима с tcl
ответ
Существует опция в stty, которая обрабатывает сигналы для вас, что является опцией isig
. Кроме того, -opost
обрабатывает «\ n» на «\ r \ n» для вас.
stty raw -echo isig
Другой вариант заключается в использовании явного -icanon min 1 time 0
вместо raw
опции.
Увы, терминальные системы обработки не работают таким образом, чтобы это было легко. Но это не невозможно. Простейший механизм, который я могу придумать (действительно, единственный, который не заставляет меня съеживаться при мысли), - это использовать некоторые из более продвинутых функций команды interact
расширения Expect.
В частности, interact
эффективно соединяет программу spawn
ed by Expect для внешнего мира, но вы также можете добавить шаблоны, позволяющие расширенное поведение.
package require Expect
spawn /your/program yourarguments...
interact {
"\t" {
# Do something special here as we've got a Tab
send "special special special\r"
}
}
Вы можете использовать rlwrap на порожденном процессе:
spawn rlwrap /your/program yourarguments...
Спасибо. Но я не устанавливал Expect, и я хочу распространять программу. У меня не так много ожиданий. Есть ли способ в tcl поставить программу в фоновом режиме, когда вы получаете Ctrl + Z? – Herbert
Последнего GitHub version из rlwrap
has a bindable readline commandrlwrap-direct-keypress
, которые могут быть связаны (например, в ваш .inputrc
) на любую клавишу вы хотите передать непосредственно к вашей программе, минуя rlwrap
Все остальные клавиши будут работать как обычно (например, перемещение курсора) при редактировании строки ввода с помощью readline
- 1. Управление нажатием клавиши в Windows Phone 8
- 2. Как справиться с нажатием клавиши в MFC?
- 3. открытое приложение с нажатием клавиши
- 4. Как открыть подменю нажатием клавиши
- 5. Как воспроизвести движок с помощью клавиши с нажатием клавиши
- 6. Работа с клавишами Ctrl с нажатием клавиши
- 7. Триггер гиперссылки с нажатием клавиши
- 8. Изменение переменной с нажатием клавиши
- 9. Как закончить программу нажатием клавиши?
- 10. Jquery триггер нажатием клавиши
- 11. IME - Как справиться с нажатием клавиши
- 12. Открытие меню нажатием клавиши
- 13. Открытие ссылок с нажатием клавиши в iTerm2
- 14. Как синхронизировать ToggleButton с нажатием клавиши
- 15. Триггер нажатием клавиши
- 16. «Do Refactor» нажатием клавиши, а не нажатием
- 17. Отсутствие задержки между нажатием клавиши
- 18. Очередь анимации jQuery с нажатием клавиши
- 19. Непрерывное движение одним нажатием клавиши?
- 20. Добавление задержки между нажатием клавиши
- 21. Есть ли способ переключить Bash или zsh из режима Emacs в режим vi с нажатием клавиши?
- 22. Показать Скрыть проблему с нажатием клавиши div
- 23. Переключение JTextFields нажатием клавиши Enter
- 24. Отправить форму JQuery с нажатием клавиши ввода
- 25. Остановка во время цикла с нажатием клавиши
- 26. Как настроить положение объекта нажатием клавиши?
- 27. Выполнить запуск нажатием клавиши javascript
- 28. представить индивидуальный элемент формы с нажатием клавиши
- 29. Как обращаться с нажатием клавиши ввода в поле ввода?
- 30. Получение SuperNotCalledException нажатием клавиши возврата
, вероятно, не так, как вы думаете, поскольку делегирование ответственности между программами делает терминальное соединение (и инициализацию) громоздким. –