3

Предпосылки для этого вопроса: в настоящее время мне приходится выполнять большую часть своей работы в терминале через ssh, и я довольно часто использую экран. Поскольку привязка клавиш ctrl-a для экранных команд меня раздражает, так как я привык использовать ctrl-a для перехода к началу строки, я изменил ее на ctrl-z. Единственная проблема с этим состоит в том, что когда я нахожусь в Matlab, думаю, что я нахожусь в Screen, но это не так, нажатие ctrl-z мгновенно завершит мой сеанс Matlab, потому что ctrl-z является привязкой ключа для приостановки процессов в * nix.

Поэтому возникает вопрос: могу ли я удалить привязку клавиш для ctrl-z в моей оболочке, чтобы она больше не приостанавливала процесс?

Моя оболочка является Terminal.app на OSX.

3 ответа3

10

Привязка ^ Z настроена не в оболочке, а в вашем TTY, псевдоустройстве, которое позволяет вам общаться с физическим терминалом или, как это обычно происходит в настоящее время, с программой эмулятора терминала. TTY содержит настройки, которые сообщают ядру, как реагировать на ввод с клавиатуры, сообщаемый устройством или эмулятором.

Настройки изменяются с помощью команды stty :

stty susp "^P"

stty принимает имя параметра и его значение; в этом случае имя параметра является susp для ключа, который приостанавливает процесс, а значение является комбинацией клавиш, например ^ P. Введите stty -a или обратитесь к man stty для получения списка доступных настроек.

2

Вы можете обернуть ваш matlab в скрипт с именем matlab.sh следующим образом:

#!/bin/sh
trap "" TSTP
/path/to/matlab-executable

Это будет игнорировать сигнал TSTP, обычно посылаемый Ctrl-Z.

2

Другая возможность состоит в том, чтобы выбрать другой экранирующий символ для экрана.

Я использую нулевой символ. В моем $HOME/.screenrc:

escape ^@^@

Нулевой символ может (обычно) вводиться как Ctrl-пробел, который очень легко набрать. И, конечно, если мне нужно отправить в программу фактический нулевой символ (например, это связано с set-mark-command в Emacs), я просто дважды нажимаю Ctrl-Space .

(Это иногда вызывает проблемы, когда я использую устройство или эмулятор терминала, который не может отправить нулевой символ, но это редко.)

Другая возможность - Ctrl-]:

escape ^]^]

который также легко набирать на клавиатуре США. (Я на самом деле использую это в сеансе экрана, который выполняется внутри моего основного сеанса экрана, но это, вероятно, больше, чем вы хотите знать.) Единственный конфликт, с которым я обычно сталкиваюсь, заключается в том, что это управляющий символ по умолчанию для команды telnet .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .