@kecan0406/ttheme 1.2.5 → 1.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.2.5",
2
+ "version": "1.2.6",
3
3
  "gate": [
4
4
  {
5
5
  "rule": "foreground",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kecan0406/ttheme",
3
- "version": "1.2.5",
3
+ "version": "1.2.6",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "ttheme": "bin/ttheme.js"
@@ -82,6 +82,8 @@ __tt_follows_prompt() { return 1 }
82
82
 
83
83
  __tt_prompted() { : }
84
84
 
85
+ __tt_pv_conf_rows() { : }
86
+
85
87
  __tt_pv_bg_open() { : }
86
88
 
87
89
  __tt_pv_bg_show() { : }
@@ -2,8 +2,9 @@ source $TTHEME_HOME/adapters/_bg.zsh
2
2
 
3
3
  typeset -g TTHEME_WARP_SETTINGS=$HOME/.warp/settings.toml TTHEME_WARP_THEMES=$HOME/.warp/themes TTHEME_WARP_WORN=""
4
4
  typeset -g TTHEME_WARP_TABS=$TTHEME_STATE_DIR/warp TTHEME_WARP_DB="" TTHEME_WARP_ID="" TTHEME_WARP_LAST="" TTHEME_WARP_SEEN=""
5
- typeset -g TTHEME_WARP_SHOWING="" TTHEME_WARP_VIEW=""
6
- typeset -gi TTHEME_WARP_VIEWS=0 TTHEME_WARP_BUSY=0 TTHEME_WARP_FOLLOWS=-1 TTHEME_WARP_TICK=0
5
+ typeset -g TTHEME_WARP_SHOWING="" TTHEME_WARP_VIEW="" TTHEME_WARP_CODE="" TTHEME_WARP_RECORDS=""
6
+ typeset -gi TTHEME_WARP_VIEWS=0 TTHEME_WARP_BUSY=0 TTHEME_WARP_FOLLOWS=-1 TTHEME_WARP_UP=0 TTHEME_WARP_SQLPID=0 TTHEME_WARP_MIXED=0
7
+ typeset -gF TTHEME_WARP_WARM=0 TTHEME_WARP_PRIMED=0 TTHEME_WARP_LIVED=0
7
8
  typeset -ga TTHEME_WARP_LAID=()
8
9
  typeset -g TTHEME_WARP_SQL='with t as (select id, window_id, row_number() over (partition by window_id order by id) - 1 as ix from tabs) select lower(hex(p.uuid)) from app a join windows w on w.id = a.active_window_id join t on t.window_id = w.id and t.ix = w.active_tab_index join pane_nodes n on n.tab_id = t.id and n.is_leaf join pane_leaves l on l.pane_node_id = n.id and l.is_focused join terminal_panes p on p.id = n.id'
9
10
  if [[ $OSTYPE != darwin* ]]; then
@@ -194,8 +195,48 @@ __tt_warp_follow() {
194
195
 
195
196
  __tt_warp_active() {
196
197
  setopt localoptions extendedglob
197
- REPLY=$(sqlite3 -readonly -cmd '.timeout 300' $TTHEME_WARP_DB $TTHEME_WARP_SQL 2>/dev/null)
198
- [[ $REPLY == [0-9a-f](#c32) ]]
198
+ local line
199
+ REPLY=""
200
+ if (( ! TTHEME_WARP_SQLPID )) || ! kill -0 $TTHEME_WARP_SQLPID 2>/dev/null; then
201
+ coproc sqlite3 -readonly -batch -cmd '.timeout 300' $TTHEME_WARP_DB 2>/dev/null
202
+ TTHEME_WARP_SQLPID=$!
203
+ fi
204
+ if print -rp -- "$TTHEME_WARP_SQL; select 'end';" 2>/dev/null; then
205
+ while read -rp -t 1 line; do
206
+ [[ $line == end ]] && { [[ $REPLY == [0-9a-f](#c32) ]]; return }
207
+ REPLY=$line
208
+ done
209
+ fi
210
+ TTHEME_WARP_SQLPID=0 REPLY=""
211
+ return 1
212
+ }
213
+
214
+ __tt_warp_stamp() {
215
+ local -a at
216
+ zstat -F %s.%N -A at +mtime -- $TTHEME_WARP_DB-wal 2>/dev/null || zstat -F %s.%N -A at +mtime -- $TTHEME_WARP_DB 2>/dev/null || return 1
217
+ REPLY=$at[1]
218
+ }
219
+
220
+ __tt_warp_mixed() {
221
+ setopt localoptions extendedglob
222
+ local f pal view
223
+ local -a rec
224
+ local -A looks
225
+ for f in $TTHEME_WARP_TABS/[0-9a-f](#c32)(N); do
226
+ rec=(${=${"$(<$f)"}})
227
+ pal=${rec[3]#-} view=${rec[4]#-}
228
+ [[ $rec[2] != - && -z $TTHEME_STARTUP ]] && pal="" view=""
229
+ pal="${pal:-$TTHEME_STARTUP} $view"
230
+ looks[$pal]=1
231
+ done
232
+ (( ${#looks} > 1 ))
233
+ }
234
+
235
+ __tt_warp_prime() {
236
+ local fd byte
237
+ sysopen -rw -u fd $TTHEME_WARP_SETTINGS 2>/dev/null || return 0
238
+ sysread -s 1 -i $fd byte && sysseek -u $fd 0 && syswrite -o $fd -- $byte
239
+ exec {fd}>&-
199
240
  }
200
241
 
201
242
  __tt_warp_line() {
@@ -207,18 +248,28 @@ __tt_warp_line() {
207
248
  __tt_warp_tick() {
208
249
  local line="" REPLY
209
250
  local -a at
210
- if zstat -F %s.%N -A at +mtime -- $TTHEME_WARP_DB-wal 2>/dev/null || zstat -F %s.%N -A at +mtime -- $TTHEME_WARP_DB 2>/dev/null; then
211
- if [[ $at[1] != "$TTHEME_WARP_SEEN" ]]; then
212
- TTHEME_WARP_SEEN=$at[1]
213
- if __tt_warp_active && [[ $REPLY != "$TTHEME_WARP_ID" ]]; then
214
- TTHEME_WARP_ID=$REPLY
251
+ integer recount=0
252
+ if __tt_warp_stamp && [[ $REPLY != "$TTHEME_WARP_SEEN" ]]; then
253
+ TTHEME_WARP_SEEN=$REPLY
254
+ if __tt_warp_active; then
255
+ TTHEME_WARP_UP=1
256
+ if [[ $REPLY != "$TTHEME_WARP_ID" ]]; then
257
+ TTHEME_WARP_ID=$REPLY recount=1
215
258
  __tt_put $TTHEME_WARP_TABS/.active $REPLY 2>/dev/null
216
259
  fi
260
+ else
261
+ TTHEME_WARP_UP=0
217
262
  fi
218
263
  fi
219
- zstat -F %s.%N -A at +mtime -- $TTHEME_HOME/palettes.zsh 2>/dev/null && [[ $at[1] != "$TTHEME_PALETTES_AT" ]] && __tt_palettes_load
264
+ zstat -F %s.%N -A at +mtime -- $TTHEME_HOME/palettes.zsh 2>/dev/null && [[ $at[1] != "$TTHEME_PALETTES_AT" ]] && __tt_palettes_load && recount=1
265
+ zstat -F %s.%N -A at +mtime -- $TTHEME_WARP_TABS 2>/dev/null && [[ $at[1] != "$TTHEME_WARP_RECORDS" ]] && TTHEME_WARP_RECORDS=$at[1] recount=1
266
+ if (( recount )); then
267
+ __tt_warp_mixed
268
+ TTHEME_WARP_MIXED=$(( ! $? ))
269
+ fi
220
270
  [[ -n $TTHEME_WARP_ID && -r $TTHEME_WARP_TABS/$TTHEME_WARP_ID ]] && line=$(<$TTHEME_WARP_TABS/$TTHEME_WARP_ID)
221
271
  [[ "$TTHEME_WARP_ID $line $TTHEME_PALETTES_AT" == "$TTHEME_WARP_LAST" ]] && return 0
272
+ [[ ${TTHEME_WARP_LAST%% *} == "$TTHEME_WARP_ID" ]] && TTHEME_WARP_WARM=$(( EPOCHREALTIME + 3 ))
222
273
  TTHEME_WARP_LAST="$TTHEME_WARP_ID $line $TTHEME_PALETTES_AT"
223
274
  [[ -n $line ]] && __tt_warp_line ${=line} && __tt_warp_wear "$REPLY"
224
275
  return 0
@@ -239,15 +290,64 @@ __tt_warp_live() {
239
290
  (( live ))
240
291
  }
241
292
 
293
+ __tt_pv_conf_rows() {
294
+ cvars+=(TTHEME_WARP_FAST) clabel+=("Warp tabs") cchoice+=("on off") cshow+=("on off")
295
+ cnote+=(
296
+ TTHEME_WARP_FAST:on "About 0.2 s per switch, for about 8% CPU"
297
+ TTHEME_WARP_FAST:off "About 0.6 s per switch"
298
+ )
299
+ }
300
+
301
+ __tt_warp_warming() {
302
+ [[ $TTHEME_WARP_FAST == on ]] && (( TTHEME_WARP_UP && ( TTHEME_WARP_MIXED || EPOCHREALTIME < TTHEME_WARP_WARM ) ))
303
+ }
304
+
305
+ __tt_warp_wait() {
306
+ local REPLY
307
+ local -F now=$EPOCHREALTIME end=$(( EPOCHREALTIME + 0.1 ))
308
+ if ! __tt_warp_warming; then
309
+ zselect -t 10
310
+ return 0
311
+ fi
312
+ while (( now < end )); do
313
+ if (( now - TTHEME_WARP_PRIMED >= 0.25 )); then
314
+ __tt_warp_prime
315
+ TTHEME_WARP_PRIMED=$now
316
+ fi
317
+ zselect -t 2
318
+ __tt_warp_stamp && [[ $REPLY != "$TTHEME_WARP_SEEN" ]] && return 0
319
+ now=$EPOCHREALTIME
320
+ done
321
+ return 0
322
+ }
323
+
324
+ __tt_warp_code() {
325
+ local -a at conf
326
+ zstat -F %s.%N -A at +mtime -- $TTHEME_HOME/adapters/warp.zsh 2>/dev/null
327
+ zstat -F %s.%N -A conf +mtime -- $TTHEME_CONFIG 2>/dev/null
328
+ REPLY="$at[1] $conf[1]"
329
+ }
330
+
242
331
  __tt_warp_follower() {
243
332
  emulate -L zsh
244
- local fd
333
+ local fd REPLY
245
334
  __tt_warp_db && zsystem flock -t 0 -f fd $TTHEME_WARP_TABS/.follow 2>/dev/null || return 0
246
- trap '' HUP
335
+ trap '' HUP PIPE
336
+ __tt_warp_code
337
+ TTHEME_WARP_CODE=$REPLY TTHEME_WARP_LIVED=$EPOCHREALTIME
247
338
  while [[ -e $TTHEME_HOME/palettes.zsh && -e $TTHEME_WARP_DB ]]; do
248
339
  __tt_warp_tick
249
- (( ++TTHEME_WARP_TICK % 50 )) || __tt_warp_live || break
250
- zselect -t 10
340
+ if (( EPOCHREALTIME - TTHEME_WARP_LIVED >= 5 )); then
341
+ TTHEME_WARP_LIVED=$EPOCHREALTIME
342
+ __tt_warp_live || break
343
+ __tt_warp_code
344
+ if [[ $REPLY != "$TTHEME_WARP_CODE" ]]; then
345
+ coproc :
346
+ zsystem flock -u $fd
347
+ exec zsh -fc 'source $1; __tt_warp_follower' zsh $TTHEME_HOME/ttheme.zsh
348
+ fi
349
+ fi
350
+ __tt_warp_wait
251
351
  done
252
352
  zf_rm -f -- $TTHEME_WARP_TABS/.active 2>/dev/null
253
353
  }
package/shell/ttheme.zsh CHANGED
@@ -118,6 +118,8 @@ __tt_pins_load
118
118
 
119
119
  : ${TTHEME_BG_COLORS:=tone}
120
120
 
121
+ : ${TTHEME_WARP_FAST:=on}
122
+
121
123
  typeset -g TTHEME_STATE_DIR=${XDG_STATE_HOME:-$HOME/.local/state}/ttheme
122
124
 
123
125
  () {
@@ -2202,7 +2204,7 @@ __tt_pv_draw() {
2202
2204
  split=$(( sw > 0 )) sc=$(( pw - 1 - sw ))
2203
2205
  h=$(( ph - 5 ))
2204
2206
  [[ -n $tune ]] && (( ! split )) && h=$(( ph - 14 ))
2205
- (( conf && ! split )) && h=$(( ph - 12 ))
2207
+ (( conf && ! split )) && h=$(( ph - 6 - ${#cvars} ))
2206
2208
  reach=()
2207
2209
  if [[ -n $pick && $mode == pin ]]; then
2208
2210
  if (( split )); then
@@ -2351,8 +2353,8 @@ __tt_pv_draw() {
2351
2353
  __tt_pv_head $(( ph - 10 )) 1 $lw $tune "$REPLY" $state
2352
2354
  __tt_pv_bg_panel $tpick $(( ph - 9 )) 1 $lw
2353
2355
  elif (( conf )); then
2354
- __tt_pv_head $(( ph - 8 )) 1 $lw Config
2355
- __tt_pv_conf_panel $(( ph - 7 )) 1 $lw
2356
+ __tt_pv_head $(( ph - 2 - ${#cvars} )) 1 $lw Config
2357
+ __tt_pv_conf_panel $(( ph - 1 - ${#cvars} )) 1 $lw
2356
2358
  fi
2357
2359
  (( help )) && __tt_pv_help
2358
2360
  fi
@@ -2663,6 +2665,7 @@ __tt_preview() {
2663
2665
  TTHEME_BG_COLORS:tone "New pictures are tinted in one color of the palette"
2664
2666
  TTHEME_BG_COLORS:original "New pictures keep their own colors"
2665
2667
  )
2668
+ __tt_pv_conf_rows
2666
2669
  [[ $mode == pin ]] && __tt_pin_scopes "$pdir"
2667
2670
  [[ $mode == init ]] && pkdef=2
2668
2671
  __tt_pv_canpick