Как отключить перехват управляющих символов оболочкой?
Вопрос
Я пишу приложение проклятий на Python под UNIX.Я хочу, чтобы пользователь мог использовать CY для извлечения из списка убийств в стиле Emacs.
Проблема, конечно, в том, что CY перехватывается моей оболочкой, которая затем отправляет SIGTSTP моему процессу.Кроме того, C-Z также приводит к отправке SIGTSTP, поэтому перехват сигнала означает, что C-Y и C-Z не различимы (хотя даже без этого единственные решения, которые я могу придумать, являются крайне хакерскими).
Я знаю, что то, о чем я прошу, возможно (в C, если не в Python), поскольку Emacs делает это.Как я могу отключить специальную обработку оболочкой определенных управляющих символов, отправляемых с клавиатуры, и чтобы эти символы появлялись в стандартном вводе процесса?
Решение
См. termios
модуль и termios(3)
справочная страница.
Другие советы
Для базовой функциональности используйте tty
.Например, вызов tty.setraw(sys.stdin)
переведет терминал стандартного ввода в необработанный режим.
В более общем случае Python поставляется с библиотека термос, но вам, вероятно, понадобится некоторый опыт работы с termios, чтобы знать, как его использовать.
В качестве альтернативы, дешевый способ — раскошелиться на stty
, который представляет собой интерфейс командной строки для termios.