Ответ 1
Терминал vt100, который эмулирует экран (и примерно каждый другой эмулятор терминала), имеет два режима: обычный режим и режим приложения. Обычный режим используется для линейных приложений и режима приложения для полноэкранных приложений. Среди различий между режимами заключается в том, что клавиши со стрелками отправляют различные последовательности управления (я не знаю почему): например. ESC O A
в полноэкранном режиме и ESC [ A
в нормальном режиме. Кажется, что когда вы нажимаете Ctrl + Z, Emacs переключает терминал обратно в нормальный режим, но когда вы возвращаете его на передний план, он снова не переключается в полноэкранный режим, или экран не реагирует на Emacs команд.
Возможным обходным путем является связывать те же последовательности символов в обоих режимах в .screenrc
, например
bindkey -k ku stuff ^[OA
bindkey -k kd stuff ^[OB
bindkey -k kr stuff ^[OC
bindkey -k kl stuff ^[OD
Другим возможным обходным решением является указание Emacs интерпретировать обе ключевые последовательности независимо от того, что говорит терминал. Хотя это в принципе плохая идея, поскольку некоторые терминалы могут использовать эти ключевые последовательности для разных ключей, я никогда не сталкивался с таким несовместимым терминалом, и я подозреваю, что ни один из них не был сделан за последние 20 лет или более.
(define-key function-key-map "\eOA" [up])
(define-key function-key-map "\e[A" [up])
(define-key function-key-map "\eOB" [down])
(define-key function-key-map "\e[B" [down])
(define-key function-key-map "\eOC" [right])
(define-key function-key-map "\e[C" [right])
(define-key function-key-map "\eOD" [left])
(define-key function-key-map "\e[D" [left])
Истинное решение будет включать поиск того, что вызывает проблему. Это может быть ошибка в Экран, ошибка в Emacs, ошибка в терминале (эмуляторе), на котором работает Экран, ошибка или неправильная конфигурация в вашей базе данных termcap или terminfo. Если вы хотите изучить это, начните с упоминания операционной системы, какой терминал (эмулятор) экрана работает, где вы получили экран (или как вы его скомпилировали, если это то, что вы сделали) и какую версию, то же самое для Emacs, независимо от того, что вы наблюдали ту же проблему за пределами экрана, вывод echo $TERM
и echo -E "$TERMCAP"
внутри экрана.