我已经查看了 Karabiner 的示例代码,您可以在其中创建适用于窗口名称的过滤器,但我想在创建新电子邮件时应用过滤器。 由于窗口名称更改,我想改为筛选应用程序捆绑标识符。 是否有人有筛选应用程序捆绑标识符的 XML 示例?
开发人员手册†提供了确定应用捆绑包标识符的步骤以及用法示例。我在下面列出了我自己的一个。
您必须首先确定您感兴趣的应用程序是否由 Karabiner 预定义。检查 appdef.xml 并在该页面中搜索应用的标识符。
如果在现有定义中找不到它,则需要为稍后将在<item>
块中使用的应用程序定义一个名称。(这些都不是很好的例子,因为它们都是在 appdef 中预定义的.xml分别用于 WORD
和 GOOGLE_CHROME
下。
<?xml version="1.0"?>
<root>
<appdef>
<appname>MWORD</appname>
<equal>com.microsoft.Word</equal>
</appdef>
<appdef>
<appname>CHROME</appname>
<equal>com.google.Chrome</equal>
</appdef>
您可以使用 <prefix>
或 <suffix>
分别匹配应用捆绑包标识字符串的开头或结尾,而不是使用 <equal>
,顾名思义,它仅匹配完全相同的字符串(包括大小写)。
完成此操作后,在创建项目时,有几个筛选选项。首先是仅限于该特定应用程序,我相信这是您的目标。
<item>
<identifier>private.fixscrollwheel</identifier>
<name>Always Rotate Scroll Wheel</name>
<only>CHROME</only>
<autogen>
__FlipScrollWheel__
Option::FLIPSCROLLWHEEL_ROTATE,
</autogen>
</item>
请注意<only>
标记。这将上述项目限制为仅适用于捆绑标识符为 com.google.Chrome
的应用程序,因为这是CHROME
顶部<appdef>
标签中对应的内容。
您可以通过在 <only>
标记中包含更多appname
来定义要匹配的多个应用程序,例如:
<only>CHROME, MWORD, MAIL</only>
您也可以通过<only>
更改为 <not>
来执行相反的操作,即除列出的应用程序之外的所有应用程序。
† 原始开发人员手册链接现已失效,因为 Karabiner 不再积极维护。这个答案适用于卡拉比纳,而不是卡拉比纳元素,并且可能适用于也可能不适用于后者。