是否有一个程序允许您创建由常规键组成的键盘快捷键?


6

我正在寻找一种方法,允许我将自定义的非标准键组合转换为当前未使用的中间键(如F16或类似的东西)。然后,中间密钥将能够在其他应用程序(例如FastScripts)中被识别,以便我最终可以将此中间键盘快捷方式分配给该应用程序中我想要的任何操作。

通过“非标准组合键,”我的意思是不包含任何的组合键(即⌘ command⌥ option⌃ controlfn,或⇧ shift)。

同时按下非标准键组合的示例:

  • 1 + 0

  • A + D

  • space bar + V

  • W + 5

  • tab + Q

我已经安装了Karabiner,但我没有看到在Karabiner中实现这一目标的方法。

有没有可以做我想要的程序?

OS X El Capitan,版本10.11.6。


也许BTT的关键序列可以奏效。docs.bettertouchtool.net/docs/key_sequences.html
hyph 2017年

@hyph有趣。我对BetterTouchTool不熟悉。你知道它是否仅在按键按键发生时才有效,或者如果同时按键发生它也能工作吗?
rubik的球体2017年

我想我实际上没有正确地阅读你的要求。您只能使用常规快捷键(使用修饰符)触发这些序列。不是相反。
hyph

Answers:


5

这可以在Karabiner中完成,但是反直觉并且将常见的键盘使用颠倒过来(查看Monomeeth答案的第一句话)。

在Karabiner的预设中已经提供了[M + N]到F13的示例:

在此输入图像描述

将1 + 0映射到F16需要将以下代码段添加到private.xml:

<item>
  <name>Simultaneous Key Presses [0+1] to F16</name>
  <identifier>remap.simultaneouskeypresses_012f16</identifier>
  <autogen>__SimultaneousKeyPresses__ KeyCode::KEY_0, KeyCode::KEY_1, KeyCode::F16</autogen>
</item>

通过定义一个额外的vk_lazy键(即0),它也应该可以先按0然后按1并根据第一个键向上发送F16或写入01,这是在键盘上键入“快捷键”的更舒适的行为。


是否可以基于每个应用程序设置Karabiner快捷方式?
hyph 2017年

1
@hyph当然,某些应用程序是在appdef.xml中预定义的,但您可以添加其他应用程序。要将上述“快捷方式”限制为仅限Excel,必须<only>EXCEL</only>在代码段中添加(Excel已预定义!)。
klanomath 2017年

你教给我一些关于Karabiner的新知识。在我发帖之前我曾看过[M + N]的快捷方式,但我错误地认为这个固定组合是Karabiner能够创建的唯一常用快捷方式。我使用您的方法测试了我原始帖子中的所有5个示例快捷方式,Karabiner完美无缺!谢谢!另外,我认为我现在同意你的最后一句话(我想的更多)。(自我注释:在下面的行中插入第一个自定义项</root>。编辑XML文件时,请记住它区分大小写。)
rubik的球体2017年

这是一个很好的解决方案。我非常喜欢可定制的Karabiner!
Monomeeth

2

如果Karabiner不能做到,我不相信你想要做的事情。

究其原因,我们有修饰键(即controloptionshiftcommand)是他们需要修改标准的字母数字键,以便他们被认为是除了其字母数字值别的东西。让我进一步解释一下:

  • 按下字母数字键时,其输入将发送到最前面的活动应用程序。因此,如果您打开MS Word并使用第一个示例键盘快捷键:1+ 0,按下这些键将被MS Word识别为“1”和“0”,除非它们的值被修改(例如通过修饰键) 。
  • 但是,您想要有效地做什么,使用您的第一个示例键盘快捷键:1+ 0再次作为示例,使用1键作为修饰键和/或如果同时按下10键表示不同的事实'1'和'0'。
  • 现在您可以看到为什么这可能会导致问题:如果1键充当修饰键,那么如何让活动应用在需要时识别“1”?或者,如果您只想在同时按下1+ 0键的情况下才能使用此功能,如果在另一个键之前按下任一键,会发生什么?这不是同步的,因此你的输入将被搞砸(可以这么说)。
  • 因此,要实现这一点,Karabiner(或其他一些实用工具)必须足够聪明才能管理这个难题。正如托马斯·坦普尔曼在下面的评论中提到的那样,一种方法是在按键后添加一个延迟,以便最前面的应用程序无法识别该键。但是,当然,任何这样的延迟都必须非常短(相信我 - 即使是某种程度上的瞬间延迟也会导致用户觉得系统没有响应)。

您可能需要参考:macOS人机界面指南 - 键盘快捷键页面,以便更好地了解Apple对开发人员的指导。

顺便说一句,当开发人员创建游戏并且某个键用于特定目的时(例如,Z键移动角色),游戏仍然将该Z键识别为“Z”但刚刚被编程为接受“Z”值这意味着角色向左移动。

任何似乎改变按键操作的软件(例如允许您自定义控件的游戏,或USB Overdrive,ControllerMate等实用程序)仍然接受默认键值而不需要修改它们,这就是如何他们实现了自己的功能

例如,用户可以使用USB Overdrive将键(例如T键)映射到特定功能,无论是否使用修饰键,但是当它们在没有修改键的情况下使用时,它们仍然被识别为具有他们原来的意见。所以我不认为它们对你有用,当然,它们本身并不是为了创建键盘快捷键而设计的。但是,你可以检查它们(它们可以自由尝试),以防万一你可以欺骗它们中的任何一个去做你想做的事情:

笔记:

  1. 我使用过USB Overdrive和ControllerMate,但与它们没有任何关联。
  2. 对于它的价值,ControllerMate提供了更多高级功能(但它更难以掌握)。
  3. 您可能希望联系Karabiner支持或向开发人员发送电子邮件,因为我仍然认为这是您最好的选择,并且可能能够做您想做的事情。

作为开发人员,我觉得你的解释令人困惑。使用诸如“0”和“1”之类的键作为修饰符会产生问题,因为通常,当您按下这样的键时,它会立即作为键入的键转发到前端应用程序。现在,如果你想让0 + 1生成一个不同的密钥,那么问题是如果你比0稍早按0会发生什么。如何知道1将很快跟随,因此不告诉前端应用0被压了?你是否希望所有的密钥都一直延迟才能完成这项工作?如果你可以处理它,它可能会工作。
Thomas Tempelmann

@ThomasTempelmann你是完全正确的,我的解释不是很清楚。谢谢你引起我的注意。:)通常情况下我会更新我的答案,但是因为看起来Klanomath提供了关于OP如何使用Karabiner做他们想要的解释,我将很快删除这个答案,因为我认为它不会真正增加任何价值。除非你不这么认为?
Monomeeth

@klanomath告诉我如何在Karabiner完成我想要的东西。Karabiner完美地适用于我投掷的每一个杂色组合,这非常棒。顺便说一下,我之所以需要这种能力,是因为我倾向于方便的单手键盘快捷键; 我可以更快地执行它们而不需要仔细考虑。打开所有常规键可以显着扩展我可以分配的相邻或近邻键盘快捷键的数量。我明白了修饰键的概念 - 带修饰键的快捷键当然是首选。
rubik的球体2017年

@ThomasTempelmann你提出了重要的问题。对于我的用法,只要我使用快捷键时光标不在文本字段中(例如同时按下A + D键或1 + 0键),就没有副作用。如果是,我只需要在执行前单击文本字段。现在,涉及制表符或空格键的快捷方式更成问题。但我实际上并没有计划实施其中任何一项; 他们只是在我的OP中作为我想要做的事情类型的例子。我坚持用字母/数字/标点符号键。但是,是的,你的第二点是非常正确的。
rubik的球体2017年

@Monomeeth请不要删除你的回答/评论。
klanomath 2017年

-2

iKey应该做你想做的事。


欢迎来询问不同!我们正在努力寻找最佳答案,这些答案将提供有关他们为何最佳答案的信息。解释为什么你认为你提供的答案可以解决问题,或者比其他人更好。提供链接作为支持信息也可以帮助OP和其他人自己查找其他信息。请参阅如何回答如何提供高质量的答案。
fsb 2017年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.