AppleScript:用于将Caps Lock键切换为Control的脚本

时间:2013-04-18 21:04:37

标签: macos vim applescript

我试图找到一个解决方案,因为我正在使用Vim,大多数时候我需要将Caps锁定为Ctrl。有时候我希望Caps Lock正常工作。我认为Apple脚本很棒,因为它可以分配给LaunchBar操作。

我会回答最终的解决方案(通过GUI脚本编写),但如果有人知道某种方式,我会对一个不太干扰的解决方案感兴趣......

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您是否尝试过KeyRemap4MacBookPCKeyboardHack

答案 2 :(得分: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

虽然可以更容易地将另一个组合键分配给大写锁定:

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

这将在按键时触发,因此您必须在fn之前按下控制按键组合,如fn + control + down:

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