Divvy on Monterey で、一部のショートカットキーを設定できなくなった問題の解決
Macで、ウィンドウサイズをすぱっと切り替えてくれるDivvyをこよなく愛しています。Montereyにしてから、困ったことに一部のキーにショートカットを割り当てられなくなりました。
その割り当てできない場合についての対応です。
なぜ、このようなことをするのか
Montereyから、グローバルショートカットキーの影響で、次のキーを利用できなくなりました。そのため、Divvyのショートカットで、これらのキーを利用しようとすると、設定できないと言う罠が仕込まれています。
A C F H M N Q S ` \ ← ↑ ↓ →
plist ファイルから、ショートカットの情報だけを抜き出す
~/Library/Preferences
配下にある Divvy
の plist
ファイルのバックアップをとります。
cd ~/Library/Preferences/
cp -av ./com.mizage.Divvy.plist ./com.mizage.Divvy.plist.bak
次のプログラムソースコードを、Script Editor
へ入力します。そのまま⌘R
で実行します。
property bPlistFile : "com.mizage.Divvy.plist"
property bPlistData : missing value
property thePropertyListFilePath : POSIX path of ¬
("" & (path to preferences from user domain) & bPlistFile)
property bPlistDataShortcuts : POSIX path of ¬
("" & (path to home folder) & "divvy.shortcuts.plist")
tell application "System Events"
tell property list file thePropertyListFilePath
set bPlistData to the value of property list item "shortcuts"
end tell
end tell
writeToFile(bPlistData, bPlistDataShortcuts, true)
-- ## Handler ##
on writeToFile(theData, theFile, overwriteExistingContent)
try
set theFile to theFile as string
if theFile contains "/" then
set theOpenedFile to open for access theFile with write permission
else
set theOpenedFile to open for access file theFile with write permission
end if
if overwriteExistingContent is true then set eof of theOpenedFile to 0
write theData to theOpenedFile starting at eof
close access theOpenedFile
return true
on error
try
close access file theFile
end try
return false
end try
end writeToFile
うまくいくと、home
ディレクトリに divvy.shortcuts.plist
ファイルができ上がります。
ショートカット情報を変更する
plutil
を使って、バイナリファイルをXML化します。
plutil -convert xml1 ./divvy.shortcuts.plist
各々のショートカットキーは <key>keyComboCode</key>
と <key>keyComboFlags</key>
にて定義されています。<key>keyComboCode</key>
には実際に押すキーのキーコードが入っています。こちらを参考に設定します。
個人的には、⇧
と対象のキーなどですでに設定をしておいて、特定のキーの情報を得るようにしたほうが探しやすいと判断しました。
参考情報
次に <key>keyComboFlags</key>
を探します。これが連携するオプション系のキーコードのようです。これらの指示子や計算式が分からないのですが、オプション系のキーを押さずに設定したいだけなので、この情報を 0
に設定するだけです。
元の plist へ戻す
XMLのままでは戻せないので、plutil
を使って、バイナリファイルに戻します。その後、defaults
コマンドを利用して、現行のショートカット情報を削除し、今回設定し直したショートカット情報を書き込むことでショートカット情報が反映されます。
plutil -convert binary1 divvy.shortcuts.plist
defaults delete com.mizage.Divvy.plist 'shortcuts'
defaults write com.mizage.Divvy.plist 'shortcuts' -data "$(xxd -p 'divvy.shortcuts.plist' | tr -d '\n')"
うまくいきました。ああ、良かった。
Discussion