Emacs Ctrl修饰符不';我不能在控制台工作

Emacs Ctrl修饰符不';我不能在控制台工作,emacs,console,hotkeys,Emacs,Console,Hotkeys,我有两个dired热键,它们在Emacs的GUI模式下工作: (add-hook 'dired-mode-hook (lambda () (define-key dired-mode-map (kbd "C-<up>") (lambda () (interactive) (find-alternate-file ".."))))) (add-hook 'dired-mode-hook (lambda () (def

我有两个dired热键,它们在Emacs的GUI模式下工作:

(add-hook 'dired-mode-hook
  (lambda ()
        (define-key dired-mode-map (kbd "C-<up>")
              (lambda () (interactive) (find-alternate-file "..")))))

(add-hook 'dired-mode-hook
  (lambda ()
        (define-key dired-mode-map (kbd "C-<right>") 'diredp-find-file-reuse-dir-buffer)))
(添加hook'dired模式hook
(lambda()
(定义键驱动模式映射(kbd“C-”)
(lambda()(交互式)(查找备用文件“.”))())
(添加挂钩'直接模式挂钩
(lambda()
(定义键目录模式映射(kbd“C-”)目录查找文件重用目录缓冲区)
但当我点击CTRL键时+→ 或CTRL+↑ 在控制台中,光标移动就像按下箭头一样

当我尝试CTRL+H K,然后尝试CTRL时+→, 它给了我正确的键,就好像根本没有按下CTRL键一样

如何修复控制台中的这种奇怪行为


我使用的是Linux Slackware 14,Emacs 24.2.1。

您的终端可能不会为CTRL-right生成不同的转义序列‬ 对刚刚好的

您可以通过键入CTRL-v CTRL-right轻松验证这一点‬ 和CTRL-v右键‬. 在这里,CTRL-v告诉终端打印接下来的键的转义序列。如果这两个命令产生相同的序列,那么无论您是否按CTRL键,终端都会向Emacs发送完全相同的信息

例如,如果我在Gnome终端中键入这些快捷方式,我会得到:

  • ^[[C
    用于CTRL-v右键‬
  • ^[[1;5C
    用于CTRL-v CTRL-right‬
当我在一个Linux控制台上执行相同操作时,我得到:

  • ^[[C
    用于CTRL-v右键‬
  • ^[[C
    用于CTRL-v CTRL-right‬
如您所见,在后一种情况下,两个键序列的结果完全相同,因此Emacs无法区分这两个键序列

解决此问题的唯一方法是在按住CTRL键时说服终端发送不同的序列-有关更多信息,请参阅


一个更简单的解决方法是在Emacs中简单地使用不同的键绑定。

注意
加载键。
至少在Debian/Ubuntu中,它在包
kbd
中。有了它,你可以修改键盘布局,可能还可以修改一些更“奇特”的键盘布局组合键。

以下是算法,如何使修改键在终端的Emacs中工作

1.创建包含以下内容的文件funcskeys:

control keycode 105 = F100
string F100 = "\033[1;5D"
control keycode 106 = F101
string F101 = "\033[1;5C"
control keycode 103 = F102
string F102 = "\033[1;5E"
altgr keycode 105 = F103
string F103 = "\033[1;5F"
最后一定是空行

2.在根目录下加载文件:

#加载键功能键

3.将其放在.emacs的开头:

(unless (display-graphic-p)
  (progn
    (define-key input-decode-map "\e[1;5C" [(control right)])
    (define-key input-decode-map "\e[1;5D" [(control left)])
    (define-key input-decode-map "\e[1;5E" [(control up)])
    (define-key input-decode-map "\e[1;5F" [(meta left)])))

算法结束

在此之后,热键将起作用:

(global-set-key (kbd "C-<right>") 'forward-word)
(global-set-key (kbd "C-<left>") 'backward-word)
(全局设置键(kbd“C-”)正向字)
(全局设置键(kbd“C-”)的反向字)

什么是
控制台
?我想是一个终端模拟器,但是哪一个。键在bash提示符(或其他
读线
供电提示符)中是否按预期工作,例如,
C-a
是一个系列的开始。是的,终端模拟器,在没有X-Windows的文本模式下工作。是的,Ctrl键工作:C-a,C-k完成工作。但C-right,C-up不做。我怀疑答案是肯定的。这是一项艰巨的任务,但不要太快放弃。