@kecan0406/ttheme 1.2.3 → 1.2.4
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/bin/ttheme.js +157 -156
- package/bin/ttheme.js.map +1 -1
- package/dist/manifest.json +1 -1
- package/package.json +1 -1
- package/shell/adapters/_osc.zsh +2 -0
- package/shell/adapters/_wired.zsh +21 -13
- package/shell/adapters/ghostty.zsh +195 -0
- package/shell/ttheme.zsh +37 -14
package/dist/manifest.json
CHANGED
package/package.json
CHANGED
package/shell/adapters/_osc.zsh
CHANGED
|
@@ -16,20 +16,28 @@ __tt_pictured() {
|
|
|
16
16
|
return 0
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
__tt_ghostty_owner() {
|
|
20
|
+
local pid=$1 ppid comm
|
|
21
|
+
REPLY=0
|
|
22
|
+
while (( pid > 1 )); do
|
|
23
|
+
read -r ppid comm <<< "$(ps -o ppid=,comm= -p $pid)"
|
|
24
|
+
if [[ ${comm:t} == ghostty ]]; then
|
|
25
|
+
REPLY=$pid
|
|
26
|
+
return 0
|
|
27
|
+
fi
|
|
28
|
+
pid=$ppid
|
|
29
|
+
done
|
|
30
|
+
return 1
|
|
31
|
+
}
|
|
32
|
+
|
|
19
33
|
__tt_reload_ghostty() {
|
|
20
|
-
local
|
|
21
|
-
(( TTHEME_TMUX ))
|
|
22
|
-
|
|
23
|
-
owner
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
owner=$pid
|
|
28
|
-
break
|
|
29
|
-
fi
|
|
30
|
-
pid=$ppid
|
|
31
|
-
done
|
|
32
|
-
(( TTHEME_TMUX )) || TTHEME_GHOSTTY_PID=$owner
|
|
34
|
+
local REPLY owner=$TTHEME_GHOSTTY_PID
|
|
35
|
+
if (( TTHEME_TMUX )); then
|
|
36
|
+
__tt_ghostty_owner "$(tmux display -p '#{client_pid}' 2>/dev/null)"
|
|
37
|
+
owner=$REPLY
|
|
38
|
+
elif [[ -z $owner ]]; then
|
|
39
|
+
__tt_ghostty_owner $PPID
|
|
40
|
+
owner=$REPLY TTHEME_GHOSTTY_PID=$REPLY
|
|
33
41
|
fi
|
|
34
42
|
(( owner )) && kill -USR2 $owner 2>/dev/null && return
|
|
35
43
|
pkill -USR2 -x ghostty 2>/dev/null
|
|
@@ -1,11 +1,204 @@
|
|
|
1
1
|
source $TTHEME_HOME/adapters/_bg.zsh
|
|
2
2
|
|
|
3
|
+
typeset -g TTHEME_GHOSTTY_TABS=$TTHEME_STATE_DIR/ghostty TTHEME_GHOSTTY_FRONT="" TTHEME_GHOSTTY_BLUR=""
|
|
4
|
+
typeset -gF TTHEME_GHOSTTY_ASKED=0 TTHEME_GHOSTTY_WANT=0 TTHEME_GHOSTTY_HUSH=0
|
|
5
|
+
typeset -gi TTHEME_GHOSTTY_IDLE=1 TTHEME_GHOSTTY_TICK=0 TTHEME_GHOSTTY_NONE=0 TTHEME_GHOSTTY_FOLLOWS=-1
|
|
6
|
+
typeset -gA TTHEME_GHOSTTY_SEEN=() TTHEME_GHOSTTY_RUN=()
|
|
7
|
+
typeset -g TTHEME_GHOSTTY_JS='ObjC.import("AppKit");function run(v){var p=+v[0],E=$.NSAppleEventDescriptor,G="com.mitchellh.ghostty",f=function(s){return(s.charCodeAt(0)<<24)|(s.charCodeAt(1)<<16)|(s.charCodeAt(2)<<8)|s.charCodeAt(3)},a=p?$.NSRunningApplication.runningApplicationWithProcessIdentifier(p):$.NSRunningApplication.runningApplicationsWithBundleIdentifier(G).firstObject;if(!a||a.isNil())return"none";var s=$.NSString.stringWithContentsOfFileEncodingError(a.bundleURL.path.js+"/Contents/Resources/Ghostty.sdef",4,null);if(s.isNil()||s.js.indexOf("code=\"Gtty\"")<0)return"blind";var t=E.descriptorWithProcessIdentifier(a.processIdentifier);function q(c,o){var d=E.recordDescriptor;d.setDescriptorForKeyword(E.descriptorWithTypeCode(f("prop")),f("want"));d.setDescriptorForKeyword(o,f("from"));d.setDescriptorForKeyword(E.descriptorWithEnumCode(f("prop")),f("form"));d.setDescriptorForKeyword(E.descriptorWithTypeCode(f(c)),f("seld"));return d.coerceToDescriptorType(f("obj "))}function g(o){var e=E.appleEventWithEventClassEventIDTargetDescriptorReturnIDTransactionID(f("core"),f("getd"),t,-1,0);e.setParamDescriptorForKeyword(o,f("----"));var r=e.sendEventWithOptionsTimeoutError(3,5,null);return!r||r.isNil()||!r.paramDescriptorForKeyword(f("errn")).isNil()?null:r.paramDescriptorForKeyword(f("----"))}var n=E.nullDescriptor,m=q("GTfT",q("GWsT",q("GFWn",n))),w=g(q("pisf",n)),y=g(q("Gtty",m)),i=g(q("Gpid",m));if(!w||!y||!i||w.isNil()||y.isNil()||i.isNil())return"none";return(w.booleanValue?1:0)+" "+y.stringValue.js+" "+i.int32Value}'
|
|
8
|
+
|
|
3
9
|
__tt_follows_focus() { return 0 }
|
|
4
10
|
|
|
11
|
+
__tt_follows_prompt() { return 0 }
|
|
12
|
+
|
|
5
13
|
__tt_keepable() { return 0 }
|
|
6
14
|
|
|
7
15
|
__tt_bg_shown() { __tt_ghostty_shown }
|
|
8
16
|
|
|
17
|
+
__tt_ghostty_key() { REPLY=${${1#/dev/}//\//-} }
|
|
18
|
+
|
|
19
|
+
__tt_ghostty_wears() {
|
|
20
|
+
REPLY=""
|
|
21
|
+
[[ -n $1 ]] && __tt_name_of "$1"
|
|
22
|
+
[[ -n ${TTHEME_PALETTE[$REPLY]} ]] || REPLY=""
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
__tt_ghostty_modules() {
|
|
26
|
+
zmodload -F zsh/files b:zf_rm b:zf_mkdir
|
|
27
|
+
zmodload -F zsh/zselect b:zselect
|
|
28
|
+
zmodload -F zsh/datetime p:EPOCHREALTIME p:EPOCHSECONDS
|
|
29
|
+
} 2>/dev/null
|
|
30
|
+
|
|
31
|
+
__tt_ghostty_follows() {
|
|
32
|
+
local -a at
|
|
33
|
+
(( TTHEME_GHOSTTY_FOLLOWS < 0 )) || return $(( ! TTHEME_GHOSTTY_FOLLOWS ))
|
|
34
|
+
TTHEME_GHOSTTY_FOLLOWS=0
|
|
35
|
+
[[ $TERM_PROGRAM == ghostty && -o interactive && -n $TTY ]] && (( $+commands[osascript] && ! TTHEME_TMUX )) || return 1
|
|
36
|
+
if zstat -A at +mtime -- $TTHEME_GHOSTTY_TABS/.blind 2>/dev/null && [[ "$(<$TTHEME_GHOSTTY_TABS/.blind)" == "${TERM_PROGRAM_VERSION:--}" ]]; then
|
|
37
|
+
zmodload -F zsh/datetime p:EPOCHSECONDS 2>/dev/null
|
|
38
|
+
(( EPOCHSECONDS - at[1] < 86400 )) && return 1
|
|
39
|
+
fi
|
|
40
|
+
TTHEME_GHOSTTY_FOLLOWS=1
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
__tt_ghostty_publish() {
|
|
44
|
+
local f line REPLY
|
|
45
|
+
__tt_ghostty_follows || return 0
|
|
46
|
+
line="$$ ${TTHEME_STARTUP:--} ${1:--} $TTY"
|
|
47
|
+
__tt_ghostty_key $TTY
|
|
48
|
+
f=$TTHEME_GHOSTTY_TABS/$REPLY
|
|
49
|
+
[[ -r $f && "$(<$f)" == "$line" ]] && return 0
|
|
50
|
+
if [[ ! -d $TTHEME_GHOSTTY_TABS ]]; then
|
|
51
|
+
zmodload -F zsh/files b:zf_mkdir 2>/dev/null
|
|
52
|
+
zf_mkdir -p $TTHEME_GHOSTTY_TABS 2>/dev/null || return 0
|
|
53
|
+
fi
|
|
54
|
+
__tt_put $f "$line" 2>/dev/null
|
|
55
|
+
return 0
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
__tt_worn() {
|
|
59
|
+
local REPLY
|
|
60
|
+
(( TTHEME_RAW )) && return 0
|
|
61
|
+
__tt_ghostty_wears "$1"
|
|
62
|
+
__tt_ghostty_publish "$REPLY"
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
__tt_prompted() {
|
|
66
|
+
emulate -L zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
|
67
|
+
local REPLY
|
|
68
|
+
__tt_ghostty_wears "$TTHEME_SPEC"
|
|
69
|
+
__tt_ghostty_publish "$REPLY"
|
|
70
|
+
__tt_ghostty_follow
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
__tt_blurred() {
|
|
74
|
+
__tt_ghostty_follows && [[ -d $TTHEME_GHOSTTY_TABS ]] && : >| $TTHEME_GHOSTTY_TABS/.blur 2>/dev/null
|
|
75
|
+
return 0
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
__tt_ghostty_follow() {
|
|
79
|
+
local fd lock=$TTHEME_GHOSTTY_TABS/.follow
|
|
80
|
+
__tt_ghostty_follows && [[ -d $TTHEME_GHOSTTY_TABS ]] || return 0
|
|
81
|
+
if [[ -e $TTHEME_GHOSTTY_TABS/.blind ]]; then
|
|
82
|
+
TTHEME_GHOSTTY_FOLLOWS=-1
|
|
83
|
+
__tt_ghostty_follows || return 0
|
|
84
|
+
fi
|
|
85
|
+
[[ -e $lock ]] || : >>| $lock 2>/dev/null || return 0
|
|
86
|
+
zsystem flock -t 0 -f fd $lock 2>/dev/null || return 0
|
|
87
|
+
zsystem flock -u $fd
|
|
88
|
+
zsh -fc 'source $1; __tt_ghostty_follower' zsh $TTHEME_HOME/ttheme.zsh </dev/null >/dev/null 2>&1 &!
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
__tt_ghostty_ask() {
|
|
92
|
+
REPLY=$(osascript -l JavaScript -e $TTHEME_GHOSTTY_JS ${TTHEME_GHOSTTY_PID:-0} 2>/dev/null)
|
|
93
|
+
TTHEME_GHOSTTY_ASKED=$EPOCHREALTIME
|
|
94
|
+
[[ -n $REPLY ]]
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
__tt_ghostty_check() {
|
|
98
|
+
local REPLY shown key pal conf=${TTHEME_CONFIG:h}/backgrounds/shown.conf
|
|
99
|
+
local -a at ans rec
|
|
100
|
+
integer n
|
|
101
|
+
__tt_ghostty_modules
|
|
102
|
+
for (( n = 0; n < 3; n++ )); do
|
|
103
|
+
at=("")
|
|
104
|
+
zstat -F %s.%N -A at +mtime -- $conf 2>/dev/null
|
|
105
|
+
shown=$at[1]
|
|
106
|
+
__tt_ghostty_ask || return 0
|
|
107
|
+
at=("")
|
|
108
|
+
zstat -F %s.%N -A at +mtime -- $conf 2>/dev/null
|
|
109
|
+
[[ $at[1] == "$shown" ]] && break
|
|
110
|
+
done
|
|
111
|
+
if [[ $REPLY == blind ]] || { [[ $REPLY == none ]] && (( ++TTHEME_GHOSTTY_NONE >= 5 )) }; then
|
|
112
|
+
__tt_put $TTHEME_GHOSTTY_TABS/.blind "${TERM_PROGRAM_VERSION:--}" 2>/dev/null
|
|
113
|
+
return 1
|
|
114
|
+
fi
|
|
115
|
+
[[ $REPLY == none ]] && return 0
|
|
116
|
+
TTHEME_GHOSTTY_NONE=0
|
|
117
|
+
ans=(${=REPLY})
|
|
118
|
+
if [[ $ans[1] != 1 || -z $ans[2] ]]; then
|
|
119
|
+
TTHEME_GHOSTTY_FRONT=""
|
|
120
|
+
return 0
|
|
121
|
+
fi
|
|
122
|
+
__tt_ghostty_key $ans[2]
|
|
123
|
+
key=$REPLY
|
|
124
|
+
TTHEME_GHOSTTY_FRONT=$key TTHEME_GHOSTTY_IDLE=1
|
|
125
|
+
[[ -r $TTHEME_GHOSTTY_TABS/$key ]] || return 0
|
|
126
|
+
rec=(${=${"$(<$TTHEME_GHOSTTY_TABS/$key)"}})
|
|
127
|
+
[[ $rec[1] == "$ans[3]" ]] || TTHEME_GHOSTTY_IDLE=0
|
|
128
|
+
pal=${rec[3]#-}
|
|
129
|
+
[[ $rec[2] != - && -z $TTHEME_STARTUP ]] && pal=""
|
|
130
|
+
[[ -n $pal && -n ${TTHEME_PALETTE[$pal]} ]] || return 0
|
|
131
|
+
__tt_shown "$pal" force && __tt_reload_ghostty
|
|
132
|
+
return 0
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
__tt_ghostty_tick() {
|
|
136
|
+
local f key
|
|
137
|
+
local -a at rec
|
|
138
|
+
local -F now=$EPOCHREALTIME
|
|
139
|
+
integer seen
|
|
140
|
+
zstat -F %s.%N -A at +mtime -- $TTHEME_HOME/palettes.zsh 2>/dev/null && [[ $at[1] != "$TTHEME_PALETTES_AT" ]] && __tt_palettes_load
|
|
141
|
+
if zstat -F %s.%N -A at +mtime -- $TTHEME_GHOSTTY_TABS/.blur 2>/dev/null && [[ $at[1] != "$TTHEME_GHOSTTY_BLUR" ]]; then
|
|
142
|
+
[[ -n $TTHEME_GHOSTTY_BLUR ]] && TTHEME_GHOSTTY_WANT=$now
|
|
143
|
+
TTHEME_GHOSTTY_BLUR=$at[1]
|
|
144
|
+
fi
|
|
145
|
+
for f in $TTHEME_GHOSTTY_TABS/[^.]*(N); do
|
|
146
|
+
key=${f:t}
|
|
147
|
+
rec=(${=${"$(<$f)"}})
|
|
148
|
+
zstat -F %s.%N -A at +atime -- ${rec[4]:-/nonexistent} 2>/dev/null || continue
|
|
149
|
+
if [[ $at[1] == "${TTHEME_GHOSTTY_SEEN[$key]}" ]]; then
|
|
150
|
+
TTHEME_GHOSTTY_RUN[$key]=0
|
|
151
|
+
continue
|
|
152
|
+
fi
|
|
153
|
+
seen=${+TTHEME_GHOSTTY_SEEN[$key]}
|
|
154
|
+
TTHEME_GHOSTTY_SEEN[$key]=$at[1]
|
|
155
|
+
(( seen )) || continue
|
|
156
|
+
if [[ $key == "$TTHEME_GHOSTTY_FRONT" ]]; then
|
|
157
|
+
TTHEME_GHOSTTY_HUSH=$now
|
|
158
|
+
elif (( ++TTHEME_GHOSTTY_RUN[$key] < 5 )); then
|
|
159
|
+
TTHEME_GHOSTTY_WANT=$now
|
|
160
|
+
fi
|
|
161
|
+
done
|
|
162
|
+
if (( TTHEME_GHOSTTY_HUSH && now - TTHEME_GHOSTTY_HUSH >= 0.3 && now - TTHEME_GHOSTTY_ASKED >= (TTHEME_GHOSTTY_IDLE ? 10 : 2) )); then
|
|
163
|
+
TTHEME_GHOSTTY_HUSH=0 TTHEME_GHOSTTY_WANT=$now
|
|
164
|
+
fi
|
|
165
|
+
(( TTHEME_GHOSTTY_WANT && now - TTHEME_GHOSTTY_ASKED >= 0.2 )) || return 0
|
|
166
|
+
TTHEME_GHOSTTY_WANT=0
|
|
167
|
+
__tt_ghostty_check
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
__tt_ghostty_live() {
|
|
171
|
+
local f pid
|
|
172
|
+
integer live=0
|
|
173
|
+
(( TTHEME_GHOSTTY_PID )) && ! kill -0 $TTHEME_GHOSTTY_PID 2>/dev/null && return 1
|
|
174
|
+
for f in $TTHEME_GHOSTTY_TABS/[^.]*(N); do
|
|
175
|
+
pid=${"$(<$f)"%% *}
|
|
176
|
+
if [[ $pid == <-> ]] && kill -0 $pid 2>/dev/null; then
|
|
177
|
+
live=1
|
|
178
|
+
else
|
|
179
|
+
zf_rm -f -- $f 2>/dev/null
|
|
180
|
+
unset "TTHEME_GHOSTTY_SEEN[${f:t}]" "TTHEME_GHOSTTY_RUN[${f:t}]"
|
|
181
|
+
fi
|
|
182
|
+
done
|
|
183
|
+
(( live ))
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
__tt_ghostty_follower() {
|
|
187
|
+
emulate -L zsh
|
|
188
|
+
local fd REPLY
|
|
189
|
+
__tt_ghostty_modules
|
|
190
|
+
zsystem flock -t 0 -f fd $TTHEME_GHOSTTY_TABS/.follow 2>/dev/null || return 0
|
|
191
|
+
trap '' HUP
|
|
192
|
+
__tt_ghostty_owner $PPID
|
|
193
|
+
TTHEME_GHOSTTY_PID=$REPLY
|
|
194
|
+
__tt_ghostty_check || return 0
|
|
195
|
+
while [[ -e $TTHEME_HOME/palettes.zsh ]]; do
|
|
196
|
+
__tt_ghostty_tick || break
|
|
197
|
+
(( ++TTHEME_GHOSTTY_TICK % 50 )) || __tt_ghostty_live || break
|
|
198
|
+
zselect -t 10
|
|
199
|
+
done
|
|
200
|
+
}
|
|
201
|
+
|
|
9
202
|
__tt_reset_reloaded() {
|
|
10
203
|
local REPLY
|
|
11
204
|
integer i
|
|
@@ -21,6 +214,8 @@ __tt_reset_reloaded() {
|
|
|
21
214
|
|
|
22
215
|
__tt_shown() {
|
|
23
216
|
local dir=${TTHEME_CONFIG:h}/backgrounds was REPLY
|
|
217
|
+
__tt_ghostty_publish "$1"
|
|
218
|
+
[[ $2 == force ]] || (( TTHEME_FRONT || TTHEME_TMUX )) || return 1
|
|
24
219
|
__tt_bg_shown
|
|
25
220
|
was=$REPLY
|
|
26
221
|
[[ $was == $1 ]] && return 1
|
package/shell/ttheme.zsh
CHANGED
|
@@ -19,9 +19,21 @@ __tt_fresh() {
|
|
|
19
19
|
[[ -e $TTHEME_HOME ]] || __tt_gone
|
|
20
20
|
return 0
|
|
21
21
|
fi
|
|
22
|
-
[[ $at[1]
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
if [[ $at[1] != "$TTHEME_PALETTES_AT" ]]; then
|
|
23
|
+
__tt_palettes_load && { __tt_follow "$start" && __tt_sync; __tt_reloaded }
|
|
24
|
+
[[ -n $was && -z $TTHEME_STARTUP && -n $TTHEME_SPEC ]] && __tt_active && __tt_off_here
|
|
25
|
+
fi
|
|
26
|
+
at=("")
|
|
27
|
+
zstat -F %s.%N -A at +mtime -- $TTHEME_PINS_FILE 2>/dev/null
|
|
28
|
+
[[ $at[1] == "$TTHEME_PINS_AT" ]] && return 0
|
|
29
|
+
__tt_pins_load
|
|
30
|
+
__tt_active && __tt_dir_sync
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
__tt_prompt() {
|
|
34
|
+
emulate -L zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
|
35
|
+
(( TTHEME_FRONT < 0 )) || TTHEME_FRONT=0
|
|
36
|
+
__tt_fresh
|
|
25
37
|
}
|
|
26
38
|
|
|
27
39
|
__tt_follow() {
|
|
@@ -36,7 +48,7 @@ __tt_gone() {
|
|
|
36
48
|
__tt_reload
|
|
37
49
|
__tt_reset_reloaded $bg
|
|
38
50
|
print -n $'\e[?1004l'
|
|
39
|
-
for hook in precmd:
|
|
51
|
+
for hook in precmd:__tt_prompt precmd:__tt_precmd precmd:__tt_prompted precmd:__tt_unmux preexec:__tt_preexec preexec:__tt_mux chpwd:__tt_chpwd; do
|
|
40
52
|
add-zsh-hook -d ${hook%%:*} ${hook#*:}
|
|
41
53
|
done
|
|
42
54
|
(( $+functions[add-zle-hook-widget] )) && add-zle-hook-widget -d line-init __tt_line_init
|
|
@@ -65,7 +77,7 @@ typeset -g TTHEME_CONFIG=${XDG_CONFIG_HOME:-$HOME/.config}/ttheme/config.zsh
|
|
|
65
77
|
[[ -r $TTHEME_CONFIG ]] && source $TTHEME_CONFIG
|
|
66
78
|
|
|
67
79
|
typeset -g TTHEME_PINS_FILE=${TTHEME_CONFIG:h}/pins
|
|
68
|
-
typeset -g TTHEME_PINS_RAW=""
|
|
80
|
+
typeset -g TTHEME_PINS_RAW="" TTHEME_PINS_AT=""
|
|
69
81
|
typeset -gA TTHEME_PINS=()
|
|
70
82
|
typeset -g TTHEME_PIN="" TTHEME_PIN_SPEC="" TTHEME_BASE_SPEC=""
|
|
71
83
|
|
|
@@ -75,6 +87,9 @@ __tt_pins_load() {
|
|
|
75
87
|
emulate -L zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
|
76
88
|
setopt localoptions extendedglob
|
|
77
89
|
local raw="" line key name
|
|
90
|
+
local -a at=("")
|
|
91
|
+
zstat -F %s.%N -A at +mtime -- $TTHEME_PINS_FILE 2>/dev/null
|
|
92
|
+
TTHEME_PINS_AT=$at[1]
|
|
78
93
|
[[ -r $TTHEME_PINS_FILE ]] && raw="$(<$TTHEME_PINS_FILE)"
|
|
79
94
|
[[ $raw == "$TTHEME_PINS_RAW" ]] && return 0
|
|
80
95
|
TTHEME_PINS_RAW=$raw
|
|
@@ -146,7 +161,7 @@ __tt_active() {
|
|
|
146
161
|
}
|
|
147
162
|
|
|
148
163
|
typeset -g TTHEME_HEARD=""
|
|
149
|
-
typeset -gi TTHEME_RECHECK=0 TTHEME_FOCUS=0
|
|
164
|
+
typeset -gi TTHEME_RECHECK=0 TTHEME_FOCUS=0 TTHEME_FRONT=-1
|
|
150
165
|
|
|
151
166
|
__tt_put() {
|
|
152
167
|
local f=${1:A}
|
|
@@ -298,13 +313,16 @@ __tt_dir_rule() {
|
|
|
298
313
|
__tt_dir_sync() {
|
|
299
314
|
local REPLY="" spec=""
|
|
300
315
|
__tt_dir_rule "$PWD" || REPLY=""
|
|
301
|
-
[[ $REPLY == "$TTHEME_PIN" ]] && return 0
|
|
302
316
|
if [[ -n $REPLY ]]; then
|
|
303
|
-
[[ -n $TTHEME_PIN ]] || TTHEME_BASE_SPEC=$TTHEME_SPEC
|
|
304
317
|
spec=${TTHEME_PALETTE[$TTHEME_PINS[$REPLY]]}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
318
|
+
[[ $REPLY == "$TTHEME_PIN" && $spec == "$TTHEME_PIN_SPEC" ]] && return 0
|
|
319
|
+
[[ -n $TTHEME_PIN ]] || TTHEME_BASE_SPEC=$TTHEME_SPEC
|
|
320
|
+
else
|
|
321
|
+
[[ -n $TTHEME_PIN ]] || return 0
|
|
322
|
+
if [[ $TTHEME_SPEC == "$TTHEME_PIN_SPEC" ]]; then
|
|
323
|
+
spec=$TTHEME_BASE_SPEC
|
|
324
|
+
[[ -n $spec ]] || { __tt_osc_reset; TTHEME_SPEC= }
|
|
325
|
+
fi
|
|
308
326
|
fi
|
|
309
327
|
TTHEME_PIN=$REPLY TTHEME_PIN_SPEC=$spec
|
|
310
328
|
[[ -n $spec && $spec != "$TTHEME_SPEC" ]] || return 0
|
|
@@ -353,6 +371,7 @@ __tt_rewear() {
|
|
|
353
371
|
|
|
354
372
|
__tt_focus() {
|
|
355
373
|
emulate -L zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
|
374
|
+
TTHEME_FRONT=1
|
|
356
375
|
__tt_fresh
|
|
357
376
|
if (( TTHEME_TMUX )); then
|
|
358
377
|
__tt_rewear
|
|
@@ -375,7 +394,8 @@ __tt_unmux() {
|
|
|
375
394
|
|
|
376
395
|
__tt_blur() {
|
|
377
396
|
emulate -L zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
|
378
|
-
|
|
397
|
+
TTHEME_FRONT=0
|
|
398
|
+
__tt_blurred
|
|
379
399
|
}
|
|
380
400
|
|
|
381
401
|
__tt_line_init() {
|
|
@@ -410,12 +430,14 @@ __tt_pins_write() {
|
|
|
410
430
|
done
|
|
411
431
|
if (( ! ${#lines} )); then
|
|
412
432
|
rm -f $TTHEME_PINS_FILE || return 1
|
|
413
|
-
TTHEME_PINS_RAW=""
|
|
433
|
+
TTHEME_PINS_RAW="" TTHEME_PINS_AT=""
|
|
414
434
|
return 0
|
|
415
435
|
fi
|
|
416
436
|
mkdir -p ${TTHEME_PINS_FILE:h} || return 1
|
|
417
437
|
__tt_put $TTHEME_PINS_FILE "${lines[@]}" || return 1
|
|
418
438
|
TTHEME_PINS_RAW="$(<$TTHEME_PINS_FILE)"
|
|
439
|
+
local -a at
|
|
440
|
+
zstat -F %s.%N -A at +mtime -- $TTHEME_PINS_FILE 2>/dev/null && TTHEME_PINS_AT=$at[1]
|
|
419
441
|
}
|
|
420
442
|
|
|
421
443
|
__tt_pin_base() { REPLY=${${${1%/\*\*}:-/}:a} }
|
|
@@ -2758,6 +2780,7 @@ ttheme() {
|
|
|
2758
2780
|
case $1 in
|
|
2759
2781
|
browse|list|add|remove|update|market|new|edit|check|share) __tt_catalog "$@"; return ;;
|
|
2760
2782
|
on|off) __tt_switch "$@"; return ;;
|
|
2783
|
+
info) TTHEME_ZSH=$ZSH_VERSION __tt_cli "$@"; return ;;
|
|
2761
2784
|
esac
|
|
2762
2785
|
__tt_arity "$@" || return
|
|
2763
2786
|
[[ $1 == config ]] && { __tt_config; return }
|
|
@@ -2841,7 +2864,7 @@ fi
|
|
|
2841
2864
|
zle -N __tt_line_init
|
|
2842
2865
|
add-zle-hook-widget line-init __tt_line_init
|
|
2843
2866
|
add-zsh-hook chpwd __tt_chpwd
|
|
2844
|
-
add-zsh-hook precmd
|
|
2867
|
+
add-zsh-hook precmd __tt_prompt
|
|
2845
2868
|
if (( ! TTHEME_TMUX )); then
|
|
2846
2869
|
add-zsh-hook preexec __tt_mux
|
|
2847
2870
|
add-zsh-hook precmd __tt_unmux
|