flake-update-20260505
1# Minimal syntax highlighting using ZSH's built-in region_highlight
2# Replaces zsh-syntax-highlighting plugin (~60 lines vs ~4000 lines)
3# Highlights: unknown commands (red), rm (dim bold), sudo (purple), quoted strings (yellow)
4
5__syntax_hl() {
6 emulate -L zsh
7
8 # Skip if buffer unchanged (redraws without edits)
9 [[ $BUFFER == "${__syntax_hl_prev-}" ]] && return
10 __syntax_hl_prev=$BUFFER
11
12 region_highlight=()
13 (( $#BUFFER )) || return
14
15 # First word (skip leading whitespace and VAR=val prefixes)
16 local cmd=${BUFFER##[[:space:]]#}
17 local -i offset=$(( $#BUFFER - $#cmd ))
18 cmd=${cmd%%[[:space:]]*}
19 [[ -n $cmd ]] || return
20
21 while [[ $cmd == *=* ]]; do
22 local rest=${BUFFER:$(( offset + $#cmd ))}
23 rest=${rest##[[:space:]]#}
24 offset=$(( $#BUFFER - $#rest ))
25 cmd=${rest%%[[:space:]]*}
26 [[ -n $cmd ]] || return
27 done
28
29 local -i cmd_end=$(( offset + $#cmd ))
30
31 # rm: dim bold on the whole line (visual warning)
32 if [[ $cmd == rm ]]; then
33 region_highlight+=("0 $#BUFFER fg=90,bold")
34 return
35 fi
36
37 # sudo: purple bold
38 if [[ $cmd == sudo ]]; then
39 region_highlight+=("$offset $cmd_end fg=164,bold")
40 return
41 fi
42
43 # unknown command: red bold
44 if ! whence -- "$cmd" >/dev/null 2>&1; then
45 region_highlight+=("$offset $cmd_end fg=red,bold")
46 fi
47
48 # Quoted strings: yellow
49 local QS="'" QD='"'
50 local -i pos=1 sq dq next close
51 while (( pos <= $#BUFFER )); do
52 sq=${BUFFER[(ib:pos:)$QS]}
53 dq=${BUFFER[(ib:pos:)$QD]}
54 if (( sq < dq )); then
55 next=$sq
56 close=${BUFFER[(ib:next+1:)$QS]}
57 elif (( dq <= $#BUFFER )); then
58 next=$dq
59 close=${BUFFER[(ib:next+1:)$QD]}
60 else
61 break
62 fi
63 if (( close <= $#BUFFER )); then
64 region_highlight+=("$(( next - 1 )) $close fg=yellow")
65 pos=$(( close + 1 ))
66 else
67 break
68 fi
69 done
70}
71zle -N zle-line-pre-redraw __syntax_hl