Sukemaru (トーク | 投稿記録)
編集の要約なし
Sukemaru (トーク | 投稿記録)
編集の要約なし
2行目: 2行目:
__toc__
__toc__
<br><br>
<br><br>
= [[マクロライブラリ]]に投稿したマクロ =
= マクロライブラリに投稿したマクロ =


== 「テキスト操作補助」 カテゴリ ==
== 「テキスト操作補助」 カテゴリ ==
368行目: 368行目:
== リンク集 ==
== リンク集 ==
<br>
<br>
; [[メインページ|MeryWiki]] / [https://www.haijin-boys.com/ Haijin Boys Online] 内
'''[[メインページ|MeryWiki]] / [https://www.haijin-boys.com/ Haijin Boys Online]''' 内
* [[マクロライブラリ#その他|マクロライブラリ]] にある ks 氏らの「[[マクロ覚え書き(開発者向け)|マクロ覚え書き]]」
* [[マクロライブラリ#その他|マクロライブラリ]] にある ks 氏らの「[[マクロ覚え書き(開発者向け)|マクロ覚え書き]]」
* 黄身氏の「[[利用者:黄身#覚え書き|覚え書き]]」<br>
* 黄身氏の「[[利用者:黄身#覚え書き|覚え書き]]」<br>
399行目: 399行目:


== イベントマクロ ==
== イベントマクロ ==
※ [[ヘルプ:マクロ#カスタマイズ|イベントマクロ]] であっても、ショートカットキーなどで任意のタイミングに強制的に実行できる。
; [[ヘルプ:マクロ#カスタマイズ|イベントマクロ]] を実行できる "イベント" の種類
<br><br>
; イベントマクロを実行できる "イベント" の種類
: <b style="color:#c00;">赤字</b> は遅延時間を設定できるイベント
: <b style="color:#c00;">赤字</b> は遅延時間を設定できるイベント
{|class="wikitable"
{|class="wikitable"
!フォーカスを受け取った時
!フォーカスを受け取った時
| エディタのウインドウがアクティブになったとき。<br> ・「オプション」 などモーダルなダイアログからの復帰時には発動しない
| エディタのウインドウがアクティブになったとき。<br> ・「オプション」 などモーダルなダイアログからの復帰時には発動しない<br> ・Editor.ActiveDocument == Document
|-
|-
!フォーカスを失った時
!フォーカスを失った時
| エディタのウインドウがアクティブでなくなったとき。<br> ・「検索」 「置換」 ダイアログを開いたときにも発動する…
| エディタのウインドウがアクティブでなくなったとき。<br> ・「検索」 「置換」 ダイアログを開いたときにも発動する…<br> ・Editor.ActiveDocument != Document
|-
|-
!ファイルを開いた時
!ファイルを開いた時
| 複数ファイルをまとめて開いたときは、すべて開いたあとに1回だけ。 <br> ・"ファイル(タブ)を開くマクロ" で開いたときには発動しない <br> ・複数ファイルをまとめて開いたときには、さいごのタブにしか作用しない <br> (ループ処理コードなどですべてのタブに適用させることはできる)
| 複数ファイルをまとめて開いたときは、すべて開いたあとに1回だけ。<br> ・複数ファイルをまとめて開いたときには、さいごのタブにしか作用しない
|-
|-
!ファイルを保存した時
!ファイルを保存した時
420行目: 418行目:
|-
|-
!<span style="color:#c00;">カーソルが移動した時</span>
!<span style="color:#c00;">カーソルが移動した時</span>
| キャレット位置が動いたとき。<br> ・遅延を大きく設定しないとジャマ
| キャレット位置が動いたとき。<br> ・<span style="color:#c00;">'''遅延''' を大きく設定しないと、すごくジャマ</span>
|-
|-
!<span style="color:#c00;">スクロールした時</span>
!<span style="color:#c00;">スクロールした時</span>
| エディタウインドウをスクロールしたとき。<br> ・スクロールバーのドラッグや <br> マウスホイール / PgUp / PgDn キーでスクロールさせたとき <br> ・文字入力中や、矢印キーなどでのキャレット移動にともなうスクロールでは発動しない
| エディタウインドウをスクロールしたとき。<br> ・マウスホイール操作やスクロールバーの操作、<br> PgUp / PgDn / Home / End キーなどでスクロールさせたとき <br> ・文字入力中や、矢印キーなどでのキャレット移動にともなうスクロールでは発動しない
|-
|-
!<span style="color:#c00;">選択範囲が変更された時</span>
!<span style="color:#c00;">選択範囲が変更された時</span>
| 範囲選択したときと、選択範囲を解除したとき。
| 範囲選択したときと、選択範囲を解除したとき。<br> ・<span style="color:#c00;">'''遅延''' を大きく設定しないと、ドラッグ操作や Shift+矢印キーで範囲選択するときにジャマ</span>
|-
|-
!<span style="color:#c00;">テキストが変更された時</span>
!<span style="color:#c00;">テキストが変更された時</span>
| 入力・削除・置換などの編集操作をしたとき。<br> ・遅延を大きく設定しないとジャマ
| 入力・削除・置換などの編集操作をしたとき。<br> ・<span style="color:#c00;">'''遅延''' を大きく設定しないと、すごくジャマ</span>
|-
|-
!<span style="color:#c00;">文字が挿入された時</span>
!<span style="color:#c00;">文字が挿入された時</span>
| 文字数が増えたとき?<br> ・選択範囲文字列の [ Ctrl+ドラッグ ] による複製や、 <br> クリップボードからのペースト、<br> マクロの <span style="color:#0000c0;">Document.Write( "hoge" )</span> や <br> <span style="color:#0000c0;">Document.Selection.Text = "hoge"</span> では発動しないようだった <br> ・遅延を大きく設定しないとジャマ
| 文字数が増えたとき?<br> ・選択範囲文字列の [ Ctrl+ドラッグ ] による複製や、 <br> クリップボードからのペースト、<br> マクロの <span style="color:#0000c0;">Document.Write( "hoge" )</span> や <br> <span style="color:#0000c0;">Document.Selection.Text = "hoge"</span> では発動しないようだった <br> ・<span style="color:#c00;">'''遅延''' を大きく設定しないと、すごくジャマ</span>
|-
|-
!編集モードが変更された時
!編集モードが変更された時
438行目: 436行目:
|-
|-
!アクティブな文書が変更された時
!アクティブな文書が変更された時
| ほかのタブをアクティブにしたときに発動。<br> ・タブを閉じた後や、新規タブを開いたときにも
| 別のタブをアクティブにした後に発動。<br> ・タブを閉じた後や、新規タブを開いたときにも
|-
|-
!文書を閉じた時
!文書を閉じた時
| 複数のタブをまとめて閉じたときは、すべて閉じたあとに1回だけ。<br> ・"タブを閉じるマクロ"  で閉じたときには発動しない <br> ・最後のタブが閉じてエディタウインドウが終了する場合も発動しない
| 複数のタブをまとめて閉じたときは、すべて閉じたあとに1回だけ。<br> ・最後のタブが閉じてエディタウインドウが終了する場合は発動しない
|-
|-
!タブを移動した時
!タブを移動した時
| タブをドラッグ&ドロップで動かしたとき。<br> ・左側のタブを閉じて右側のタブが動いた場合には発動しない
| タブをドラッグ&ドロップ操作で動かしたとき。<br> ・左側のタブを閉じて右側のタブが動いた場合には発動しない
|-
|-
!アイドル状態になった時
!アイドル状態になった時
452行目: 450行目:
|ファイルを保存する前。
|ファイルを保存する前。
|}
|}
 
<br>
: ※ sukemaru の Mery では、「[[バイト数#バイト数と文字数・行数|バイト数]]」マクロと「[[検索ヒット数表示(選択文字列)#機能強化バージョン|文字数・行数・ヒット件数(選択文字列)]]」マクロの機能を統合したマクロに「ファイルを開いた時」「'''選択範囲が変更された時'''」「'''テキストが変更された時'''」「'''文字が挿入された時'''」「アクティブな文書が変更された時」イベントを設定している('''太字''' のイベントには遅延時間を 1 秒に設定。 ロースペックな PC ゆえ、一定以上の長さのファイル/タブにおいては機能を制限してある)。<br> 遅延時間が短すぎると、"文字列や選択範囲を変更するような他のマクロの実行後に、そのマクロからのステータスメッセージが読めなくなるから"、という意味もある。
: ※ イベントマクロ であっても、ショートカットキーなどで任意のタイミングに強制的に実行できる。
: ※ また、「[[編集モードの自動選択#sukemaru 版2(include版)|編集モードの自動選択 (include版)]]」マクロを「ファイルを開いた時」「文書を閉じた時」イベントに、[[編集モードの自動選択#サブマクロ|補助マクロ]] を「ファイルを保存した時」イベントに設定して、按配よく運用できている。
: ※ イベントマクロでない「マクロA」のコードでファイルを 開く または 閉じる をおこない、それ以降にも「マクロA」のコードが続いている場合は、ファイルを開いた時/閉じた時の「イベントマクロB」は発動しないことがある。
<br>
* sukemaru の Mery では、「[[バイト数#バイト数と文字数・行数|バイト数]]」マクロと「[[検索ヒット数表示(選択文字列)#機能強化バージョン|文字数・行数・ヒット件数(選択文字列)]]」マクロの機能を統合したマクロに「ファイルを開いた時」「'''選択範囲が変更された時'''」「'''テキストが変更された時'''」「'''文字が挿入された時'''」「アクティブな文書が変更された時」イベントを設定している('''太字''' のイベントには遅延時間を 1 秒に設定。 ロースペックな PC ゆえ、一定以上の長さのファイル/タブにおいては機能を制限してある)。<br> 遅延時間が短すぎると、"文字列や選択範囲を変更するような他のマクロの実行後に、そのマクロからのステータスメッセージが読めなくなるから"、という意味もある。
* また、「[[編集モードの自動選択#sukemaru 版2(include版)|編集モードの自動選択 (include版)]]」マクロを「ファイルを開いた時」「文書を閉じた時」イベントに、[[編集モードの自動選択#サブマクロ|補助マクロ]] を「ファイルを保存した時」イベントに設定して、それなりに按配よく運用できている。<br> ([[includeライブラリ|include ライブラリ]] を利用して、複数のファイルを開いたときにも、それぞれのタブにたいして編集モードの変更や書き換え禁止を適用できるようにしてある)
<br><br>
<br><br>
[[#TOP|>> 目次へ]]
[[#TOP|>> 目次へ]]
516行目: 517行目:
</source>
</source>
<source lang="javascript">
<source lang="javascript">
/* 10行ごとに「キャンセル」項目を挿入し、スペースキーでスクロール可能にする */
/* 10 行ごとに「キャンセル」項目を挿入し、スペースキーでスクロール可能にする */


var arr = document.Text.split( "\n" );
var arr = document.Text.split( "\n" );
578行目: 579行目:




// ➀ アクセラレータつきの番号を付加
// 文字列の先頭に行番号(連番)を付加する
menuKey = "&" + y + ": " + menuKey;
 
// パターン➀: アクセラレータつきの番号(左端揃え)を付加
var num = "&" + y;
menuKey = num + ": " + menuKey;


// ➁ 番号の 末尾1桁 をアクセラレータにするなら
// パターン➁: 番号(左端揃え)の 末尾1桁 をアクセラレータにするなら
menuKey = String( y ).replace( /\d$/, "&" + "$&" ) + ": " + menuKey;
var num = String( y ).replace( /\d$/, "&$&" );
menuKey = num + ": " + menuKey;


// ➂ 連番が多い場合は「番号を空白文字でケタ埋め (右端揃え)」する処理も追加するとよい
// パターン➂: 連番が多いときは「空白文字でケタ埋め (右端揃え)」するとよい
// 例: EN SPACE「 」(U+2002) でケタ埋めして、末尾1桁 をアクセラレータにする
// 例: EN SPACE「 」(U+2002) でケタ埋めして、末尾1桁 をアクセラレータにする
var numWidth = String( d.GetLines( 0 ) ).length;
var numWidth = String( d.GetLines( 0 ) ).length;
591行目: 596行目:
</source>
</source>
: ※ このコードでは色々と unicode 文字を使用しているので、マクロの JS ファイルは UTF-8 などの形式で保存しなければならない。
: ※ このコードでは色々と unicode 文字を使用しているので、マクロの JS ファイルは UTF-8 などの形式で保存しなければならない。
 
<!--
: ※ Mery のダイアログのフォントは Mery.ini の「[[よくある質問#ダイアログのフォントを変更したい|隠しオプション]]」により任意のフォントに変更可なので、個人的にしか使わない非公開マクロであれば、ラベルの整形についてはあまり気にする必要はないかも。
: ※ Mery のダイアログのフォントは Mery.ini の「[[よくある質問#ダイアログのフォントを変更したい|隠しオプション]]」により任意のフォントに変更できるらしいので、個人的にしか使わない非公開マクロであれば、ラベルの整形についてはあまり気にする必要はないかも。
→ ポップアップメニューにはカスタムフォントは適用されない -->
<br>
<br>
* また、「[[#マクロライブラリに投稿したマクロ|マクロライブラリに投稿したマクロ]]」の節の画像リンク(サムネイル)のように、タブインデントや連番のケタ埋め、サブメニューの活用などの工夫で、ポップアップメニューの体裁はある程度自分好みにカスタマイズできる。
* また、「[[#マクロライブラリに投稿したマクロ|マクロライブラリに投稿したマクロ]]」の節の画像リンク(サムネイル)のように、タブインデントや連番のケタ埋め、サブメニューの活用などの工夫で、ポップアップメニューの体裁はある程度自分好みにカスタマイズできる。
598行目: 604行目:


=== ステータスバーの表示 ===
=== ステータスバーの表示 ===
ポップアップメニューの表示時にステータスバーに任意の文字列を表示する場合は、 [[マクロリファレンス:PopupMenu インターフェイス#Track メソッド|PopupMenu.Track()]] の行の直前に ''[[マクロリファレンス:Window インターフェイス#Status プロパティ|Status]] = "hoge";'' を記述する。<br>
ポップアップメニュー表示のさいにステータスバーに任意の文字列を表示する場合は、 [[マクロリファレンス:PopupMenu インターフェイス#Track メソッド|PopupMenu.Track()]] の行の直前に ''[[マクロリファレンス:Window インターフェイス#Status プロパティ|Status]] = "hoge";'' を記述する。<br>
※ PopupMenu.Track() が発動した時点でエディタウインドウ本体は停止するので、直後に Status = "hoge"; を記述しても、ポップアップメニューの項目を選択するかメニューをキャンセルするまで表示されない。
※ PopupMenu.Track() が発動した時点でエディタウインドウ本体は停止するので、直後に Status = "hoge"; を記述しても、ポップアップメニューの項目を選択するかメニューをキャンセルするまで表示されない。


662行目: 668行目:


=== サブメニュー ===
=== サブメニュー ===
* 配列やオブジェクトからポップアップメニューを生成するさいにサブメニューを利用する場合、あらかじめサブメニューのラベルや各要素の振り分け方が決まっていれば難しいことはないが、要素が不定数の配列やオブジェクトをサブメニューに振り分けるのは簡単ではない。
サブメニューを組みこむ場合、通常はそれぞれの PopupMenu オブジェクトをあらかじめ宣言するものだが、[[マクロリファレンス:PopupMenu インターフェイス#AddPopup メソッド|PopupMenu.AddPopup() メソッド]] 内の第二引数で定義することもできる。
 
<source lang="javascript">
var mainMenu = CreatePopupMenu();
mainMenu.Add( "アイテム1", 1 );
mainMenu.AddPopup( "サブメニュー1", subMenu1 = CreatePopupMenu() );
  subMenu1.Add( "アイテム2", 2 );
  subMenu1.AddPopup( "サブメニュー2", subMenu2 = CreatePopupMenu() );
    subMenu2.Add( "アイテム3", 3 );
 
var r = mainMenu.Track( 0 );
Alert( ret > 0 ? mainMenu.GetText( r ) : "キャンセル" );
</source>
<br>
* 配列やオブジェクトからポップアップメニューの生成をするときにサブメニューを利用する場合、あらかじめサブメニューのラベルや各要素の振り分け方が決まっていれば難しいことはないが、<span style="color:#c00;">要素が不定数の配列やオブジェクトをサブメニューに振り分けるのは簡単ではない。</span>


: 「[[階層化マクロメニュー]]」マクロなどのソースコードを参考にしてコードを組むか、'''組み込み関数'''「[[ポップアップメニューを「n*十件ずつ」のサブメニューに自動分割する]]」で一定数ごとにサブメニュー項目を自動生成して要素を放り込むしかない…。
: → 「[[階層化マクロメニュー]]」マクロなどのソースコードを参考にしてコードを組むか、'''組み込み関数'''「[[ポップアップメニューを「n*十件ずつ」のサブメニューに自動分割する]]」で一定数ごとにサブメニュー項目を自動生成して要素を放り込むしかない…。
<br>
<br>
* [[マクロリファレンス:PopupMenu インターフェイス#AddPopup メソッド|PopupMenu.AddPopup() メソッド]] では [[マクロリファレンス:PopupMenu インターフェイス#Add メソッド|Add() メソッド]] の第三引数(''meMenuChecked, meMenuGrayed, meMenuSeparator'')は使用できない。
* [[マクロリファレンス:PopupMenu インターフェイス#AddPopup メソッド|PopupMenu.AddPopup() メソッド]] では [[マクロリファレンス:PopupMenu インターフェイス#Add メソッド|Add() メソッド]] の第三引数(''meMenuChecked, meMenuGrayed, meMenuSeparator'')は使用できない。
: サブメニュー内のすべてのアイテムが無効(グレーアウト)になる条件でも、サブメニュー見出しを無効化することはできないので、サブメニュー見出しが表示されなくなるように ''PopupMenu.AddPopup()'' 周りを [https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#if...else_statement if() 文] で囲うしかない。
: サブメニュー内のすべてのアイテムが無効(グレーアウト)になる条件でも、サブメニュー見出しを無効化することはできないので、サブメニュー見出しが表示されなくなるように ''PopupMenu.AddPopup()'' 周りを [https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#if...else_statement if() 文] で囲うしかない(※ メニューの階層構造が複雑な場合に、ソースコードが見づらくなってしまうが…)。
: 上の「自動分割サブメニュー」の組み込み関数を制作するさい、チェックつきアイテムを含むサブメニュー見出しにもチェックを付けられるようにしたかったが、これも無理だった。
: 上の「自動分割サブメニュー」の組み込み関数を制作するさい、チェックつきアイテムを含むサブメニュー見出しにもチェックを付けられるようにしたかったが、これも無理だった。
<br><br>
 
<source lang="javascript">
// e.g. 編集モードが Text ならサブメニューを表示する
// ※ Text 以外ならグレーアウトさせた "サブメニュー" アイテムを表示
 
var menu1 = CreatePopupMenu();
var menu2 = CreatePopupMenu();
 
if ( document.Mode == "Text" ) {
  menu1.AddPopup( "サブメニュー", menu2 );
    menu2.Add( "アイテム2", 2 );
} else {
  menu1.Add( "サブメニュー", 0, meMenuGrayed );
}
menu1.Add( "アイテム1", 1 );
 
var r = menu1.Track( mePosMouse );
</source>
<br>


=== マクロの動作設定を変更可能にする ===
=== マクロの動作設定を変更可能にする ===
706行目: 744行目:
</source>
</source>
<source lang="javascript">
<source lang="javascript">
// または masme 作成の「コメントマーク付け外し」マクロより
// または masme 氏作成の「コメントマーク付け外し」マクロより
// ※ 左下(行頭位置)から右上に矩形選択した場合も考慮したコード
// ※ 左下(行頭位置)から右上に矩形選択した場合も考慮したコード
var s = document.selection;
var s = document.selection;
1,133行目: 1,171行目:
   var d = setting.dateTime;
   var d = setting.dateTime;
   var str = d.getFullYear() + "/" + ( d.getMonth() + 1 ) + "/" + d.getDate()
   var str = d.getFullYear() + "/" + ( d.getMonth() + 1 ) + "/" + d.getDate()
           + d.toLocaleTimeString() + "\n\n"
           + " " + d.toLocaleTimeString() + "\n\n"
           + setting.count + " 回目!!";
           + ScriptName + " マクロ実行 " + setting.count + " 回目!!";
   Alert( str );
   Alert( str );
}
}
スポンサーリンク