标题说的是:我想切换到使用 emacs-server / emacs-client 模型,而不是使用 Mac OS X 的 GUI。我使用 iTerm2。我想将功能键 (fn) 映射到 super 或 hyper。
我尝试使用 KeyRemap4MacBook - 但没有成功。
更新:
看起来我可以使用event-apply-super-modifier
或event-apply-hyper-modifier
,由定义function-key-map
。
我可以让 Fn 键发出一个使用的键代码,比如KeyCode::F18
,然后让 iTerm2 将其转换为一些转义字符,比如:
Esc+[+J或类似的东西。
更新(2015 年 4 月 13 日):
我认为这https://apple.stackexchange.com/questions/144481/sending-controlalt-char-to-terminal-in-iterm2非常有趣。可能有一种方法可以配置 iterm2 以发送适当的控制键,类似于@toolbear74 的答案。
答案1
不令人满意的解决方法
该序列C-x @ s-…
相当于s-…
,例如C-x @ s-t
相当于s-t
。结合iTerm2快捷键:
- 创建全局或配置文件的快捷方式
⌘…
设置为Send hex code
,例如⌘t => Send hex code
指定以下形式的十六进制代码:
0x18 0x40 MOD KEY
其中分别MOD
是0x68
或 ,并且是要用或修改的键。例如映射到:0x73
h
s
KEY
hyper
super
⌘t
s-t
⌘t => 0x18 0x40 0x73 0x74
对每个你想要的快捷方式重复此操作...嗯...
失败的实验#1
在 iTerm 中:
- 将左和右 Option 键全局配置为左 Option
- 将左、右命令键全局配置为右选项
- 在配置文件中,将左选项配置为
+ESC
,将右选项配置为Meta
通过这种方式重新映射⌘
可以有效地禁用所有 iTerm 键盘快捷键……嗯……
在 Emacs 中:
使用右选项(R⌥
)会导致字符的第 8 位被设置,据我所知,这是表示 META 键按下的旧方式(当键盘有实际的 META 键时)。
但是,我没能让 Emacs 利用这种区别做一些有用的事情。考虑到META-t
=>t
的第 8 位是八进制的,364
我尝试过:
(global-set-key (kbd "[R⌥-t]") (lambda () (interactive) (message "woot #1")))
(global-set-key (kbd "\364") (lambda () (interactive) (message "woot #2")))
[R⌥-t]
当我按下该键序列时,缓冲区中显示的单个字符在哪里,以图形方式表示\364
但表现为单个字符。
值得注意的是,无论有没有按键绑定,无论我何时按下,R⌥-t
emacs 中都不会显示任何内容,直到我按下另一个键,emacs 才会显示\364
字符,然后解释第二次按键。例如,R⌥-t a
=>\364a<point>
和R⌥-t LEFT
=> <point>\364
,但仅在a
按下或左箭头后才显示。
您只需执行上述第 3 步并R⌥
直接使用即可进行实验。