v0.2.2 9100209

gen.go RawHistoryFolder

1package main
2
3import (
4	"fmt"
5	"os"
6	"os/exec"
7	"path/filepath"
8	"strings"
9	"text/template"
10
11	"github.com/bnema/puregotk/pkg/gir/pass"
12	"github.com/bnema/puregotk/pkg/gir/util"
13)
14
15//go:generate go run gen.go
16
17func main() {
18	dir := "v4"
19	os.RemoveAll(dir)
20	var girs []string
21	filepath.Walk("internal/gir/spec", func(path string, f os.FileInfo, err error) error {
22		if !strings.HasSuffix(path, ".gir") {
23			return nil
24		}
25		girs = append(girs, path)
26		return nil
27	})
28	p, err := pass.New(girs)
29	if err != nil {
30		panic(err)
31	}
32	// collect basic type info
33	p.First()
34
35	// Create the template
36	gotemp, err := template.New("go").Funcs(template.FuncMap{
37		"conv":     util.ConvertArgs,
38		"convc":    util.ConvertArgsComma,
39		"convcb":   util.ConvertCallbackArgs,
40		"convcd":   util.ConvertArgsCommaDeref,
41		"convd":    util.ConvertArgsDeref,
42		"convcbne": util.ConvertCallbackArgsNoErr,
43		"propsset": util.PropertyScalarSet,
44		"propsget": util.PropertyScalarGet,
45		"propvset": util.PropertyVectorSet,
46		"propvget": util.PropertyVectorGet,
47	}).ParseFiles("templates/go")
48	if err != nil {
49		panic(err)
50	}
51
52	// Write go files by making the second pass
53	p.Second(dir, gotemp)
54
55	// Finally copy some extra code that we want in the API
56	data, err := os.ReadFile("templates/gobject")
57	if err == nil {
58		os.WriteFile("v4/gobject/more.go", data, 0o644)
59	}
60	data, err = os.ReadFile("templates/gtype")
61	if err == nil {
62		mkerr := os.MkdirAll("v4/gobject/types", 0o755)
63		if mkerr != nil {
64			panic(mkerr)
65		}
66		os.WriteFile("v4/gobject/types/types.go", data, 0o644)
67	}
68	data, err = os.ReadFile("templates/glib")
69	if err == nil {
70		os.WriteFile("v4/glib/more.go", data, 0o644)
71	}
72	data, err = os.ReadFile("templates/glib_sysv")
73	if err == nil {
74		os.WriteFile("v4/glib/more_sysv.go", data, 0o644)
75	}
76	data, err = os.ReadFile("templates/glib_windows")
77	if err == nil {
78		os.WriteFile("v4/glib/more_windows.go", data, 0o644)
79	}
80	data, err = os.ReadFile("templates/glib_other")
81	if err == nil {
82		os.WriteFile("v4/glib/more_other.go", data, 0o644)
83	}
84
85	// Fix imports: goimports adds missing imports and removes unused ones.
86	// This is more robust than trying to statically predict all cross-package
87	// references from template data.
88	fmt.Println("Running goimports on generated files...")
89	cmd := exec.Command("goimports", "-w", "-local", "github.com/bnema/puregotk", dir)
90	cmd.Stdout = os.Stdout
91	cmd.Stderr = os.Stderr
92	if err := cmd.Run(); err != nil {
93		fmt.Fprintf(os.Stderr, "warning: goimports failed: %v\n", err)
94	}
95}

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 102

↑↓ moveenter openesc close