長い間悩んでました。待たせてごめんとは言いません。キロロじゃないので。(17年前…だと…?)
何となく動くかも版なのですが、近づいてきた気がするので公開します。
下の画像をクリックすると、Downloadできます。
動作確認は、Intel Mac miniと、M2 Macbook Airで行いました。
つきましては、前の版のページで色々コメントいただきまして、ありがとうございました。
追記: ワイヤレスのキーボードを使っているケースで、動作しない場合、$HOME/Library/Application\ Support/PopClip/Extensions/UserDic.popclipext/UserDic.popclipext
にある userdic.scpt
の 8行目にある tell window "キーボード"
の部分を tell window 0
に変更すると、動作するようです。(詳細はコメントのやりとりをご覧ください)
以下ざれごと。
これまで面倒だったのでコードの解説とかしてませんでしたが、忘れそうなのでメモ代わりに記録しときます。
use framework "Foundation"
use scripting additions
current application's NSWorkspace's sharedWorkspace()'s openFile:"/System/Library/PreferencePanes/Keyboard.prefPane" -- ①
tell application "System Events"
tell process "System Settings"
delay 3 -- ②
tell window "キーボード"
tell group 3 of scroll area 1 of group 1 of group 2 of splitter group 1 of group 1
click last UI element -- ③
end tell
delay 1.5 -- ④
tell group 1 of scroll area 1 of group 1 of sheet 1 -- ⑤
click button 1
end tell
delay 0.5
tell group 1 of scroll area 1 of sheet 1 of sheet 1
key code 48 -- tab
delay 0.5
key code 9 using command down -- paste
delay 0.1
key code 48 using shift down -- shift tab
end tell
end tell
end tell
end tell
① は、キーボード部分を強引に開く方法です。open コマンドなら -n オプションで開けたのですが、AppleScriptからだとこうなるみたいです。
この書きかたになる前は、以下の感じでメニューバーから選んでました。
tell application "System Preferences" to activate
tell application "System Events"
tell process "System Settings"
click menu bar item 5 of menu bar 1
click menu item "キーボード" of menu 1 of menu bar item 5 of menu bar 1
:
②は、キーボード部を開くまでの待ち時間です。新たなシステム設定では、「キーボード」が別アプリ?みたいな感じになっているようで、左側のリストから選べませんでした。ps コマンド(ps -ef | grep -i keyboard
とするとわかりやすい)で見ると、システム設定を起動した時には「KeyboardSettings」が無いのですが、「キーボード」を選択した後には存在しています。
何かプロセスを起動してるんじゃないでしょうか。
③は [ ユーザ辞書 ] ボタンを押す操作です。「テキスト入力」の内側がグループ化されていて、その最後のボタンを clickしています。こんな書きかたができるんだなー(棒)
④は、ユーザ辞書ボタンを押してから、辞書一覧が表示されるまでの待ち時間です。辞書登録数が多く、古いマシンだと時間がかかるようです。
⑤が一番悩んだかも。ユーザ辞書ボタンを押した後に出て来るウィンドウは何者なのか。答えは「キーボード」ウィンドウが所有する「シート」でした。そんなんわかるか! なお、登録する文字を入力するウィンドウは、「シートのシート」でした。応用問題やね。
どのあたりが実験版かというと、以下の3点です
- ②, ④の delayの値を全然調整できていない点
- ③が「ユーザ辞書」と「かわせみ2」が並んだ状態でしか動かしていない(ユーザ辞書のみ、3つ以上のIMを併用している場合を確認していない)点
※ 1つ目のボタンの内側にIMの設定があるので、ここは常にボタンが2つな気がしてますが
- そんなに自分で使ってないので、その他よくわからないひっかかりがあるかもという点
このあたりが問題なさそうなら、現バージョンで良いかもなのですが。
いやー、それにしてもここまで来れるとは思わなかった!
とても有用なスクリプトをありがとうございます。
質問なのですが、キーボードが有線だとうまくいくのですが、iMac, M1では充電式のBluetoothキーボードのため10行目でスクリプトエラーになります。
有線とは異なり、無線下では”キーボード”の下にバッテリー残量の表示が現れるのでこれが原因かもしれないと考えています。9行目の数字を色々変えてみたのですが、どうもうまくいきません。
解決方法はあるでしょうか?ご教示ください。
コメントありがとうございます。
手持ちの BTキーボードを接続してみましたが、バッテリーの情報を送っていないのか、キーボードの設定画面に変更はありませんでした。
また、ネット上で画像検索してみましたが、バッテリー残量の表示のある物がみつかりませんでした。
そのため、すぐに修正できそうにありません。
また、数字を変更されてもうまく行かないとのことでしたが、”tell group 3 of”の 3 → 4 も試されましたでしょうか。
あと、変更した後に popclipを一度終了して、再起動を試してみてください。
$HOME/Library/Application\ Support/PopClip/Extensions/ 配下を変更しただけでは反映されないようで、起動時にオンメモリに読み込まれるものと思われます
夜分遅くにもかかわらず検証していただきありがとうございます。症状を整理すると、
1. iMac M1で付属のキーボードを無線で接続すると、”キーボード”の下にバッテリー表示が出る。スクリプトエラーになる。
2. スクリプトを”tell group 4 of”に書き換えても動作しない。
3. iMac M1で付属のキーボードをOFFにして、有線キーボードを接続すると、バッテリー表示は消える。スクリプトは完全に動作する。
4. 他のMac (Mac mini)で有線キーボードを接続すると、バッテリー表示はなく、スクリプトは完全に動作する。
バッテリー表示に関するスクリーンショットのリンクを貼ってみましたので、よろしければご確認ください。https://drive.google.com/drive/folders/18wUT9hkmC1cRXV55Jt2x7FbPVHhb78AA?usp=sharing
またpopclipは使っていませんが、スクリプトエディターやAutomatorで完全に動作することは確認できています。
Venturaにしてからシステム設定が全面的に変更され、applescriptとの相性が悪く困っています。
どうやらMagic Keyboardを接続すると、バッテリー残量に応じてウィンドウ名が”キーボード”から”キーボード – 63%”のように変更されてしまい、
tell window “キーボード”
が通らないのが原因かもしれません。
こうなってしまうと解決が困難になりそうなので諦めることにします。
これまで検証いただきありがとうございました。
それが正しいとすれば
tell window 0
(ゼロ)にすると行けるかも知れません。
えええーーーー!!!
完璧に動きました。感動しました。すごい!
これでストレスなく単語登録できて、仕事が捗りそうです。
Venturaにしてからずっと悩んでいて、もう解決できないものと諦めていました。今まで本当にありがとうございました。知り合いにもお勧めしたいです。
Applescriptを自在に操れるmahさんは神様ですーーー!
追伸ですが、
Magic keyboardの無線/有線接続でも他キーボードでも、問題なく動作することを確認いたしました。
この度は本当にありがとうございました。重ねて御礼申し上げます。
お試しいただきありがとうございます。
無事動作したようで何よりです。
ありがとうございます。ここにこんな感じで表示されるんですね。
パッと見、影響しそうに思えないのですが……
Intel mac mini で、USBキーボードを切断し、手持ちのBTキーボードを接続してみましたが、純正でないと表示されないのかな…?
私の Applescriptは「とりあえず動けばいいや」的に、かなり手抜きで作ってますので、もう少し調べてみます。
発見!と思ったのにsonomaじゃシステム環境設定が開くところまで行くのですが、エラーになります。
ぜひ対応お願いします。