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


-- 
<https://forum.pspad.com/read.php?2,79532,79532>
PSPad freeware editor https://www.pspad.com

Odpovedet emailem