detached 4296f78

fix(examples): drop the focused-dot color, the state file does not give window positions

commit
4296f789810fb6faec32e37a905c110fdbefe91e
author
brice · · 2026-10-05 17:33 UTC
parent
f8cdfba
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
1 file · +11 -19
M examples/bundle/left.sh +11 -19
@@ -1,8 +1,8 @@
11 #!/bin/bash
22 # Left: the active workspace as an accent block that fades into the bar, then
33 # the workspaces with one dot per window. The active workspace shows only its
4-# dots, and the dot of the focused window is in the accent color. On NeferWL it
5-# also shows the stash. Without NeferWL's state file it shows nothing.
4+# dots. On NeferWL it also shows the stash. Without NeferWL's state file it
5+# shows nothing.
66 . "$(dirname "$0")/lib.sh"
77
88 DOT=$ICON_DOT STASH=$ICON_STASH
@@ -13,19 +13,16 @@ DOT=$ICON_DOT STASH=$ICON_STASH
1313
1414 draw() {
1515 # First line: "<active> <count>" of the focused output. Then one line per
16- # workspace: "<n> <windows> <stashed> <focused>", where <focused> is the
17- # position (from 1) of the focused window among the workspace's windows, or 0.
18- local data active count n w s f line pips i color
16+ # workspace: "<n> <windows> <stashed>".
17+ local data active count n w s line pips
1918 data=$(jq -r '
2019 .output as $o
2120 | (.outputs[] | select(.name == $o)) as $out
2221 | [.windows[] | select(.output == $o)] as $ws
23- | (if .window.output == $o then .window.id else null end) as $focus
2422 | "\($out.active) \($out.count)",
2523 (range(1; $out.count + 1) as $n
2624 | [$ws[] | select(.workspace == $n)] as $here
27- | (if $focus == null then null else ($here | map(.id) | index($focus)) end) as $at
28- | "\($n) \($here | length) \([$here[] | select(.stash_count > 0)] | length) \(if $at == null then 0 else $at + 1 end)")' \
25+ | "\($n) \($here | length) \([$here[] | select(.stash_count > 0)] | length)")' \
2926 "$NEFERWL_STATE" 2>/dev/null) || return
3027 read -r active count <<<"$(head -1 <<<"$data")"
3128 # The state file is data, not code: bash arithmetic runs command
@@ -33,23 +30,18 @@ draw() {
3330 [[ $active =~ ^[0-9]+$ && $count =~ ^[0-9]+$ ]] || return
3431
3532 line="$(bg "$ACCENT")$(fg "$(ink "$ACCENT")")$BOLD $active $RESET$(fade "$ACCENT" "$BAR")$(bg "$BAR")"
36- while read -r n w s f; do
37- [[ $n =~ ^[0-9]+$ && $w =~ ^[0-9]+$ && $s =~ ^[0-9]+$ && $f =~ ^[0-9]+$ ]] || continue
38- # At most 4 dots; a focused window past the 4th is shown on the 4th.
33+ while read -r n w s; do
34+ [[ $n =~ ^[0-9]+$ && $w =~ ^[0-9]+$ && $s =~ ^[0-9]+$ ]] || continue
35+ # One dot per window, at most 4.
3936 pips=""
40- for ((i = 1; i <= (w > 4 ? 4 : w); i++)); do
41- color=$DIM
42- ((n == active)) && color=$NEFERBAR_FOREGROUND
43- ((i == (f > 4 ? 4 : f))) && color=$ACCENT
44- pips+="$(fg "$color")$DOT"
45- done
37+ ((w > 0)) && printf -v pips "$DOT%.0s" $(seq 1 $((w > 4 ? 4 : w)))
4638 if ((n == active)); then
4739 # The number is already in the accent block on the left.
48- line+=" $pips"
40+ line+="$(fg "$NEFERBAR_FOREGROUND") $pips"
4941 ((s > 0)) && line+="$(fg "$NEFERBAR_COLOR2") $STASH$s"
5042 line+=" "
5143 elif ((w > 0)); then
52- line+="$(fg "$NEFERBAR_FOREGROUND") $n $pips "
44+ line+="$(fg "$NEFERBAR_FOREGROUND") $n $(fg "$DIM")$pips "
5345 else
5446 line+="$(fg "$DIM") $n "
5547 fi
@@ -1,8 +1,8 @@
1 #!/bin/bash1 #!/bin/bash
2 # Left: the active workspace as an accent block that fades into the bar, then2 # Left: the active workspace as an accent block that fades into the bar, then
3 # the workspaces with one dot per window. The active workspace shows only its3 # the workspaces with one dot per window. The active workspace shows only its
4-# dots, and the dot of the focused window is in the accent color. On NeferWL it4+# dots. On NeferWL it also shows the stash. Without NeferWL's state file it
5-# also shows the stash. Without NeferWL's state file it shows nothing.5+# shows nothing.
6 . "$(dirname "$0")/lib.sh"6 . "$(dirname "$0")/lib.sh"
7 7
8 DOT=$ICON_DOT STASH=$ICON_STASH8 DOT=$ICON_DOT STASH=$ICON_STASH
@@ -13,19 +13,16 @@ DOT=$ICON_DOT STASH=$ICON_STASH
13 13
14 draw() {14 draw() {
15 # First line: "<active> <count>" of the focused output. Then one line per15 # First line: "<active> <count>" of the focused output. Then one line per
16- # workspace: "<n> <windows> <stashed> <focused>", where <focused> is the16+ # workspace: "<n> <windows> <stashed>".
17- # position (from 1) of the focused window among the workspace's windows, or 0.17+ local data active count n w s line pips
18- local data active count n w s f line pips i color
19 data=$(jq -r '18 data=$(jq -r '
20 .output as $o19 .output as $o
21 | (.outputs[] | select(.name == $o)) as $out20 | (.outputs[] | select(.name == $o)) as $out
22 | [.windows[] | select(.output == $o)] as $ws21 | [.windows[] | select(.output == $o)] as $ws
23- | (if .window.output == $o then .window.id else null end) as $focus
24 | "\($out.active) \($out.count)",22 | "\($out.active) \($out.count)",
25 (range(1; $out.count + 1) as $n23 (range(1; $out.count + 1) as $n
26 | [$ws[] | select(.workspace == $n)] as $here24 | [$ws[] | select(.workspace == $n)] as $here
27- | (if $focus == null then null else ($here | map(.id) | index($focus)) end) as $at25+ | "\($n) \($here | length) \([$here[] | select(.stash_count > 0)] | length)")' \
28- | "\($n) \($here | length) \([$here[] | select(.stash_count > 0)] | length) \(if $at == null then 0 else $at + 1 end)")' \
29 "$NEFERWL_STATE" 2>/dev/null) || return26 "$NEFERWL_STATE" 2>/dev/null) || return
30 read -r active count <<<"$(head -1 <<<"$data")"27 read -r active count <<<"$(head -1 <<<"$data")"
31 # The state file is data, not code: bash arithmetic runs command28 # The state file is data, not code: bash arithmetic runs command
@@ -33,23 +30,18 @@ draw() {
33 [[ $active =~ ^[0-9]+$ && $count =~ ^[0-9]+$ ]] || return30 [[ $active =~ ^[0-9]+$ && $count =~ ^[0-9]+$ ]] || return
34 31
35 line="$(bg "$ACCENT")$(fg "$(ink "$ACCENT")")$BOLD $active $RESET$(fade "$ACCENT" "$BAR")$(bg "$BAR")"32 line="$(bg "$ACCENT")$(fg "$(ink "$ACCENT")")$BOLD $active $RESET$(fade "$ACCENT" "$BAR")$(bg "$BAR")"
36- while read -r n w s f; do33+ while read -r n w s; do
37- [[ $n =~ ^[0-9]+$ && $w =~ ^[0-9]+$ && $s =~ ^[0-9]+$ && $f =~ ^[0-9]+$ ]] || continue34+ [[ $n =~ ^[0-9]+$ && $w =~ ^[0-9]+$ && $s =~ ^[0-9]+$ ]] || continue
38- # At most 4 dots; a focused window past the 4th is shown on the 4th.35+ # One dot per window, at most 4.
39 pips=""36 pips=""
40- for ((i = 1; i <= (w > 4 ? 4 : w); i++)); do37+ ((w > 0)) && printf -v pips "$DOT%.0s" $(seq 1 $((w > 4 ? 4 : w)))
41- color=$DIM
42- ((n == active)) && color=$NEFERBAR_FOREGROUND
43- ((i == (f > 4 ? 4 : f))) && color=$ACCENT
44- pips+="$(fg "$color")$DOT"
45- done
46 if ((n == active)); then38 if ((n == active)); then
47 # The number is already in the accent block on the left.39 # The number is already in the accent block on the left.
48- line+=" $pips"40+ line+="$(fg "$NEFERBAR_FOREGROUND") $pips"
49 ((s > 0)) && line+="$(fg "$NEFERBAR_COLOR2") $STASH$s"41 ((s > 0)) && line+="$(fg "$NEFERBAR_COLOR2") $STASH$s"
50 line+=" "42 line+=" "
51 elif ((w > 0)); then43 elif ((w > 0)); then
52- line+="$(fg "$NEFERBAR_FOREGROUND") $n $pips "44+ line+="$(fg "$NEFERBAR_FOREGROUND") $n $(fg "$DIM")$pips "
53 else45 else
54 line+="$(fg "$DIM") $n "46 line+="$(fg "$DIM") $n "
55 fi47 fi

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 5

Tags 4

↑↓ moveenter openesc close