@kecan0406/ttheme 1.2.9 → 1.2.10

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,12 +1,15 @@
1
- __tt_paints() { (( ${TTHEME_TERMINALS[(Ie)konsole]} )) }
1
+ source $TTHEME_HOME/adapters/_bg.zsh
2
2
 
3
- __tt_unpainted() {
4
- print -u2 "ttheme: Konsole draws a palette's 16 colors only from the color schemes init writes — wire it with \`npx @kecan0406/ttheme@latest init\`"
5
- }
3
+ zmodload -F zsh/files b:zf_rm b:zf_mkdir 2>/dev/null
4
+
5
+ typeset -g TTHEME_KONSOLE_SHOWN="" TTHEME_KONSOLE_NAME="" TTHEME_KONSOLE_OWN="" TTHEME_KONSOLE_VIEW="" TTHEME_KONSOLE_VIEWED=""
6
+ typeset -gi TTHEME_KONSOLE_VIEWS=0 TTHEME_KONSOLE_LINKS=-1
6
7
 
7
- __tt_keepable() { __tt_paints }
8
+ __tt_konsole_wired() { (( ${TTHEME_TERMINALS[(Ie)konsole]} )) }
8
9
 
9
- __tt_takes_default() { __tt_osc_reset }
10
+ __tt_keepable() { __tt_konsole_wired }
11
+
12
+ __tt_takes_default() { __tt_konsole_wired && __tt_osc_reset }
10
13
 
11
14
  __tt_reverts() { return 1 }
12
15
 
@@ -14,21 +17,161 @@ __tt_follows_focus() { return 0 }
14
17
 
15
18
  __tt_scheme() {
16
19
  local -a p=(${=TTHEME_PALETTE[$1]})
17
- REPLY="ColorScheme=ttheme-${${1/@/--}/\//--};UseCustomCursorColor=true;customCursorColor=$p[3]"
20
+ local -A v=(${=TTHEME_KONSOLE_SCHEMES})
21
+ local stem=${${1/@/--}/\//--}
22
+ REPLY=ttheme-$stem
23
+ [[ -n $v[$stem] && -r ${XDG_DATA_HOME:-$HOME/.local/share}/konsole/$REPLY.$v[$stem].colorscheme ]] && REPLY+=.$v[$stem]
24
+ REPLY="ColorScheme=$REPLY;UseCustomCursorColor=true;customCursorColor=$p[3]"
25
+ }
26
+
27
+ __tt_konsole_ini() {
28
+ local line group=""
29
+ REPLY=""
30
+ [[ -r $1 ]] || return 1
31
+ for line in "${(@f)$(<$1)}"; do
32
+ if [[ $line == \[*\] ]]; then
33
+ group=${${line#\[}%\]}
34
+ elif [[ $group == $2 && $line == $3=* ]]; then
35
+ REPLY=${line#*=}
36
+ return 0
37
+ fi
38
+ done
39
+ return 1
40
+ }
41
+
42
+ __tt_konsole_own() {
43
+ local file scheme="" use="" cursor="" found dir REPLY
44
+ local -i depth=0
45
+ __tt_konsole_ini ${XDG_CONFIG_HOME:-$HOME/.config}/konsolerc 'Desktop Entry' DefaultProfile && file=$REPLY
46
+ while (( depth++ < 8 )) && [[ -n $file && $file != FALLBACK/ ]]; do
47
+ found=""
48
+ for dir in ${XDG_DATA_HOME:-$HOME/.local/share} ${(s.:.)${XDG_DATA_DIRS:-/usr/local/share:/usr/share}}; do
49
+ [[ -r $dir/konsole/${file%.profile}.profile ]] && { found=$dir/konsole/${file%.profile}.profile; break }
50
+ done
51
+ [[ -n $found ]] || break
52
+ [[ -z $scheme ]] && __tt_konsole_ini $found Appearance ColorScheme && scheme=$REPLY
53
+ [[ -z $use ]] && __tt_konsole_ini $found 'Cursor Options' UseCustomCursorColor && use=$REPLY
54
+ [[ -z $cursor ]] && __tt_konsole_ini $found 'Cursor Options' CustomCursorColor && cursor=$REPLY
55
+ file=""
56
+ __tt_konsole_ini $found General Parent && file=$REPLY
57
+ done
58
+ TTHEME_KONSOLE_OWN="ColorScheme=${scheme:-Breeze};UseCustomCursorColor=false"
59
+ if [[ $use == true && $cursor == <0-255>,<0-255>,<0-255>(|,*) ]]; then
60
+ local -a c=(${(s:,:)cursor})
61
+ printf -v REPLY '#%02x%02x%02x' $c[1] $c[2] $c[3]
62
+ TTHEME_KONSOLE_OWN="ColorScheme=${scheme:-Breeze};UseCustomCursorColor=true;customCursorColor=$REPLY"
63
+ fi
64
+ }
65
+
66
+ __tt_links() {
67
+ (( TTHEME_KONSOLE_LINKS >= 0 )) || __tt_konsole_links
68
+ (( TTHEME_KONSOLE_LINKS ))
69
+ }
70
+
71
+ __tt_konsole_links() {
72
+ local file found dir REPLY
73
+ local -i depth=0
74
+ TTHEME_KONSOLE_LINKS=0
75
+ __tt_konsole_ini ${XDG_CONFIG_HOME:-$HOME/.config}/konsolerc 'Desktop Entry' DefaultProfile && file=$REPLY
76
+ while (( depth++ < 8 )) && [[ -n $file && $file != FALLBACK/ ]]; do
77
+ found=""
78
+ for dir in ${XDG_DATA_HOME:-$HOME/.local/share} ${(s.:.)${XDG_DATA_DIRS:-/usr/local/share:/usr/share}}; do
79
+ [[ -r $dir/konsole/${file%.profile}.profile ]] && { found=$dir/konsole/${file%.profile}.profile; break }
80
+ done
81
+ [[ -n $found ]] || return 0
82
+ if __tt_konsole_ini $found 'Interaction Options' AllowEscapedLinks; then
83
+ [[ $REPLY == true ]] && TTHEME_KONSOLE_LINKS=1
84
+ return 0
85
+ fi
86
+ file=""
87
+ __tt_konsole_ini $found General Parent && file=$REPLY
88
+ done
89
+ }
90
+
91
+ __tt_konsole_new() {
92
+ if ! __tt_konsole_wired; then
93
+ [[ -n $TTHEME_KONSOLE_OWN ]] || __tt_konsole_own
94
+ REPLY=$TTHEME_KONSOLE_OWN
95
+ elif [[ -n $TTHEME_STARTUP && -n ${TTHEME_PALETTE[$TTHEME_STARTUP]} ]]; then
96
+ __tt_scheme $TTHEME_STARTUP
97
+ else
98
+ REPLY=$TTHEME_KONSOLE_BASE
99
+ fi
100
+ }
101
+
102
+ __tt_konsole_show() {
103
+ [[ $3 != force && $1 == "$TTHEME_KONSOLE_SHOWN" ]] && return 0
104
+ local REPLY=$1
105
+ __tt_out $'\e]50;'$REPLY$'\a'
106
+ TTHEME_KONSOLE_SHOWN=$1 TTHEME_KONSOLE_NAME=$2
107
+ }
108
+
109
+ __tt_konsole_rgb() { REPLY="$(( 16#${1:1:2} )),$(( 16#${1:3:2} )),$(( 16#${1:5:2} ))" }
110
+
111
+ __tt_konsole_faint() {
112
+ REPLY="$(( (16#${1:1:2} + 16#${2:1:2} + 1) / 2 )),$(( (16#${1:3:2} + 16#${2:3:2} + 1) / 2 )),$(( (16#${1:5:2} + 16#${2:5:2} + 1) / 2 ))"
113
+ }
114
+
115
+ __tt_konsole_view() {
116
+ local -a p=(${=1}) lines
117
+ local dir=${XDG_DATA_HOME:-$HOME/.local/share}/konsole name=$2 REPLY
118
+ local -i i
119
+ (( ${#p} >= 20 )) && [[ $p[1] == \#?????? ]] || return 1
120
+ __tt_konsole_rgb $p[1]
121
+ lines=('[Background]' "Color=$REPLY" '' '[BackgroundFaint]' "Color=$REPLY" '' '[BackgroundIntense]' "Color=$REPLY" '')
122
+ for (( i = 0; i < 8; i++ )); do
123
+ __tt_konsole_rgb $p[i+5]
124
+ lines+=("[Color$i]" "Color=$REPLY" '')
125
+ __tt_konsole_faint $p[i+5] $p[1]
126
+ lines+=("[Color${i}Faint]" "Color=$REPLY" '')
127
+ __tt_konsole_rgb $p[i+13]
128
+ lines+=("[Color${i}Intense]" "Color=$REPLY" '')
129
+ done
130
+ __tt_konsole_rgb $p[2]
131
+ lines+=('[Foreground]' "Color=$REPLY" '')
132
+ __tt_konsole_faint $p[2] $p[1]
133
+ lines+=('[ForegroundFaint]' "Color=$REPLY" '')
134
+ __tt_konsole_rgb $p[2]
135
+ lines+=('[ForegroundIntense]' "Color=$REPLY" '' '[General]' 'Blur=false' 'ColorRandomization=false' "Description=ttheme · $name" 'Opacity=1' 'Wallpaper=' '')
136
+ [[ -d $dir ]] || zf_mkdir -p $dir 2>/dev/null || return 1
137
+ name=ttheme-view.$$.$(( ++TTHEME_KONSOLE_VIEWS ))
138
+ __tt_put $dir/$name.colorscheme "${lines[@]}" || return 1
139
+ [[ -z $TTHEME_KONSOLE_VIEWED ]] || zf_rm -f -- $TTHEME_KONSOLE_VIEWED 2>/dev/null
140
+ TTHEME_KONSOLE_VIEWED=$TTHEME_KONSOLE_VIEW TTHEME_KONSOLE_VIEW=$dir/$name.colorscheme
141
+ reply=("ColorScheme=$name;UseCustomCursorColor=true;customCursorColor=$p[3]")
142
+ }
143
+
144
+ __tt_konsole_bye() {
145
+ emulate -L zsh ${=${options[xtrace]:#off}:+-o xtrace}
146
+ [[ -z $TTHEME_KONSOLE_VIEW ]] || zf_rm -f -- $TTHEME_KONSOLE_VIEW 2>/dev/null
147
+ [[ -z $TTHEME_KONSOLE_VIEWED ]] || zf_rm -f -- $TTHEME_KONSOLE_VIEWED 2>/dev/null
148
+ return 0
149
+ }
150
+
151
+ __tt_cli_env() {
152
+ local REPLY=$TTHEME_KONSOLE_SHOWN
153
+ [[ -n $REPLY || -n $TTHEME_PAINTED ]] || __tt_konsole_new
154
+ [[ -n $REPLY ]] && pass+=(TTHEME_KONSOLE_LOOK=$REPLY)
18
155
  }
19
156
 
20
157
  __tt_osc_apply() {
21
- local -a p=(${=1})
158
+ local -a p=(${=1}) reply
22
159
  (( ${#p} >= 20 )) || return 1
23
160
  local REPLY
24
161
  __tt_name_of "$1"
25
- if __tt_paints && [[ -n ${TTHEME_PALETTE[$REPLY]} ]]; then
26
- __tt_scheme $REPLY
27
- __tt_out $'\e]50;'$REPLY$'\a'
28
- elif [[ $p[1] == - ]]; then
29
- __tt_out $'\e]10;'$p[2]$'\e\\'
162
+ if __tt_konsole_wired && [[ -n ${TTHEME_PALETTE[$REPLY]} ]]; then
163
+ local name=$REPLY
164
+ __tt_scheme $name
165
+ __tt_konsole_show "$REPLY" $name force
166
+ elif __tt_konsole_view "$1" "$REPLY"; then
167
+ __tt_konsole_show "$reply[1]" "" force
30
168
  else
31
- __tt_out $'\e]11;'$p[1]$'\e\\\e]10;'$p[2]$'\e\\'
169
+ if [[ $p[1] == - ]]; then
170
+ __tt_out $'\e]10;'$p[2]$'\e\\'
171
+ else
172
+ __tt_out $'\e]11;'$p[1]$'\e\\\e]10;'$p[2]$'\e\\'
173
+ fi
174
+ TTHEME_KONSOLE_SHOWN=""
32
175
  fi
33
176
  export TTHEME_PAINTED=1
34
177
  (( TTHEME_TMUX )) && tmux set -q @ttheme_bg "$p[1]" 2>/dev/null
@@ -37,15 +180,76 @@ __tt_osc_apply() {
37
180
  }
38
181
 
39
182
  __tt_osc_reset() {
40
- local REPLY=$TTHEME_KONSOLE_BASE
41
- if __tt_paints; then
42
- [[ -n $TTHEME_STARTUP && -n ${TTHEME_PALETTE[$TTHEME_STARTUP]} ]] && __tt_scheme $TTHEME_STARTUP
43
- __tt_out $'\e]50;'$REPLY$'\a'
44
- else
45
- __tt_out $'\e]110;\e\\\e]111;\e\\'
46
- fi
183
+ local REPLY name=""
184
+ __tt_konsole_wired && [[ -n ${TTHEME_PALETTE[$TTHEME_STARTUP]} ]] && name=$TTHEME_STARTUP
185
+ __tt_konsole_new
186
+ __tt_konsole_show "$REPLY" "$name" force
47
187
  unset TTHEME_PAINTED
48
188
  (( TTHEME_TMUX )) && tmux set -qu @ttheme_bg 2>/dev/null
49
189
  __tt_worn ""
50
190
  return 0
51
191
  }
192
+
193
+ __tt_reloaded() {
194
+ local REPLY name=""
195
+ __tt_konsole_wired || return 0
196
+ if [[ -z $TTHEME_PAINTED ]]; then
197
+ [[ -n ${TTHEME_PALETTE[$TTHEME_STARTUP]} ]] && name=$TTHEME_STARTUP
198
+ __tt_konsole_new
199
+ else
200
+ __tt_name_of "$TTHEME_SPEC"
201
+ name=$REPLY
202
+ [[ -n ${TTHEME_PALETTE[$name]} ]] || return 0
203
+ __tt_scheme $name
204
+ fi
205
+ __tt_konsole_show "$REPLY" $name
206
+ return 0
207
+ }
208
+
209
+ __tt_pv_leave() {
210
+ [[ $painted != "$orig" ]] || return 0
211
+ if [[ -n $orig ]]; then
212
+ __tt_apply "$orig"
213
+ else
214
+ __tt_osc_reset
215
+ fi
216
+ painted=$orig
217
+ }
218
+
219
+ __tt_bg_shown() {
220
+ REPLY=$TTHEME_KONSOLE_NAME
221
+ [[ -n $REPLY ]]
222
+ }
223
+
224
+ __tt_bg_refresh() {
225
+ local REPLY name=$TTHEME_KONSOLE_NAME
226
+ [[ -n $name ]] && __tt_palettes_load || return 0
227
+ __tt_scheme $name
228
+ __tt_konsole_show "$REPLY" $name
229
+ return 0
230
+ }
231
+
232
+ __tt_bg_cells() {
233
+ local REPLY resp
234
+ __tt_ask $'\e[16t' || return 0
235
+ resp=$REPLY
236
+ [[ $resp == *'[6;'<1->';'<1->t ]] || return 0
237
+ resp=${${resp##*\[6;}%t}
238
+ bgch=${resp%;*} bgcw=${resp#*;}
239
+ }
240
+
241
+ __tt_bg_crop() {
242
+ __tt_bg_send $1
243
+ REPLY="$REPLY $4"
244
+ }
245
+
246
+ () {
247
+ emulate -L zsh ${=${options[xtrace]:#off}:+-o xtrace}
248
+ local REPLY
249
+ [[ -o interactive ]] || return 0
250
+ autoload -Uz add-zsh-hook
251
+ add-zsh-hook zshexit __tt_konsole_bye
252
+ [[ -t 1 && -z $TTHEME_PAINTED && -z $TMUX && -n $TTHEME_STARTUP && -n ${TTHEME_PALETTE[$TTHEME_STARTUP]} ]] && __tt_konsole_wired || return 0
253
+ __tt_scheme $TTHEME_STARTUP
254
+ __tt_konsole_show "$REPLY" $TTHEME_STARTUP force
255
+ }
@@ -1,11 +1,26 @@
1
- typeset -g TTHEME_TERMINAL_BASE=""
1
+ source $TTHEME_HOME/adapters/_bg.zsh
2
+
3
+ typeset -g TTHEME_TERMINAL_BASE="" TTHEME_TERMINAL_VIEW=""
4
+ typeset -gi TTHEME_TERMINAL_RFD=0 TTHEME_TERMINAL_WFD=0 TTHEME_TERMINAL_PID=0 TTHEME_TERMINAL_VIEWS=0 TTHEME_TERMINAL_RESHAPE=0
5
+ (( ${+TTHEME_TERMINAL_SHOWN} )) || typeset -gx TTHEME_TERMINAL_SHOWN=""
6
+
7
+ __tt_terminal_wired() { (( ${TTHEME_TERMINALS[(Ie)terminal-app]} )) }
8
+
9
+ __tt_keepable() { __tt_terminal_wired }
10
+
11
+ __tt_follows_focus() { return 0 }
12
+
13
+ __tt_pv_bg_findable() { return 1 }
2
14
 
3
15
  __tt_hear() {
4
- local q=$'\e]11;?\e\\\e]10;?\e\\\e]12;?\e\\\e]17;?\e\\' v i
16
+ local q=$'\e]11;?\e\\\e]10;?\e\\\e]12;?\e\\\e]17;?\e\\' v i resp
5
17
  local -A got
6
18
  for i in {0..15}; do q+=$'\e]4;'$i$';?\e\\'; done
19
+ __tt_terminal_wired && q+=$'\e[14t'
7
20
  __tt_ask $q || return 1
8
- __tt_colors "$REPLY"
21
+ resp=$REPLY
22
+ [[ $resp == *'[4;'<1->';'<1->t* ]] && __tt_terminal_shape ${${resp##*\[4;}%%t*}
23
+ __tt_colors "$resp"
9
24
  REPLY=""
10
25
  v="$got[11] $got[10] $got[12] ${got[17]:-$got[11]}"
11
26
  for i in {0..15}; do v+=" ${got[4;$i]}"; done
@@ -15,17 +30,261 @@ __tt_hear() {
15
30
 
16
31
  __tt_heard() { TTHEME_TERMINAL_BASE=$1 }
17
32
 
18
- __tt_takes_default() { return 1 }
33
+ __tt_terminal_shape() {
34
+ local -a hw=(${(s:;:)1})
35
+ local f=$TTHEME_STATE_DIR/terminal-app.window want was=""
36
+ (( ${#hw} == 2 )) || return 0
37
+ want=$hw[2]x$hw[1]
38
+ [[ -r $f ]] && was=$(<$f)
39
+ [[ $want != "$was" ]] || return 0
40
+ [[ -d $TTHEME_STATE_DIR ]] || mkdir -p $TTHEME_STATE_DIR 2>/dev/null
41
+ __tt_put $f "$want" 2>/dev/null
42
+ if [[ $was == <1->x<1-> ]]; then
43
+ local -i a=$(( 1000 * hw[2] / hw[1] )) b=$(( 1000 * ${was%x*} / ${was#*x} ))
44
+ (( a * 100 > b * 104 || b * 100 > a * 104 )) || return 0
45
+ fi
46
+ TTHEME_TERMINAL_RESHAPE=1
47
+ }
48
+
49
+ __tt_follows_prompt() { __tt_terminal_wired }
50
+
51
+ __tt_prompted() {
52
+ emulate -L zsh ${=${options[xtrace]:#off}:+-o xtrace}
53
+ (( TTHEME_TERMINAL_RESHAPE )) || return 0
54
+ TTHEME_TERMINAL_RESHAPE=0
55
+ [[ -n $TTHEME_TERMINAL_PICTURES && -n $TTHEME_ORDER[1] ]] || return 0
56
+ __tt_cli image $TTHEME_ORDER[1] tuned >/dev/null 2>&1 &!
57
+ }
58
+
59
+ __tt_takes_default() { __tt_terminal_wired && __tt_osc_reset }
19
60
 
20
61
  __tt_reverts() { return 1 }
21
62
 
63
+ __tt_terminal_tell() {
64
+ local out
65
+ out=$(osascript -e 'on run argv' -e "tell application \"Terminal\"" -e "if not (exists settings set (item 2 of argv)) then return \"missing\"" \
66
+ -e 'set default settings to settings set (item 2 of argv)' -e 'set startup settings to settings set (item 2 of argv)' \
67
+ -e 'end tell' -e 'return "ok"' -e 'end run' "$@" 2>/dev/null)
68
+ [[ $out == ok ]]
69
+ }
70
+
71
+ __tt_terminal_switch() {
72
+ REPLY=""
73
+ [[ -n $TTY && -n $1 ]] && (( ! TTHEME_TMUX )) && __tt_terminal_wired || return 1
74
+ local base=${TTHEME_TERMINAL_APP_BASE:-Basic}
75
+ if (( TTHEME_TERMINAL_WFD )); then
76
+ print -r -u $TTHEME_TERMINAL_WFD -- "tab"$'\t'"$TTY"$'\t'"$1"$'\t'"$base" 2>/dev/null &&
77
+ read -r -t 2 -u $TTHEME_TERMINAL_RFD REPLY
78
+ else
79
+ REPLY=$(osascript -l JavaScript $TTHEME_HOME/terminal-app.js tab $TTY "$1" "$base" 2>/dev/null)
80
+ fi
81
+ [[ $REPLY == worn ]]
82
+ }
83
+
84
+ __tt_terminal_version() {
85
+ local -A v=(${=TTHEME_TERMINAL_PICTURES})
86
+ REPLY="$1 ${v[${${1/@/--}/\//--}]:--}"
87
+ }
88
+
89
+ __tt_terminal_wear() {
90
+ local REPLY want
91
+ __tt_terminal_version $1
92
+ want=$REPLY
93
+ [[ $want == "$TTHEME_TERMINAL_SHOWN" ]] && return 0
94
+ if __tt_terminal_switch "ttheme · $1"; then
95
+ TTHEME_TERMINAL_SHOWN=$want
96
+ return 0
97
+ fi
98
+ TTHEME_TERMINAL_SHOWN=""
99
+ return 1
100
+ }
101
+
102
+ __tt_osc_apply() {
103
+ local -a p=(${=1})
104
+ (( ${#p} >= 20 )) || return 1
105
+ local REPLY
106
+ __tt_name_of "$1"
107
+ if ! __tt_terminal_wired || [[ ${TTHEME_PALETTE[$REPLY]} != "$1" ]] || ! __tt_terminal_wear $REPLY; then
108
+ [[ -n $TTHEME_TERMINAL_SHOWN ]] && __tt_terminal_switch "${TTHEME_TERMINAL_APP_BASE:-Basic}"
109
+ TTHEME_TERMINAL_SHOWN=""
110
+ __tt_osc_colors "$1"
111
+ __tt_out "$REPLY"
112
+ fi
113
+ export TTHEME_PAINTED=1
114
+ (( TTHEME_TMUX )) && tmux set -q @ttheme_bg "$p[1]" 2>/dev/null
115
+ __tt_worn "$1"
116
+ return 0
117
+ }
118
+
22
119
  __tt_osc_reset() {
23
- [[ -n $TTHEME_TERMINAL_BASE ]] && __tt_osc_apply "$TTHEME_TERMINAL_BASE"
120
+ local spec=${TTHEME_STARTUP:+${TTHEME_PALETTE[$TTHEME_STARTUP]}} REPLY
121
+ if __tt_terminal_wired && [[ -n $spec ]]; then
122
+ __tt_osc_apply "$spec"
123
+ elif __tt_terminal_wired && [[ -n $TTHEME_TERMINAL_APP_BASE ]] && __tt_terminal_switch "$TTHEME_TERMINAL_APP_BASE"; then
124
+ TTHEME_TERMINAL_SHOWN=""
125
+ elif [[ -n $TTHEME_TERMINAL_BASE ]]; then
126
+ __tt_osc_apply "$TTHEME_TERMINAL_BASE"
127
+ fi
24
128
  unset TTHEME_PAINTED
25
129
  return 0
26
130
  }
27
131
 
132
+ __tt_terminal_follow() {
133
+ local REPLY name=${TTHEME_TERMINAL_SHOWN%% *}
134
+ [[ -n $name ]] || return 0
135
+ __tt_terminal_version $name
136
+ [[ $REPLY == "$TTHEME_TERMINAL_SHOWN" ]] && return 0
137
+ if [[ -z ${TTHEME_PALETTE[$name]} ]]; then
138
+ TTHEME_TERMINAL_SHOWN=""
139
+ elif ! __tt_terminal_wear $name; then
140
+ __tt_osc_colors "${TTHEME_PALETTE[$name]}"
141
+ __tt_out "$REPLY"
142
+ fi
143
+ }
144
+
145
+ __tt_reloaded() {
146
+ __tt_terminal_wired || return 0
147
+ local want f=$TTHEME_STATE_DIR/terminal-app.default was=""
148
+ __tt_terminal_follow
149
+ want=$(defaults read com.apple.Terminal 'Default Window Settings' 2>/dev/null) || return 0
150
+ [[ -r $f ]] && was=$(<$f)
151
+ [[ -n $want && $want != "$was" ]] || return 0
152
+ __tt_terminal_tell default "$want" && __tt_put $f "$want"
153
+ return 0
154
+ }
155
+
156
+ __tt_cli_env() {
157
+ [[ -n $TTHEME_TERMINAL_SHOWN ]] && pass+=(TTHEME_TERMINAL_SHOWN=$TTHEME_TERMINAL_SHOWN TTHEME_TTY=$TTY)
158
+ }
159
+
160
+ __tt_pv_leave() {
161
+ [[ $painted != "$orig" ]] || return 0
162
+ if [[ -n $orig ]]; then
163
+ __tt_apply "$orig"
164
+ else
165
+ __tt_osc_reset
166
+ fi
167
+ painted=$orig
168
+ }
169
+
170
+ __tt_bg_tints() { return 1 }
171
+
172
+ __tt_bg_shown() {
173
+ REPLY=${TTHEME_TERMINAL_SHOWN%% *}
174
+ [[ -n $REPLY ]]
175
+ }
176
+
177
+ __tt_bg_cells() {
178
+ local REPLY resp
179
+ local -a px cells
180
+ __tt_ask $'\e[14t\e[18t' || return 0
181
+ resp=$REPLY
182
+ [[ $resp == *'[4;'<1->';'<1->t* && $resp == *'[8;'<1->';'<1->t* ]] || return 0
183
+ px=(${(s:;:)${${resp##*\[4;}%%t*}}) cells=(${(s:;:)${${resp##*\[8;}%%t*}})
184
+ bgch=$(( 2 * px[1] / cells[1] )) bgcw=$(( 2 * px[2] / cells[2] ))
185
+ }
186
+
187
+ __tt_bg_send() { return 1 }
188
+
189
+ __tt_bg_wipe() { REPLY="" }
190
+
191
+ __tt_bg_refresh() {
192
+ TTHEME_TERMINAL_VIEW=""
193
+ __tt_palettes_load && __tt_terminal_follow
194
+ return 0
195
+ }
196
+
197
+ __tt_pv_bg_open() {
198
+ setopt localoptions nomonitor nonotify
199
+ bgcw=0 bgch=0 bginc="" bgrel=0 bgmx=0 bgmy=0 bganchor=0
200
+ local REPLY
201
+ __tt_bg_shown && bginc=$REPLY
202
+ (( TTHEME_TMUX )) && return 0
203
+ __tt_bg_cells
204
+ TTHEME_TYPED=
205
+ __tt_terminal_wired && [[ -n $TTY ]] || return 0
206
+ coproc osascript -l JavaScript $TTHEME_HOME/terminal-app.js serve 2>/dev/null
207
+ exec {TTHEME_TERMINAL_RFD}<&p {TTHEME_TERMINAL_WFD}>&p
208
+ TTHEME_TERMINAL_PID=$!
209
+ }
210
+
211
+ __tt_terminal_tuned() {
212
+ [[ $1 == *:* ]] && return 0
213
+ __tt_bg_load $1
214
+ [[ "${bgsize[$1]} ${bgpos[$1]} ${bgop[$1]} ${bgoff[$1]}" != "${bgload[$1]}" ]]
215
+ }
216
+
217
+ __tt_terminal_view() {
218
+ local name=$1 pal=${1%:*} img out place stem REPLY
219
+ local -a wh fr held
220
+ local -i W=$(( pw * bgcw )) H=$(( ph * bgch ))
221
+ stem=${${pal/@/--}/\//--}
222
+ held=(${TTHEME_CONFIG:h}/terminal-app/ttheme-$stem.*.png(N))
223
+ (( ${#held} && W && H )) || return 1
224
+ __tt_bg_load $name
225
+ if [[ ${bgsize[$name]} == fill ]]; then
226
+ img=${bgfill[$name]}
227
+ __tt_bg_dim "$img" || return 1
228
+ wh=(${=bgdim[$img]})
229
+ __tt_bg_frame $wh[1] $wh[2] $W $H 100 ${bgpos[$name]} cover
230
+ else
231
+ img=${bgsrc[$name]}
232
+ __tt_bg_dim "$img" || return 1
233
+ wh=(${=bgdim[$img]})
234
+ __tt_bg_frame $wh[1] $wh[2] $W $H ${bgsize[$name]} ${bgpos[$name]} contain ${bgfocus[$name]}
235
+ fi
236
+ fr=(${=REPLY})
237
+ printf -v place '%dx%d%+d%+d' $fr
238
+ out=${held[1]:h}/ttheme-$stem.v$$-$(( ++TTHEME_TERMINAL_VIEWS )).png
239
+ __tt_cli flatten "$img" "$out" "${${TTHEME_PALETTE[$pal]}%% *}" "$(( bgoff[$name] ? 0 : ${bgop[$name]} ))" ${W}x$H $place $held[1] >/dev/null 2>&1 || return 1
240
+ TTHEME_TERMINAL_VIEW=$name
241
+ __tt_terminal_switch "ttheme · $pal" && TTHEME_TERMINAL_SHOWN="$pal -"
242
+ return 0
243
+ }
244
+
245
+ __tt_terminal_unview() {
246
+ [[ -n $TTHEME_TERMINAL_VIEW ]] || return 0
247
+ local pal=${TTHEME_TERMINAL_VIEW%:*}
248
+ TTHEME_TERMINAL_VIEW=""
249
+ __tt_cli image $pal tuned >/dev/null 2>&1
250
+ __tt_palettes_load
251
+ [[ ${TTHEME_TERMINAL_SHOWN%% *} == $pal ]] || return 0
252
+ TTHEME_TERMINAL_SHOWN=""
253
+ __tt_terminal_wear $pal
254
+ }
255
+
256
+ __tt_pv_bg_show() {
257
+ (( bgcw )) || return 0
258
+ bgname=$1
259
+ if __tt_terminal_tuned $1; then
260
+ __tt_terminal_view $1
261
+ elif [[ -n $TTHEME_TERMINAL_VIEW ]]; then
262
+ __tt_terminal_unview
263
+ fi
264
+ return 0
265
+ }
266
+
267
+ __tt_pv_bg_close() {
268
+ setopt localoptions nomonitor nonotify
269
+ (( ${+bgedit[$bgname]} )) || [[ -n $bgname && ${bgview[${bgname%:*}]} == "$bgname" ]] || __tt_terminal_unview
270
+ (( TTHEME_TERMINAL_WFD )) && exec {TTHEME_TERMINAL_WFD}>&-
271
+ (( TTHEME_TERMINAL_RFD )) && exec {TTHEME_TERMINAL_RFD}<&-
272
+ (( TTHEME_TERMINAL_PID )) && { kill $TTHEME_TERMINAL_PID 2>/dev/null; wait $TTHEME_TERMINAL_PID 2>/dev/null }
273
+ TTHEME_TERMINAL_WFD=0 TTHEME_TERMINAL_RFD=0 TTHEME_TERMINAL_PID=0
274
+ return 0
275
+ }
276
+
28
277
  () {
29
278
  emulate -L zsh ${=${options[xtrace]:#off}:+-o xtrace}
30
- [[ -o interactive && -t 1 ]] && __tt_listen
279
+ [[ -o interactive && -t 1 ]] || return 0
280
+ __tt_listen
281
+ local spec=${TTHEME_STARTUP:+${TTHEME_PALETTE[$TTHEME_STARTUP]}} REPLY
282
+ [[ -n $spec && -z $TTHEME_PAINTED && ${TTHEME_TERMINAL_BASE%% *} == "${spec%% *}" ]] && __tt_terminal_wired || return 0
283
+ if [[ $TTHEME_TERMINAL_BASE == "$spec" ]]; then
284
+ __tt_terminal_version $TTHEME_STARTUP
285
+ TTHEME_TERMINAL_SHOWN=$REPLY
286
+ else
287
+ __tt_osc_apply "$spec"
288
+ unset TTHEME_PAINTED
289
+ fi
31
290
  }