v0.32.0 0617278

detector_gsettings.go RawHistoryFolder

1package colorscheme
2
3import (
4	"os/exec"
5	"strings"
6)
7
8const (
9	detectorNameGsettings = "gsettings"
10	priorityGsettings     = 10
11)
12
13// GsettingsDetector detects color scheme from GNOME gsettings.
14// This is the most reliable method for GNOME-based desktops.
15type GsettingsDetector struct{}
16
17// NewGsettingsDetector creates a new gsettings-based detector.
18func NewGsettingsDetector() *GsettingsDetector {
19	return &GsettingsDetector{}
20}
21
22// Name implements port.ColorSchemeDetector.
23func (*GsettingsDetector) Name() string {
24	return detectorNameGsettings
25}
26
27// Priority implements port.ColorSchemeDetector.
28func (*GsettingsDetector) Priority() int {
29	return priorityGsettings
30}
31
32// Available implements port.ColorSchemeDetector.
33// Returns true if gsettings command is available.
34func (*GsettingsDetector) Available() bool {
35	_, err := exec.LookPath("gsettings")
36	return err == nil
37}
38
39// Detect implements port.ColorSchemeDetector.
40// Queries org.gnome.desktop.interface color-scheme.
41func (*GsettingsDetector) Detect() (prefersDark, ok bool) {
42	cmd := exec.Command("gsettings", "get", "org.gnome.desktop.interface", "color-scheme")
43	output, err := cmd.Output()
44	if err != nil {
45		return false, false
46	}
47
48	// Output is like "'prefer-dark'\n", strip quotes and whitespace
49	result := strings.TrimSpace(string(output))
50	result = strings.Trim(result, "'\"")
51
52	switch result {
53	case "prefer-dark":
54		return true, true
55	case "prefer-light":
56		return false, true
57	case "default":
58		// "default" means follow system, which we can't determine here
59		return false, false
60	default:
61		return false, false
62	}
63}

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 8

Tags 42

↑↓ moveenter openesc close