Created
February 24, 2011 05:36
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
' 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