【问题标题】:OS X Terminal: Meta key + alt functionality at the same timeOS X 终端:同时使用元键 + alt 功能
【发布时间】:2010-10-04 18:37:58
【问题描述】:

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

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

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

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

任何使用国际键盘的 Emacs 用户已经解决了这个问题,请提供您可能有的任何提示! :)

编辑:

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

【问题讨论】:

标签: macos emacs keyboard terminal


【解决方案1】:

我使用的两种解决方法:

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

【讨论】:

    【解决方案2】:

    考虑为 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

    【讨论】:

    • 不幸的是 Carbon emacs 不能解决我的问题。我仍然无法在具有功能元键的同时制作字符“@ \ |”。除非我完全重新映射键盘,否则emacs似乎与mac上的国际键盘不兼容。我已经在考虑学习 vim 了;)。
    • 嗯,这很奇怪。这里 Carbon Emacs 不使用 Alt 键,而是使用 Cmd 键作为元。 Cmd 不适合作为元数据有什么特别的原因吗?
    • 啊,我不知道它使用 Cmd 作为元键。我现在试过了,它可以工作。 :)
    • 顺便说一句,试试 Cocoa emacs。
    • @Slomojo:我现在使用 Cocoa Emacs,它确实很棒。
    【解决方案3】:

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

    那么你如何输入像 M-| 这样的东西(区域到 shell 命令)在 Terminal.app 下的 ssh 中运行 emacs 时?没办法,只能使用转义键,因为 |是 option-7 和 Terminal.app 出于某种愚蠢的原因不会让你使用 Cmc 作为元 :-(

    (如果有人知道实际上确实让 Terminal.app 将 Cmd 用作元数据的 hack(也许是 SIMBL?),我将非常感激......)

    【讨论】:

      【解决方案4】:

      我咬了草,然后开始按 Esc 键。习惯就好了……

      【讨论】:

      • 我真的支持这种方法,但是有了新的触摸栏,我就没有办法这样做了..
      【解决方案5】:

      我想修改这个问题之类的,因为我也使用瑞典语键盘,我必须按 alt+7 或 alt+shift+7 才能使 |和 \ 分别。

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

      虽然我是 vim 的老用户,但 emacs 对我来说不是问题。

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

      到目前为止,我一直通过在 Irssi 中简单地输入 /wg N 来生存,因为在我的终端中拥有这些字符比 IRC 重要得多。

      不过,一个解决方案对我来说价值不菲! :)

      【讨论】:

        【解决方案6】:

        查看 cmd-key-happy。这个小应用程序为我创造了奇迹。它允许您将命令用作元数据,但您可以配置例外。

        作者信息如下:

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

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

        【讨论】:

          【解决方案7】:

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

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

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

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

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

          Cmd+C 和 Cmd+V 等特定于应用的 Mac 快捷方式不再有效,但用于 Spotlight 的 Cmd+space 和用于应用切换的 Cmd+Tab 等全局快捷方式可以。

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

          【讨论】:

          • 记录一下,如果你不想用 KeyRemap4MacBook 重新映射,你可以使用: (setq mac-option-key-is-meta t) (setq mac-right-option-modifier nil ) 这将用 META 重新映射左 alt 键,用 ALT 重新映射右 alt 键。见emacswiki.org/emacs/EmacsApp
          • 感谢 iTerm2 的提示。这真的很重要。
          【解决方案8】:

          Aquamacs 支持,至少对于我的(法语)键盘。一旦安装了 Aquamacs(通过拖放),您可以转到选项 -> 选项、命令、元键并为您的键盘选择适当的设置(在我的情况下,...元和法语)。我不精通 Emacs,但我尝试过的所有有用组合似乎都有效([、{、| 等等)。

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

          • 英式
          • 美国
          • 瑞士法语
          • 瑞士德语
          • 芬兰语
          • 意大利语专业版
          • 意大利语
          • 西班牙语
          • 法语
          • 德语

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

          【讨论】:

          • 我直接编辑了 /Applications//Aquamacs.app/Contents/Resources/lisp/aquamacs/macosx/emulate-mac-keyboard-mode.el 文件,为瑞典语键盘添加了正确的映射。这很容易做到。
          【解决方案9】:

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

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

          • 点击⌥ Option+c

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

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

          Use option as meta key 已被选中时,这甚至在 Terminal.app 中也有效。

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

          1. 它将普通的 § 转换为 ⎄ Compose 键(因此您也可以通过点击 §,然后点击 来生成 ⟨ç⟩ ,,然后是 c)。
          2. 它将 CapsLock 映射替换为(显着扩展的)U.S.扩展的键盘布局。

          将选项死键重新映射到右选项修饰键

          如果您有物理 ANSI 键盘,则缺少 § 键。在这种情况下,我建议将 § 键分配给其他键,例如右侧的 ⌥ Option 修饰键。安装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 部分以获得正确的选项”。现在,您的 ⌥ Right Option 键被重新映射到 §,因此 U.S.自定义 键盘布局处于活动状态,点击 ⇧ Shift+⌥ Right Option 将为您提供选项死键状态(点击 ⌥ Right Option没有额外的修饰符会给你一个等同于选项修饰符的死键状态。

          如果要在未按下 ⇧ Shift 时保留 ⌥ Right Option(而不是 ⎄ Compose 键),则选择“发送KeyRemap4MacBook 首选项窗格中的 Shift+ISO Section for Shift+right Option(保持正常的右 Option 没有 Shift)”(而不是“Send ISO Section for right Option”)。像这样,只有 ⇧ Shift+⌥ Right Option 会产生选项死键,而普通的 ⌥ Right Option 将继续用作选项修饰符.您甚至可以继续使用 ⌥ Right Option+⇧ Shift 修饰符组合(例如 ⌥ Right Option+⇧ Shift +c→⟨Ç⟩) 只要您不先按 ⇧ Shift

          【讨论】:

            【解决方案10】:

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

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

            .emacs 中(并重新启动 Aquamacs)对我有用。

            【讨论】:

            • 非常有帮助的答案,我无法相信为什么这没有得到更多的支持。我已经找了一个小时了,非常感谢。
            【解决方案11】:

            这是一篇旧帖子,但添加了可供机器人查找的替代品。 我从 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,如果还没有完成,那么将其推向上游怎么样。

            【讨论】:

              【解决方案12】:

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

              【讨论】:

                【解决方案13】:

                值得思考问题背后的假设。我的意思是说,真正的问题是使当前似乎需要选项键的字符。无需同时实现“元键 + alt 功能”即可解决此问题。

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

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

                "§": "#"
                

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

                无论如何,这涉及如何在 shell 中获取丢失的字符,但如果您也希望在 Emacs 中使用它(您没有说但可能是这种情况),那么您可以将类似的内容添加到您的 @987654323 @ 文件(其中 35 是我碰巧想要的字符的 ASCII,即#):

                (global-set-key (kbd "§") 'insert-hash)
                (defun insert-hash ()
                  (interactive)
                  (insert 35))
                

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

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

                【讨论】:

                  【解决方案14】:

                  以下解决方案有效,UNOBTRUSIVE,您不需要 iTerm2Aquamacs 或其他任何东西。

                  第一步

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

                  第 2 步

                  编辑~/.inputrc如果它不存在则进行编辑),添加以下行:

                  "\e3": '#'

                  这将重新映射 ⌥ alt + 3 以便您生成一个# 字符如预期在终端中,而不是烦人返回提示(arg: 3)

                  第三步

                  编辑~/.emacs,添加以下行:

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

                  这将重新映射 ⌥ alt + 3 以便您生成一个 # 字符正如在 emacs 中所预期的那样,而不是烦人地做什么都没有。


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

                  警告 2, 当您将ssh 放入另一个框时,您将面临同样的困难,但您所要做的就是编辑该框上的 ~/.inputrc~/.emacs 文件.

                  注意事项 3,我是英国人,使用的是英国 MacBook。所以我不能担保国外的 MacBook。

                  【讨论】:

                    【解决方案15】:

                    这已经晚了好几年了,但是对于那些在寻找解决方案时遇到这个页面的人来说,就像我一样,我决定自己构建一个,不需要放弃 Terminal.app 来支持 iTerm 2。

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

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

                    【讨论】:

                      【解决方案16】:

                      我为大写锁定键分配了转义,它工作得很好。您可以在 mac 系统偏好设置 > 键盘 > 修饰键中轻松配置。

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

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2010-11-30
                        • 1970-01-01
                        • 2022-06-13
                        • 2016-04-29
                        • 2017-04-28
                        • 1970-01-01
                        • 2010-09-22
                        • 1970-01-01
                        相关资源
                        最近更新 更多