QXエディタで括弧挿入マクロを…

いろいろな方のいろいろな作品が公開されているのだが、ここは一発、自分で作ってみた。このマクロでは、括弧だけではなく、HTMLのタグなども登録できる。起動すると、ポップアップメニューに候補が表示されるので、カーソルキーで選ぶ。文字列選択状態ならその前後を囲むように配置され、選択なし状態なら、囲み文字だけが挿入される。なお、箱型選択および行選択状態では、無視して終了する。
囲み文字は、外部テキストファイルで登録するようにした。
また、マクロ中で、ファイル自体を選び分けることができるように拡張できる。ここはまだまだ拡張叶だが、とりあえず、拡張子で判断するサンプルコードを仕込んだ。
例えば、HTMLなら、タグを選択できて、普通のテキストなら、「」や【】を選択できる、といったような。


'--------------------------------------------------------------------
' 括弧挿入マクロ
' データファイルは、_MyData\YBraces\xxx.txt ←ここはあなたのPCに合わせて換えよう
' フォーマットは、こんな感じ
' 開始文字列,終了文字列 注釈
' ↑カンマ ↑タブ
'--------------------------------------------------------------------
Proc YBraces
If @hwnd = 0 Then Exit Sub ' 文書編集中でなければ抜ける(お約束)

If ( @Select <> 1 and @Select <> 2 ) Then ' 文字列選択中(1,2)でなければ抜ける。「行選択状態」ではうまく動かないのでこれも抜ける。
Exit Sub
End If

@Redraw = 0 ' 画面を表示しないモードにする
@UndoBlock = 1 ' 以降の変更を1度の Undo にまとめる

' 拡張子から選択肢ファイルを変更可能にする
' デフォルトはYBraces_Default.txt
Dim Ext$
Ext$ = UCase$(ExtName$(@Filename$))
Dim DataFile$
DataFile$ = @@QxDirectory$ + "\_MyData\YBraces\" + "YBraces_Default.txt"
' ★ 拡張はここにどうぞ
If ( Ext$ = "PL" ) or ( Ext$ = "PM" ) Then
'ごめんまだ何も書いてないんだけど、あなたの創意工夫で活用を。
Else
'同上。ここで、DataFile$に異なるファイル名をセットするようにすれば、
'「拡張子によって、違う選択肢を表示する」というのが簡単に
'実現できるわけです。
End If

Dim SelPair$ ' 選択された文字列
SelPair$ = PopupMenuF$( DataFile$ )
If Len(SelPair$) > 0 Then
Dim s$, e$ ' 囲み開始文字列、囲み終了文字列
Dim comma, tab ' カンマ位置、タブ位置
comma = InStr( 1, SelPair$, "," )
tab = InStr( comma, SelPair$, "," )

s$ = Mid$( SelPair$, 1, comma-1 )
e$ = Mid$( SelPair$, comma+1, tab )
If @Select = 0 Then
@InsertF s$ + e$
Else
If Len(SelPair$) > 0 Then
@BlockCut
@InsertF s$
@BlockPaste
@InsertF e$
End If
End If
End If

@UndoBlock = 0 ' Undoのまとめモードを解除する
@Redraw = 1 ' 画面を表示するモードに戻す
End Proc