1

I was trying to find a solution to this because I am using Vim and most of the time I need Caps lock to be assigned to Ctrl. There are times though that I want the Caps Lock working normally. I thought an Apple Script is great as it can be assigned to a LaunchBar action.

I will answer with the solution I ended up with (through GUI scripting) but would be interested in a less intrusive solution if someone knows a way...

4

3 回答 3

1

这是我目前使用的脚本:

tell application "System Preferences"
   activate
   set current pane to pane "com.apple.preference.keyboard"
end tell

tell application "System Events"
tell application process "System Preferences"
  get properties

  click button "Modifier Keys…" of tab group 1 of window "Keyboard"
  tell sheet 1 of window "Keyboard"
    click pop up button 4
    set capsLockCurrentlyOn to (value of attribute "AXMenuItemMarkChar" of menu item 1 of menu 1 of pop up button 4 as string) ≠ ""
    --display dialog "Caps Lock On: " & capsLockCurrentlyOn
    if capsLockCurrentlyOn is true then
      --tell me to beep 3
      click menu item 2 of menu 1 of pop up button 4
    else
      --tell me to beep 2
      click menu item 1 of menu 1 of pop up button 4
    end if
    click button "OK"
  end tell
end tell
tell application "System Preferences" to quit
end tell
于 2013-04-18T21:04:37.357 回答
0

您是否尝试过 KeyRemap4MacBookPCKeyboardHack

于 2013-04-19T05:36:55.663 回答
0

您可以使用PCKeyboardHack将大写锁定更改为 F19。然后将其保存为private.xml

<?xml version="1.0"?>
<root>
<item>
<name>caps1</name>
<identifier>caps1</identifier>
<autogen>__KeyToKey__ KeyCode::F19, KeyCode::CAPSLOCK</autogen>
</item>
<item>
<name>caps2</name>
<identifier>caps2</identifier>
<autogen>__KeyToKey__ KeyCode::F19, KeyCode::CONTROL_L</autogen>
</item>
</root>

并使用此脚本来切换设置:

k=/Applications/KeyRemap4MacBook.app/Contents/Applications/KeyRemap4MacBook_cli.app/Contents/MacOS/KeyRemap4MacBook_cli
if $k changed | grep -q ^caps1=; then
    $k disable caps1
    $k enable caps2
else
    $k enable caps1
    $k disable caps2
fi

不过,将另一个组合键分配给 caps lock 会更容易:

<autogen>__KeyOverlaidModifier__ KeyCode::CONTROL_L, ModifierFlag::FN, KeyCode::CONTROL_L, ModifierFlag::FN, KeyCode::CAPSLOCK</autogen>

这将在按键按下时触发,因此您必须在 fn 之前按下 control 以获取诸如 fn+control+down 之类的组合键:

<autogen>__KeyToKey__ KeyCode::CONTROL_L, ModifierFlag::FN, KeyCode::CAPSLOCK</autogen>

于 2013-04-19T18:21:54.333 回答