Как отключить перехват управляющих символов оболочкой?

StackOverflow https://stackoverflow.com/questions/2054626

  •  20-09-2019
  •  | 
  •  

Вопрос

Я пишу приложение проклятий на 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top