"экран" каким-то образом отображает мои клавиши со стрелками в Emacs после ^ Z - PullRequest
24 голосов
/ 28 декабря 2010

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

M-[ a is undefined

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

Есть идеи?Это какая-то настройка экрана?

Ответы [ 7 ]

29 голосов
/ 15 февраля 2011

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

Ctrl+A, d

screen -R
24 голосов
/ 29 декабря 2010

Терминал vt100, который эмулирует Screen (и почти любой другой эмулятор терминала), имеет два режима: обычный режим и режим приложения.Обычный режим используется для построчных приложений и режим приложений для полноэкранных приложений.Среди различий между режимами в том, что клавиши со стрелками отправляют различные последовательности управления (я не знаю почему): например, ESC O A в полноэкранном режиме и ESC [ A в обычном режиме.Кажется, что когда вы нажимаете Ctrl + Z , Emacs переключает терминал обратно в обычный режим, но когда вы возвращаете его на передний план, он не переключается в полноэкранный режим снова, или Screen не реагирует на команды 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])

Истинное решение будет включать в себя поиск причины проблемы.Это может быть ошибка в Screen, ошибка в Emacs, ошибка в терминале (эмуляторе), в котором работает Screen, ошибка или неверная конфигурация в вашей базе данных termcap или terminfo.Если вы хотите исследовать это, начните с упоминания вашей операционной системы, в каком терминале (эмуляторе) работает Screen, где вы получили Screen (или как вы его скомпилировали, если это то, что вы сделали) и какую версию, то же самое дляEmacs, если вы наблюдали ту же проблему вне экрана, вывод echo $TERM и echo -E "$TERMCAP" внутри экрана.

3 голосов
/ 05 октября 2013

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

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

2 голосов
/ 11 ноября 2016

Сначала нажмите emacs на задний план.

Ctrl+z 

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

fg
1 голос
/ 04 мая 2016

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

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

и вуаля.

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

1 голос
/ 02 августа 2015

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

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

Версия

Emacs: GNU Emacs 24.3.1 (x86_64-pc-linux-gnu) 2014-06-06 для Brownie, модифицированный Debian)

tmux: 1,9

Ubuntu: 14.10

0 голосов
/ 24 октября 2015

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

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

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

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

...