1

Если я использую следующий файл .emacs, я могу перейти к началу / концу текущей строки, используя клавиши home / end, как и следовало ожидать.

(keyboard-translate ?\C-h ?\C-?)

(add-to-list 'load-path "/home/sam/programs/go/go/misc/emacs/" t)
(require 'go-mode-load)

(global-set-key [kp-home]  'beginning-of-line) ; [Home]
(global-set-key [home]     'beginning-of-line) ; [Home]

(global-set-key [kp-end]  'end-of-line) ; [End]
(global-set-key [end]     'end-of-line) ; [End]

Однако, если я открываю сеанс экрана, он не функционирует так (клавиша [home] по-прежнему возвращает меня в начало буфера).

Вот мой файл .screenrc, если кто-нибудь может найти здесь что-нибудь интересное:

term xterm
defutf8 on
defflow off
startup_message off

# terminfo and termcap for nice 256 color terminal
# allow bold colors - necessary for some reason
attrcolor b ".I"

# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'

#use bash as the default login shell
defshell -bash

РЕДАКТИРОВАТЬ: Очевидно, использование Mx description-key (как предложил nschum) говорит о том, что [begin] срабатывает, когда я нажимаю клавишу home на моей клавиатуре при запуске emacs на экране. Когда я запускаю emacs за пределами экрана, ключ для описания относится к [home], как и ожидалось. Похоже, что "defutf8 on" - единственная запись, связанная с клавиатурой, в моем .screenrc - есть ли что-то еще, что может вызывать проблемы?

1 ответ1

0

Когда вы запускаете программу на screen , screen программа может (и будет) делать это:

  • screen имеет свое собственное описание терминала. Он пытается отобразить (преобразовать) последовательности ключей базового терминала в это.
  • Преобразование не завершено. В качестве обходного пути screen ищет настраиваемые описания терминалов, начиная с screen.$TERM . ncurses предоставляет некоторые полезные.
  • screen отфильтровывает (игнорирует) некоторые последовательности клавиш, которые не вписываются в его представление о том, как следует вводить данные.

Скорее всего, ваша проблема в первом случае. Если вы делаете

infocmp xterm screen

(предполагая, что вы используете наиболее часто рекомендуемое значение для TERM независимо от того , используете ли вы xterm или нет), вы можете заметить несколько строк, подобных этой:

kend: '\E[4~', '\EOF'.
khome: '\E[1~', '\EOH'.

Последний столбец - это последовательность (\E - управляющий символ), который screen отправит вашей программе, когда он получит средний столбец от xterm и т.д.

Проблема с .screenrc том, что он переопределяет значение $TERM на xterm , что сбивает с толку screen:

term xterm

Можно предположить, что преобразование будет завершено, но тестирование показывает, что это не так. Проблема такого рода заключается в том, что ncurses предоставляет настраиваемые записи. Например, эта запись из базы данных ncurses вступает в силу на моем компьютере, учитывая настройку .screenrc (потому что "xterm" имеет псевдоним «xterm-new»):

screen.xterm-xfree86|screen.xterm-new|screen customized for modern xterm,
        bce@, bw,
        invis@, kIC@, kNXT@, kPRV@, meml@, memu@,
        sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;m,
        E3@, use=screen+italics, use=screen+fkeys, use=xterm-new,

Вы можете заметить use=screen+fkeys . Это говорит по сути: действуйте и используйте клавиши, которые будет использовать screen , так как это самый простой обходной путь. Теперь есть небольшая проблема: screen+fkeys выглядит так:

screen+fkeys|function-keys according to screen,
        kend=\E[4~, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kfnd@,
        khome=\E[1~, kslt@,

потому что (на экране тестирования) он отправил эти ключи, а не то, что было во внешнем описании терминала $TERM . Внутренний $TERM установлен на xterm , но screen использует эту промежуточную запись, когда передает специальные ключи, такие как home/end, для вашего сеанса.

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