是否可以为应用程序包标识符创建Karabiner过滤器

时间:2016-07-12 17:32:23

标签: karabiner

我查看了Karabiner的示例代码,您可以在其中创建适用于窗口名称的过滤器,但我想在创建新电子邮件时应用过滤器。由于窗口名称更改,我想过滤应用程序包标识符。是否有人在Application Bundle Identifier上有过滤的XML示例?

1 个答案:

答案 0 :(得分:1)

developer's manual提供了确定应用包标识符的两个步骤以及使用示例。我在下面列出了我自己的一个。

您必须首先确定您感兴趣的应用是否由Karabiner预先定义。检查appdef.xml并在该页面中搜索您应用的标识符。

如果在现有定义中找不到,则需要为稍后在<item>块中使用的应用程序定义名称。 (这些都不是很好的例子,因为它们都是在appdef.xml中预先定义的,分别在WORDGOOGLE_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>

您可以使用<equal><prefix>来匹配应用的开头或结尾,而不是使用<suffix>,顾名思义只匹配完全字符串(包括大小写)捆绑标识字符串。

完成此操作后,当您创建项目时,您可以选择一些过滤选项。首先是限制特定的应用程序,我相信这是你的目标。

<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>标记所对应的内容。

您可以通过在appname标记中添加更多<only>来定义要匹配的多个应用,例如:

<only>CHROME, MWORD, MAIL</only>

您也可以通过将<only>更改为<not>来执行反向操作,即所有应用所列的应用}。