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

Is it possible to create a Karabiner filter for Application Bundle Identifiers

我查看了 Karabiner 的示例代码,您可以在其中创建适用于 window 名称的过滤器,但我想在创建新电子邮件时应用该过滤器。由于 window 名称更改,我想改为在应用程序包标识符上进行过滤。有人有XML过滤应用程序包标识符的例子吗?

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

您只需在 <only> 标签中包含更多 appname 即可定义要匹配的多个应用程序,例如:

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

您也可以反过来,即所有 除了 列出的应用程序,将 <only> 更改为 <not>