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 - 2026 Jan Fiala, Hosted by Webhosting TOJEONO.CZ, design by WebDesign PAY & SOFT, code Petr Dvořák, Privacy policy and GDPR