最終更新日:2013/11/29
MenuBarTitleToIcon - メニューバーのタイトルをアイコンにするSIMBLプラグイン
MenuBarTitleToIconについて
幅1440pxのディスプレイを使っていますが、最近MenuBarAppleScriptでメニューバーに色々表示させているとメニューバーの幅が足りない時があります。しかし、アプリケーションによっては余裕がいっぱいあるものがあります。メニューを良く見ると「ウインドウ」ってのがそもそも幅を取り過ぎな気がします。あと「フォーマット」も長いです。これらの基本的なものだけでもアイコンになれば幅が狭くなるかなと思い作りました。
最初はこういうのをするソフトがあったはずだと1時間ぐらい探したのですがどうしても見つからず、GUI無しで決まった項目だけアイコンにするのを作ってみたら1時間もかからずにできました。
スクリーンショット
バージョン1.2
- 10.9 + バージョン1.2のFinder、Safari、AppleScript エディタのメニューバーのスクリーンショットです
-
-
-
バージョン1.1
- 10.9 + バージョン1.1ではCotEditorのメニューバーが次のようになります
-
バージョン0.1
メニューが長くてメニューアイテムが省略されることが多かったAppleScriptエディタです。
- 使用前:約778px
- 使用後:約553px
- 見た目はちょっと気になりますが200px以上狭くなりました。アイコンと一文字のメニューバー項目が約50pxなので4個、アイコンだけなら約30pxなので6個表示できるスペースが増えました!
動作確認環境
Mac OS X 10.6.8で動作確認しています。
アイコンはシステム標準の物を適当に使用しています。
10.8.2で試してみたら「フォーマット」のアイコンが無かったので変わりませんでしたが、他の「ウインドウ」などはアイコンに変わりました。EasySIMBLを使用しました。
10.9 + EasySIMBLで動作確認
仕様・注意点
- すでにアイコンになっているメニューは処理対象外です
- メニューバーの一個目のアプリケーション名のメニューは処理対象外です
- 見た目は変わっていますがメニューのタイトルは変わっていないのでアクセシビリティの機能でメニューを名前で指定してGUIを操作するのには影響しません。
- Carbonアプリケーションでは動きません。
- サンドボックス対応アプリケーションでは一部メニュータイトルがアイコンになりません。
技術解説
GUIを変更するSIMBLプラグインということでシステムが不安定にならないか心配する方もおられるようなので、どのような実装なのか簡単に説明します。
メソッドの置換は一切行っていません
SIMBLプラグインでアプリケーションが不安定になる最大の原因が置換したメソッドがなんらかの問題を起こすことだと思います。しかし、MenuBarTitleToIconではそのメソッドの置換を一切行っていません。
では、何をしてるのか
MenuBarTitleToIconは次のような動作になります
- アプリケーション起動時にMenuBarTitleToIconがロードされます
→SIMBLプラグインのロード自体でクラッシュすることは無いと思います
- メインメニュー(
[ NSApp mainMenu ]
)を順番に調べてアイコンにするタイトルなら画像を読み込みメニューアイテムにアイコンを設定します([ menuItem setImage:icon]
)
→両方共OSXで公開されている基本的なAPIで特に危険は無いです。アイコンになってもメニューのタイトルは変わっていないのでアクセシビリティのAPIでGUIを操作するのには影響しません。
- MenuBarTitleToIconがアプリケーションの起動時にロードされた時に上記処理を行って、以降は何もしません。よって、起動後に動的にメニューが作られた場合はアイコンになりません。
→起動直後にMenuBarTitleToIconがロードされてメニュータイトルをアイコンにする時に問題がなければ、もう何もしないのでクラッシュすることはないと思います。
MenuBarTitleToIcon_IconSetting.txtにアイコンの画像ファイルとそのメニュータイトルを記述することでアイコンにすることができます。
パスが次のようになるように「~/Library/Application Support」フォルダに「MenuBarTitleToIcon」というフォルダを作ってそこに置いて下さい。
/Users/自分/Library/Application Support/MenuBarTitleToIcon/MenuBarTitleToIcon_IconSetting.txt
書き方
MenuBarTitleToIcon_IconSetting.txtの書き方です。実際の例は同梱のMenuBarTitleToIcon_IconSetting.txtを見て下さい。
文字コードはUTF-8にしてください。
アイコン画像のパス
アイコンにするタイトル
アイコン画像のパス
アイコンにするタイトル1
アイコンにするタイトル2
仕様
- サンドボックス対応アプリケーションでは設定ファイルが読み込めずこの設定は適用されません。App Storeのほぼすべてのアプリケーション、Appleのアプリケーションは半分ぐらいサンドボックス対応です。サンプルで「メール」の「メッセージ」と「メールボックス」をアイコンにするものが書いてありますが、これは10.6.8のみ有効です。
- 日本語と英語などタイトルは複数書けます
- パスは/から始まるフルパスで書いて下さい
- また/から始まる文字列をパスと認識していますので、/から始まるメニュータイトルは変更できません
メニューバーが変わるアプリケーションで常にアイコンにする設定
Firefoxがそうなのですがメニューバーが変わるアプリケーションでは変わったメニューバーではアイコンになりません。
そこで、メニューバーの変更をチェックして変更があった時にアイコンにする処理を実行するようにできます。
MenuBarTitleToIcon_AutoUpdateApp.txtに対象のアプリケーション名を改行区切りで書くことによって指定できます。
パスが次のようになるように「~/Library/Application Support」フォルダに「MenuBarTitleToIcon」というフォルダを作ってそこに置いて下さい。
/Users/自分/Library/Application Support/MenuBarTitleToIconMenuBarTitleToIcon_AutoUpdateApp.txt
仕様
- サンドボックス対応アプリケーションでは設定ファイルが読み込めずこの設定は適用されません。App Storeのほぼすべてのアプリケーション、Appleのアプリケーションは半分ぐらいサンドボックス対応です。
- NSApplicationのメソッドsetMainMenu:を書き換えてそのアプリケーションのメニューバーが変わった時にアイコンにします。
- 具体的にはFirefoxのメニューバーが常にアイコンになります。
- 危険性はほとんどないと思いますがメソッドを書き換えていますのでなんらかの相性問題がでる可能性はあるかもしれません。
コメント
1.5.0
自分で追加できるようになったので長いタイトルがあったらアイコン化を試してみて下さい。サンドボックス対応アプリケーションでは駄目ですが…。
1.3.0
Safariのメニューバーがついに全部アイコンになってスッキリしました。
どうせならと、アプリケーション名も試しみたのですが"..."みたいに表示されてアイコンが表示されなかったのでとりあえず断念ということになりました。
1.2.0
いろいろとアイコンにしてみました。
「表示」なんかはちょっと無理があるかもしれません。
「スクリプト」はスクリプトメニューと同じにしたけど、同じのが2つ表示されるのでちょっと気になる感じで.scptファイルのアイコンの方が良かったかな、と思っています。
いいアイコンが/System/Library/とかにあったら教えて下さい。
0.1.0
最初は違和感あったけど数日使っていたら慣れてきて迷わずウインドウメニューなどを選べるようになってきました。
スペースに余裕が出たので気兼ねなくMenuBarAppleScriptでメニューバーにアイコンを表示するアプリケーションを作っていけます。
ダウンロード
- Download MenuBarTitleToIcon1.5.0.zip
- 「ツール」をアイコンにするようにした
- 「アイコンにするメニュータイトルを追加する設定」を追加
- 「メニューバーが変わるアプリケーションで常にアイコンにする設定」を追加
- 10.6.8で動作確認
- 10.9 + EasySIMBLで動作確認
- MenuBarTitleToIcon1.3.0.zip
- SafariStand等の後に読み込まれるように名前の先頭に「zzz」を付けてファイル名を「zzzMenuBarTitleToIcon.bundle」とした。
- 上書きインストールの場合、古い「MenuBarTitleToIcon.bundle」を削除して下さい。
- 「開発」をアイコンにするようにした
- SafariのSafariStandの「Stand」をアイコンにするようにした
- Safari6の「ブックマーク」がアイコンになるようなった(らしい)
- アプリケーション名のメニューアイテムはアイコンにならないので処理対象外にした
- 10.6.8で動作確認
- 10.9 + EasySIMBLで動作確認
- MenuBarTitleToIcon1.2.0.zip
- 「表示」「移動」「スクリプト」「ブックマーク」「履歴」をアイコンにするようにした
- 必要なアイコンのみ読みこむようにしたのでちょっと処理が軽くなったと思います
- 10.9 + EasySIMBLで動作確認
- Safari6の「ブックマーク」はアイコンにならないようです。次のリリースで対応する予定です
- MenuBarTitleToIcon1.1.0.zip
- 「ユーティリティ」をアイコンにするようにした
- 10.7以降、サンドボックス非対応アプリケーションでは「フォーマット」のアイコンをTextEditのアイコンにするようにした
- 10.9 + EasySIMBLで動作確認
- MenuBarTitleToIcon0.1.0.zip
- とりあえずできた
- Mac OS X 10.6.8で動作確認しています。10.8.2では「フォーマット」のアイコンが無いので変わりませんが他のは変わりました。