Photoshopスポイトツールオプション（範囲・対象）をキーボードショートカットで設定する

#レタッチ・色調補正で忘れてはいけないスポイトツールの設定
が、Photoshopではアクセスし辛いところにあります。

![2030961048024.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35477/9a013a91-c417-122b-ea4f-cd8eb91ab6d8.jpeg)

この設定内容、特にサンプル範囲の指定値は、
* ブラシでのOPTION(Alt）＋クリックでの色拾い
* ターゲット調整ツール
* カラーサンプラー
などなどの、サンプル範囲を指定する全てのツールで共有しています。
画像の状態によって適宜変更しないとちょっと面倒なんですが、まぁ、面倒くさいところにあるんですね…
これをキーボードショートカットで変更できないかと思っていたら、
『Solved: Setting eyedropper options - Adobe Support Community - 10115167』https://community.adobe.com/t5/photoshop/setting-eyedropper-options/td-p/10115167?page=1&profile.language=en
Adobeフォーラムのr-bin氏がそのものズバリなScriptをアップしていました。
これをお借りして、KeyboardMaestroでちょうどいいキーに割り当てて使ってみましょう。
KMマクロのメインは、AppleScriptで包んだJavaScriptです。包んでるので変数もKMから渡せますね！

```AppleScript:
(*
This AppleScript uses the script of r-bin. Thanks to r-bin
https://community.adobe.com/t5/photoshop/setting-eyedropper-options/td-p/10115167
r-bin(https://community.adobe.com/t5/user/viewprofilepage/user-id/7619033)
*)

(*
eyeDropperSample（サンプルサイズ）		0:指定/1:3/2:5/5:11/15:31/25:51/50:101
eyeDropperSampleSheet（サンプル対象）	0:全て 1:現在 3:現在以下 6:全て調整なし 8:現在以下調整なし
*)

use Photoshop : application id "com.adobe.photoshop"
tell application "Keyboard Maestro Engine" to set mySampleSize to getvariable "SampleSize" as text

tell Photoshop
	do javascript ("var r = new ActionReference();
r.putProperty(stringIDToTypeID(\"property\"), stringIDToTypeID(\"tool\"));
r.putEnumerated(stringIDToTypeID(\"application\"), stringIDToTypeID(\"ordinal\"), stringIDToTypeID(\"targetEnum\"));
var curr_tool = executeActionGet(r).getEnumerationType(stringIDToTypeID(\"tool\"));

var r = new ActionReference();
r.putClass(stringIDToTypeID(\"eyedropperTool\"));
var d = new ActionDescriptor();
d.putReference(stringIDToTypeID(\"null\"), r);
executeAction(stringIDToTypeID(\"select\"), d, DialogModes.NO);

var r = new ActionReference();
r.putProperty(stringIDToTypeID(\"property\"), stringIDToTypeID(\"tool\"));
r.putEnumerated(stringIDToTypeID(\"application\"), stringIDToTypeID(\"ordinal\"), stringIDToTypeID(\"targetEnum\"));
var op = executeActionGet(r).getObjectValue(stringIDToTypeID(\"currentToolOptions\"));
op.putInteger(stringIDToTypeID(\"eyeDropperSample\"), " & mySampleSize & ");
var r = new ActionReference();
r.putClass(stringIDToTypeID(\"eyedropperTool\"));
var d = new ActionDescriptor();
d.putReference( stringIDToTypeID( \"null\" ), r );
d.putObject(stringIDToTypeID(\"to\"), stringIDToTypeID(\"null\"), op);
executeAction(stringIDToTypeID(\"set\"), d, DialogModes.NO);

var r = new ActionReference();
r.putClass(curr_tool);
var d = new ActionDescriptor();
d.putReference(stringIDToTypeID(\"null\"), r);
executeAction(stringIDToTypeID(\"select\"), d, DialogModes.NO);")
end tell
```

こっちはサンプル対象を変更します（Keyboard Maestroから実行）

```applescript
use Photoshop : application id "com.adobe.photoshop"
tell application "Keyboard Maestro Engine" to set mySampleTarget to getvariable "SampleTarget" as text

tell Photoshop
	do javascript ("
try
    {
    var r = new ActionReference();
    r.putProperty(stringIDToTypeID(\"property\"), stringIDToTypeID(\"tool\"));
    r.putEnumerated(stringIDToTypeID(\"application\"), stringIDToTypeID(\"ordinal\"), stringIDToTypeID(\"targetEnum\"));

    var ret = executeActionGet(r);

    var options = ret.getObjectValue(stringIDToTypeID(\"currentToolOptions\"));           
    var tool = ret.getEnumerationType(stringIDToTypeID(\"tool\"));

options.putBoolean(charIDToTypeID(\"StmS\"), " & mySampleTarget & ");
options.putBoolean(charIDToTypeID(\"StmB\"), " & mySampleTarget & ");



    var r = new ActionReference();
    r.putClass(tool);

    var d = new ActionDescriptor();
    d.putReference(stringIDToTypeID(\"null\"), r);
    d.putObject(stringIDToTypeID(\"to\"), stringIDToTypeID(\"null\"), options);

    executeAction(stringIDToTypeID(\"set\"), d, DialogModes.NO);
    }
catch (e) { /*alert(e)*/  }
")
end tell
```

option+1〜7で値を渡してサンプル範囲変更、option+0,.で対象レイヤー変更を仕込みます。便利べんり。