Using Windows Explorer as a Git IDE

I have a couple of different stationary computers. A custom-built PC running Windows, an iMac G3 running Mac OS 9 and an old HP microtower running Alpine Linux, acting as a home server of sorts. Out of all these, I spend most of my time on the Windows PC. I use Windows for the majority of my work, including a large part of the programming that I do.

Even though I mainly use Windows, most of my web/software development is grounded in or at least inspired by Unix in some way: most obviously, I use Git, which is a tool designed for the Unix shell. This turns out to be a rather awkward match: on the one hand, I use Windows Explorer to manage the files; on the other hand, I have a command prompt open to manage the repository.

For my workflow, it would be much better if the Git commands were integrated into Explorer itself. So I added what amounts to the following code to my AutoHotKey script:

GroupAdd, Explorer, ahk_class CabinetWClass
GroupAdd, Explorer, ahk_class ExploreWClass

#IfWinActive ahk_group Explorer

!a::Run, % "cmd /c cd "qp()" & git add "qip()" && git status & pause"
!c::Run, % "cmd /c cd "qp()" & git commit & pause"
!+c::Run, % "cmd /c cd "qp()" & git commit --amend & pause"
!f::Run, % "cmd /c cd "qp()" & git diff & pause"
!+f::Run, % "cmd /c cd "qp()" & git diff "qip()" & pause"
!i::Run, % "cmd /c cd "qp()" & git diff HEAD~1 HEAD & pause"
!+i::Run, % "cmd /c cd "qp()" & git diff HEAD~1 HEAD "qip()" & pause"
!l::Run, % "cmd /c cd "qp()" & git log & pause"
!+l::Run, % "cmd /c cd "qp()" & git log "qip()" & pause"
!p::Run, % "cmd /c cd "qp()" & git push & pause"
!r::Run, % "cmd /c cd "qp()" & git reset "qip()" && git status & pause"
!s::Run, % "cmd /c cd "qp()" & git status & pause"

#IfWinActive

Explorer(hwnd := "")
{
ShellApp := ComObjCreate("Shell.Application")
if (hwnd = "")
WinGet, hwnd, id, A
for window in ShellApp.Windows
if (window.hwnd = hwnd)
return window
return -1
}

qp()
{
return """" Explorer().Document.Folder.Self.path """"
}

qip()
{
return """" Explorer().Document.FocusedItem.path """"
}

(The actual code is contained in this file, most of it near the bottom.)

This adds a bunch of hotkeys to any Explorer window:

Alt-A
"git add" the selected file; then "git status"
Alt-C
"git commit"
Alt-Shift-C
"git commit --amend"
Alt-F
"git diff"
Alt-Shift-F
"git diff" the selected file
Alt-I
"git diff", comparing the previous and current commit
Alt-Shift-I
"git diff" the selected file, comparing the previous and current commit
Alt-L
"git log"
Alt-Shift-L
"git log" the selected file
Alt-P
"git push"
Alt-R
"git reset" the selected file; then "git status"
Alt-S
"git status"

All of these hotkeys open a new command prompt window, displaying the results of the Git command, which the user can close by pressing any key.

In my experience, these hotkeys make it incalculably less bothersome to work with Git on Windows, and I think it shows how incredibly useful even very simple AutoHotKey scripts can be. If you have any suggestions on other hotkeys, please write a comment below.


 
Static versus dynamic web sites
(previous article)

Comments  •  Submit