EmEditorみんなでまとめサイト

選択した文字列を別タブ末尾に追記するマクロ

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集

概要

タイトルのとおり選択したテキストを、今開いているタブに追記できます。 ちなみに改行コードの判定処理が面倒なので、クリップボード経由で貼り付けてます。

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
ウィキ募集バナー