如何在emacs内将方向键映射成 ctrl 吗?

如题。

现在手头有 68 键的键盘。但右手按 Ctrl 键时经常误触成 左方向键。所以我希望把 左方向键 映射成 Ctrl。

Windows系统中可以用 autohotkey 进行改键,且只在 emacs 程序中生效。

我想问能否在 emacs 内部实现这个功能。 如果不行的话,在 Linux 中如何设置改键使其只对 emacs 生效。

给 Emacs 加 hook 函数, 每次 frame 被聚焦时 执行你的 autohotkey 脚本, 失焦时中断那个进程.

但我没试过, 只是给你提供一种可能的思路.

谢谢!我主要想寻找 只用 emacs 的解决方案。

autohotkey 自带只对特殊程序生效的功能,实现起来是比较简单的

emacs内部实现的话,应该做不到,但可以left模拟ctrl的功能,你这么写(global-set-key (kbd "<left>") '()),然后写

(global-set-key (kbd "<left>p") 'previous-line);与ctrl+p一致
(global-set-key (kbd "<left>n") 'next-line);下移动光标
(global-set-key (kbd "<left>f") 'forward-char);向前移动一个字符
(global-set-key (kbd "<left>b") 'backward-char);向后移动一个字符

我最初用shift模拟ctrl的功能 ,就是这么改出来的,但这样比较麻烦,建设还是用 外部程序改键

我找到一个部分实现的方法: key bindings - My left pinky hurts. Can I press another key to act as Control? - Emacs Stack Exchange

(define-key function-key-map (kbd "<left>") 'event-apply-control-modifier)
(global-unset-key (kbd "<left>"))

但这时 左方向键 并不是修饰键,所以此时一直按着 左方向键,相当于不停地按 ctrl.

第二行要写kbd吧

是的,大意了,因为最终没有用这个改键方法,所以回答的时候没检查 :joy: