4

我有 2 个用于 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)))

但是当我点击CTRL+→</kbd> or CTRL+↑</kbd> in console the cursor just moves as if the arrow was pressed.

当我尝试CTRL+H K然后CTRL+→</kbd>, it gives me the right key docs as if CTRL wasn't pressed at all.

如何在控制台中解决这种奇怪的行为?

我正在使用 Linux Slackware 14、Emacs 24.2.1。

4

3 回答 3

4

这是算法,如何使修饰键在终端的 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.在root下加载文件:

#loadkeys funcskeys

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)
于 2012-11-07T21:45:55.770 回答
2

您的终端可能不会产生不同的转义序列CTRL-right‬</kbd> versus just right.

您可以通过键入轻松验证这一点CTRL-v CTRL-right‬</kbd> and CTRL-v right‬</kbd>. Here, CTRL-v tells the terminal to print the escape sequence for the key that follows. If these two produce the same sequences then your terminal sends the exact same information to Emacs whether you press CTRL or not.

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

  • ^[[C为了CTRL-v right‬</kbd>
  • ^[[1;5C为了CTRL-v CTRL-right‬</kbd>

当我在其中一个 Linux 控制台上执行相同操作时,我得到:

  • ^[[C为了CTRL-v right‬</kbd>
  • ^[[C为了CTRL-v CTRL-right‬</kbd>

如您所见,在后一种情况下,两个键序列的结果完全相同,因此 Emacs 无法区分两者。

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

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

于 2012-10-30T23:21:41.440 回答
1

当心loadkeys。至少在 Debian/Ubuntu 中它在 package 中kbd。有了它,您可以修改您的键盘布局,可能还可以修改一些“异国情调”的组合键。

于 2012-10-30T23:44:17.627 回答