Подтвердить что ты не робот

"Экран" каким-то образом отменяет мои клавиши со стрелками в emacs после ^ Z

Каждый раз, когда я использую emacs, я могу использовать клавиши со стрелками очень хорошо, чтобы перемещать курсор. Но когда я запускаю emacs внутри экрана, и я нажимаю emacs на фон (ctrl-Z), а затем возвращаю его на передний план, мои клавиши со стрелками больше не работают, например.

M-[ a is undefined

Такое поведение не происходит, когда я запускаю emacs за пределами экрана.

Любые идеи? Это некоторые настройки экрана?

4b9b3361

Ответ 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" внутри экрана.

Ответ 2

Для чего это стоило, это только что произошло со мной, и я смог исправить его, отключившись от экрана, а затем снова подключившись:

Ctrl + A, d

screen -R

Ответ 3

У меня было окно xterm в полноэкранном режиме и было на экране, и это произошло. Я дважды щелкнул границу xterm, чтобы выйти из полноэкранного режима. Ctrl-z для фона emacs. Затем fg вернет его, а затем клавиши со стрелками. Я мог бы войти в полный экран без каких-либо проблем.

Я должен научиться всем командам навигации emacs, но мои старые привычки переходить на клавиши со стрелками сильно усложняются:/

Ответ 4

Не ответ, но стоит отметить, что описанное поведение также возникает при запуске GNU emacs на tmux на терминале Ubuntu или xterm

Быстрая работа - не запускать emacs в tmux.

Версия

Emacs: GNU Emacs 24.3.1 (x86_64-pc-linux-gnu) от 2014-06-06 на коричневом, измененном Debian)

tmux: 1,9

Ubuntu: 14.10

Ответ 5

У нас такая же проблема, обходной путь, который мы нашли (но нам еще нужно найти происхождение проблемы) - это установить "последовательность приложений" вручную из emacs:

  • Перейдите в буфер *scratch*
  • Вставить: (send-string-to-terminal "\e[?1h")
  • M-x eval-buffer

и voilà.

Кроме того, простого C-z fg может быть достаточно и быстрее ввести þ

Ответ 6

Здесь решение, которое помогло мне разоблачить его, однажды сломалось (ubuntu 14.04, emacs 24.1). Не отсоединяясь от экрана, попробуйте следующее:

1) Ctrl-z, чтобы остановить emacs.

2) Запустите еще один emacs: emacs -nw

3) Ctrl-z во втором emacs и voila!, первые emacs снова будут работать. (Затем я снова открываю второй emacs и закрываю его Ctrl-x Ctrl-c).

Ответ 7

Во-первых, нажмите emacs для фона.

Ctrl+z 

и снова вывести на передний план.

fg