@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.
- package/README.md +15 -6
- package/bin/ttheme.js +428 -228
- package/bin/ttheme.js.map +1 -1
- package/dist/manifest.json +127 -16
- package/package.json +1 -2
- package/shell/adapters/_bg.zsh +52 -5
- package/shell/adapters/_osc.zsh +20 -10
- package/shell/adapters/_wired.zsh +4 -0
- package/shell/adapters/iterm2.zsh +86 -10
- package/shell/adapters/konsole.zsh +225 -21
- package/shell/adapters/terminal-app.zsh +265 -6
- package/shell/adapters/warp.zsh +65 -20
- package/shell/adapters/wezterm.zsh +13 -4
- package/shell/preview.zsh +332 -26
- package/shell/ttheme.zsh +28 -19
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
source $TTHEME_HOME/adapters/_bg.zsh
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
8
|
+
__tt_konsole_wired() { (( ${TTHEME_TERMINALS[(Ie)konsole]} )) }
|
|
8
9
|
|
|
9
|
-
|
|
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
|
-
|
|
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
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
[
|
|
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 ]]
|
|
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
|
}
|