OS Xterminal:Meta key + altfunction同时

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

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

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

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

任何具有国际键盘的Emacs用户已经解决了这个问题,请给出您可能有的提示! 🙂

编辑:

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

考虑使用一个全function的Emacs的Mac OS X.我使用碳Emacs,但我相信其他人(说Aqua Emacs或X11的Emacs)会做的伎俩。

如果你坚持在terminal中使用Emacs,你可以使用Cx 8前缀作为组合键。 尝试Cx 8 Ch获得可能性的列表。

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

我在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键仍然适用于input特殊字符,如@ []和{}。

像Cmd + C和Cmd + V这样的应用程序特定的Mac快捷方式不再适用,但像Spotlight和Cmd + Tab这样的全球快捷方式适用于应用程序切换。

更新:如果您使用iTerm2作为terminal,它只支持将左侧的Alt / Option键映射到meta,这意味着您仍然可以使用正确的AltGr / Option键input特殊字符。 这也意味着您可以在iTerm2terminal中运行的Emacs中正常使用meta。

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

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

.emacs (并重新启动Aquamacs)为我做了诡计。

使用iTerm2,您可以将左侧选项键映射到ESC / meta,并将右侧选项键的映射保留为“正常”。 这样你可以使用正确的选项键来input口音等

iTerm2偏好

我使用的两个解决方法:

  • 我使用X11.app下运行的xterm。 X11.app使用命令键作为元。
  • 在Terminal.app中运行emacs时,我只使用了rfc1345input法,它允许我input各种疯狂的非ascii字符而不需要一个选项键。

看看cmd-key-happy。 这个小应用程序为我创造了奇迹。 它允许你使用命令作为元,但你可以configuration的例外。

作者信息如下:

这个程序允许你在任何应用程序中交换命令和alt(或者option)键,但是特别是Terminal.app。

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

这是一个旧的post,但增加了机器人的替代品find。 我借用了Aquamacs(emulate -mac-keyboard-mode.el,aquamacs-tools.el )修复问题的一些文件(我有一个Italian-Pro键盘):

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

这提供了:

  • 一些小模式( emulate-mac-italian-keyboard-mode,emulate-mac-french-keyboard-mode,mulate-mac-swiss-german-keyboard-mode等)
  • 一个可以玩Aquamacs提供的所有选项的菜单

用Emacs-23.3-universal-10.6.6testing过,似乎对我来说工作正常。

感谢Aquamacs这个,如果还没有完成的话,那么推动这个上游呢。

特殊的键盘布局与选项deadkey

我对这个问题的解决scheme是我写的一个特殊的键盘布局, 美国的习惯 。 它提供了一个选项组合键 ,可以生成选项组合,而无需使用物理选项修改键。 例如,在正常的美国键盘布局上,字符⟨ç⟩的产生如下:

  • 点击⌥选项 + c

美国自定义键盘布局增加了第二种生产方式:

  • ⇧Shift + § (选项deadkey),然后释放它,然后按c

使用选项作为元键时,即使在Terminal.app中也可以使用

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

  1. 它将plain§转换成一个Compose key(所以你也可以通过点击§ ,然后,然后c )生成⟨ç⟩。
  2. 它通过(显着扩展的) 美式扩展键盘布局来代替CapsLock映射。

将右侧选项修改键的重新映射选项“deadkey”

如果你有一个物理的ANSI键盘,那么你缺乏§键。 在这种情况下,我build议将§键分配给其他键,例如右边的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 ,然后select“发送ISO部分正确选项”。 现在,你的⌥右选项键被重新映射到§ ,所以当美国自定义的键盘布局被激活时,按⇧Shift + ⌥右选项会给你选项的deadkey状态(打到⌥右选项没有附加的修饰符会给你一个死锁状态相当于选项修饰符。

如果要保留⌥右选项 ,请在Re Shift不按下的情况下(而不是⎄撰写键),然后在KeyRemap4MacBook首选项窗格中select“发送Shift + ISO部分Shift +右选项(保持正常的右选项无Shift)而不是“发送正确的选项的ISO部分”)。 像这样,只有Shift +⌥Right Option会产生选项deadkey,而Right Option Right Option会继续作为选项修饰符。 您甚至可以继续使用⌥右键选项 + ⇧移位修饰符组合(例如⌥右键选项 + ⇧Shift + c →⟨Ç⟩),只要您没有按⇧Shift首先。

上面的答案提到了input非ASCIIinput的方法,但这不是真正的问题。 Cx 8方法可以让你input一堆非ASCII字符,但是问题是你只需要在mac上input(ascii)字符`|' (竖条)!

那你怎么input像M-这样的东西? (region to shell命令)在Terminal.app下运行ssh中的emacs时? 没办法,只能使用换码键,因为| 是选项-7和Terminal.app的一些愚蠢的原因不会让你使用Cmc作为元:-(

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

值得思考问题背后的假设。 我的意思是说,真正的问题是使目前似乎需要选项键的字符。 这个问题可以解决,而不是同时获得“元键+ altfunction”。

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

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

 "§": "#" 

这重新映射(对我来说,相当无用)§可以在当前的Mac键盘1的左边find(几乎不可缺less的)#。 这比我的默认设置更适合我,因为我现在可以通过一个按键来获得#。 如果还有其他angular色需要重新映射,则只需要为每个angular色添加一行。

无论如何,这涉及如何获得在shell中缺less的字符,但如果你也想在Emacs(你没有说,但可能是这样的话),那么你可以添加这样的东西到你的.emacs文件(其中35是我碰巧想要的字符的ASCII,即#):

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

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

我希望这有助于某人。 作为一个单纯的周末黑客,我通常不敢回答堆栈溢出的问题。

Aquamacs支持,至less对于我的(法语)键盘。 一旦Aquamacs安装(通过拖放),你可以去选项 – >选项,命令,元键,并select适当的设置为您的键盘(在我的情况下,… Meta和法语)。 我不熟练Emacs,但所有我尝试过的有用的组合似乎工作([,{,|,等等))。

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

  • 英国的
  • 我们
  • 瑞士法语
  • 瑞士德语
  • 芬兰
  • 意大利-PRO
  • 意大利
  • 西class牙语
  • 法国
  • 德语

如果你的键盘没有出现在列表中,我猜Aquamacs团队会感激你的贡献。

我咬了一下草,开始敲击逃生键。 你习惯了…

下面的解决scheme工作,是UNOBTRUSIVE ,你不需要iTerm2Aquamacs或任何。

步骤1

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

第2步

编辑~/.inputrc如果它已经不存在 ),添加下面一行:

"\e3": '#'

这将重新映射⌥alt + 3,以便在terminal中按预期生成#字符,而不是令人讨厌地返回提示符(arg: 3)

第3步

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

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

这将重新映射⌥alt + 3,这样你就可以在emacs里面生成一个#字符了,而不用烦恼地不做任何事情。


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

注意事项2,当你ssh到另一个盒子,你将面临同样的困难,但你所要做的就是编辑该盒子上的~/.inputrc~/.emacs文件。

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

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

我也在Terminal.app中使用Irssi,这些混合不好。

我很长一段时间的vim用户,所以emacs不是我的问题。

是不是有一些方法可以将CMD重新映射为Terminal.app中的Meta?

到目前为止,我只是在Irssi中input/ wg N,因为我的terminal中的这些字符比IRC重要得多。

一个解决scheme将是值得我的金币! 🙂