共通設定・タイプ別設定をマクロから取得・変更する以下の関数を追加します。
・GetCommonProp(key) 共通設定・取得
・SetCommonProp(key, value) 共通設定・設定
・GetTypeProp(type, key) タイプ別設定・取得
・SetTypeProp(type, key, value) タイプ別設定・設定
keyは、とりあえずプラグインがらみで需要のあるものだけ用意していますが、追加は容易です。
共通
Format.MarkerSymbol 見出し記号
タイプ別
Screen.TypeName 名前
Screen.TypeExt 拡張子
Screen.InsertSpace TabではなくSpaceを挿入する
Screen.AutoIndent 自動インデント
typeにはタイプ番号の数字を指定します。「基本」なら1、「設定20」なら20です。
0 を指定すると、現在のタイプが指定されたことになります。
設定したあと、他のエディタに通知を投げたりはしません。
マクロサンプル
Get/SetPropTypeでタイプ番号の数字のかわりに
タイプに含まれる拡張子を指定できると嬉しいかもです。
番号がユーザー環境依存で違っていても使えるので。
参考)
IsCurTypeExt, IsSameTypeExtマクロ
例)
GetTypeProp("cpp", key) 拡張子cppに対応するタイプ(C/C++)を指定
GetTypeProp("rb", key) 拡張子rbに対応するタイプ(Ruby)を指定
GetTypeProp(".", key) 現在適用されているタイプを指定
GetTypeProp("", key) 「基本」タイプを指定
C/C++はほとんどの人がデフォのまま3番目が多そうですが、
Rubyはデフォでは入っていないので番号では汎用マクロ用途に使えません。
拡張子"rb"ならほぼRuby設定に確定なので汎用マクロ用途に使えそうです。
数字をやめて拡張子のみにするばあい、未設定の「設定30」などにアクセスできません。
Getだけならまぁよいのですが、Setも考えるなら数字アクセスできたら良いかなと。
正直、「現在タイプの取得/設定」くらいしか使わないのでは?とも思いますが、せっかくなので汎用的に作ってみました。
JavaScriptだったら、
var typeRb;
for (var typeRb=1; typeRb <= 30; typeRb++) {
if ( /\brb\b/.test(GetTypeProp( typeRb, "Screen.TypeExt" )) )
break;
}
みたいに書けば汎用マクロ用途にも使えるし、該当がなかったときのハンドリングもしやすいのではないかと思います。
(発想がプログラマ寄りすぎるでしょうか・・・)
IsCurTypeExt, IsSameTypeExt が追加されたとき「内部実装とあまり密着させたくない?」という印象を受けたのですが、そういうの意識されてますか?
>var typeRb;
>for (var typeRb=1; typeRb <= 30; typeRb++) {
>if ( /\brb\b/.test(GetTypeProp( typeRb, "Screen.TypeExt" )) )
>break;
>}
なるほど、使用頻度も低そうですし、これで十分かもしれないですね。
>「内部実装とあまり密着させたくない?」という印象を受けたのですが、そういうの意識されてますか?
単純に使いやすければそれでいいかと思います。
IsCurTypeExtも提示された方法で代替えできるけれど、
一行で書けるのはやっぱり楽かな~、くらいのノリでして。
今は拡張子だけではないですし、将来regexが使えるようになるかもしれないので、
サクラエディタがファイル名から自動で選ぶタイプを取得するGetDocumentTypeOfPath()を
使えるようにすると、互換性が上がっていいとおもいます。
MakefileとかApp.xaml.csとか。
shebang対応等はまた考えないといけないけど。
・TCHAR回りがおかしかったのを修正
・タイプ別設定疑似可変長などの最新変更に対応