0
1

メニューバーにPhotoshopカラー設定表示② (AppleScript、Keyboard Maestro不使用)

Last updated at Posted at 2023-01-11

この内容は、前回の記事の改良版です。

Photoshopカラー設定内容をメニューバーに表示させる

Photoshopカラー設定は「間違えると絶対色が変わってしまう」ようなものでは実はなくて、プロファイルの扱いを分かっていて、適切に設定されていれば、開くとき・保存時のクリック数が少し減ってラクだよ、くらいの意味しかありません。それでも今の状態をすぐに把握できると便利なので、メニューバーに表示させます。

ACEConfigCache2.lstというファイル

Photoshop/InDesign/Illustratorのカラー設定は、Bridgeで同期させられます。ということは、どこかに同期・共有用のファイルがあるはず。それがユーザライブラリ以下にあるこのファイルです。
~/Library/Preferences/Adobe/Color/ACEConfigCache2.lst
バイナリなので、読めるようにします。odしてtrで整形。

od -A n -c -v /Users/yamo/Library/Preferences/Adobe/Color/ACEConfigCache2.lst | tr -d ' \\*\n'

結果こういうものが得られます。
1.png

ここには、Illustrator、Photoshop、InDesign(AIRobin)のカラー設定内容が書かれています。ファイルを消してから各アプリを起動(&Photoshop以外はカラー設定開いて設定)すると分かりますが、記載順はアプリの起動順です。例えばPhotoshopしか起動したことがなければ、内容にはPhotoshopのカラー設定しか記載されません。また、Photoshop2023/2021/2019と複数バージョンを起動するとその分増えていきます。

前回は、この中にカラー設定プリセット名称が含まれていることは分かったのですが、プリセットから外れたCustomの状態だと名称はそのまま残るため正しく取得できず、結局AppleScriptでPhotoshopに問い合わせていました。
が、カスタム(プリセットから外れた状態)のとき変わるところがあるのを発見しました。
1のコピー.png
赤枠部10Customの印で、プリセット名称を持っているならここは00になります。続いてアプリケーションパスがあるので、ここでは正規表現を使い00/10を調べます。10なら文字列Customを出力、00ならアプリケーション(バージョン)名と.csf0033に挟まれたプリセット名称を取得します。

csf0033ではなく、cfsで止めた方がいいみたいです。csf0034と数値が変わっていました。

PSColor2Menubar.sh(旧ver)
#!/bin/bash
export LANG=ja_JP.UTF-8
ColorSettings=/Users/yamo/.PSColorSettings_out.txt
lstdump=`od -A n -c -v /Users/yamo/Library/Preferences/Adobe/Color/ACEConfigCache2.lst | tr -d ' \\\*\n'`
customcheck=`echo $lstdump | perl -pe 's/.+(..).\/Applications\/AdobePhotoshop2023.+/$1/'`
if [ $customcheck = "10" ]; then
echo "⚠️カスタム" > $ColorSettings
else
echo $lstdump | perl -pe 's/.+?Photoshop2023\.app.+?([^\/]+?)\.csf.+/$1/' > $ColorSettings
fi

デフォルトプリセット名、例えば一般用-ナントカ、はローカライズされた名前で、AppleScriptやこのファイルに記載されているのはローカライズ前の名称です。
当然自分で作ったプリセット名称はそのままです。

これで設定ファイルからプリセット名(&カスタム状態)を取得できました。ファイルはホーム直下に見えない状態で保存しておきます。

ローカライズ名を出したい

勝手ローカライズファイルを用意します。

colorTranslation.txt
JapanWebInternet,Web・インターネット用 - 日本
JapanPrepress,プリプレス用 - 日本2
MonitorColor,モニタのカラー設定に合わせる
JapanGeneralPurpose,一般用 - 日本2
JapanMagazine,日本 - 雑誌広告用
JapanNewspaper,日本 - 新聞用
EuropeWebInternet2,Web・インターネット用 - ヨーロッパ2
NorthAmericaWebInternet,Web・インターネット用 - 北米
EuropePrepress3,プリプレス用 - ヨーロッパ3
NorthAmericaPrepress,プリプレス用 - 北米2
EuropeGeneralPurpose3,一般用 - ヨーロッパ3
NorthAmericaGeneralPurpose,一般用 - 北米2
JapanGeneralPurpose3,一般用 - 日本3
NorthAmericaNewspaper,新聞用 - 北米

メニューバーに表示させるのですから、自分で短く表記しちゃってください。
解析スクリプトは次のように書き換えます。

PSColor2Menubar.sh
#!/bin/bash
export LANG=ja_JP.UTF-8

#書き出し先とローカライズファイル(カンマ区切りテキスト)
ColorSettings=/Users/yamo/.PSColorSettings_out.txt
ColorTranslation=/Users/yamo/UTL/colorTranslation.txt

#読み出すPhotoshopバージョン(Photoshopに続くもの)
photoshop=2023

#ACE…lstをテキスト化
lstdump=$(od -A n -c -v /Users/yamo/Library/Preferences/Adobe/Color/ACEConfigCache2.lst | tr -d ' \\\*\n')

#Photoshop2023のカラー設定がカスタム(プリセット名を持っていない)かチェックする箇所を取り出し
customcheck=$(echo $lstdump | perl -pse 's/.+(..).\/Applications\/AdobePhotoshop.?$PS.+/$1/' -- -PS=$photoshop)

#もしチェック箇所が10ならカスタム、00ならプリセット名あり
if [ ${customcheck} = "10" ]; then
	CSOut="⚠️カスタム"
else

#プリセット名を取り出す
	CSOut=$(echo ${lstdump} | perl -pse 's/.+?Photoshop.?$PS\.app.+?([^\/]+?)\.csf.+/$1/' -- -PS=$photoshop)

#プリセット名に対応するローカライズされた名前があるか調べる
	CSOutTrans=$(echo ${CSOut} | xargs -n 1 -I{} awk -F "," '$1 == mycolor {print $2}' mycolor={} ${ColorTranslation})

#ある(Transが空でない)場合は出力用変数を入れ替える
	if [ "${CSOutTrans}" != "" ]; then
	CSOut=$CSOutTrans
	fi
fi

#テキストファイルに出力する
#うまく取得できていない場合はエラーを返す。※PsBETAを起動した場合勝手に上書きするためエラーになる

if [ ${#CSOut} -gt 20 ];then
echo "‼️Error" > $ColorSettings
else
echo $CSOut > $ColorSettings
fi

リスト中と同じ名前があった場合、awkでローカライズ名を取り出しています。
ですのでもし全く同じ、例えばMonitorColorという名前だと日本語に置き換わってしまいます。

最初からあるローカライズされるプリセット類は、設定ファイルのパスに/Recommended/がついているので、それで処理を分けてもいいでしょう

fswatchで監視させる

brew install fswatchしてインストールしておきます。
fswatch -o -l 6 [監視ファイル.lst] | xargs -n 1 [↑で書いたPsColor2Menubar.shのパス]
すると、変更がある度にPsColor2Menubar.shを実行します。ただ、Photoshopをアクティブにするだけでファイルの書き換えが行われ、カラー設定のプルダウンを変えただけでも書き換えられているため、あまりに頻度が高いとコマンド類がいろいろ詰まってよくありません。意味無いし…なので、-oオプションで、-l 6秒ごとの出力数をまとめてしまいます。6秒なのはテキトウです。ある程度ぱっと変わって欲しいし。

Lingon Xで設定する

Lingon Xは有料ですが、面倒くさいplist書くより買った方がいいです。

これでOSに起動時、fswatchを実行させます。
新規作成して、
スクリーンショット 2023-01-11 22.30.22.png

シェルコマンドを入力します。
スクリーンショット 2023-01-11 22.30.28.png
最初は直接以下のコマンドを書いていたのですが、「複雑過ぎるみたいだけどスクリプトファイルに書き出したほうがいいかもよ」と警告してくれるのでその通りにすれば、shファイルを自動で書いてリンクしてくれます。

/opt/homebrew/bin/fswatch -o -l 6 /Users/yamo/Library/Preferences/Adobe/Color/ACEConfigCache2.lst | xargs -n 1 /Users/yamo/UTL/PSColor2Menubar.sh

はい、これで、起動したらfswatchが6秒ごとにファイルをチェックし、変更があった場合ACEConfigCache2.lstファイルを解析してプリセットから外れている=>カスタム、そうでなければプリセット名を書いたファイルを書き出すことができました。

あとは、このファイルをxbarでメニューバーに表示させます。

xbarでメニューバーに表示させる。

brew install xbarしときましょう。
xbarのプラグインフォルダーに、このファイルを入れるとそのまま表示します。ただ、先のファイルをcatするだけ。実行間隔はファイル名に書き込みます。

PsColorSettings.5s.sh
#!/bin/bash
cat /Users/yamo/.PSColorSettings_out.txt

以上!

結局Photoshopにtell application id "com.adobe.phtoshop" to color settingsする必要がなくなりました。前回Keyboard MaestroはPhotoshop起動数(複数起動)を調べて、PhotoshopがなくなればLaunchctlでオフにしていたんですが、それも面倒くさいからやめましょう。どうせPhotoshop常に起動してるしうちは……🐸

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1