@kecan0406/ttheme 1.2.17 → 1.2.18

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/shell/ttheme.zsh CHANGED
@@ -2,6 +2,21 @@ typeset -g TTHEME_HOME=${${(%):-%x}:A:h} TTHEME_PALETTES_AT=""
2
2
 
3
3
  zmodload -F zsh/stat b:zstat 2>/dev/null
4
4
 
5
+ typeset -gA TTHEME_SGR=(
6
+ reset $'\e[0m' /fg $'\e[39m' /bg $'\e[49m' /ink $'\e[39;49m'
7
+ dim $'\e[2m' /dim $'\e[22m'
8
+ bold $'\e[1m' /bold $'\e[22m'
9
+ under $'\e[4m' /under $'\e[24m'
10
+ reverse $'\e[7m' /reverse $'\e[27m'
11
+ accent $'\e[36m' /accent $'\e[39m'
12
+ pill $'\e[7;1;36m' /pill $'\e[22;27;39m'
13
+ match $'\e[1;4;36m' /match $'\e[22;24;39m'
14
+ ok $'\e[32m' /ok $'\e[39m'
15
+ warn $'\e[33m' /warn $'\e[39m'
16
+ error $'\e[31m' /error $'\e[39m'
17
+ fg0 $'\e[30m' fg1 $'\e[31m' fg2 $'\e[32m' fg3 $'\e[33m' fg4 $'\e[34m' fg5 $'\e[35m' fg6 $'\e[36m' fg7 $'\e[37m'
18
+ )
19
+
5
20
  __tt_palettes_load() {
6
21
  emulate -L zsh ${=${options[xtrace]:#off}:+-o xtrace}
7
22
  local -a at
@@ -11,16 +26,38 @@ __tt_palettes_load() {
11
26
  TTHEME_PALETTES_AT=$at[1]
12
27
  }
13
28
 
29
+ __tt_specs_named() {
30
+ local v REPLY
31
+ reply=()
32
+ for v in TTHEME_SPEC TTHEME_PIN_SPEC TTHEME_BASE_SPEC TTHEME_SSH_SPEC TTHEME_SSH_BACK; do
33
+ [[ -n ${(P)v} ]] || continue
34
+ __tt_name_of "${(P)v}"
35
+ [[ -n ${TTHEME_PALETTE[$REPLY]} ]] && reply+=($v $REPLY)
36
+ done
37
+ }
38
+
39
+ __tt_respec() {
40
+ local spec=$TTHEME_SPEC v n worn
41
+ for v n in "$@"; do
42
+ [[ -n ${TTHEME_PALETTE[$n]} ]] || continue
43
+ typeset -g $v=${TTHEME_PALETTE[$n]}
44
+ [[ $v == TTHEME_SPEC ]] && worn=$n
45
+ done
46
+ [[ -n $worn && -n $TTHEME_PAINTED && $TTHEME_SPEC != "$spec" ]] && __tt_wear "$TTHEME_SPEC" $worn
47
+ return 0
48
+ }
49
+
14
50
  __tt_fresh() {
15
51
  emulate -L zsh ${=${options[xtrace]:#off}:+-o xtrace}
16
- local -a at
52
+ local -a at reply
17
53
  local was=$TTHEME_STARTUP start="$TTHEME_STARTUP ${TTHEME_PALETTE[$TTHEME_STARTUP]}"
18
54
  if ! zstat -F %s.%N -A at +mtime -- $TTHEME_HOME/palettes.zsh 2>/dev/null; then
19
55
  [[ -e $TTHEME_HOME ]] || __tt_gone
20
56
  return 0
21
57
  fi
22
58
  if [[ $at[1] != "$TTHEME_PALETTES_AT" ]]; then
23
- __tt_palettes_load && { __tt_follow "$start" && __tt_sync; __tt_reloaded }
59
+ __tt_specs_named
60
+ __tt_palettes_load && { __tt_respec $reply; __tt_follow "$start" && __tt_sync; __tt_reloaded }
24
61
  [[ -n $was && -z $TTHEME_STARTUP && -n $TTHEME_SPEC ]] && __tt_active && __tt_off_here
25
62
  fi
26
63
  at=("")
@@ -283,7 +320,7 @@ __tt_name_of() { REPLY=${${(k)TTHEME_PALETTE[(re)$1]}:-custom} }
283
320
  __tt_color() { [[ -t 1 && -z $NO_COLOR && $TERM != dumb ]] }
284
321
 
285
322
  __tt_announce() {
286
- (( TTHEME_ANNOUNCE )) || return 0
323
+ (( TTHEME_ANNOUNCE )) && [[ -t 1 ]] || return 0
287
324
  local -a p=(${=TTHEME_SPEC})
288
325
  (( ${#p} >= 20 )) || return 0
289
326
  local REPLY
@@ -296,7 +333,7 @@ __tt_announce() {
296
333
  return 0
297
334
  fi
298
335
  local cur=${p[3]#\#} sel=${p[4]#\#}
299
- printf '\033[48;2;%d;%d;%dm %s \033[0m\n\033[7;1;38;2;%d;%d;%dm %s \033[0m \033[2m· ANSI %s\033[0m\n' \
336
+ printf "\033[48;2;%d;%d;%dm %s ${TTHEME_SGR[reset]}\n${TTHEME_SGR[reverse]}${TTHEME_SGR[bold]}\033[38;2;%d;%d;%dm %s ${TTHEME_SGR[reset]} ${TTHEME_SGR[dim]}· ANSI %s${TTHEME_SGR[reset]}\n" \
300
337
  $((16#${sel:0:2})) $((16#${sel:2:2})) $((16#${sel:4:2})) "$grp" \
301
338
  $((16#${cur:0:2})) $((16#${cur:2:2})) $((16#${cur:4:2})) "$name" "$src"
302
339
  }
@@ -626,7 +663,7 @@ __tt_pin_save() {
626
663
  k=$REPLY
627
664
  __tt_pin_scope "$key"
628
665
  if __tt_color; then
629
- printf '\033[2mPinned · %s → %s · %s\033[0m\n' "$name" "$k" "$REPLY"
666
+ printf "${TTHEME_SGR[dim]}Pinned · %s → %s · %s${TTHEME_SGR[reset]}\n" "$name" "$k" "$REPLY"
630
667
  else
631
668
  print -r -- "Pinned · $name → $k · $REPLY"
632
669
  fi
@@ -656,7 +693,7 @@ __tt_unpin_drop() {
656
693
  __tt_dir_sync
657
694
  for k in $gone; do
658
695
  if __tt_color; then
659
- print -r -- $'\e[2m'"$k"$'\e[0m'
696
+ print -r -- $TTHEME_SGR[dim]"$k"$TTHEME_SGR[reset]
660
697
  else
661
698
  print -r -- "$k"
662
699
  fi
@@ -706,13 +743,13 @@ __tt_key() {
706
743
  }
707
744
 
708
745
  __tt_unpin_block() {
709
- local b=$'\e[1m' d=$'\e[2m' z=$'\e[0m' on=$'\e[7;1m' bar plain keys top k home=${HOME:a} here=${PWD:a} htip="" REPLY
746
+ local b=$TTHEME_SGR[bold] d=$TTHEME_SGR[dim] z=$TTHEME_SGR[reset] on=$TTHEME_SGR[pill] bar plain keys top k home=${HOME:a} here=${PWD:a} htip="" REPLY
710
747
  local -A own=() below=() parent=() mark=() tstrip=()
711
748
  local -a roots=() lp=() lpw=() ll=() lat=() lpal=() lnote=() lflag=() reply gone=(${(f)drops[$1]})
712
749
  local -i i width=$(( (COLUMNS > 0 ? COLUMNS : 80) - 1 )) room=$(( (LINES > 0 ? LINES : 24) - 3 ))
713
750
  (( color )) || b= d= z= on=
714
751
  if (( color )); then
715
- bar=$'\e[7;1m UNPIN \e[0m ' plain=" UNPIN "
752
+ bar=$TTHEME_SGR[pill]" UNPIN "$TTHEME_SGR[reset]" " plain=" UNPIN "
716
753
  else
717
754
  bar="[UNPIN]" plain=$bar
718
755
  fi
@@ -738,7 +775,7 @@ __tt_unpin_block() {
738
775
  [[ -n $cover ]] && __tt_pin_base "$cover" && top=$REPLY
739
776
  __tt_map_build "$top"
740
777
  __tt_map_fit $width
741
- (( ${#reply} > room )) && reply=("${(@)reply[1,room-1]}" " …")
778
+ (( ${#reply} > room )) && reply=("${(@)reply[1,room-1]}" " …")
742
779
  block=("$bar" "${reply[@]}")
743
780
  __tt_unpin_then $width $gone
744
781
  block+=("${reply[@]}")
@@ -909,7 +946,7 @@ __tt_clip() {
909
946
  (( w += cw ))
910
947
  done
911
948
  REPLY=$out…
912
- [[ $1 == *$'\e'* ]] && REPLY+=$'\e[0m'
949
+ [[ $1 == *$'\e'* ]] && REPLY+=$TTHEME_SGR[reset]
913
950
  return 1
914
951
  }
915
952
 
@@ -927,10 +964,10 @@ __tt_map_chip() {
927
964
  if (( ! color )); then
928
965
  printf -v REPLY '%-*s' $2 "$1"
929
966
  elif (( ${#p} >= 20 )); then
930
- printf -v REPLY '\e[48;2;%d;%d;%d;38;2;%d;%d;%dm %-*s \e[0m' $((16#${bg:0:2})) $((16#${bg:2:2})) $((16#${bg:4:2})) \
967
+ printf -v REPLY "\e[48;2;%d;%d;%d;38;2;%d;%d;%dm %-*s ${TTHEME_SGR[/ink]}" $((16#${bg:0:2})) $((16#${bg:2:2})) $((16#${bg:4:2})) \
931
968
  $((16#${fg:0:2})) $((16#${fg:2:2})) $((16#${fg:4:2})) $2 "$1"
932
969
  else
933
- printf -v REPLY '\e[2m %-*s \e[0m' $2 "$1"
970
+ printf -v REPLY "${TTHEME_SGR[dim]} %-*s ${TTHEME_SGR[reset]}" $2 "$1"
934
971
  fi
935
972
  }
936
973
 
@@ -1016,22 +1053,22 @@ __tt_map_line() {
1016
1053
  }
1017
1054
 
1018
1055
  __tt_map_walk() {
1019
- local at=$1 pre=$2 tip z=$'\e[0m' REPLY
1056
+ local at=$1 pre=$2 tip z=$TTHEME_SGR[reset] REPLY
1020
1057
  local -i i
1021
1058
  local -a ks=(${(oi)${(k)parent[(Re)$1]}}) reply
1022
1059
  (( color )) || z=
1023
1060
  __tt_map_under "$at"
1024
1061
  __tt_map_tip "$REPLY"
1025
1062
  tip=$REPLY
1026
- (( color )) && [[ -z $tip ]] && tip=$'\e[2m'
1063
+ (( color )) && [[ -z $tip ]] && tip=$TTHEME_SGR[dim]
1027
1064
  for (( i = 1; i <= ${#ks}; i++ )); do
1028
1065
  __tt_map_chain "$ks[i]" "${ks[i]:t}"
1029
1066
  if (( i < ${#ks} )); then
1030
- __tt_map_line "$reply[1]" "$pre$tip├─ $z" $(( $3 + 3 )) "$reply[2]"
1031
- __tt_map_walk "$reply[1]" "$pre$tip│ $z" $(( $3 + 3 ))
1067
+ __tt_map_line "$reply[1]" "$pre$tip├── $z" $(( $3 + 4 )) "$reply[2]/"
1068
+ __tt_map_walk "$reply[1]" "$pre$tip│ $z" $(( $3 + 4 ))
1032
1069
  else
1033
- __tt_map_line "$reply[1]" "$pre$tip└─ $z" $(( $3 + 3 )) "$reply[2]"
1034
- __tt_map_walk "$reply[1]" "$pre " $(( $3 + 3 ))
1070
+ __tt_map_line "$reply[1]" "$pre$tip└── $z" $(( $3 + 4 )) "$reply[2]/"
1071
+ __tt_map_walk "$reply[1]" "$pre " $(( $3 + 4 ))
1035
1072
  fi
1036
1073
  done
1037
1074
  }
@@ -1072,7 +1109,7 @@ __tt_map_build() {
1072
1109
  }
1073
1110
 
1074
1111
  __tt_map_fit() {
1075
- local b=$'\e[1m' d=$'\e[2m' y=$'\e[33m' r=$'\e[31m' z=$'\e[0m' lab line tag tip note REPLY
1112
+ local b=$TTHEME_SGR[bold] d=$TTHEME_SGR[dim] y=$TTHEME_SGR[warn] r=$TTHEME_SGR[error] z=$TTHEME_SGR[reset] lab line tag tip note REPLY
1076
1113
  local -i width=$1 i lvl maxw namew need wr cap
1077
1114
  local -a lw=() rw=() cut=()
1078
1115
  (( color )) || b= d= y= r= z=
@@ -1170,11 +1207,21 @@ __tt_map_fit() {
1170
1207
  }
1171
1208
 
1172
1209
  __tt_map_ssh() {
1173
- local k name flag
1174
- for k in ${(oi)${(M)${(k)TTHEME_PINS}:#ssh:*}}; do
1175
- name=$TTHEME_PINS[$k] flag=""
1210
+ local k name flag tip=$TTHEME_SGR[dim] z=$TTHEME_SGR[reset]
1211
+ local -a ks=(${(oi)${(M)${(k)TTHEME_PINS}:#ssh:*}})
1212
+ local -i i
1213
+ (( ${#ks} )) || return 0
1214
+ (( color )) || tip= z=
1215
+ lp+=("") lpw+=(0) ll+=(ssh) lat+=(ssh:) lpal+=("") lnote+=("") lflag+=("")
1216
+ for (( i = 1; i <= ${#ks}; i++ )); do
1217
+ k=$ks[i] name=$TTHEME_PINS[$ks[i]] flag=""
1176
1218
  [[ -n ${TTHEME_PALETTE[$name]} ]] || flag="not installed"
1177
- lp+=("") lpw+=(0) ll+=("ssh ${k#ssh:}") lat+=("$k") lpal+=("$name") lnote+=("while connected") lflag+=("$flag")
1219
+ if (( i < ${#ks} )); then
1220
+ lp+=("$tip├── $z")
1221
+ else
1222
+ lp+=("$tip└── $z")
1223
+ fi
1224
+ lpw+=(4) ll+=("${k#ssh:}") lat+=("$k") lpal+=("$name") lnote+=("while connected") lflag+=("$flag")
1178
1225
  done
1179
1226
  }
1180
1227
 
@@ -1193,7 +1240,7 @@ __tt_map_tree() {
1193
1240
  print -r -- "$REPLY"
1194
1241
  __tt_tilde "$TTHEME_PINS_FILE"
1195
1242
  if (( color )); then
1196
- __tt_clip $'\e[2m'"ttheme pin picks one here · ttheme unpin drops one · $REPLY"$'\e[0m' $width
1243
+ __tt_clip $TTHEME_SGR[dim]"ttheme pin picks one here · ttheme unpin drops one · $REPLY"$TTHEME_SGR[reset] $width
1197
1244
  else
1198
1245
  __tt_clip "ttheme pin picks one here · ttheme unpin drops one · $REPLY" $width
1199
1246
  fi
@@ -1228,7 +1275,7 @@ __tt_keep() {
1228
1275
  __tt_worn_shown $2
1229
1276
  __tt_reload
1230
1277
  if __tt_color; then
1231
- printf '\033[2m%s\033[0m\n' "${(@f)note}"
1278
+ printf "${TTHEME_SGR[dim]}%s${TTHEME_SGR[reset]}\n" "${(@f)note}"
1232
1279
  else
1233
1280
  print -r -- "$note"
1234
1281
  fi
@@ -1311,7 +1358,10 @@ __tt_catalog() {
1311
1358
  __tt_catalog_done() {
1312
1359
  [[ -r $TTHEME_HOME/palettes.zsh ]] || return 0
1313
1360
  local was=$TTHEME_PALETTES_AT
1361
+ local -a reply
1362
+ __tt_specs_named
1314
1363
  if __tt_palettes_load && [[ $TTHEME_PALETTES_AT != "$was" ]]; then
1364
+ __tt_respec $reply
1315
1365
  __tt_reloaded
1316
1366
  fi
1317
1367
  [[ "$TTHEME_STARTUP ${TTHEME_PALETTE[$TTHEME_STARTUP]}" == "$1" ]] && return 0
@@ -1335,14 +1385,16 @@ __tt_switch() {
1335
1385
  }
1336
1386
 
1337
1387
  __tt_config() {
1338
- local blur
1388
+ local blur tab
1339
1389
  if [[ ! -e $TTHEME_CONFIG ]]; then
1340
1390
  mkdir -p ${TTHEME_CONFIG:h} || return 1
1341
1391
  __tt_put $TTHEME_CONFIG "$TTHEME_CONFIG_TEMPLATE"
1342
1392
  fi
1343
1393
  blur=${(M)${(@f)"$(<$TTHEME_CONFIG)"}:#': ${TTHEME_BG_BLUR:='*}
1394
+ tab=${(M)${(@f)"$(<$TTHEME_CONFIG)"}:#': ${TTHEME_TAB_PALETTE:='*}
1344
1395
  ${=${VISUAL:-${EDITOR:-vi}}} $TTHEME_CONFIG || return
1345
1396
  [[ ${(M)${(@f)"$(<$TTHEME_CONFIG)"}:#': ${TTHEME_BG_BLUR:='*} == "$blur" ]] || __tt_redraw
1397
+ [[ ${(M)${(@f)"$(<$TTHEME_CONFIG)"}:#': ${TTHEME_TAB_PALETTE:='*} == "$tab" ]] || { __tt_cli sync && __tt_reload }
1346
1398
  print -r -- "Settings apply in new tabs — $TTHEME_CONFIG"
1347
1399
  }
1348
1400
 
@@ -1488,7 +1540,12 @@ ttheme() {
1488
1540
  fi
1489
1541
 
1490
1542
  case $1 in
1491
- list|add|remove|update|market|new|edit|check|share) __tt_catalog "$@"; return ;;
1543
+ list|add|remove|update|market|new) __tt_catalog "$@"; return ;;
1544
+ edit|check|share)
1545
+ local REPLY
1546
+ __tt_name_of "$TTHEME_SPEC"
1547
+ TTHEME_WORN=${TTHEME_PALETTE[$REPLY]:+$REPLY} __tt_catalog "$@"
1548
+ return ;;
1492
1549
  on|off) __tt_switch "$@"; return ;;
1493
1550
  info) TTHEME_ZSH=$ZSH_VERSION __tt_cli "$@"; return ;;
1494
1551
  esac