5

Я запускаю Emacs в urxvt с zsh в качестве оболочки:

~ % echo $TERM && echo $SHELL
rxvt-256color
/bin/zsh
~ %

Моя текущая проблема заключается в том, что я не могу заставить правильно работать клавиши Home и End в Emacs.

Вот мой.Пример Xresources для связывания ключей:

 URxvt.keysym.Home:            \033[1~
 URxvt.keysym.End:             \033[4~

 URxvt.keysym.C-Up:            \033[1;5A
 URxvt.keysym.C-Down:          \033[1;5B
 URxvt.keysym.C-Right:         \033[1;5C
 URxvt.keysym.C-Left:          \033[1;5D

 URxvt.keysym.Meta-Up:         \033[1;3A
 URxvt.keysym.Meta-Down:           \033[1;3B
 URxvt.keysym.Meta-Right:          \033[1;3C
 URxvt.keysym.Meta-Left:           \033[1;3D

 URxvt.keysym.S-Up:            \033[1;2A
 URxvt.keysym.S-Down:          \033[1;2B
 URxvt.keysym.S-Right:         \033[1;2C
 URxvt.keysym.S-Left:          \033[1;2D

Я мог настроить Ctrl+ стрелки и Shift+ стрелки благодаря этому файлу rxvt.el, найденному в сети (благодаря его автору).

~ % cat ~/.emacs.d/rxvt.el
[...]
(define-key function-key-map "\033[1;5A" [(control up)])
(define-key function-key-map "\033[1;5B" [(control down)])
(define-key function-key-map "\033[1;5D" [(control left)])
(define-key function-key-map "\033[1;5C" [(control right)])
(define-key function-key-map "\033[1;2A" [(shift up)])
(define-key function-key-map "\033[1;2B" [(shift down)])
(define-key function-key-map "\033[1;2D" [(shift left)])
(define-key function-key-map "\033[1;2C" [(shift right)])
[...]

Вот строки, касающиеся Home & End:

~ % cat ~/.emacs.d/rxvt.el
[...]
(define-key function-key-map "\033[1~" [home])
(define-key function-key-map "\033[4~" [end])                                 
(define-key function-key-map "\033[7~" [find])
(define-key function-key-map "\033[2~" [insert])
(define-key function-key-map "\033[8~" [select]) 
(define-key function-key-map "\033[5~" [prior])
(define-key function-key-map "\033[6~" [next])
[...]

И я добавил эти строки в мой файл .emacs, но без какого-либо эффекта:

~ % cat ~/.emacs
 [...]
 ;;default configuration for home & end key
 (global-set-key [home] 'beginning-of-line)
 (global-set-key [end] 'end-of-line)

Вот что команда sudo showkey сообщает мне о Home & End:

 <user>@localhost ~ % sudo showkey
 [sudo] password for <user>: 
 kb mode was ?UNKNOWN?
 [ if you are trying this under X, it might not work
 since the X server is also reading /dev/console ]

 press any key (program terminates 10s after last keypress)...
 keycode  28 release
 ^[[1~keycode 102 press     //home key was pressed
 keycode 102 release
 ^[[4~keycode 107 press     //end key was pressed
 keycode 107 release
 keycode  29 press
 ^Ccaught signal 2, cleaning up...

У кого-нибудь есть совет?

Также, возможно, будет полезно, если я скажу, что Ctrl+A работает и ведет себя так же, как и для Home, и Ctrl+E для End.

3 ответа3

1

Это сработало для меня:

(global-set-key (kbd "<home>") 'beginning-of-line)
(global-set-key (kbd "<end>") 'end-of-line)
1

Я думаю, что вы более продвинуты в Emacs, чем я. Но я вообще не использую клавиши Home и End .

Я просто использую:

  • Ctrl+A , чтобы подвести курсор к home линии.
  • Ctrl+e, чтобы подвести курсор к end строки.

  • Alt+SHIFT+(C- <) , чтобы подвести курсор к home файла / буфера.

  • Alt+SHIFT+. (C->), чтобы перевести курсор в end файла / буфера.

Я узнал об этом в учебнике по Emacs по умолчанию.

Полагаю, я нашел эти клавиши практичными, только когда освоил сенсорный набор текста.

0

Если вы заинтересованы в настройке привязок клавиш rxvt для улучшения совместимости с Emacs, вас может заинтересовать написанный мной пакет Emacs, который может научить Emacs и терминалы правильно распознавать все комбинации клавиш на клавиатуре ПК и комбинации клавиш-модификаторов:

https://github.com/CyberShadow/term-keys

Он может сгенерировать файл конфигурации для urxvt (и других терминалов), который переводит ключи и комбинации ключ + модификатор в уникальные коды последовательности, что позволяет им правильно распознаваться Emacs.

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