マクロの設定依存性について(Ver9.52対応版)
目次−
マクロの設定依存性について
マクロとは、繰り返し行う複数の操作(手順)を記録・登録し、ボタン一つで自動実行させる機能のことです。
マクロのテキストで記述することができますが、いわゆるスクリプトによるプログラミングとは始まりが違います。
ある記述されたマクロは、すべての状況で同じ結果ももたらすことを保証するものではありません。
マクロは動作環境やファイルタイプ別の設定によって挙動が変わることがあります。
例えば他の人にマクロを渡したりする場合は、設定に依存性が無いか十分な注意が必要です。
以下は依存が起きやすい設定と文の一覧です。
- 開いたときのエンコーディング解釈
-
openfile等でファイルを開いた後。
[その他]→[動作環境]→[ファイル]→[エンコード1]の自動認識の方法によって、正しくファイルを解釈できるかどうかが変わってきます。
openfile文のパラメータでエンコードの種類を明示的に指定して開くことができます。
setcompatiblemodeで依存性を無くすことができます。
[その他]→[動作環境]→[ファイル]→[排他制御]→[秀丸エディタで同じファイルを開く場合]の設定によって、既にファイルが開かれている場合の挙動が変わってきます。
- 開いたときのカーソル位置
-
openfile等でファイルを開いた後。
[その他]→[ファイルタイプ別の設定]→[体裁]→[詳細]→[カーソル位置の自動復元]がONになっていると、ファイルの先頭ではないことがあります。
ファイルを開いた後、gofiletopを使って先頭に持ってくることができます。
- 検索での表示
-
searchdown,finddown等で検索後。
[その他]→[動作環境]→[検索]→[検索での表示]の状態によって、検索後に点滅表示になるか、範囲選択になるかの違いがあります。
setcompatiblemodeを指定して、依存性を無くすことができます。
- 検索条件
-
searchdown,finddown等で検索後。
マクロ内でsearchdown等を使うと、検索ダイアログボックスを呼び出した時の検索条件(大文字/小文字の区別、正規表現のON/OFF状態など)が変わります。
setcompatiblemode 0x20000;をマクロの先頭付近で実行して、マクロ終了後に検索条件をモドス方法があります。
- 貼り付け後のカーソル位置
-
paste, poppaste, refpaste文。
[その他]→[動作環境]→[編集]→[貼り付け後のカーソル位置]の状態によって、貼り付け後のカーソル位置が変わってきます。
setcompatiblemodeを指定して、依存性を無くすことができます。
レジストリを読み込んで動作環境の状態を知ることができます。
(例)
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
#f = getregnum("PasteCursorFix");
closereg;
- 折り返し
-
x,y,moveto等を使った座標(ワープロ的)で考えられたマクロは、折り返しがあると計算がずれることが考えられます。
column,lineno,movetolineno等を使ったカラムと行(エディタ的)で考えたほうがいい場合があります。
ワープロ的な数え方をエディタ的な数え方で代替する文の例:
- 座標を表す x, y は、桁と行の column, lineno で考えたほうがいい。
- 座標でのカーソル移動の moveto は、桁と行の movetolineno にしたほうがいい。(または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で相互に変換ができます。
さらに、桁と行は、秀丸独自の単位のため、Unicode単位で考えたほうがいい場合があります。
参照:文字の単位
- プロポーショナルフォント
-
上記「折り返し」と同様、ワープロ的な計算をしたマクロではずれることが考えられます。
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で警告を出さないようにできます。