v0.3.89 7d78d75

main.go RawHistoryFolder

1// Command zot is a lightweight terminal coding agent.
2package main
3
4import (
5	"fmt"
6	"os"
7	"runtime/debug"
8	"strings"
9
10	"github.com/patriceckhart/zot/packages/agent"
11)
12
13// Injected at build time via -ldflags "-X main.version=... -X main.commit=... -X main.date=...".
14// See .goreleaser.yaml for the release build and the Makefile for
15// local builds. Defaults make `zot --version` print something sensible
16// when built without ldflags.
17var (
18	// 0.0.0 is the pre-release placeholder for local / untagged
19	// builds. The first published GitHub release will be tagged
20	// v0.0.1; everything before that ships as 0.0.0 from source.
21	version = "0.0.0"
22	commit  = ""
23	date    = ""
24)
25
26func main() {
27	v := resolvedVersion(version)
28	if commit != "" {
29		short := commit
30		if len(short) > 7 {
31			short = short[:7]
32		}
33		v = v + " (" + short
34		if date != "" {
35			v = v + ", " + date
36		}
37		v = v + ")"
38	}
39	if err := agent.Run(os.Args[1:], v); err != nil {
40		fmt.Fprintln(os.Stderr, "zot:", err)
41		os.Exit(1)
42	}
43}
44
45// resolvedVersion falls back to the module version embedded by Go when zot is
46// installed with "go install ...@version". Release archives still use the
47// version injected by GoReleaser, and local source builds remain 0.0.0.
48func resolvedVersion(linkedVersion string) string {
49	info, _ := debug.ReadBuildInfo()
50	return resolvedVersionFromBuildInfo(linkedVersion, info)
51}
52
53func resolvedVersionFromBuildInfo(linkedVersion string, info *debug.BuildInfo) string {
54	if linkedVersion != "" && linkedVersion != "0.0.0" {
55		return linkedVersion
56	}
57	if info == nil || info.Main.Version == "" || info.Main.Version == "(devel)" {
58		return linkedVersion
59	}
60	return strings.TrimPrefix(info.Main.Version, "v")
61}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 476

↑↓ moveenter openesc close