You are here: PSPad forum > English discussion forum > VB script to handle github integration

VB script to handle github integration

#1 VB script to handle github integration

Posted by: peterle | Date: 2025-08-24 13:03 | IP: IP Logged

IOch habe zusammen mit Chatgpt ein VBScript zur integration von Githaub in PSPAD gemacht. Hier zur allgemeienen Verwendung

' GitTools.vbs – Git Push/Pull/Status/Diff direkt aus PSPad
Option Explicit
Dim module_name, fso
Set fso = CreateObject("Scripting.FileSystemObject")
module_name = "PB Git Tools"

' --- Menüeinträge erzeugen ---
Sub Init
Dim menuName
menuName = "&" & module_name

addMenuItem "1. Git Push", menuName, "GitPush", "ALT+F12", "github.ico"
addMenuItem "2. Git Pull", menuName, "GitPull", "ALT+F11", "github.ico"
addMenuItem "3. Git Status", menuName, "GitStatus", "ALT+F10", "github.ico"
addMenuItem "4. Git Diff", menuName, "GitDiff", "ALT+F9", "github.ico"
End Sub

' --- Git Push mit Status-Anzeige ---
Sub GitPush
Dim editor, FileDir, RepoDir, msg, cmd, WshShell, exec, line, rc
Dim statusLines, text

Set editor = NewEditor()
editor.assignActiveEditor()

If editor.FileName = "" Then
MsgBox "Keine Datei geöffnet!", vbExclamation, "Git Tools"
Exit Sub
End If

FileDir = fso.GetParentFolderName(editor.FileName)
RepoDir = FindGitRepo(FileDir)

If RepoDir = "" Then
MsgBox "Kein Git-Repository gefunden!", vbExclamation, "Git Tools"
Exit Sub
End If

' --- Änderungen abfragen ---
Set WshShell = CreateObject("WScript.Shell")
Set exec = WshShell.Exec("cmd /c cd /d """ & RepoDir & """ && git status -s")

statusLines = ""
Do Until exec.StdOut.AtEndOfStream
line = exec.StdOut.ReadLine()
If Trim(line) <> "" Then
statusLines = statusLines & ParseGitStatusLine(line) & vbCrLf
End If
Loop

If statusLines = "" Then
MsgBox "Keine Änderungen gefunden.", vbInformation, "Git Status"
Exit Sub
End If

' --- Änderungen im Editorfenster anzeigen ---
text = "Git-Änderungen im Repository: " & RepoDir & vbCrLf & _
String(60, "-") & vbCrLf & statusLines
ShowInNewEditor text, "Git Status"

' --- Nachfrage ---
rc = MsgBox("Änderungen wurden angezeigt." & vbCrLf & _
"Commit jetzt fortsetzen?", vbYesNo + vbQuestion, "Git Commit")
If rc = vbNo Then Exit Sub

' --- Commit-Text abfragen ---
msg = InputBox("Commit-Text eingeben:", "Git Commit", _
"Update von " & Date & " " & Time)
If msg = "" Then Exit Sub

' --- Git-Befehle ausführen ---
cmd = "git add . && git commit -m """ & msg & """ && git push"
RunGitCommand cmd, RepoDir, "Git Push"
End Sub

' --- Git Pull ---
Sub GitPull
RunGeneric "git pull", "Git Pull"
End Sub

' --- Git Status ---
Sub GitStatus
RunGeneric "git status", "Git Status"
End Sub

' --- Git Diff ---
Sub GitDiff
RunGeneric "git diff", "Git Diff"
End Sub

' --- Hilfsroutine: allgemeiner Aufruf ---
Sub RunGeneric(command, title)
Dim editor, FileDir, RepoDir

Set editor = NewEditor()
editor.assignActiveEditor()

If editor.FileName = "" Then
MsgBox "Keine Datei geöffnet!", vbExclamation, "Git Tools"
Exit Sub
End If

FileDir = fso.GetParentFolderName(editor.FileName)
RepoDir = FindGitRepo(FileDir)

If RepoDir = "" Then
MsgBox "Kein Git-Repository gefunden!", vbExclamation, "Git Tools"
Exit Sub
End If

RunGitCommand command, RepoDir, title
End Sub

' --- Hilfsroutine: Git-Befehl ausführen ---
Sub RunGitCommand(command, repoDir, title)
Dim WshShell, exec, output, line
Set WshShell = CreateObject("WScript.Shell")
Set exec = WshShell.Exec("cmd /c cd /d """ & repoDir & """ && " & command)

output = ""
Do Until exec.StdOut.AtEndOfStream
line = exec.StdOut.ReadLine()
output = output & line & vbCrLf
Loop
Do Until exec.StdErr.AtEndOfStream
line = exec.StdErr.ReadLine()
output = output & line & vbCrLf
Loop

' --- Ausgabe in neuem Editorfenster ---
ShowInNewEditor output, title
End Sub

' --- Hilfsroutine: sucht vom Startverzeichnis nach .git-Ordner ---
Function FindGitRepo(startDir)
Dim currentDir
currentDir = startDir

Do Until currentDir = ""
If fso.FolderExists(currentDir & "\.git") Then
FindGitRepo = currentDir
Exit Function
End If
currentDir = fso.GetParentFolderName(currentDir)
Loop

FindGitRepo = ""
End Function

' --- Hilfsfunktion: Statuszeile schöner machen ---
Function ParseGitStatusLine(line)
Dim code, file, desc

code = Trim(Left(line, 2))
file = Mid(line, 4)

Select Case code
Case "M", "M ", " M"
desc = "Geändert"
Case "??"
desc = "Neu"
Case "A", "A "
desc = "Hinzugefügt"
Case "D", "D ", " D"
desc = "Gelöscht"
Case "R", "R ", " R"
desc = "Umbenannt"
Case "C", "C ", " C"
desc = "Kopiert"
Case "AM"
desc = "Hinzugefügt + geändert"
Case "MM"
desc = "Geändert (Index + Arbeitsverzeichnis)"
Case "UU"
desc = "Konflikt (beide geändert)"
Case Else
desc = "Unbekannt (" & code & ")"
End Select

ParseGitStatusLine = desc & ": " & file
End Function

' --- Hilfsfunktion: Text in neuem PSPad-Fenster anzeigen ---
Sub ShowInNewEditor(text, title)
Dim tempFile, f, ed
tempFile = GetTempName() & ".txt"

' Inhalt in temporäre Datei schreiben
Set f = fso.CreateTextFile(tempFile, True, True)
f.Write text
f.Close

' Datei in PSPad öffnen
Set ed = NewEditor()
ed.OpenFile tempFile
ed.assignActiveEditor()
'ed.setCaption title
End Sub

Function GetTempName()
Dim tempPath
tempPath = fso.GetSpecialFolder(2) ' 2 = TemporaryFolder
GetTempName = fso.BuildPath(tempPath, fso.GetTempName)
End Function

Options: Reply | Quote | Up ^






Editor PSPad - freeware editor, © 2001 - 2025 Jan Fiala, Hosted by Webhosting TOJEONO.CZ, design by WebDesign PAY & SOFT, code Petr Dvořák, Privacy policy and GDPR