Как отключить перехват оболочки управляющих символов? - PullRequest
3 голосов
/ 13 января 2010

Я пишу приложение curses на Python под UNIX.Я хочу позволить пользователю использовать CY для восстановления из списка уничтожений а-ля Emacs.

Проблема, конечно, в том, что CY перехватывается моей оболочкой, которая затем отправляет SIGTSTP моему процессу.Кроме того, CZ также приводит к отправке SIGTSTP, поэтому перехват сигнала означает, что CY и CZ не различимы (хотя даже без этого единственные решения, о которых я могу думать, являются чрезвычайно хакерскими). ​​

Я знаю, что яЯ спрашиваю, возможно (в C, если не в Python), так как Emacs делает это.Как отключить специальную обработку оболочкой определенных управляющих символов, отправляемых с клавиатуры, и отображать эти символы в процессе 'stdin?

Ответы [ 2 ]

2 голосов
/ 13 января 2010

См. Модуль termios и справочную страницу termios(3).

1 голос
/ 13 января 2010

Для базовой функциональности используйте tty. Например, вызов tty.setraw(sys.stdin) переведет стандартный терминал ввода в необработанный режим.

В более общем случае Python поставляется с библиотекой termios , но вам, вероятно, потребуется некоторый опыт работы с termios, чтобы знать, как ее использовать.

В качестве альтернативы, дешевым способом является оболочка для stty, который является интерфейсом командной строки для termios.

...