OS X终端:同时使用Meta键+ alt功能

时间:2009-02-01 11:08:55

标签: macos emacs keyboard terminal

有没有办法使用 alt / 选项键作为元键,但仍然可以使用它来制作一些需要它的字符?

例如,在我的本地键盘布局中:

  • @ alt + 2
  • \ alt + shift + 7
  • | alt + 7

所以,如果我将 alt 设置为元键,我就不能再制作这些字符了。另一方面,使用“按esc,释放esc,按一个键”来制作元键序列会让我的双手受伤。

任何已解决此问题的国际键盘的Emacs用户,请提供您可能提供的任何提示! :)

修改:

看来我可以将 alt 设置为元键,然后在inputrc中添加这些设置:"\e2": "@"这在bash shell中有效,但它仍然不能用于但Emacs,所以没有好处。

16 个答案:

答案 0 :(得分:24)

我在Mac OS X中使用瑞典语键盘,并使用以下设置进行Emacs.app:

首先我安装了KeyRemap4MacBook,然后设置将左侧Option键更改为Command。

然后我的.emacs中有以下内容:

(setq mac-option-modifier 'none)
(setq mac-command-modifier 'meta)

这使得Emacs将命令视为Meta并忽略Option。由于左Alt / Option键被重新映射到命令,这使得它可以工作,而右Alt / Option键仍可用于输入@ []和{}等特殊字符。

特定于应用程序的Mac快捷方式(如Cmd + C和Cmd + V)不再有效,但全局快捷方式(如Spotlight的Cmd +空间和应用切换的Cmd + Tab)可以。

<强>更新 如果使用iTerm2作为终端,则支持仅将左Alt / Option键映射到元,这意味着您仍然可以使用正确的AltGr / Option键输入特殊字符。这也意味着您可以在iTerm2终端中运行的Emacs中正常使用meta。

答案 1 :(得分:15)

我的Mac上有一个瑞典语键盘,我正在使用Aquamacs。添加两行(归属于JoakimHårsman)

(setq mac-option-modifier 'none)
(setq mac-command-modifier 'meta)
.emacs中的

(并重新启动Aquamacs)为我做了诀窍。

答案 2 :(得分:12)

使用iTerm2,您可以将左选项键映射到ESC / meta,并将右选项键的映射保留为“normal”。这样您就可以使用正确的选项键来输入重音等。

iTerm2 preferences

答案 3 :(得分:10)

考虑使用适用于Mac OS X的全功能Emacs。我使用Carbon Emacs,但我相信其他人(比如Aqua Emacs或X11 Emacs)可以解决问题。

如果您坚持在终端中使用Emacs,则可以使用C-x 8前缀作为撰写密钥。尝试使用C-x 8 C-h获取可能性列表。

请参阅http://www.emacswiki.org/emacs/EmacsForMacOS

答案 4 :(得分:5)

我使用的两种解决方法:

  • 我在X11.app下运行xterm。 X11.app使用命令键作为元。
  • 在Terminal.app中运行emacs时,我只使用rfc1345输入法,它允许我输入各种疯狂的非ascii字符而无需选项密钥。

答案 5 :(得分:5)

查看cmd-key-happy。这个小应用程序为我创造了奇迹。它允许您将命令用作元,具有您可以配置的异常。

作者的信息如下:

此程序允许您交换命令和alt(或选项)键 在任何应用程序中,但特别是Terminal.app。

http://github.com/aim-stuff/cmd-key-happy

答案 6 :(得分:5)

这是一篇旧帖子,但为机器人添加了替代方案。 我从Aquamacs借用了几个文件( emulate-mac-keyboard-mode.el,aquamacs-tools.el )来修复问题(我有一个意大利专业版的键盘):

(defun aq-binding (any)
 nil)
(load  "~/.emacs.d/emulate-mac-keyboard-mode.el") ;;  'noerror

这提供了:

  • 几个小模式( emulate-mac-italian-keyboard-mode, 模拟-MAC-法国键盘模式, mulate-mac-swiss-german-keyboard-mode, 等)
  • 一个菜单,可以播放Aquamacs提供的所有选项

使用Emacs-23.3-universal-10.6.6测试,似乎对我没用。

非常感谢Aquamacs,如果还没有这样做,那就推动这个上游。

答案 7 :(得分:4)

具有选项死键的特殊键盘布局

我对此问题的解决方案是我编写的特殊键盘布局U.S. custom。它提供了一个选项deadkey,可以生成选项组合而无需使用物理⌥选项修饰键。例如,字符⟨ç⟩在普通的美国键盘布局上生成如下:

  • 点击⌥选项 + c

美国。自定义键盘布局增加了第二种生成⟨ç⟩的方法:

  • 点击⇧Shift + §(选项死键),然后释放它,然后点击 c

使用选项作为元键时,即使在Terminal.app中也是如此。

请注意,美国自定义键盘布局还有两件事:

  1. 它将普通的§转换为⎄撰写键(所以你也可以通过点击§,然后来产生⟨ç⟩ ,,然后 c )。
  2. 它取代了(显着扩展的)美国的CapsLock映射。扩展键盘布局。
  3. 将选项死键重新映射到右侧选项修饰键

    如果你有一个物理ANSI键盘,那么你缺少§键。在这种情况下,我建议将§键分配给其他键,例如右侧⌥选项修饰键。安装KeyRemap4MacBook,打开~/Library/Application\ Support/KeyRemap4MacBook/private.xml并粘贴以下代码:

    <?xml version="1.0"?>
    <root>
    <item>
      <name>Send ISO Section for right Option</name>
      <identifier>private.send_iso_section_for_right_option</identifier>
      <autogen>--KeyToKey-- KeyCode::OPTION_R, KeyCode::UK_SECTION</autogen>
    </item>
    <item>
      <name>Send Shift+ISO Section for Shift+right Option (keep normal right Option without Shift)</name>
      <identifier>private.send_shift_iso_section_for_shift_right_option</identifier>
      <autogen>--KeyToKey-- KeyCode::OPTION_R, ModifierFlag::SHIFT_R, KeyCode::UK_SECTION, ModifierFlag::SHIFT_L</autogen>
      <autogen>--KeyToKey-- KeyCode::OPTION_R, ModifierFlag::SHIFT_L, KeyCode::UK_SECTION, ModifierFlag::SHIFT_L</autogen>
    </item>
    </root>
    

    然后,打开KeyRemap4MacBook偏好设置面板,点击 ReloadXML ,然后选择“为正确的选项发送ISO部分”。现在,您的⌥右选项键被重新映射到§,所以当美国时。自定义键盘布局处于活动状态,点击⇧Shift + ⌥右选项将为您提供选项死键状态(点击⌥右选项没有额外的修饰符会给你一个等同于选项修饰符的死键状态。

    如果在⇧Shift未按下(而不是⎄撰写键)时想要保持⌥右选项,则选择“发送” Shift +右侧选项的Shift + ISO部分(在没有Shift的情况下保持正常右侧选项)“在KeyRemap4MacBook偏好设置面板中”(而不是“为正确选项发送ISO部分”)。像这样,只有⇧Shift + ⌥右选项将产生选项死键,而普通⌥右选项将继续作为选项修饰符工作。您甚至可以继续使用⌥右选项 + ⇧Shift修饰符组合(例如⌥右选项 + ⇧Shift + c →⟨Ç⟩)只要你没先点击⇧Shift

答案 8 :(得分:3)

上面的答案提到了输入非ascii输入的方法,但这不是真正的问题。 C-x 8方法允许你输入一堆非ascii,但问题是你需要mac上的选项键才能输入(ascii)字符`|' (竖条)!

那你怎么输入像M- |这样的东西(在terminal.app下,在ssh中运行emacs)?没有办法,但使用转义键,因为|是选项-7和Terminal.app由于一些愚蠢的原因不会让你使用Cmc作为元: - (

(如果有人知道hack(也许是SIMBL?)实际上让Terminal.app使用Cmd作为meta,我会非常感激......)

答案 9 :(得分:3)

值得思考问题背后的假设。我的意思是说真正的问题是使当前似乎需要选项键的字符。如果不同时实现'元键+ alt功能',就可以解决这个问题。

让我解释一下:我有类似的问题。在我的英国键盘上,shift-3被映射到英镑符号£,这意味着我通常需要点击选项-3来获得非常有用的# - 终端中的一个真正的问题,我使用选项作为元。但是,我发现上述大多数解决方案都有点过分。我不想更改为另一个版本的Emacs(例如Aquamacs),切换到不同的终端应用程序(例如iTerm或xterm),或者为了安装密钥重映射应用程序(例如KeyRemap4MacBook)一个符号!也许这适合一些人,但我认为值得指出的是,如果问题只是一个字符,可以使用九个字符的文本文件来解决。

关于这个问题的个人版本,我发现最简单的解决方案是在我的主目录中创建一个名为.inputrc的文件,该文件包含以下单行:

"§": "#"

这会重新映射(对我来说,相当无用)§,可以在当前Mac键盘的1左侧找到(几乎不可或缺的)#。这比默认设置更适合我,因为我现在可以用一个按键获得#。如果我需要重新映射任何其他字符,那么只需为每个字符添加额外的行。

无论如何,这涉及如何在shell中获取缺少的字符,但是如果你也想在Emacs中使用它(你没有说,但可能就是这种情况),那么你可以在{{{{ 1}} file(其中35是我想要的角色的ASCII,即。#):

.emacs

如果我经常想通过选项键访问几十个字符,那可能不是一个很好的解决方案,但是没有。

我希望这有助于某人。作为一个周末的黑客,我通常不敢发布Stack Overflow问题的答案......

答案 10 :(得分:2)

Aquamacs支持,至少对我的(法语)键盘支持。安装Aquamacs后(通过拖放),您可以转到选项 - &gt;选项,命令,Meta键并为键盘选择合适的设置(在我的情况下,... Meta&amp; French)。我不熟悉Emacs,但我尝试过的所有有用组合似乎都有用([,{,|等等)。

根据2.1版的菜单项,支持的键盘是:

  • US
  • 瑞士法语
  • 瑞士 - 德国
  • 芬兰
  • 意临
  • 意大利
  • 西班牙语
  • 德国

我猜想,如果您的键盘没有出现在列表中,Aquamacs团队会对任何贡献表示感谢。

答案 11 :(得分:2)

以下解决方案有效, UNOBTRUSIVE ,您不需要iTerm2 Aquamacs 等等。

第1步

在Terminal.app设置中将“使用选项作为元键”保持为开启

第2步

修改~/.inputrc如果它已经不存在),请添加以下行:

"\e3": '#'

这将重新映射⌥alt + 3 ,以便您在终端中生成#字符,而不是它很烦人地回来了提示(arg: 3)

第3步

修改~/.emacs,添加以下行:

(global-set-key (kbd "M-3") "#")

这将重新映射⌥alt + 3 ,以便您在emacs内部生成#字符 ,而不是烦恼地无所事事。


警告1 ,这只是 1 重新映射。所以⌥alt + 其他键)将不会被重新映射,例如您可能希望重新映射⌥alt + n 以生成波形键~。只需按照上面列出的相同步骤,显然可以使用您需要的任何键来切换 3

警告2,当您ssh进入另一个框时,您将面临同样的困难,但您只需编辑~/.inputrc和{{1那个盒子上的文件。

警告3,我是英国人,在英国的MacBook上。所以我不能担保外国MacBooks。

答案 12 :(得分:1)

我咬了草,开始按下逃生钥匙。你习惯了......

答案 13 :(得分:0)

我想修改这个问题或其他因为我也使用瑞典语键盘,我必须按alt + 7或alt + shift + 7来制作|和\分别。

我也在Terminal.app中使用Irssi,但这些并不能很好地混合。

我是一个很长时间的vim用户,所以emacs对我来说不是问题。

在Terminal.app中有没有办法将CMD重新映射为Meta?

到目前为止,我只是在Irssi中键入/ wg N而幸存下来,因为在我的终端中输入这些字符比IRC更重要。

虽然解决方案对我来说是值得的! :)

答案 14 :(得分:0)

这已经晚了很多年,但是对于那些在寻找解决方案时遇到此页面的人,正如我所做的那样,我决定自己构建一个,不需要放弃Terminal.app而选择iTerm 2。 / p>

这是一个简单的状态栏应用程序,它在后台运行并将所有左Alt + $ KEY键事件快速连续重写为两个关键事件,Esc,然后是$ KEY;但是,只有当Terminal.app成为焦点应用程序时才会这样做。

您可以在https://github.com/habibalamin/Metalt找到它。

答案 15 :(得分:0)

我将大写锁定键分配了转义符,并且效果很好。您可以在Mac系统偏好设置>键盘>修改键中轻松配置它。

https://apple.stackexchange.com/a/282092/236382