From: Erik Cervin Edin Date: Thu, 14 May 2026 15:40:34 GMT Subject: Re: [PATCH] git-jump: pick a mode automatically when invoked without arguments Message-ID: In-Reply-To: <20260508175240.GA737125@coredump.intra.peff.net> On 26/05/08 04:30PM, Greg Hurrell wrote: > Hopefully, they at least read the README before installing it from contrib/ > (although Homebrew recently starting installing it for folks automatically, > so may not remain true for much longer on macOS...) Oh! I didn't know that but looking closer on my homebrew installed Git, looks like you're right. I would've assumed that if users had jumped through the hoops of installing git-jump from contrib/ it stands to reason they would have some sense of what it does. But if this is landing as a part of regular brew install git, I'd wager there's a few unsuspecting people running git-jump that don't know what it does. > Would having "git jump auto" work for you? Imo, this sounds ideal -- there's something odd about `git jump` picking the subcommand heuristically. At least when I invoke git-jump I always do so with a specific intent of _where_ I want to jump. Then again, I never do a jump merge or a jump ws. > Homebrew installing `git-jump` by default a few months ago[^2] broke > this, because aliases can't shadow builtin commands. But it looks like this doesn't work in this case. Even if you have git-jump installed stand-alone (mine is in ~/bin/git-jump, in PATH, before /opt/homebrew/bin.) FWIW I alias jump to j, jump diff to jd and jump grep to jg. E.g. git jd # git jump diff On 26/05/08 09:07AM, Greg Hurrell via GitGitGadget wrote: > -usage: git jump [--stdout] [] > +usage: git jump [--stdout] [] [] The usage message makes optional but doesn't explain what happens when you omit it. Seems worth documenting the auto-detect behavior there too. > But there are two situations where we can usefully infer the most > valuable and likely mode that a user would want to use, and select it > automatically when they run `git jump` without arguments: > > 1. When there are unmerged paths in the index, the user likely > wants `git jump merge`. > > 2. When the working tree has unstaged changes, the user likely > wants `git jump diff`. I can think of a third situation -- when there are staged changes flagged by git diff --cached --check. If we're going to teach git-jump how to be more clever about where to jump, does it also make sense to bake `git jump ws` into this? Also, if this is going to grow into a proper auto-detect heuristic, it might be cleaner as a first-class mode rather than logic spliced into the argument parser. Something like: mode_auto() { if test -n "$(git ls-files -u)"; then mode_merge "$@" elif ! git diff --quiet; then mode_diff "$@" elif ! git diff --cached --check >/dev/null 2>&1; then mode_ws --cached "$@" else return 0 fi } That way `git jump auto` works explicitly, bare `git jump` defaults to it (just `set -- auto` when $# -lt 1), and the usage text can document the heuristic. It also keeps the detection and dispatch in one place in case someone wants to tweak the priority later. All in all, I think an auto jumping mode could be genuinely useful.