Hatena::ブログ(Diary)

ザリガニが見ていた...。 このページをアンテナに追加 RSSフィード

2009-11-06

control-command-Dの設定はどこへ行った?

前回からの続き...

  • OSX 10.6になり、ポップアップして辞書で調べるショートカット:control-command-Dを変更するシステム環境設定の項目が消えてしまった。
  • OSX 10.5までは、システム環境設定 >> キーボートとマウス >> キーボードショートカットで、2行目の「辞書で調べる」の項目でショートカットの変更が可能だった。
  • 設定項目が消えてしまったからと言って、control-command-Dが利用できなくなる訳ではなく、OSX 10.6でもちゃんと使える。
  • また、OSX 10.5でcontrol-command-Dを変更して別のショートカットを割り当てていると、その設定はOSX 10.6でも引き継がれ、変更後のショートカットで利用できる。
  • しかし、一部問題があって、変更したショートカットによっては、一部のアプリケーションで反応しない場合もある。
  • 具体的には、ショートカットをF5に変更していると、OSX 10.5では問題なく利用できたが、OSX 10.6のSafariでは反応しない、という症状が発生している。(Safari以外のアプリケーションではちゃんとポップアップする)
  • Safariを使っている時こそ、ポップアップ辞書が大活躍するので、これが使えないのは相当悲しい...。
  • ならば、ショートカットを標準のcontrol-command-Dに戻せばいいじゃないか、と考えるが、OSX 10.6ではその設定項目が消えているのだ...。
  • こうなったら、設定ファイルを見つけ出して、直接書き換えるしかない。変更が引き継がれるということは、どこかにその設定が保存されているはずだ。

設定ファイルを探す

  • 実験用にOSX 10.5を外付けHDに新規インストールした。(過去に2度も壊れてAppleで補償交換した信頼性の全くないHDが役に立った。)
    • control-command-Dを変更するシステム環境設定の項目は、OSX 10.5にしかないので、面倒だけどインストールした。(余分なプリンタファイルとか言語環境は削除して必要最小限の構成で)
    • また、Property List Editor.appもたぶん使うことになるので、Xcodeもインストールしておいた。
  • インストールしたら、すぐさまFinderで~/Library/Preferencesを開き、リスト表示、変更日順に並べ替える。(最新のファイルが上に表示されるように)
    • こうゆう設定は、基本的にPreferencesフォルダの.plistファイルにインストールされると考えて狙い撃ち。
    • ちなみに、インストール初回起動での面倒なユーザー登録はcommand-Qでスキップ出来る。
  • システム環境設定 >> キーボートとマウス >> キーボードショートカットを開き、辞書で調べるのショートカットをファンクションキーF5に変更してみる。
  • 変更したらシステム環境設定を終了する。その瞬間、開いておいたFinderウィンドウ~/Library/Preferencesを確認する。
    • 更新時間が最新の数ファイルが求める設定ファイルである可能性大。
  • 一つずつ開いていくと、おそらく~/Library/Preferences/com.apple.symbolichotkeys.plistが求めるファイルだと予想した。
    • ショートカットに意味のある設定ファイルは、これしかなさそうだと思い込んだので。名前からしてsymbolic hotkeysだし。

設定項目を特定する

  • ~/Library/Preferences/com.apple.symbolichotkeys.plistダブルクリックするとProperty List Editor.appで内容が表示された。
    • うまく開けない時は、/Developer/Applications/Utilities/Property List Editor.appを起動して開けばいい。
  • 辞書で調べるのショートカット:control-command-DをF5に変更したり、元に戻したりする。
  • しかし、項目が多すぎるのでどれが変更されたか目視だけでは確認出来ない。diff(差分)をとることにした。
  • com.apple.symbolichotkeys.plistは、そのままではバイナリ形式になっていて、差分の詳細を把握出来ない。
  • 一旦、デスクトップにXML Property List形式で保存して、それぞれのdiffをとってみた。
  • ターミナルを起動して、以下のコマンドを実行した。
$ diff -U 10 ~/Desktop/com.apple.symbolichotkeys_ctrl-cmd-D.plist ~/Desktop/com.apple.symbolichotkeys_F5.plist 
--- ~/Desktop/com.apple.symbolichotkeys_ctrl-cmd-D.plist    2009-11-06 16:55:45.000000000 +0900
+++ ~/Desktop/com.apple.symbolichotkeys_F5.plist            2009-11-06 16:54:28.000000000 +0900
@@ -623,23 +623,23 @@
 			</dict>
 		</dict>
 		<key>70</key>
 		<dict>
 			<key>enabled</key>
 			<integer>1</integer>
 			<key>value</key>
 			<dict>
 				<key>parameters</key>
 				<array>
-					<integer>100</integer>
-					<integer>2</integer>
-					<integer>1310720</integer>
+					<integer>63240</integer>
+					<integer>96</integer>
+					<integer>0</integer>
 				</array>
 				<key>type</key>
 				<string>standard</string>
 			</dict>
 		</dict>
 		<key>73</key>
 		<dict>
 			<key>enabled</key>
 			<true/>
 			<key>value</key>
  • どうやら、変更される項目は「70番のvalue >> parameters >> item 0〜2」であることが判明した。
  • 設定項目は以下のように変化した。
    • control-command-D = 「100、2、1310720」
    • F5 = 「63240、96、0」
  • つまり、~/Library/Preferences/com.apple.symbolichotkeys.plistをProperty List Editor.appで開いて、
  • 「70番のvalue >> parameters >> item 0〜2」を「100、2、1310720」に変更すれば、デフォルトのショートカット:control-command-Dが有効になるはず。

f:id:zariganitosh:20091107181402p:image

  • やってみる。が、Property List Editor.appで変更後、保存してみたが、相変わらずショートカットはF5のまま。変更されない...。
  • 設定ファイルが違っていたのかとガックリしたが、念のため再起動すると...

予想通りのcontrol-command-Dに変更された!

  • どうやら変更を反映させるためには、再起動が必要らしい。(システム環境設定では再起動しなくても反映されるので、もっと利口なやり方があるとは思うが)

バックアップして書き換え

  • 後はこの作業を常用しているOSX 10.6.1環境で実行すれば、おそらく変更出来るはずだ。
  • 但し、書き換えの前には~/Library/Preferences/com.apple.symbolichotkeys.plistをバックアップしておく、
    • あるいは念には念を入れて、Time Machineでバックアップしておけば、心置きなく作業出来る。
  • 作業前の「70番のvalue >> parameters >> item 0〜2」の内容も予想通り「63240、96、0」だった。
  • 「100、2、1310720」に変更して、保存して、再起動してみると...

成功!

  • これでSafariでも便利なポップアップ辞書を思い切り使うことができるのだ。

設定の意味を理解する

  • 一見、理解不能な3つの数字にはいったいどんな意味があるのだろう?
  • こうゆう時はショートカットの設定を微妙に変化させながら、地道に数字の変化を追えばだいたい当たりが付く。
  • しかし、やってから大抵後悔するのがいつものパターン。「書いてあるじゃん」と。
  • その前にWEBで検索してみた。キーワードは「com.apple.symbolichotkeys.plist」で。

  • item 2は、複合キー(モディファイヤキー)の組み合わせを表現するようだ。
16進数10進数キー
0x0000000何も押さない
0x020000131072shift
0x040000262144control
0x080000524288option
0x1000001048576command
    • command = 1048576
    • control-command = 262144 + 1048576 = 1310720(上記で書き換えた時のコードと同じだ!)
    • つまり、押しているキーの数字を足し算すれば、複数のキーを押していることになるのだ。

  • そして、item 0・item 1はキーコードを調べてみて分かった。
  • Macでキーコードを調べるには、その名もズバリ Key Codes.app がある。

f:id:zariganitosh:20091106181019p:image

  • 上記で設定した内容と見比べてみて、item 0はUnicode:、item 1はKey Code:、であることが理解出来た。

  • また、70番というのはOSが決める機能の番号で、ポップアップ辞書の機能が割り当てられている。

以上の仕組みが理解出来れば、GUIから変更出来ないショートカットでも、設定ファイルを直接弄って自由に変更することができるのだ!どこかに隠れたショートカット機能がないか探してみたくなった。


システム標準の辞書で調べるcontrol-command-Dを設定するワンライナー

  • 最後に、おなじみの裏技的なワンライナーにまとめてみた。
  • しかし、複雑な構造を持ったplistを書き換える方法って、どうやるべきなんだろう?
  • 悩んだ結果、最初にやってみたのが以下のコマンド。
defaults write com.apple.symbolichotkeys AppleSymbolicHotKeys -dict-add 70 "{enabled = YES; value = { parameters = (100, 2, 1310720); type = 'standard'; }; }"
  • 一応、上記コマンドでショートカットは control-command-D に設定された。
  • しかし、Property List Editor.appで確認してみると、以下のようになっていた。

f:id:zariganitosh:20091107204823p:image

  • 値がすべてstring形式になっている...。(その下の73番と比較すると良く分かる。本来は boolean・number であるべきなのかも。)
  • 目指すショートカットが設定されるので良いのだけど、何だか気分的に良くない。
  • そこで、少し長ったらしいがxml形式で書き直してみると、値の型もちゃんと指定出来た。
defaults write com.apple.symbolichotkeys AppleSymbolicHotKeys -dict-add 70 "<dict><key>enabled</key><true/><key>value</key><dict><key>parameters</key><array><integer>100</integer><integer>2</integer><integer>1310720</integer></array><key>type</key><string>standard</string></dict></dict>"

以上で、control-command-Dを設定するワンライナー、完成!(コマンド実行後、再起動あるいは再ログインが必要)

OSX 10.6で辞書で調べるがうまく機能しない場合、やってみる価値があると思う。

参考ページ

JackJack 2009/11/07 00:48 こんにちは。いつも楽しく拝読しております。
本エントリはすばらしいです。読んでいて鳥肌が立ちました。
自分でもやってみたいと思いました!

zariganitoshzariganitosh 2009/11/07 05:17 コメントありがとうございます。
日記に書くと、このように簡潔ですが、
現実はここに辿り着くまでに、幾多の試行錯誤があったりします。(笑)

> 自分でもやってみたいと思いました!
是非、お試し下さい!(バックアップをお忘れなく)
発見があったら、教えて下さい。
そして、ブログ等に記録しておけば、それを誰かが検索して、
再び「世界のどこかの先人に知恵」になるかもしれませんね。

mirrorboymirrorboy 2009/11/07 09:26 たびたびコメントしているmirrorboyです。

エントリ内容試してみた所、ショートカット変更できました。
これで念願のポップアップ辞書検索できそうです。ありがとうございました!

なにより問題解決のプロセスを見させてもらって、とても興奮しました。
どこかに設定ファイルがある!という思考、僕も身につけたいです。

wspwsp 2009/11/07 17:14 お邪魔二度目です。実際にやってみました。今はようやく見れた辞書ポップアップに感動しています。。
#実はEnabledがfalseになっていたという本末転倒具合(おいおい(-_-;
なるほど、ショートカット設定の問題だったのですね・・・使えるようになって非常に感謝しています。ありがとうございました。

zariganitoshzariganitosh 2009/11/07 22:35 > mirrorboyさん
> wspさん

ポップアップ辞書が使えるようになって良かったです!
自分も今回の調べ事で、また一つOSXの仕組みを理解することができました。

それにしても、SafariはなぜF5に反応しないんでしょうね。
その謎は残りました。

ねぎねぎ 2009/11/20 16:54 zariganitoshさん、以前のコメントから時間が経ってしまいすみません。
しばらくぶりにネットをしてみれば、なんと解決されたのですね、これはすばらしい!
早速試してみたいと思います。

どうやらショートカットが2種類存在しているような感触があったのですが、そういうことだったのですね。

>それにしても、SafariはなぜF5に反応しないんでしょうね。
これについては、私がポップアップ辞書に割り当てようとしたcommand+2も使えなかったことから察するに、
Safari特有のショートカットに割り当てるために、Safariがなんらかの形で予約しているのではないでしょうか。
(10.6のSafariでは、ブックマークにcommand+2が割り当てられています)

それでも、システム環境設定のキーボードショートカットで指定した通りに動いてくれないのは困りますね。

なにはともあれ、これでショートカットがまともになれば、ようやくMagic Mouseを使えそうです。
お世話になります、ありがとうございました!

saysay 2010/01/06 14:27 Key Codes.app のドメインが無くなっているようです。代わりに Full Key Codes (http://softwares.bajram.com/utilities/#Full_Key_Codes) というのを使ってみましたが、同じように使えました。

zariganitoshzariganitosh 2010/01/06 16:11 sayさん、
情報ありがとうございます!
http://www.manytricks.com/keycodes/ にはアクセスできなくなってしまったんですね...。
Full key Code.appも試してみました。自分のMacBookでも同じように使えました。
ありがとうございました。

rarazorarazo 2011/02/12 12:33 control-command-Dを設定するワンライナー、使わせていただきました。ありがとうございます。
ところで質問なのですが、この設定をもとに戻すには、どのようにすればよろしいのでしょうか?
safariで、マウスオーバー辞書状態から抜け出れなくなってしまいました。。
お手数ですが、もし可能であれば元に戻す方法、ご教示いただけますと大変ありがたいです。
よろしくお願いいたします。

zariganitoshzariganitosh 2011/02/12 14:30 rarazo さん、
元に戻すとはどの状態に戻すことを意図しているでしょうか?
(control-command-DはOSX標準の設定だと思っています)
もし、control-command-Dのショートカット設定を削除する意図でしたら、
Property List Editor.appで、70番の設定を削除すれば良いと思います。
(この日記文中のスクリーンショットを参考にしてみてください)

> safariで、マウスオーバー辞書状態から抜け出れなくなってしまいました。。

とありますが、具体的にはどのような状態なのでしょうか?自分のMacBookでは...
マウスオーバー辞書は、control-command-D後、ポップアップ辞書の外側をクリックするか、escキーを押せば解除されます。
あるいは、control-command-D後、control-commandを押し続けている間だけ、マウス位置に追従してポップアップ辞書が表示されます。

control-command-D後、ポップアップ状態が何をやっても解除されないのであれば、この日記で書いていることとは、また別の原因があるのかもしれません。

nobionobio 2012/09/08 20:15 この有益な記事を何度も何度も読み返した結果、
根幹の設定をいじるのも僕程度の素人にはリスキーだと考え、

----------------------------------------------------------------------
delay 0.4
tell application "System Events" to key code 2 using {command down, control down}
----------------------------------------------------------------------

というスクリプトを、キーボドランチャー(QuickSilver)で、
好きなホットキーに割り当ててみました。いまのところ快適です。

「先頭でいきなりキーを押すスクリプト」をキーボドランチャー経由で使う場合、
1行目に「delay ○○」を記述しないとうまくいかない、(そしてホットキーは一瞬だけ押すように
心がける)ということを理解するまでに、かなり無駄な時間を費やしました。

zariganitoshzariganitosh 2012/09/08 21:26 > 1行目に「delay ○○」を記述しないとうまくいかない、

そうなんですよね。どうして間を取る必要があるのか、正確な理由は自分も知りません。
この間に絡んだ問題でうまく動かなくなることって結構あります。困ったものです。

> (そしてホットキーは一瞬だけ押すように心がける)

これはホットキーを設定する部分で変更できるかもしてません。
(On Releaseにチェックを入れるとか)

自分もこうゆうちょっとした部分でよく、つまずきます。
それが解決した時に感動して、記事になったりもします。

nobionobio 2012/09/14 22:39 >どうして間を取る必要があるのか

例えば「command + A を押せ」というスクリプトを F1 キーに割り当てるとすると、
F1キーを押した瞬間に「command + F1 + A」を押したことになってしまう、
「delay ○○」を記述して○○秒以内にキーを離せばそれを回避できる、ということかと
思ってました。素朴すぎる解釈かも知れませんが。

zariganitoshzariganitosh 2012/09/15 05:24 nobioさん、

なるほど!
ショートカットを実行するスクリプトだから、それを呼び出すショートカットと混ざってしまうのですね。
であれば、Triggerの設定でon pressのチェックを外して、on Releaseにチェックを入れれば、解決しそうな気がします。
(F1キーを押した時ではなく、離した時に、command-Aが実行されます)

しかし、そこまで分かっていらっしゃるのなら、直接、設定されてみてはいかがですか?
修正するファイルをTimeMachineなどでバックアップしておけば、元に戻せる保険になります。

nobionobio 2012/09/15 21:20 こちらこそなるほど! です。「on Release」という設定を一度も使ったことなかったので、思いもしませんでした。

早速やってみてわかったこと:QuickSilverの「on Release」は複雑な(みっつ以上の?)キーコンビネーションには向かない。すべてのキーを(ほぼ)同時に離す必要がある。より単純な、例えば command + B の場合だと、「command 押しっぱで B だけ離す」で機能したりする。ファンクションキーひとつのみのショートカットに使うのが、迷う余地がなくて楽。もっともウチの QuickSilver は日によって挙動が違う不安定ソフトなので、わかったことと言うより、今日の感触、という程度ですが。

シングルファンクションキーには空きはない、アンド、右手にマウス持った状態で押すからキーボードの左手方面が望ましい、という考えで、「delay 0.4」を削除して、「on Release」にして、とりあえず「control + D」に割り当ててみました。ありがとうございました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証