Try combining FunctionFlip with BetterTouchTool:
- Set the keys you want "flipped" with FunctionFlip
- Set up application specific keys with BetterTouchTool
На моем MacBook я использовал все клавиши F1 F2 и т. Д., Поскольку опция стандартных функциональных клавиш не включена. Я использую FunctionFlip, чтобы отобразить F3 из Expose to Spaces.
Однако я хотел бы использовать функциональные клавиши в качестве реальных функциональных клавиш при работе в виртуализированной среде, такой как VirtualBox или VMware Fusion. Переход в Система> Настройки не очень удобен.
Теперь вы знаете, как проверять использование всех клавиш F1 F2 и т. Д. В качестве стандартных функциональных клавиш, только когда определенное приложение активно?
Try combining FunctionFlip with BetterTouchTool:
Возьмите IronAHK и используйте его для переназначения ВСЕХ ключей вместо системных настроек (причина в том, что они могут конфликтовать с системными настройками), он поставляется с make-файлом, который легко компилируется в Mono.
Затем используйте его так же, как AutoHotkey:
#IfWinActive,,VirtualBox F1::Send { F1 }
Одной из альтернатив 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>
См. Источник для значений кода ключа и предопределенных настроек .
К сожалению, это не вариант, который предоставляет Apple или FunctionFlip .
Однако автор FunctionFlip, очевидно, смог написать код, который позволяет динамически конфигурировать функциональные клавиши, чтобы это можно было сделать.
Я хотел бы связаться с автором FunctionFlip и спросить, может ли он добавить нужные вам функции. А именно, управление поведением функциональных клавиш в зависимости от активного приложения.
Если вы обещаете пожертвовать эту функцию, она может быть реализована быстрее.
В противном случае, я не знаю никаких других программ, которые предлагают эту функциональность.
Вы можете использовать AppleScript для переключения состояния функциональных клавиш:
tell application "System Preferences" reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard" end tell tell application "System Events" to tell process "System Preferences" click checkbox 1 of tab group 1 of window 1 end tell quit application "System Preferences"
Кроме того, вы можете сделать это приложение специфичным с помощью Keyboard Maestro . Если написано небольшое руководство, как вытащить это отсюда .
Используйте Карабинер
Это приложение может предоставить точную функциональность, запрошенную OP. Ответ user495470 о KeyRemap4MacBook был полезен, чтобы указать мне правильное направление. Однако он устарел и больше не работает так, как написано, потому что KeyRemap4MacBook был обновлен. Теперь он называется Карабинер . Он выглядит в хорошем состоянии и является бесплатным программным обеспечением с открытым исходным кодом (не в случае BetterTouchTool, упомянутого в другом ответе, требующем оплаты через 45 дней).
Настройка его
Сначала загрузите и установите приложение Karabiner. После установки, чтобы переназначить функциональные клавиши как стандартные функциональные клавиши, вам нужно будет добавить «Complex-Modification» в настройках. Существует несколько таких сложных модификаций, которые были предварительно созданы и загружены с веб-сайта Karabiner, но вы также можете написать свои собственные в json.
Используйте следующий код и поместите его в файл (с именем что-то вроде «functionkeys.json») в ~/.config/karabiner/assets/complex_modifications
папке. Как только он появится, перейдите в настройки Карабинера и нажмите Complex-Modifications
, затем Add rule
. Вы должны увидеть текст Function Keys in Terminal Apps
и там нажать Enable All
.
Как изменить, какое приложение переднего плана вызывает эффект
Этот код специально обеспечивает стандартную функциональность функциональных клавиш при использовании любого из нескольких приложений терминала (и ничего при использовании любого другого приложения). Этот код также позволяет использовать медиа-ключи в терминальных приложениях с помощью fn + function key
.
В то время как ОП спрашивал о конкретном приложении, в частности, упоминался 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$" ] } ] } ] } ] }