【问题标题】:emacs in terminal meta arrow keybindings终端元箭头键绑定中的 emacs
【发布时间】:2012-06-07 16:38:43
【问题描述】:

我刚刚从使用 Emacs.app 切换到使用 iterm2 作为终端仿真器的终端模式下的 emacs 服务器和 emacsclient。不过,我在某些键绑定方面遇到了一些麻烦。特别是 M-left 箭头打印字符 D,M-right 箭头打印 C,M-up 箭头打印 A,M-down 箭头打印 B.M-ret 似乎工作,至少对于 org 模式。我对 iterm2 中的键使用 xterm 默认值,并将左右选项键绑定到 +Esc。我可以使用 Esc-left 或 Esc-right 在 org-mode 中获得 M-left 功能 这在 org-mode 中特别烦人。我是否只需要重新绑定 .emacs 中的键?我该怎么做呢?

我看过这个http://orgmode.org/manual/TTY-keys.html#TTY-keys,但我不明白为什么终端中的箭头键不可用。

编辑:

猫升级:^[[1;9A 猫元向下:^[[1;9B 猫元右:^[[1;9C 猫元左:^[[1;9D

主要问题已解决,但我现在遇到了shift-up 的问题。 "<select> undefined"。我使用从cat 获得的转义序列尝试了类似的映射:^[[1;2A。不愿意为类似问题创建另一个问题。

【问题讨论】:

  • 在命令提示符下键入 cat 并按元箭头键。这将向您显示箭头键输出的 esc 序列。请将这些添加到您的问题中。例如在我的终端 M-up 输出:^[^[[A.
  • 好的,这似乎与我尝试使用 meta 时在 emacs 中得到的输出一致
  • 嗯..不,输入cat,回车,然后按箭头键。
  • 啊好的谢谢,现在应该修好了

标签: macos emacs terminal


【解决方案1】:

解决方案 1

根据您在此处提供的信息,您可以尝试一件事。您告诉 emacs 将这些转义序列映射到正确的键序列:

(add-hook 'term-setup-hook
  '(lambda ()
     (define-key function-key-map "\e[1;9A" [M-up])
     (define-key function-key-map "\e[1;9B" [M-down])
     (define-key function-key-map "\e[1;9C" [M-right])
     (define-key function-key-map "\e[1;9D" [M-left])))

解决方案 2

我还通过谷歌搜索找到了另一种可能的解决方案:重新定义 iTerm 绑定以匹配 emacs 正在寻找的内容。

http://offbytwo.com/2012/01/15/emacs-plus-paredit-under-terminal.html

以上页面引用:

返回到 iTerm2 下的配置文件键绑定并添加以下绑定:

M-up      : Esc-[1;4A
M-down    : Esc-[1;4B
M-right   : Esc-[1;4C
M-left    : Esc-[1;4D

【讨论】:

  • 我之前曾尝试通过 iterm 重新映射它,但我一定是做错了什么。钩子虽然有效。谢谢!
【解决方案2】:

我正在回答您的“主要问题已解决,但有新问题”编辑。

我在这个问题上找到了这个人的博客文章: - http://webframp.com/emacs/2013/02/22/fixing-emacs-bindings-on-the-in-iterm2/

基本上,您可以使用“运行猫”和按钮技巧来查看系统/终端发送的转义码,然后添加“定义键”行来定义 M-{up,down,right, left} 和 MS-{up,down,right,left}。

【讨论】:

  • 非常感谢我所需要的。似乎每个人的字符代码都略有不同。以上使用 [1;4x]。该博客文章显示 [1;3x]。但我的是 [1;9x]。非常混乱。
猜你喜欢
  • 2021-10-20
  • 2021-09-02
  • 2016-12-08
  • 2014-08-10
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多