English help on website



setcompatiblemode文(Ver9.24対応版)
目次− setcompatiblemode文
setcompatiblemode文は、マクロの互換性の指示をします。(V6.00以降)

#old=setcompatiblemode(#new);として、設定すると同時に直前の値を知ることもできます。(setcompatiblemode関数
パラメータに以下の値を指定できます。

折りたたみがあるときの動作を、以下の値のOR演算した値で指定できます。

0x00000000    マクロの標準動作(0x0002と同じ)
0x00000001    折りたたみを解除
0x00000002    折りたたみを無視してなるべく維持
0x00000003    折りたたみを維持

0x0002の「折りたたみを無視してなるべく維持」は、例えばdown;文でカーソル移動したとき、折りたたみされた範囲に入るときのみ自動的に折りたたみが解除されます。
折りたたみされた場所でなければ折りたたみはそのままです。
部分編集されているときの動作を、以下の値のOR演算した値で指定できます。

0x00000000    マクロの標準動作(0x0008と同じ)
0x00000004    部分編集を解除
0x00000008    部分編集を無視してなるべく維持
0x0000000c    部分編集を維持

0x0008の「部分編集を無視してなるべく維持」は、例えばdown;文でカーソル移動したとき、部分編集された範囲の外に出るときのみ自動的に部分編集が解除されます。
部分編集された範囲内での移動では部分編集はそのままです。
以下の文は部分編集を維持していても、部分編集の外にジャンプします。
・nextmark/prevmark(マーク行の上検索/下検索)
・goupdateup/goupdatedown(上/下の編集マーク)
・nextcolormarker/prevcolormarker(上/下のカラーマーカー)
以下の文は常に部分編集内の動作に制限されます。(V9.12以降)
・selectcolumn
openfileなどでファイルを開くときの排他制御(秀丸エディタで同じファイルを開く場合)の動作を、以下の値のOR演算した値で指定できます。

0x00000000    マクロの標準動作(動作環境に従う)
0x00000010    開く方法を問い合わせする
0x00000020    上書き禁止で開く
0x00000030    同じファイルを2つ開くことを禁止する(ジャンプする)
0x00000040    ファイルを読み込みなおしする
0x00000050    強制的に開く(複数の秀丸で開くことを無視して普通に開く)

「検索での表示」の動作を、以下の値のOR演算した値で指定できます。

0x00000000    マクロの標準動作(動作環境に従う)
0x00000100    点滅表示
0x00000200    範囲選択

「貼り付け後のカーソル位置」の動作を、以下の値のOR演算した値で指定できます。(V8.00以降)

0x00000000    マクロの標準動作(動作環境に従う)
0x00001000    先頭のまま
0x00002000    最後に移動

これ以外にも以下の指定ができます。

0x00020000     マクロ終了後に検索条件をマクロ実行前と同じに戻します。(V8.20以降)

0x00080000     マクロ終了後にカーソル移動後と編集後の自動起動マクロを動かせるようにします。(V8.30以降)

0x00100000     各種の文を複数選択に対応した動作にします。(V8.40以降)

0x00200000     削除した範囲にあるカラーマーカーをやり直し可能にします。(V8.56以降)

0x00400000     「前のカーソル位置」の記憶を変更しないようにします。(V8.58以降)

0x00800000     disabledrawで検索後のカーソル状態を正しくします。(V8.66β6以降)

0x01000000     dllfunc等の関数内で、画面ごとのDPIを有効にします。(V8.73以降)

0x02000000     カーソル行の下線やカーソル位置の縦線の描画を有効にします。(V8.90β6以降)

0x04000000     execmacroのコンパイル内容をメモリ上にキャッシュして再利用します。(V8.92β12以降)
 マクロの実行が終わるとメモリは破棄されます。

0x08000000     別の秀丸エディタにマクロの実行を切り替えできないモードにします。(V8.92β12以降)
 変数用メモリを共有しないことで高速になる場合があります。
 setactivehidemaruなどは動作できないようになります。

0x10000000     範囲選択された状態でのleftrightを常に範囲選択の先頭/末尾に移動するようにします。(V9.00β11以降)
 動作環境の「左右キーは必ず範囲選択の先頭/末尾」に相当します。

V6.00において追加された「折りたたみ」や「部分編集」をしている時は、カーソル移動の挙動が従来とは異なります。
例えば、up;やdown;ではV6.00未満では必ず一行移動していましたが、V6.00以降では、折りたたみがあると数行ジャンプしたり、部分編集では移動しないことがあります。
マクロは、この互換性を維持するために、全ての文のカーソル移動の挙動は折りたたみと部分編集は無視して、V5.xx以前の従来通りの動きのままとなります。

setcompatiblemode 0x000f; (つまり 0x0003 | 0x000c)とすると、折りたたみと部分編集を無視せずにマクロを動作させることができます。
V6.00以降でキー操作の記録をすると、自動的にこの文が付きます。
この文を実行しなければ、setcompatiblemode 0x0000; と同じ状態で、V6.00未満の動作と同じになります。
(V6.00時点では「折りたたみを無視してなるべく維持」「部分編集を無視してなるべく維持」と同等になります。)

0x0001の「折りたたみを解除」は、setcompatiblemodeを実行したとたんに、全ての折りたたみが解除されます。
0x0002の「折りたたみを無視してなるべく維持」は、折りたたみ中であることは無視しつつ、必要なら解除し、解除する必要がなければそのままになります。

0x0004の「部分編集を解除」は、setcompatiblemodeを実行したとたんに、部分編集が解除されます。
0x0008の「部分編集を無視してなるべく維持」は、部分編集中であることは無視しつつ、必要なら解除し、解除する必要がなければそのままになります。

setactivehidemaruなどでマクロの実行が他の秀丸エディタに移動してもこの状態は引き継がれます。
execmacroで他のマクロを実行するときは状態は引き継がれません。

参照:
 影響の及ぶ範囲(execmacro)
 影響の及ぶ範囲(アクティブ切り替え)

マクロ終了後に検索条件を戻す用の0x00020000の指定について

「setcompatiblemode 0x00020000;」は、一番最初にそれを実行した瞬間に検索条件がバックアップされます。そのため、検索条件を書き換えた後にこの命令を使うと、マクロの実行前とは別の検索条件が復元されてしまう可能性があります。この命令は検索系コマンドを使う前に実行してください。
「setcompatiblemode 0x00020000;」を複数回実行しても、検索条件のバックアップは一番最初のsetcompatiblemode時だけになります。また、「setcompatiblemode 0x00020000;」を実行した後で、例えば「setcompatiblemode 0;」のように、0x00020000のフラグをクリアするような動作をしたとしても、検索条件の保存/復元自体はキャンセルされず、マクロが終了した時点で必ず検索バッファの復元が実行されます。(Ver8.22から一部仕様変更がありました)
復元される検索条件にinselectの状態(inselectingキーワードや対象範囲)は含まれません。
マクロ内でinselectのパラメータ付きで検索した後、inselectをOFF状態にする場合、escapeinselectで解除することができます。