ここでは、Visual Stuido .NET 2003 との連携の例を紹介します。
次のマクロ "SaveEx()" は、バックアップを取ってから上書き保存をするマクロです。
"上書き保存" の代わりに使用すれば、頻繁にバックアップを取る事ができるでしょう。
なお、勝手にBackupというフォルダを作成するので注意してさい。
Sub SaveEx()
If Not DTE.ActiveDocument Is Nothing Then
SaveEx_As(DTE.ActiveDocument)
End If
End Sub
Private Sub SaveEx_As(ByRef doc As Document)
If doc.Saved Then Return
Dim srcTitle As String = doc.Name
Dim srcPath As String = doc.FullName
Dim pathExt As String = Path.GetExtension(srcTitle)
Dim destDir As String = Path.Combine(doc.Path, "Backup")
Dim destTitle As String = Path.GetFileNameWithoutExtension(srcTitle) + "_" + Format(Now(), "yyyy_MMdd_HHmmss")
Dim destPath As String = Path.Combine(destDir, destTitle) + pathExt
If Directory.Exists(destDir) = False Then
Directory.CreateDirectory(destDir)
Else
Dim n As Integer = 0
While File.Exists(destPath)
destPath = Path.Combine(destDir, destTitle + "_" & n & pathExt)
n = n + 1
End While
End If
If File.Exists(srcPath) Then
File.Move(srcPath, destPath)
End If
If doc.Save(srcPath) = vsSaveStatus.vsSaveCancelled Then
File.Move(destPath, srcPath)
End If
End Sub
次のマクロ "ShowDiff()" は先ほど紹介した "SaveEx()" マクロで作成したバックアップと Subversion リポジトリのファイルを閲覧するマクロです。
このマクロを使用すれば、今までどんな編集を加えてきたがわかりやすく表示されます。
なお、
ps.StartInfo.FileName = "C:\Applications\ris\Rekisa\Rekisa.exe"
の部分は、各自でRekisaのパスに書き換えておいてください。
Sub ShowDiff()
If DTE.ActiveDocument Is Nothing Then Return
Dim ps As System.Diagnostics.Process = New System.Diagnostics.Process
Dim filePattern As String
Dim doc As TextDocument = DTE.ActiveDocument.Object
filePattern = "-ViewCount=3 -Sort=ModifyTime_Reverse -Encoding=Auto:Japanese "
' 開いているファイル
filePattern += """" + DTE.ActiveDocument.FullName + """ "
filePattern += """-ActiveFile=" + DTE.ActiveDocument.FullName + """ "
filePattern += "-Y+1=" + doc.Selection.TopPoint.Line.ToString + " "
filePattern += "-X+1=" + doc.Selection.TopPoint.VirtualCharOffset.ToString() + " "
' バックアップファイル
filePattern += """" + Path.GetDirectoryName(DTE.ActiveDocument.FullName)
filePattern += "\?Backup/?"
' Subversion リポジトリ
filePattern += Path.GetFileNameWithoutExtension(DTE.ActiveDocument.Name) _
+ "_.*\" + Path.GetExtension(DTE.ActiveDocument.Name) + """ "
filePattern += """Subversion:" + DTE.ActiveDocument.FullName + "[0:BASE]"""
ps.StartInfo.FileName = "C:\Applications\ris\Rekisa\Rekisa.exe"
ps.StartInfo.Arguments = filePattern
ps.Start()
End Sub