概要
タイトルのとおり選択したテキストを、今開いているタブに追記できます。 ちなみに改行コードの判定処理が面倒なので、クリップボード経由で貼り付けてます。
Visual Basic なので拡張子 .vbee で保存する必要があります。
コード
Option Explicit
' ポップアップメニュー使用有無(0:未使用[自動で右のタブに追記]、1:使用)
Const POP_FLG = 1
' ポップアップに表示するタブ数の最大値(0で無効)
Const TAB_MAX = 24
' ポップアップに表示する新規ファイルタブの名称(無題)
Const NEW_TAB = "無題"
' 追記後に元のタブに戻るか(0:戻らない、1:戻る)
Const BAK_FLG = 0
Dim docs, doc, cdoc, i
Set docs = editor.Documents
If Len(document.selection.Text) = 0 Then Quit
If POP_FLG Then
i = PopupMenu()
Else
i = GetRightTabId()
End If
If i = 0 Then Quit
' 改行コードを追記側のタブに合わせるためクリップボードを使用
document.selection.Copy eeCopyUnicode
If BAK_FLG Then Set cdoc = document
If i = -1 Then
editor.NewFile()
Set doc = document
Else
Set doc = docs.Item(i + 0)
doc.Activate
End If
With doc.selection
.EndOfDocument
' 文末が行頭で終わっていない場合は改行を挿入
If Not .GetActivePointX(eePosLogicalA) = 1 Then
doc.writeln vbNullString
End If
.Paste eeCopyUnicode
' コピー元が改行で終わっていない場合は末尾に改行を挿入
Dim clp: clp = Right(clipboardData.getData("text"), 1)
If Not clp = vbCr And Not clp = vbLf Then
doc.writeln vbNullString
' オートインデントを削除
If Not .GetActivePointX(eePosLogicalA) = 1 Then
.SelectLine
.Delete
End If
End If
'doc.writeln vbNullString
End With
Set doc = Nothing: Set docs = Nothing
If BAK_FLG Then
cdoc.Activate
Set cdoc = Nothing
End If
' --------------------------------------------------
' ポップアップメニューで追記するタブを選択する関数
' --------------------------------------------------
Function PopupMenu ()
Dim menu, ItemText, flags
Set menu = CreatePopupMenu
menu.Add "追記するタブを選んでください。", 0, eeMenuGrayed
menu.Add vbNullString, 0, eeMenuSeparator
For i = 1 To docs.Count
' ポップアップ最大表示数判定
If i > TAB_MAX And Not TAB_MAX = 0 Then
Alert "タブ数が" & TAB_MAX & "個を超えています。" & vbLf & TAB_MAX + 1 & "個以降右のタブは省略しました。"
Exit For
End If
' 新規ファイル判定(未保存ファイルは名前が存在しない)
If Len(docs.Item(i + 0).Name) > 0 Then
ItemText = docs.Item(i + 0).Name
Else
ItemText = NEW_TAB
End If
' 更新フラグ判定(末尾の*付与)
If Not docs.Item(i + 0).Saved Then
ItemText = ItemText & " *"
End If
' ポップアップは10個まで頭文字に数字を付与(11個目以降とは区切る)
If i < 11 Then
ItemText = Right(i, 1) & " " & ItemText
ElseIf i = 11 Then
menu.Add vbNullString, 0, eeMenuSeparator
End If
' 今開いているタブは無効化して表示
If docs.Item(i + 0) Is document Then
flags = eeMenuGrayed
Else
flags = 0
End If
menu.Add ItemText, i, flags
Next
menu.Add vbNullString, 0, eeMenuSeparator
menu.Add " 新規作成", -1
PopupMenu = menu.Track(1)
Set menu = Nothing
End Function
' --------------------------
' 右のタブIDを取得する関数
' --------------------------
Function GetRightTabId()
GetRightTabId = -1
For i = 1 To docs.Count - 1
If docs.Item(i + 0) Is document Then
GetRightTabId = (i + 1)
Exit Function
End If
Next
End Function