我在 urxvt 中运行 Emacs,并使用 zsh 作为 shell:
~ % echo $TERM && echo $SHELL
rxvt-256color
/bin/zsh
~ %
我现在的问题是无法让Homekey & Endkey 在 Emacs 中正常工作。
这是我的 keysbind 的 .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
借助在网上找到的这个 rxvt.el 文件(感谢其作者),我可以设置 Ctrl+箭头和 Shift+箭头。
~ % 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相同的行为,也许会有所帮助。HomeCtrlEEnd
答案1
这些对我有用:
(global-set-key (kbd "<home>") 'beginning-of-line)
(global-set-key (kbd "<end>") 'end-of-line)
答案2
我认为你比我更精通 emacs。但是,我根本不使用Home和键。End
我只是使用:
- Ctrl+a将光标移至
home
行首。 Ctrl+e将光标移至
end
行首。Alt++ ( SHIFTC- ,<)将光标移至
home
文件/缓冲区。- Alt++ ( SHIFTC- .>)将光标移至
end
文件/缓冲区。
我在默认的 emacs 教程中学到了这些。
我想,只有在我掌握了触摸打字之后,我才会发现这些键很实用。
答案3
如果您有兴趣自定义 rxvt 键绑定以改善 Emacs 互操作性,您可能会对我编写的 Emacs 包感兴趣,它可以教 Emacs 和终端如何正确识别所有 PC 键盘键和修饰键组合:
https://github.com/CyberShadow/term-keys
它可以为 urxvt(和其他终端)生成一个配置文件,将键和键 + 修饰符组合转换为唯一的序列代码,以便 Emacs 正确识别它们。