@kecan0406/ttheme 1.1.4 → 1.1.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kecan0406/ttheme",
3
- "version": "1.1.4",
3
+ "version": "1.1.6",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "ttheme": "bin/ttheme.js"
@@ -9,14 +9,6 @@ __tt_ghostty_shown() {
9
9
  REPLY=${${REPLY/--/@}/--//}
10
10
  }
11
11
 
12
- __tt_put() {
13
- local f=$1
14
- shift
15
- print -rl -- "$@" > $f.$$ && mv -f -- $f.$$ $f && return 0
16
- rm -f -- $f.$$
17
- return 1
18
- }
19
-
20
12
  __tt_bg_saved() {
21
13
  local REPLY
22
14
  (( ${TTHEME_TERMINALS[(Ie)iterm2]} )) && __tt_cli image $1 tuned
@@ -27,6 +19,8 @@ __tt_bg_saved() {
27
19
 
28
20
  __tt_bg_refresh() { : }
29
21
 
22
+ __tt_bg_lasting() { : }
23
+
30
24
  __tt_bg_aligns() { (( ! ${TTHEME_TERMINALS[(Ie)iterm2]} )) }
31
25
 
32
26
  __tt_bg_frame() {
@@ -80,31 +74,50 @@ __tt_bg_path() {
80
74
  }
81
75
 
82
76
  __tt_bg_load() {
83
- local name=$1 file=${${1/@/--}/\//--} dir=${TTHEME_CONFIG:h}/backgrounds img="" fit=contain op=1 pos=center f line stem="" size=100 REPLY
84
- local -i at=5
85
- local -a fills lines
77
+ local name=$1 pal=${1%:*} key="" file dir=${TTHEME_CONFIG:h}/backgrounds img="" fit=contain op=1 pos=center line stem="" size=100 REPLY
78
+ local -i at=5 pass
79
+ local -a fills lines src pics pd
86
80
  (( ${+bgsrc[$name]} )) && return 0
87
- bgfrom[$name]="" bgtunef[$name]=$file.tune.conf bgofff[$name]=$file.off.conf bgimages[$name]=1
88
- [[ -r $dir/$file.conf ]] && lines=("${(@f)$(<$dir/$file.conf)}")
81
+ [[ $name == *:* ]] && key=${name##*:}
82
+ file=${${pal/@/--}/\//--}
83
+ bgfrom[$name]="" bgurl[$name]="" bgby[$name]="" bgtunef[$name]=$file.tune.conf bgofff[$name]=$file.off.conf bgimages[$name]=1
84
+ if [[ -n $key ]]; then
85
+ pd=(${=bgpic[$pal:$key]})
86
+ lines=("# from ${pd[5,-1]}" "background-image = $pd[2]" "background-image-fit = cover" "background-image-position = top-right" "background-image-opacity = $pd[3]" "config-file = ?$pd[1].tune.conf" "config-file = ?$pd[1].off.conf")
87
+ [[ $pd[4] == - ]] || lines+=("# by $pd[4]")
88
+ bgimages[$name]=${bgimages[$pal]:-1}
89
+ elif [[ -r $dir/$file.conf ]]; then
90
+ lines=("${(@f)$(<$dir/$file.conf)}")
91
+ fi
89
92
  for line in $lines; do
90
93
  case $line in
91
94
  'config-file = ?'*.tune.conf) bgtunef[$name]=${line#config-file = \?} ;;
92
95
  'config-file = ?'*.off.conf) bgofff[$name]=${line#config-file = \?} ;;
93
- '# image '*/<->) bgimages[$name]=${line##*/} ;;
96
+ '# image '*/<->) bgimages[$name]=${line##*/} bgact[$pal]=${${line#\# image }%% *} ;;
97
+ '# picture '*)
98
+ pd=(${=line#\# picture })
99
+ bgpic[$pal:$pd[1]]=${(j: :)pd[2,-1]}
100
+ pics+=($pd[1])
101
+ ;;
94
102
  esac
95
103
  done
96
- for f in $dir/$file.conf $dir/${bgtunef[$name]}; do
97
- if [[ -r $f ]]; then
98
- for line in "${(@f)$(<$f)}"; do
99
- case $line in
100
- '# from '*) [[ $f == *.tune.conf ]] || bgfrom[$name]=${(j: :)${${=line#\# from }[1,2]}} ;;
101
- 'background-image = '*|'background-image='*) img=${${line#*=}# } ;;
102
- 'background-image-fit = '*|'background-image-fit='*) fit=${${line#*=}# } ;;
103
- 'background-image-opacity = '*|'background-image-opacity='*) op=${${line#*=}# } ;;
104
- 'background-image-position = '*|'background-image-position='*) pos=${${line#*=}# } ;;
105
- esac
106
- done
104
+ [[ -n $key ]] || bgpics[$pal]=${(j: :)pics}
105
+ for pass in 1 2; do
106
+ src=("${lines[@]}")
107
+ if (( pass == 2 )); then
108
+ src=()
109
+ [[ -r $dir/${bgtunef[$name]} ]] && src=("${(@f)$(<$dir/${bgtunef[$name]})}")
107
110
  fi
111
+ for line in "${src[@]}"; do
112
+ case $line in
113
+ '# from '*) (( pass == 1 )) && bgfrom[$name]=${(j: :)${${=line#\# from }[1,2]}} bgurl[$name]=${${=line#\# from }[3]} ;;
114
+ '# by '*) (( pass == 1 )) && bgby[$name]=${${line#\# by }//,/, } ;;
115
+ 'background-image = '*|'background-image='*) img=${${line#*=}# } ;;
116
+ 'background-image-fit = '*|'background-image-fit='*) fit=${${line#*=}# } ;;
117
+ 'background-image-opacity = '*|'background-image-opacity='*) op=${${line#*=}# } ;;
118
+ 'background-image-position = '*|'background-image-position='*) pos=${${line#*=}# } ;;
119
+ esac
120
+ done
108
121
  [[ $op == <->(|.<->) ]] || op=1
109
122
  [[ $pos == center-center ]] && pos=center
110
123
  at=${TTHEME_BG_POSITIONS[(Ie)$pos]}
@@ -116,7 +129,7 @@ __tt_bg_load() {
116
129
  *@<20-999>-*-<->x<->.png|*@<20-99>-*.png) stem=${REPLY%@*} size=${${REPLY##*@}%%-*} ;;
117
130
  *.png) stem=${REPLY%.png}; [[ $fit == cover ]] && size=fill ;;
118
131
  esac
119
- [[ $f == *.tune.conf ]] || bgdef[$name]="$size $at $op" bgbase[$name]=$REPLY
132
+ (( pass == 1 )) && bgdef[$name]="$size $at $op" bgbase[$name]=$REPLY
120
133
  done
121
134
  bgsize[$name]=$size bgpos[$name]=$at bgop[$name]=$op bgoff[$name]=0 bgshot[$name]="" bgshotkey[$name]="" bgfocus[$name]=50
122
135
  [[ -e $dir/${bgofff[$name]} ]] && bgoff[$name]=1
@@ -200,12 +213,12 @@ __tt_bg_include() {
200
213
  }
201
214
 
202
215
  __tt_bg_write() {
203
- local name=$1 dir=${TTHEME_CONFIG:h}/backgrounds src=${bgsrc[$1]} size=${bgsize[$1]} shape img="" fit=contain f REPLY
216
+ local name=$1 pal=${1%:*} dir=${TTHEME_CONFIG:h}/backgrounds src=${bgsrc[$1]} size=${bgsize[$1]} shape img="" fit=contain f REPLY
204
217
  local pos=${TTHEME_BG_POSITIONS[${bgpos[$1]}]}
205
218
  local -i W=$(( (pw + 2 * bgmx) * bgcw )) H=$(( (ph + 2 * bgmy) * bgch ))
206
219
  local -a wh fr
207
- [[ -r $dir/${${name/@/--}/\//--}.conf ]] || return 0
208
- __tt_bg_include $name || return 1
220
+ [[ -r $dir/${${pal/@/--}/\//--}.conf ]] || return 0
221
+ [[ $name == *:* ]] || __tt_bg_include $name || return 1
209
222
  if [[ "$size ${bgpos[$1]} ${bgop[$1]}" == "${bgdef[$1]}" ]]; then
210
223
  rm -f -- $dir/${bgtunef[$1]}
211
224
  else
@@ -262,7 +275,7 @@ __tt_pv_bg_open() {
262
275
  __tt_pv_bg_show() {
263
276
  (( bgcw )) || return 0
264
277
  local name=$1 img="" op size fit=contain focus=-1 REPLY
265
- local -a p=(${=TTHEME_PALETTE[$name]}) wh at
278
+ local -a p=(${=TTHEME_PALETTE[${name%:*}]}) wh at
266
279
  local -i cols=$(( pw + 2 * bgmx )) rows=$(( ph + 2 * bgmy ))
267
280
  (( ${#p} >= 20 )) || return 0
268
281
  (( $2 )) && { __tt_bg_forget; bgshown="" bganchor=0 }
@@ -336,7 +349,7 @@ __tt_bg_forget() {
336
349
  for id in $bgsent; do
337
350
  printf '\e_Ga=d,d=I,i=%d,q=2\e\\' $id
338
351
  done
339
- bgsent=() bgcost=() bgorder=() bgbytes=0
352
+ bgsent=() bgcost=() bgorder=() bgbytes=0 bgthumb=()
340
353
  }
341
354
 
342
355
  __tt_pv_bg_fs() {
@@ -353,8 +366,8 @@ __tt_pv_bg_fs() {
353
366
  }
354
367
 
355
368
  __tt_pv_bg_adjust() {
356
- (( bgcw )) && [[ -n $tune ]] || return 0
357
- local name=$tune REPLY
369
+ (( bgcw )) && [[ -n $tpick ]] || return 0
370
+ local name=$tpick REPLY
358
371
  __tt_bg_load $name
359
372
  __tt_bg_image $name
360
373
  __tt_bg_dim "$REPLY" || return 0
@@ -364,7 +377,14 @@ __tt_pv_bg_adjust() {
364
377
  __tt_pv_bg_fs $name && fs=$REPLY
365
378
  case $1 in
366
379
  on) off=$(( ! off )) ;;
367
- def) size=$def[1] at=$def[2] op=$def[3] off=0 ;;
380
+ def)
381
+ case $n in
382
+ 1) size=$def[1] ;;
383
+ 2) at=$def[2] ;;
384
+ 3) op=$def[3] ;;
385
+ *) size=$def[1] at=$def[2] op=$def[3] off=0 ;;
386
+ esac
387
+ ;;
368
388
  *)
369
389
  (( off )) && return 0
370
390
  case $1 in
@@ -425,8 +445,12 @@ __tt_pv_bg_findable() {
425
445
 
426
446
  __tt_pv_bg_find() {
427
447
  local name=$1 err var
428
- local -i rc
448
+ local -i rc n=${#TTHEME_SCENES}
449
+ local -x TTHEME_SCENE="" TTHEME_BG_MARGIN=""
450
+ (( n )) && TTHEME_SCENE=${(L)TTHEME_SCENES[(scene % n + n) % n + 1]}
451
+ (( bgrel )) && TTHEME_BG_MARGIN="$bgmx $bgmy"
429
452
  [[ $applied == "$painted" ]] || { __tt_apply "$applied" && painted=$applied }
453
+ __tt_pv_bg_commit $name
430
454
  __tt_pv_bg_close
431
455
  err=$(__tt_cli find $name 2>&1 >/dev/tty)
432
456
  rc=$?
@@ -440,44 +464,91 @@ __tt_pv_bg_find() {
440
464
  msg=${err:-"Find failed for $name"} msgt=300
441
465
  fi
442
466
  (( rc == 0 )) || return 1
443
- unset "bgsrc[$name]"
467
+ __tt_pv_bg_reset $name
444
468
  __tt_bg_load $name
445
469
  bgload[$name]="" bgedit[$name]=1
446
470
  msg=${err:-"Background · $name"} msgt=200
447
471
  return 0
448
472
  }
449
473
 
474
+ __tt_pv_bg_commit() {
475
+ local img
476
+ for img in ${(k)bgedit[(I)${(b)1}(|:*)]}; do
477
+ __tt_bg_write $img
478
+ unset "bgedit[$img]"
479
+ done
480
+ unset "bgview[$1]" "bgswap[$1]"
481
+ }
482
+
483
+ __tt_pv_bg_reset() {
484
+ local img
485
+ for img in ${(k)bgsrc[(I)${(b)1}(|:*)]}; do
486
+ unset "bgsrc[$img]"
487
+ done
488
+ unset "bgview[$1]" "bgswap[$1]"
489
+ }
490
+
450
491
  __tt_pv_bg_images() {
451
492
  __tt_bg_load $1
452
493
  REPLY=${bgimages[$1]:-1}
453
494
  }
454
495
 
455
- __tt_pv_bg_image() {
456
- local name=$tune act=$1 err REPLY
457
- local -i rc
458
- if [[ $act != drop ]]; then
459
- __tt_pv_bg_images $name
460
- (( REPLY > 1 )) || { msg="$name has one image" msgt=200; return 0 }
461
- [[ "${bgsize[$name]} ${bgpos[$name]} ${bgop[$name]} ${bgoff[$name]}" == "$tsnap" ]] || __tt_bg_write $name
496
+ __tt_pv_img() {
497
+ REPLY=$1
498
+ [[ -z $2 || $2 == "${bgact[$1]}" ]] || REPLY=$1:$2
499
+ }
500
+
501
+ __tt_pv_tune_open() {
502
+ local REPLY
503
+ __tt_bg_load $1
504
+ __tt_pv_shows $1
505
+ tpick=$REPLY tune=$1 tf=1 tsnaps=()
506
+ __tt_bg_load $tpick
507
+ tsnaps[$tpick]="${bgsize[$tpick]} ${bgpos[$tpick]} ${bgop[$tpick]} ${bgoff[$tpick]}"
508
+ }
509
+
510
+ __tt_pv_bg_pick() {
511
+ local -a keys=(${=bgpics[$tune]})
512
+ local cur=${tpick##*:} REPLY
513
+ local -i n=${#keys} at
514
+ if (( n < 2 )); then
515
+ msg="$tune has one image" msgt=200
516
+ return 0
462
517
  fi
463
- bgname="" tune=""
518
+ [[ $tpick == *:* ]] || cur=${bgact[$tune]}
519
+ at=${keys[(Ie)$cur]}
520
+ (( at )) || at=1
521
+ at=$(( (at - 1 + $1 + n) % n + 1 ))
522
+ __tt_pv_img $tune $keys[at]
523
+ tpick=$REPLY
524
+ __tt_bg_load $tpick
525
+ (( ${+tsnaps[$tpick]} )) || tsnaps[$tpick]="${bgsize[$tpick]} ${bgpos[$tpick]} ${bgop[$tpick]} ${bgoff[$tpick]}"
526
+ bgname=""
527
+ }
528
+
529
+ __tt_pv_bg_drop() {
530
+ local name=$tune key=${tpick##*:} err
531
+ local -i rc
532
+ [[ $tpick == *:* ]] || key=${bgact[$name]}
533
+ __tt_pv_untune
534
+ __tt_pv_bg_commit $name
464
535
  __tt_pv_bg_close
465
- err=$(__tt_cli image $name $act 2>&1)
536
+ err=$(__tt_cli image $name drop ${key:+$key} 2>&1)
466
537
  rc=$?
467
538
  err=${${err//$'\n'/ }## #}
468
539
  resized=1 bgname="" bgshown="" bgdim=()
469
- unset "bgsrc[$name]"
540
+ __tt_pv_bg_reset $name
470
541
  __tt_bg_load $name
471
542
  bgload[$name]="" bgedit[$name]=1
472
543
  msg=${err:-"Background · $name"} msgt=$(( rc ? 300 : 200 ))
473
544
  [[ -r ${TTHEME_CONFIG:h}/backgrounds/${${name/@/--}/\//--}.conf ]] || return 0
474
- tune=$name tf=1 tsnap="${bgsize[$name]} ${bgpos[$name]} ${bgop[$name]} ${bgoff[$name]}"
545
+ __tt_pv_tune_open $name
475
546
  }
476
547
 
477
548
  __tt_pv_bg_panel() {
478
- local name=$1 z=$'\e[0m' b=$'\e[1m' d=$'\e[2m' c=$ac val sty REPLY
479
- local -a labs=(Size Position Opacity) at=(0 3 6)
480
- local -i r0=$2 col=$3 end=$4 off=${bgoff[$1]} T=$(( $4 - $3 - 19 )) lo=100 hi=100 k i r knob pos=${bgpos[$1]} o
549
+ local name=$1 z=$'\e[0m' b=$'\e[1m' d=$'\e[2m' c=$ac val sty mark REPLY
550
+ local -a labs=(Size Position Opacity) at=(0 3 6) def=(${=bgdef[$1]})
551
+ local -i r0=$2 col=$3 end=$4 off=${bgoff[$1]} T=$(( $4 - $3 - 21 )) lo=100 hi=100 k i r knob pos=${bgpos[$1]} o tuned
481
552
  (( color )) || z= b= d= c=
482
553
  (( T < 8 )) && T=8
483
554
  (( $+commands[sips] )) && lo=20
@@ -507,6 +578,7 @@ __tt_pv_bg_panel() {
507
578
  fi
508
579
  done
509
580
  val=${TTHEME_BG_POSITIONS[pos]}
581
+ tuned=$(( pos != def[2] ))
510
582
  else
511
583
  if (( k == 1 )); then
512
584
  if [[ ${bgsize[$name]} == fill ]]; then
@@ -514,9 +586,12 @@ __tt_pv_bg_panel() {
514
586
  else
515
587
  knob=$(( (${bgsize[$name]} - lo) * (T - 1) / (hi - lo + 1) )) val=${bgsize[$name]}%
516
588
  fi
589
+ tuned=0
590
+ [[ ${bgsize[$name]} == "$def[1]" ]] || tuned=1
517
591
  else
518
592
  o=$(( ${bgop[$name]} * 100 + 0.5 ))
519
593
  knob=$(( o * (T - 1) / 100 )) val=${bgop[$name]}
594
+ tuned=$(( ${bgop[$name]} * 1000 + 0.5 != ${def[3]:-1} * 1000 + 0.5 ))
520
595
  fi
521
596
  (( knob < 0 )) && knob=0
522
597
  (( knob > T - 1 )) && knob=$(( T - 1 ))
@@ -529,8 +604,88 @@ __tt_pv_bg_panel() {
529
604
  out+=$c${(l:knob::━:)}$b"●"$z$d${(l:$(( T - 1 - knob ))::─:)}$z
530
605
  fi
531
606
  fi
532
- out+=$'\e['$r';'$(( end - ${#val} + 1 ))'H'$sty$val$z
607
+ out+=$'\e['$r';'$(( end - ${#val} - 1 ))'H'$sty$val$z
608
+ if (( tuned )); then
609
+ mark=$d
610
+ (( tf == k )) && mark=$b$c
611
+ out+=$'\e['$r';'$end'H'$mark"↺"$z
612
+ fi
613
+ done
614
+ (( split )) && bgstrip="$(( r0 + 8 )) $col $end"
615
+ }
616
+
617
+ __tt_pv_bg_strip() {
618
+ local pal=$tune dir=${TTHEME_CONFIG:h}/backgrounds cur fill want sty top side bot cmd buf="" z=$'\e[0m' d=$'\e[2m' REPLY
619
+ local -a keys=(${=bgpics[$tune]}) wh pd
620
+ local -i r0=$1 col=$2 end=$3 n=${#keys} at show tc tr=3 i k x r id slot first
621
+ if (( n < 2 )); then
622
+ __tt_pv_bg_strip_off
623
+ return 0
624
+ fi
625
+ cur=${tpick##*:}
626
+ [[ $tpick == *:* ]] || cur=${bgact[$pal]}
627
+ at=${keys[(Ie)$cur]}
628
+ (( at )) || at=1
629
+ buf+=$'\e['$r0';'$(( col + 2 ))'H'$d"Images"$z$'\e['$r0';'$(( end - ${#at} - ${#n} ))'H'$d"$at/$n"$z
630
+ pd=(${=bgpic[$pal:$keys[at]]})
631
+ if (( r0 + tr + 3 >= ph )) || ! __tt_bg_dim $dir/$pd[2]; then
632
+ print -rn -- "$buf"
633
+ __tt_pv_bg_strip_off
634
+ return 0
635
+ fi
636
+ wh=(${=bgdim[$dir/$pd[2]]})
637
+ tc=$(( (2 * tr * bgch * wh[1] + wh[2] * bgcw) / (2 * wh[2] * bgcw) ))
638
+ (( tc < 4 )) && tc=4
639
+ (( tc > 16 )) && tc=16
640
+ show=$(( n < 5 ? n : 5 ))
641
+ while (( show > 1 && show * (tc + 3) - 1 > end - col )); do
642
+ (( show-- ))
643
+ done
644
+ first=1
645
+ (( n > show )) && first=$(( ((at - 1 - show / 2) % n + n) % n + 1 ))
646
+ for (( i = 0; i < show; i++ )); do
647
+ k=$(( (first - 1 + i) % n + 1 ))
648
+ x=$(( col + i * (tc + 3) ))
649
+ slot=$(( i + 1 ))
650
+ if (( k == at )); then
651
+ sty=$'\e[1m'$ac top="┏${(l:tc::━:)}┓" side="┃" bot="┗${(l:tc::━:)}┛"
652
+ else
653
+ sty=$d top="╭${(l:tc::─:)}╮" side="│" bot="╰${(l:tc::─:)}╯"
654
+ fi
655
+ buf+=$'\e['$(( r0 + 1 ))';'$x'H'$sty$top$z$'\e['$(( r0 + tr + 2 ))';'$x'H'$sty$bot$z
656
+ for (( r = 0; r < tr; r++ )); do
657
+ buf+=$'\e['$(( r0 + 2 + r ))';'$x'H'$sty$side$z$'\e['$(( r0 + 2 + r ))';'$(( x + tc + 1 ))'H'$sty$side$z
658
+ done
659
+ pd=(${=bgpic[$pal:$keys[k]]})
660
+ fill=$dir/$pd[2]
661
+ [[ -r $fill ]] || continue
662
+ __tt_bg_send $fill
663
+ id=$REPLY
664
+ want="$id $(( r0 + 2 )) $(( x + 1 )) $tc $tr"
665
+ __tt_bg_lasting && [[ ${bgthumb[$slot]} == "$want" ]] && continue
666
+ if [[ -n ${bgthumb[$slot]} ]]; then
667
+ printf -v cmd '\e_Ga=d,d=i,i=%d,p=%d,q=2\e\\' ${${=bgthumb[$slot]}[1]} $(( 700000 + slot ))
668
+ buf+=$cmd
669
+ fi
670
+ printf -v cmd '\e[%d;%dH\e_Ga=p,i=%d,p=%d,c=%d,r=%d,C=1,z=-1,q=2\e\\' $(( r0 + 2 )) $(( x + 1 )) $id $(( 700000 + slot )) $tc $tr
671
+ buf+=$cmd
672
+ bgthumb[$slot]=$want
673
+ done
674
+ for slot in ${(k)bgthumb}; do
675
+ (( slot > show )) || continue
676
+ printf -v cmd '\e_Ga=d,d=i,i=%d,p=%d,q=2\e\\' ${${=bgthumb[$slot]}[1]} $(( 700000 + slot ))
677
+ buf+=$cmd
678
+ unset "bgthumb[$slot]"
679
+ done
680
+ print -rn -- "$buf"
681
+ }
682
+
683
+ __tt_pv_bg_strip_off() {
684
+ local slot
685
+ for slot in ${(k)bgthumb}; do
686
+ printf '\e_Ga=d,d=i,i=%d,p=%d,q=2\e\\' ${${=bgthumb[$slot]}[1]} $(( 700000 + slot ))
533
687
  done
688
+ bgthumb=()
534
689
  }
535
690
 
536
691
  __tt_pv_bg_close() {
@@ -539,27 +694,38 @@ __tt_pv_bg_close() {
539
694
  }
540
695
 
541
696
  __tt_pv_bg_save() {
542
- local name msg REPLY
697
+ local img name note err REPLY
543
698
  local -a saved=()
544
- (( ${#bgedit} )) || return 0
545
- for name in ${(ok)bgedit}; do
546
- if ! __tt_bg_write $name; then
547
- print -u2 "ttheme: could not save the background of $name"
699
+ (( ${#bgedit} + ${#bgswap} )) || return 0
700
+ for img in ${(ok)bgedit}; do
701
+ if ! __tt_bg_write $img; then
702
+ print -u2 "ttheme: could not save the background of ${img%:*}"
703
+ continue
704
+ fi
705
+ (( ${saved[(Ie)${img%:*}]} )) || saved+=(${img%:*})
706
+ done
707
+ for name in ${(ok)bgswap}; do
708
+ if ! err=$(__tt_cli image $name show ${bgswap[$name]} 2>&1); then
709
+ print -u2 -r -- "$err"
548
710
  continue
549
711
  fi
550
- saved+=($name)
712
+ (( ${saved[(Ie)$name]} )) || saved+=($name)
713
+ done
714
+ for name in $saved; do
715
+ __tt_pv_shows $name
716
+ img=$REPLY
551
717
  if [[ ! -r ${TTHEME_CONFIG:h}/backgrounds/${${name/@/--}/\//--}.conf ]]; then
552
- msg="Background · $name none"
553
- elif (( bgoff[$name] )); then
554
- msg="Background · $name off"
718
+ note="Background · $name none"
719
+ elif (( bgoff[$img] )); then
720
+ note="Background · $name off"
555
721
  else
556
- __tt_bg_label $name
557
- msg="Background · $name $REPLY"
722
+ __tt_bg_label $img
723
+ note="Background · $name $REPLY"
558
724
  fi
559
725
  if __tt_color; then
560
- printf '\033[2m%s\033[0m\n' "$msg"
726
+ printf '\033[2m%s\033[0m\n' "$note"
561
727
  else
562
- print -r -- "$msg"
728
+ print -r -- "$note"
563
729
  fi
564
730
  done
565
731
  (( ${#saved} )) && __tt_bg_saved $saved
@@ -71,10 +71,18 @@ __tt_pv_bg_find() { return 1 }
71
71
 
72
72
  __tt_pv_bg_images() { REPLY=1 }
73
73
 
74
- __tt_pv_bg_image() { : }
74
+ __tt_pv_tune_open() { : }
75
+
76
+ __tt_pv_bg_pick() { : }
77
+
78
+ __tt_pv_bg_drop() { : }
75
79
 
76
80
  __tt_pv_bg_panel() { : }
77
81
 
82
+ __tt_pv_bg_strip() { : }
83
+
84
+ __tt_pv_bg_strip_off() { : }
85
+
78
86
  __tt_pv_bg_close() { : }
79
87
 
80
88
  __tt_pv_bg_save() { : }
@@ -27,4 +27,7 @@ __tt_osc_reset() {
27
27
  return 0
28
28
  }
29
29
 
30
- [[ -o interactive && -t 1 ]] && __tt_listen
30
+ () {
31
+ emulate -L zsh ${=${options[xtrace]:#off}:+-o xtrace}
32
+ [[ -o interactive && -t 1 ]] && __tt_listen
33
+ }
@@ -1,23 +1,73 @@
1
- typeset -g TTHEME_WEZTERM_SHOWN=""
1
+ source $TTHEME_HOME/adapters/_bg.zsh
2
+
3
+ typeset -g TTHEME_WEZTERM_SHOWN="" TTHEME_WEZTERM_VIEW=""
2
4
 
3
5
  __tt_keepable() { (( ${TTHEME_TERMINALS[(Ie)wezterm]} )) }
4
6
 
5
- __tt_wezterm_show() {
7
+ __tt_wezterm_var() {
6
8
  local REPLY
7
- __tt_b64s "$1"
8
- printf '\e]1337;SetUserVar=ttheme_shown=%s\a' "$REPLY"
9
+ __tt_b64s "$2"
10
+ __tt_out $'\e]1337;SetUserVar='$1'='$REPLY$'\a'
9
11
  }
10
12
 
11
13
  __tt_shown() {
12
14
  [[ $2 != force && $TTHEME_WEZTERM_SHOWN == $1 ]] && return 1
13
15
  TTHEME_WEZTERM_SHOWN=$1
14
- __tt_wezterm_show $1
16
+ __tt_wezterm_var ttheme_shown $1
15
17
  return 1
16
18
  }
17
19
 
20
+ __tt_bg_shown() { REPLY=$TTHEME_WEZTERM_SHOWN }
21
+
22
+ __tt_bg_refresh() { __tt_wezterm_var ttheme_shown $TTHEME_WEZTERM_SHOWN }
23
+
24
+ __tt_bg_lasting() { return 1 }
25
+
26
+ __tt_bg_cells() {
27
+ local REPLY resp
28
+ __tt_ask $'\e[16t' || return 0
29
+ resp=$REPLY
30
+ [[ $resp == *'[6;'<1->';'<1->t ]] || return 0
31
+ resp=${${resp##*\[6;}%t}
32
+ bgch=${resp%;*} bgcw=${resp#*;}
33
+ }
34
+
35
+ __tt_pv_bg_findable() { return 1 }
36
+
18
37
  __tt_pv_bg_show() {
19
- bgname=$1
20
- __tt_wezterm_show $1
38
+ (( bgcw )) || return 0
39
+ local name=$1 img="" size fit=contain view="" REPLY
40
+ local -i W=$(( pw * bgcw )) H=$(( ph * bgch )) focus=-1
41
+ local -a p=(${=TTHEME_PALETTE[${name%:*}]}) wh
42
+ (( ${#p} >= 20 )) || return 0
43
+ (( $2 )) && TTHEME_WEZTERM_VIEW=-
44
+ bgname=$name
45
+ __tt_bg_load $name
46
+ if [[ $name != "$bginc" || "${bgsize[$name]} ${bgpos[$name]} ${bgop[$name]} ${bgoff[$name]}" != "${bgload[$name]}" ]]; then
47
+ size=${bgsize[$name]}
48
+ if [[ $size == fill ]]; then
49
+ img=${bgfill[$name]} size=100 fit=cover
50
+ elif [[ "$size ${bgpos[$name]}" == "${bgshotkey[$name]}" && -r ${bgshot[$name]} ]]; then
51
+ img=${bgshot[$name]} size=100 fit=cover
52
+ else
53
+ img=${bgsrc[$name]} focus=${bgfocus[$name]}
54
+ fi
55
+ (( bgoff[$name] )) && img=""
56
+ view="$p[1]||1|$W|$H|0|0|0|0|5"
57
+ if [[ -n $img ]] && __tt_bg_dim "$img"; then
58
+ wh=(${=bgdim[$img]})
59
+ __tt_bg_frame $wh[1] $wh[2] $W $H $size ${bgpos[$name]} $fit $focus
60
+ view="$p[1]|$img|${bgop[$name]}|$W|$H|${REPLY// /|}|${bgpos[$name]}"
61
+ fi
62
+ fi
63
+ [[ $view == "$TTHEME_WEZTERM_VIEW" ]] && return 0
64
+ TTHEME_WEZTERM_VIEW=$view
65
+ __tt_wezterm_var ttheme_view "$view"
21
66
  }
22
67
 
23
- __tt_pv_bg_close() { [[ -z $TTHEME_WEZTERM_SHOWN ]] || __tt_wezterm_show $TTHEME_WEZTERM_SHOWN }
68
+ __tt_pv_bg_close() {
69
+ (( bgcw )) && { printf '\e_Ga=d,d=A,q=2\e\\'; __tt_bg_forget }
70
+ [[ -n $TTHEME_WEZTERM_VIEW ]] || return 0
71
+ TTHEME_WEZTERM_VIEW=""
72
+ __tt_wezterm_var ttheme_view ""
73
+ }