v0.3.0 cf370a0

socket.go RawHistoryFolder

1package wayland
2
3import (
4	"fmt"
5	"os"
6	"path/filepath"
7
8	"golang.org/x/sys/unix"
9)
10
11func listen(runtimeDir string) (name string, fd int, cleanup func(), err error) {
12	for n := 1; n <= 32; n++ {
13		name = fmt.Sprintf("wayland-%d", n)
14		path := filepath.Join(runtimeDir, name)
15		lock := path + ".lock"
16		l, e := unix.Open(lock, unix.O_CREAT|unix.O_RDWR|unix.O_CLOEXEC, 0660)
17		if e != nil {
18			return "", -1, nil, e
19		}
20		if e = unix.Flock(l, unix.LOCK_EX|unix.LOCK_NB); e != nil {
21			unix.Close(l)
22			if e == unix.EWOULDBLOCK {
23				continue
24			}
25			return "", -1, nil, e
26		}
27		cleanup = func() { os.Remove(path); os.Remove(lock); unix.Close(l) }
28		if e = os.Remove(path); e != nil && !os.IsNotExist(e) {
29			cleanup()
30			return "", -1, nil, e
31		}
32		fd, e = unix.Socket(unix.AF_UNIX, unix.SOCK_STREAM|unix.SOCK_CLOEXEC, 0)
33		if e == nil {
34			e = unix.Bind(fd, &unix.SockaddrUnix{Name: path})
35		}
36		if e == nil {
37			e = unix.Listen(fd, 128)
38		}
39		if e != nil {
40			if fd >= 0 {
41				unix.Close(fd)
42			}
43			cleanup()
44			return "", -1, nil, e
45		}
46		return name, fd, cleanup, nil
47	}
48	return "", -1, nil, fmt.Errorf("no free wayland socket in %s", runtimeDir)
49}

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 25

Tags 10

↑↓ moveenter openesc close