You are here: PSPad forum > English discussion forum > 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
Editor PSPad - freeware editor, © 2001 - 2026 Jan Fiala, Hosted by Webhosting TOJEONO.CZ, design by WebDesign PAY & SOFT, code Petr Dvořák, Privacy policy and GDPR