マクロの設定依存性について(Ver9.35対応版)
目次−
マクロの設定依存性について
マクロは動作環境やファイルタイプ別の設定によって挙動が変わることがあります。
例えば他の人にマクロを渡したりする場合は、設定に依存性が無いか十分な注意が必要です。
依存が起きやすい設定と文の一覧
●開く
openfile等。
[その他]→[動作環境]→[ファイル]→[エンコード1]の自動認識の方法によって、正しくファイルを解釈できるかどうかが変わってきます。
openfile文のパラメータでエンコードの種類を明示的に指定して開くことができます。
[その他]→[動作環境]→[ファイル]→[排他制御]→[秀丸エディタで同じファイルを開く場合]の設定によって、既にファイルが開かれている場合の挙動が変わってきます。
setcompatiblemodeで非依存にすることもできます。
●検索での動作
searchdown,finddown等で検索後。
[その他]→[動作環境]→[検索]→[検索での表示]の状態によって、検索後の範囲選択されているかどうかが変わってきます。
setcompatiblemodeを指定して、依存性を無くすこともできます。
マクロ内でsearchdown等を使うと、検索ダイアログボックスを呼び出した時の検索条件(大文字/小文字の区別、正規表現のON/OFF状態など)が変わってしまうケースが多いです。これを防ぐには、V8.20から追加された「setcompatiblemode 0x20000;」をマクロの先頭付近で実行する方法があります。
●貼り付け後のカーソル位置
paste, poppaste, refpaste文。
動作環境によって、貼り付け後の状態が違うことがあります。
[その他]→[動作環境]→[編集]→[貼り付け後のカーソル位置]の状態によって、貼り付け後のカーソル位置が変わってきます。
レジストリを読み込んで動作環境の状態を知ることができます。
(例)
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
#f = getregnum("PasteCursorFix");
closereg;
setcompatiblemodeを指定して、依存性を無くすこともできます。(V8.00以降)
●折り返し
x,y,moveto等を使った座標(ワープロ的)で考えられたマクロは、折り返しがあると計算がずれることが考えられます。
column,lineno,movetolineno等を使ったカラムと行(エディタ的)で考えたほうがいい場合があります。
ワープロ的な数え方をエディタ的な数え方で代替する文の例:
x, y → column, lineno
moveto → movetolineno(V8.00以降はmoveto2があります)
up, down, left, right → movetolinenoで計算
gettext → gettext2
linecount → linecount2
linelen → linelen2
seltopx, seltopy, selendx, selendy → seltopcolumn, seltoplineno, selendcolumn, selendlineno
foundtopx, foundtopy, foundendx, foundendy → xtocolumn, ytolinenoで変換
その他、xtocolumn, ytolineno, columntox, linenotoyで相互に変換ができます。
参照:
文字の単位
●プロポーショナルフォント
上記「折り返し」と同様、ワープロ的な計算をしたマクロではずれることが考えられます。
fontmodeでプロポーショナルフォントかどうかを判断できます。
●結合文字、カラー絵文字
結合文字やカラー絵文字は動作環境によって有効か無効が変わり、カーソル移動や文字の数え方が変わる場合があります。
fontmodeで結合文字やカラー絵文字の設定が有効かどうかを判断できます。(V8.96以降)
参照:
文字の単位
●フリーカーソルモード、カーソルの動作など
up, down, left, right文。
フリーカーソルモードの場合は、改行を超えて移動できてしまいます。
freecursorキーワードでフリーカーソルモードかどうかを判断できます。
[その他]→[動作環境]→[編集]→[高度な編集2]→[「行末<->次の行の行頭」移動の禁止]がONの場合は、行をまたいで移動できなくなります。
[その他]→[動作環境]→[編集]→[高度な編集2]→[タブ文字の上にカーソル移動した時]の設定によって、上下の移動で違いが出てきます。
上記「折り返し」同様、movetoやmovetolinenoで代替する方法があります。
●単語移動関係
wordleft, wordleft2等。
単語移動関係は、wordleftのようにV6.50未満の動作と互換の文があるものは、互換性が維持されます。
wordleft2等のV6.50未満の動作でないものは、例えばUnicodeの単語に含まれる文字が追加されるといったような、改善していくことがあります。
●単語の検索
searchdown, finddown等。
[その他]→[動作環境]→[検索]→[単語の検索で"abc"を検索するとき、"abc123"にはヒットさせない」の設定の影響があります。
レジストリを読み込んで動作環境の状態を知ることができます。
(例)
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
#f = (getregnum("NumWord") & 0x0001) != 0;
closereg;
●インデント
insertreturn文。
自動インデントが有効になっていると、insertreturnは自動インデントが働きます。
insert "\n"; とすると、自動インデントが働くのを回避できます。
●挿入モード/上書きモード
insertreturn文。
上書きモードか挿入モードでinsertreturnの動作が違います。
insert "\n"; とすると、回避できます。
●閲覧モード
全般的。
閲覧モードのときは、そのままだとカーソルが表示されていないので、全般的にマクロが期待通りに動かない可能性があります。
browsemodeキーワードで閲覧モードかどうかを判断できます。
●折りたたみ/部分編集
カーソル移動する文は全て。
折りたたみや部分編集されている場合は、互換性を維持するために無視して動きます。
setcompatiblemodeを使うと無視しないようにできます。
●デザイン
colorcodeキーワード。
[その他]→[ファイルタイプ別の設定]→[デザイン]での強調表示などの状態によって、値が得られるかどうかが変わります。
●grep
grep文など。
[その他]→[動作環境]→[検索]の「grepダイアログ」「grepの動作」の設定が影響があります。
●エラーメッセージ
例えばファイル開くときなど、もし警告などのエラーが出る場合、メッセージでマクロが止まってしまうことがあります。
[その他]→[動作環境]→[ファイル]→[エンコード2]にある、警告のオプション等がONになっていると警告が出ることがあります。
disableerrormsgで警告を出さないようにできます。