Skip to content

Instantly share code, notes, and snippets.

@honda0510
Created February 24, 2011 05:36
Show Gist options
  • Save honda0510/841815 to your computer and use it in GitHub Desktop.
Save honda0510/841815 to your computer and use it in GitHub Desktop.
【EmEditor,マクロ】「名前を付けて複数のワークスペースを管理するマクロ」 My Macrosフォルダ版http://jp.emeditor.com/modules/newbb/viewtopic.php?topic_id=1550&forum=19
' FileSytemObjectを生成
Set fso = CreateObject("Scripting.FileSystemObject")
' ログインユーザー名を取得
Set wshNetwork = CreateObject("WScript.Network")
userName = wshNetwork.UserName
' ワークスペースファイルがあるフォルダ
wsPath = "C:\Documents and Settings\" & userName & "\Local Settings\Application Data\Emurasoft\EmEditor\Workspace\"
' ワークスペースとして認識されるファイル名
wsNameDefault = "LastData.bin"
' 名前付きワークスペースの名前一覧を取得
Set wsFolder = fso.GetFolder(wsPath)
Set wsFiles = wsFolder.Files
i = -1
workspaces = array()
For Each wsFile in wsFiles
If wsFile.Name <> wsNameDefault Then
i = i + 1
Redim Preserve workspaces(i)
workspaces(i) = wsFile.Name
End If
Next
' 名前付きワークスペースの数を取得
numWorkspaces = i + 1
' メニューを作成
Set menu = CreatePopupMenu
menu.Add "ワークスペースを保存(&S)", 1
menu.Add "名前を付けてワークスペースを保存(&A)", 2
menu.Add "", 0, eeMenuSeparator
' 復元メニュー項目を追加
menu.Add "ワークスペースを復元(&R)", 3
If numWorkspaces > 0 Then
For i = LBound(workspaces) To UBound(workspaces)
If i < 9 Then
label = "&" & CStr(i + 1) & " "
ElseIf i = 9 Then
label = "&0 "
Else
label = ""
End If
menu.Add label & "'" & workspaces(i) & "' を復元", i + 5
Next
' 削除メニュー項目を追加
Set delmenu = CreatePopupMenu
For i = LBound(workspaces) To UBound(workspaces)
delmenu.Add "'" & workspaces(i) & "' を削除", i + 5 + numWorkspaces
Next
menu.Add "", 0, eeMenuSeparator
menu.AddPopup "ワークスペースを削除", delmenu
menu.Add "すべての名前付きワークスペースを削除(&D)", 4
End If
' メニューを表示してユーザーに選んでもらう
result = menu.Track(eePosMouse)
Select Case result
Case 0 ' 未選択
Case 1 ' ワークスペースを保存
editor.ExecuteCommandByID 4330
Case 2 ' 名前を付けてワークスペースを保存(&A)
' デフォルトのワークスペース名を作成
wsNameNew = document.Name
If (wsNameNew <> "") And (editor.Documents.Count > 1) Then
wsNameNew = document.Name & " など " & CStr(editor.Documents.Count) & "ファイル"
End If
If wsNameNew = "" Then
wsNameNew = clipboardData.getData("Text")
End If
If wsNameNew = "" Then
wsNameNew = "新規ワークスペース"
End If
' ファイルを開くダイアログを表示し、ワークスペース名を指定してもらう
Set objDialog = CreateObject("UserAccounts.CommonDialog")
objDialog.Filter = "すべてのファイル (*.*)|*.*"
objDialog.InitialDir = wsPath
objDialog.FileName = wsNameNew
If objDialog.ShowOpen Then
wsNameNew = fso.GetFileName(objDialog.FileName)
ok = True
' 同じ名前のワークスペースが存在するかどうか確認
If numWorkSpaces > 0 Then
For i = LBound(workspaces) To UBound(workspaces)
' 同じ名前のワークスペースが存在するので上書きしてよいか確認
If workspaces(i) = wsNameNew Then
ok = Confirm("ワークスペース '" & wsNameNew & "' を上書きしますか?")
Exit For
End If
Next
End If
If ok = True Then
' 現在のワークスペースを保存
editor.ExecuteCommandByID 4330
' ワークスペースファイルに名前をつけてコピー
fso.CopyFile wsPath & wsNameDefault, wsPath & wsNameNew
End If
End If
Case 3 ' ワークスペースを復元
editor.ExecuteCommandByID 4329
Case 4 ' すべての名前付きワークスペースを削除
If Confirm("すべての名前付きワークスペースを削除します。よろしいですか?") Then
' すべての名前付きワークスペースファイルを削除
For i = LBound(workspaces) To UBound(workspaces)
fso.DeleteFile wsPath & workspaces(i)
Next
End If
Case Else
If result < (numWorkspaces + 5) Then
' 選択されたワークスペースを復元
wsNameSelected = workspaces(result - 5)
' 選択されたワークスペースファイルを、デフォルトのワークスペースファイルに上書き
fso.CopyFile wsPath & wsNameSelected, wsPath & wsNameDefault
' EmEditorのワークスペースを復元
editor.ExecuteCommandByID 4329
Else
' 選択された名前付きワークスペースを削除
wsNameSelected = workspaces(result - numWorkspaces - 5)
If Confirm("ワークスペース '" & wsNameSelected & "' を削除します。よろしいですか?") Then
' 選択された名前付きワークスペースファイルを削除
fso.DeleteFile wsPath & wsNameSelected
End If
End If
End Select
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment