在我的 MacBook 上使用所有 F1 F2 等键作为标准功能键选项未选中。我使用 FunctionFlip 将 F3 从 Expose 映射到 Spaces。
然而,在 VirtualBox 或 VMware Fusion 等虚拟化环境下工作时,我希望将功能键用作真正的功能键。系统 > 偏好设置不是很方便。
你现在知道如何检查使用所有 F1 F2 等键作为标准功能键 仅有的当特定应用程序处于活动状态时?
答案1
使用登山扣
此应用程序可以提供 OP 要求的确切功能。user495470 关于 KeyRemap4MacBook 的回答帮助我指明了正确的方向。但是,它已经过时,不再像写的那样工作,因为 KeyRemap4MacBook 已经更新。它现在被称为登山扣。它看起来维护得很好,而且是免费的开源软件(另一个答案中提到的 BetterTouchTool 不是这样,它需要在 45 天后付款)。
设置
首先下载并安装 Karabiner 应用程序。安装后,为了将功能键重新映射为标准功能键,您需要在偏好设置中添加“复杂修改”。Karabiner 网站已预先构建并可下载多个此类复杂修改,但您也可以在 json 中编写自己的修改。
使用以下代码并将其放在文件夹中的文件中(名为“functionkeys.json”之类的名称)~/.config/karabiner/assets/complex_modifications
。一旦它在那里,转到 Karabiner 首选项并单击Complex-Modifications
,然后单击Add rule
。您应该会看到文本Function Keys in Terminal Apps
,然后单击Enable All
。
如何更改导致该效果的前台应用程序
此代码专门在使用多个终端应用中提供功能键标准功能(使用任何其他应用时则不提供任何功能)。此代码还允许通过使用 在终端应用中使用媒体键fn + function key
。
虽然 OP 询问的是通用特定应用程序,但特别提到了 VirtualBox。可以通过将每个实例的内容替换为任何应用程序,更改以下代码以在所需的任何应用程序中创建功能键功能。("Bundle Identifiers: [ ... ]"
VirtualBox 可能是, "^org\\.virtualbox\\.VirtualBoxVM"
但我还没有尝试过。)使用随附的 Karabiner EventViewer 查找所需任何应用程序的应用程序标识符,然后插入值。
{
"title": "Function Keys in Terminal Apps",
"rules": [
{
"description": "Use regular function keys in terminal",
"manipulators": [
{
"type": "basic",
"from": {
"key_code": "f1"
},
"to": [
{
"key_code": "f1",
"modifiers": [
"fn"
]
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f2"
},
"to": [
{
"key_code": "f2",
"modifiers": [
"fn"
]
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f3"
},
"to": [
{
"key_code": "f3",
"modifiers": [
"fn"
]
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f4"
},
"to": [
{
"key_code": "f4",
"modifiers": [
"fn"
]
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f5"
},
"to": [
{
"key_code": "f5",
"modifiers": [
"fn"
]
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f6"
},
"to": [
{
"key_code": "f6",
"modifiers": [
"fn"
]
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f7"
},
"to": [
{
"key_code": "f7",
"modifiers": [
"fn"
]
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f8"
},
"to": [
{
"key_code": "f8",
"modifiers": [
"fn"
]
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f9"
},
"to": [
{
"key_code": "f9",
"modifiers": [
"fn"
]
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f10"
},
"to": [
{
"key_code": "f10",
"modifiers": [
"fn"
]
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f11"
},
"to": [
{
"key_code": "f11",
"modifiers": [
"fn"
]
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f12"
},
"to": [
{
"key_code": "f12",
"modifiers": [
"fn"
]
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f1",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"key_code": "f1"
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f2",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"key_code": "f2"
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f3",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"key_code": "f3"
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f4",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"key_code": "f4"
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f5",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"key_code": "f5"
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f6",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"key_code": "f6"
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f7",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"key_code": "f7"
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f8",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"key_code": "f8"
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f9",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"key_code": "f9"
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f10",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"key_code": "f10"
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f11",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"key_code": "f11"
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "f12",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"key_code": "f12"
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.apple\\.Terminal$",
"^com\\.googlecode\\.iterm2$",
"^co\\.zeit\\.hyperterm$",
"^co\\.zeit\\.hyper$",
"^io\\.alacritty$",
"^net\\.kovidgoyal\\.kitty$"
]
}
]
}
]
}
]
}
答案2
尝试结合函数翻转和BetterTouch工具:
- 使用 FunctionFlip 设置您想要“翻转”的键
- 使用 BetterTouchTool 设置应用程序特定按键
答案3
答案4
Palua 的一个替代方案是KeyRemap4MacBook:
<?xml version="1.0"?>
<root>
<appdef>
<appname>FKEYS</appname>
<equal>com.vmware.fusion</equal>
<equal>org.virtualbox.app.VirtualBoxVM</equal>
</appdef>
<item>
<name>fkeys</name>
<identifier>fkeys</identifier>
<only>FKEYS</only>
<autogen>__KeyToKey__ KeyCode::BRIGHTNESS_DOWN, KeyCode::F1</autogen>
<autogen>__KeyToKey__ KeyCode::BRIGHTNESS_UP, KeyCode::F2</autogen>
<autogen>__KeyToKey__ KeyCode::EXPOSE_ALL, KeyCode::F3</autogen>
<autogen>__KeyToKey__ KeyCode::LAUNCHPAD, KeyCode::F4</autogen>
<autogen>__ConsumerToKey__ ConsumerKeyCode::KEYBOARDLIGHT_LOW, KeyCode::F5</autogen>
<autogen>__ConsumerToKey__ ConsumerKeyCode::KEYBOARDLIGHT_HIGH, KeyCode::F6</autogen>
<autogen>__ConsumerToKey__ ConsumerKeyCode::MUSIC_PREV, KeyCode::F7</autogen>
<autogen>__ConsumerToKey__ ConsumerKeyCode::MUSIC_PLAY, KeyCode::F8</autogen>
<autogen>__ConsumerToKey__ ConsumerKeyCode::MUSIC_NEXT, KeyCode::F9</autogen>
<autogen>__ConsumerToKey__ ConsumerKeyCode::VOLUME_MUTE, KeyCode::F10</autogen>
<autogen>__ConsumerToKey__ ConsumerKeyCode::VOLUME_DOWN, KeyCode::F11</autogen>
<autogen>__ConsumerToKey__ ConsumerKeyCode::VOLUME_UP, KeyCode::F12</autogen>
<autogen>__KeyToKey__ KeyCode::F1, KeyCode::BRIGHTNESS_DOWN</autogen>
<autogen>__KeyToKey__ KeyCode::F2, KeyCode::BRIGHTNESS_UP</autogen>
<autogen>__KeyToKey__ KeyCode::F3, KeyCode::EXPOSE_ALL</autogen>
<autogen>__KeyToKey__ KeyCode::F4, KeyCode::LAUNCHPAD</autogen>
<autogen>__ConsumerToKey__ KeyCode::F5, ConsumerKeyCode::KEYBOARDLIGHT_LOW</autogen>
<autogen>__ConsumerToKey__ KeyCode::F6, ConsumerKeyCode::KEYBOARDLIGHT_HIGH</autogen>
<autogen>__ConsumerToKey__ KeyCode::F7, ConsumerKeyCode::MUSIC_PREV</autogen>
<autogen>__ConsumerToKey__ KeyCode::F8, ConsumerKeyCode::MUSIC_PLAY</autogen>
<autogen>__ConsumerToKey__ KeyCode::F9, ConsumerKeyCode::MUSIC_NEXT</autogen>
<autogen>__ConsumerToKey__ KeyCode::F10, ConsumerKeyCode::VOLUME_MUTE</autogen>
<autogen>__ConsumerToKey__ KeyCode::F11, ConsumerKeyCode::VOLUME_DOWN</autogen>
<autogen>__ConsumerToKey__ KeyCode::F12, ConsumerKeyCode::VOLUME_UP</autogen>
</item>
</root>