@kecan0406/ttheme 1.2.18 → 1.2.19

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,6 +1,6 @@
1
1
  {
2
2
  "schema": 1,
3
- "version": "1.2.18",
3
+ "version": "1.2.19",
4
4
  "gate": [
5
5
  {
6
6
  "rule": "foreground",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kecan0406/ttheme",
3
- "version": "1.2.18",
3
+ "version": "1.2.19",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "ttheme": "bin/ttheme.js"
@@ -11,7 +11,7 @@
11
11
  "shell",
12
12
  "!shell/check.zsh"
13
13
  ],
14
- "description": "Character terminal palettes for Ghostty, kitty, Alacritty, WezTerm, iTerm2, Windows Terminal, Warp and Konsole",
14
+ "description": "Character terminal palettes for Ghostty, iTerm2, kitty, Alacritty, WezTerm, Windows Terminal, Warp, Konsole and Terminal.app",
15
15
  "license": "MIT",
16
16
  "author": "kecan0406",
17
17
  "repository": {
@@ -28,20 +28,22 @@
28
28
  "alacritty",
29
29
  "wezterm",
30
30
  "iterm2",
31
- "konsole"
31
+ "konsole",
32
+ "warp",
33
+ "windows-terminal"
32
34
  ],
33
35
  "devDependencies": {
34
- "@biomejs/biome": "^2.3.0",
35
- "@clack/prompts": "^1.7.0",
36
+ "@biomejs/biome": "^2.5.15",
37
+ "@clack/prompts": "^1.8.1",
36
38
  "@jsquash/jpeg": "^1.6.0",
37
39
  "@material/material-color-utilities": "^0.4.0",
38
- "@types/bun": "^1.3.0",
40
+ "@types/bun": "^1.4.2",
39
41
  "@types/pngjs": "6.0.5",
40
42
  "@xterm/headless": "6.0.0",
41
43
  "fast-string-width": "^3.0.2",
42
44
  "pngjs": "7.0.0",
43
45
  "smol-toml": "^1.9.0",
44
- "typescript": "^5.8.2",
46
+ "typescript": "^7.0.2",
45
47
  "uqr": "^0.1.3"
46
48
  },
47
49
  "engines": {
@@ -476,7 +476,8 @@ __tt_pv_bg_find() {
476
476
  __tt_bg_hide $name
477
477
  err=$(__tt_cli find $name 2>&1 >/dev/tty)
478
478
  rc=$?
479
- printf %s "$pvmouse"
479
+ printf '\e[?2004h%s' "$pvmouse"
480
+ __tt_pv_size
480
481
  for var in ${(k)parameters[(I)TTHEME_FIND_*]}; do
481
482
  [[ ${parameters[$var]} == *export* ]] || unset $var
482
483
  done
@@ -165,7 +165,7 @@ __tt_b64s() {
165
165
 
166
166
  __tt_ask() {
167
167
  setopt localoptions extendedglob
168
- local fd saved="" buf="" chunk seqs=$'\e[]_P][^\a\e]#(\a|\e\\\\)|\e\\[[0-?]#[ -/]#[@-~]|\e[^][_P]'
168
+ local fd saved="" buf="" chunk seq
169
169
  local -a match mbegin mend
170
170
  REPLY=""
171
171
  { exec {fd}<>/dev/tty } 2>/dev/null || return 1
@@ -185,10 +185,26 @@ __tt_ask() {
185
185
  [[ -n $saved ]] && stty "$saved" <&$fd 2>/dev/null
186
186
  exec {fd}>&-
187
187
  [[ $buf == *$'\e[0n'* ]] || __tt_owed
188
- while [[ $buf == (#b)([^$'\e']#)(${~seqs})(*) ]]; do
189
- TTHEME_TYPED+=$match[1] REPLY+=$match[2] buf=$match[-1]
188
+ while [[ -n $buf ]]; do
189
+ if [[ $buf == (#b)([^$'\e']##)(*) ]]; then
190
+ TTHEME_TYPED+=$match[1] buf=$match[2]
191
+ elif [[ $buf == (#b)($'\e'[]P_^X][^$'\a\e']#($'\a'|$'\e\\'))(*) ]]; then
192
+ REPLY+=$match[1] buf=$match[-1]
193
+ elif [[ $buf == (#b)($'\e['[0-?]#[ -/]#[@-~])(*) ]]; then
194
+ seq=$match[1] buf=$match[-1]
195
+ if [[ $seq == *[nt] || $seq == $'\e['[?\>]*c || $seq == *'$y' ]]; then
196
+ REPLY+=$seq
197
+ else
198
+ TTHEME_TYPED+=$seq
199
+ fi
200
+ elif [[ $buf == (#b)($'\e'(O?|[^][P_^XO$'\e']))(*) ]]; then
201
+ TTHEME_TYPED+=$match[1] buf=$match[-1]
202
+ elif [[ $buf == $'\e\e'* ]]; then
203
+ TTHEME_TYPED+=$'\e' buf=${buf:1}
204
+ else
205
+ break
206
+ fi
190
207
  done
191
- [[ $buf == $'\e'* ]] || TTHEME_TYPED+=$buf
192
208
  REPLY=${REPLY%$'\e[0n'}
193
209
  }
194
210
 
@@ -1,4 +1,4 @@
1
- source $TTHEME_HOME/adapters/_bg.zsh
1
+ source "$TTHEME_HOME/adapters/_bg.zsh"
2
2
 
3
3
  typeset -g TTHEME_GHOSTTY_TABS=$TTHEME_STATE_DIR/ghostty TTHEME_GHOSTTY_FRONT="" TTHEME_GHOSTTY_BLUR="" TTHEME_GHOSTTY_HEARD="" TTHEME_GHOSTTY_CODE=""
4
4
  typeset -gF TTHEME_GHOSTTY_ASKED=0 TTHEME_GHOSTTY_WANT=0 TTHEME_GHOSTTY_HUSH=0 TTHEME_GHOSTTY_TOLD=0 TTHEME_GHOSTTY_NONE_AT=0
@@ -1,11 +1,14 @@
1
- source $TTHEME_HOME/adapters/_bg.zsh
1
+ source "$TTHEME_HOME/adapters/_bg.zsh"
2
2
 
3
3
  zmodload -F zsh/datetime p:EPOCHREALTIME 2>/dev/null
4
4
 
5
- if (( ! ${+TTHEME_ITERM_SHOWN} )); then
5
+ () {
6
+ emulate -L zsh ${=${options[xtrace]:#off}:+-o xtrace}
7
+ (( ${+TTHEME_ITERM_SHOWN} )) && return 0
6
8
  typeset -gx TTHEME_ITERM_SHOWN="" TTHEME_ITERM_DYED=0
7
9
  [[ $ITERM_PROFILE == 'ttheme · '* ]] && TTHEME_ITERM_SHOWN=${ITERM_PROFILE#ttheme · }
8
- fi
10
+ return 0
11
+ }
9
12
 
10
13
  __tt_keepable() { return 0 }
11
14
 
@@ -1,4 +1,4 @@
1
- source $TTHEME_HOME/adapters/_bg.zsh
1
+ source "$TTHEME_HOME/adapters/_bg.zsh"
2
2
 
3
3
  __tt_follows_focus() { return 0 }
4
4
 
@@ -1,4 +1,4 @@
1
- source $TTHEME_HOME/adapters/_bg.zsh
1
+ source "$TTHEME_HOME/adapters/_bg.zsh"
2
2
 
3
3
  zmodload -F zsh/files b:zf_rm b:zf_mkdir 2>/dev/null
4
4
 
@@ -1,4 +1,4 @@
1
- source $TTHEME_HOME/adapters/_bg.zsh
1
+ source "$TTHEME_HOME/adapters/_bg.zsh"
2
2
 
3
3
  typeset -g TTHEME_TERMINAL_BASE="" TTHEME_TERMINAL_VIEW=""
4
4
  typeset -gi TTHEME_TERMINAL_RFD=0 TTHEME_TERMINAL_WFD=0 TTHEME_TERMINAL_PID=0 TTHEME_TERMINAL_VIEWS=0 TTHEME_TERMINAL_RESHAPE=0
@@ -1,4 +1,4 @@
1
- source $TTHEME_HOME/adapters/_bg.zsh
1
+ source "$TTHEME_HOME/adapters/_bg.zsh"
2
2
 
3
3
  typeset -g TTHEME_WARP_SETTINGS=$HOME/.warp/settings.toml TTHEME_WARP_THEMES=$HOME/.warp/themes TTHEME_WARP_WORN=""
4
4
  typeset -g TTHEME_WARP_TABS=$TTHEME_STATE_DIR/warp TTHEME_WARP_DB="" TTHEME_WARP_ID="" TTHEME_WARP_LAST="" TTHEME_WARP_LOOK="" TTHEME_WARP_SEEN=""
@@ -1,4 +1,4 @@
1
- source $TTHEME_HOME/adapters/_bg.zsh
1
+ source "$TTHEME_HOME/adapters/_bg.zsh"
2
2
 
3
3
  typeset -g TTHEME_WEZTERM_SHOWN="" TTHEME_WEZTERM_VIEW=""
4
4
 
package/shell/preview.zsh CHANGED
@@ -288,15 +288,16 @@ __tt_pv_row() {
288
288
  fi
289
289
  name=${t##*/}
290
290
  [[ -n ${TTHEME_CATALOG[$t]} && ${TTHEME_GROUP[$t]} == *@* ]] && ind=" "
291
+ (( ${TTHEME_TUNED[(Ie)$t]} )) && w=-2
292
+ (( ${(m)#name} > lw - 17 - ${#ind} + w )) && name="${name[1,lw-18-${#ind}+w]}…"
291
293
  __tt_pv_hl "$name" "$base"
292
294
  hl=$REPLY
293
- if (( ${TTHEME_TUNED[(Ie)$t]} )); then
295
+ if (( w )); then
294
296
  (( color )) && hl+=" "$TTHEME_SGR[warn]"●"$TTHEME_SGR[/warn] || hl+=" ●"
295
- w=-2
296
297
  fi
297
298
  extra=""
298
299
  for part in "${(@s:|:)TTHEME_NATIVE_NAMES[$t]}" "${TTHEME_CHARACTER[$t]}" "${(@s:|:)TTHEME_ALIASES[$t]}"; do
299
- __tt_pv_alias "$name" "$part"
300
+ __tt_pv_alias "${t##*/}" "$part"
300
301
  [[ -n $REPLY ]] && { extra=$REPLY; break }
301
302
  done
302
303
  if (( color )); then
@@ -306,7 +307,9 @@ __tt_pv_row() {
306
307
  (( w < 1 )) && w=1
307
308
  REPLY=$gut$on"$ind$mark $base$hl$r$REPLY${(l:w:: :)}${tstrip[$t]} "$z
308
309
  else
309
- REPLY="$gut$ind$mark $hl${extra:+ $extra}"
310
+ w=$(( w + lw - 4 - ${#ind} - ${#name} ))
311
+ __tt_pv_fit "$extra"
312
+ REPLY="$gut$ind$mark $hl$REPLY"
310
313
  fi
311
314
  }
312
315
 
@@ -350,10 +353,19 @@ __tt_pv_bar() {
350
353
  }
351
354
 
352
355
  __tt_pv_head() {
353
- local b=$TTHEME_SGR[bold] d=$TTHEME_SGR[dim] z=$TTHEME_SGR[reset] right=$6
356
+ local b=$TTHEME_SGR[bold] d=$TTHEME_SGR[dim] z=$TTHEME_SGR[reset] title=$4 sub=$5 right=$6
357
+ local -i room=$(( $3 - $2 + 1 )) used
354
358
  (( color )) || b= d= z=
355
- out+=$'\e['$1';'$2'H'$b$gc$4$z
356
- [[ -n $5 ]] && out+=" "$d$5$z
359
+ if (( ${(m)#title} > room )); then
360
+ while [[ -n $title ]] && (( ${(m)#title} > room - 1 )); do title=${title[1,-2]}; done
361
+ title+=…
362
+ fi
363
+ used=${(m)#title}
364
+ (( used + 2 + ${(m)#sub} <= room )) || sub=""
365
+ [[ -n $sub ]] && (( used += 2 + ${(m)#sub} ))
366
+ (( used + 2 + ${(m)#right} <= room )) || right=""
367
+ out+=$'\e['$1';'$2'H'$b$gc$title$z
368
+ [[ -n $sub ]] && out+=" "$d$sub$z
357
369
  [[ -n $right ]] && out+=$'\e['$(( $3 - ${(m)#right} + 1 ))'G'$d$right$z
358
370
  return 0
359
371
  }
@@ -498,6 +510,10 @@ __tt_pv_foot() {
498
510
  break
499
511
  fi
500
512
  done
513
+ if (( lwid > end )); then
514
+ __tt_clip "$line" $end
515
+ line=$REPLY
516
+ fi
501
517
  out+=$line$'\e[K'
502
518
  [[ -n $right ]] && out+=$'\e['$(( end - rwid + 1 ))'G'$right
503
519
  local -i zc=1 zw
@@ -599,7 +615,7 @@ __tt_pv_specimen() {
599
615
  (( ${#sp} >= 20 )) || return 0
600
616
  local z=$TTHEME_SGR[reset] d=$TTHEME_SGR[dim] cell hex fore line text piece role tabs="" built="" key="$applied|$painted|$scene|$sw|$sc|$ph"
601
617
  local -A rs=(p "" d $TTHEME_SGR[dim] b $TTHEME_SGR[bold])
602
- local -i i r=6 cw=4 k n=${#TTHEME_SCENES} at
618
+ local -i i r=6 cw=4 k n=${#TTHEME_SCENES} at room
603
619
  (( n )) || return 0
604
620
  if [[ $key == "$pvscene" ]]; then
605
621
  out+=$pvscenes
@@ -660,11 +676,17 @@ __tt_pv_specimen() {
660
676
  [[ $line == «n»* ]] && (( sw >= 44 )) && continue
661
677
  (( r < ph )) || break
662
678
  parts=("${(@s:«:)line}")
663
- text=$parts[1]
679
+ text=$parts[1] room=$sw
680
+ while (( ${(m)#text} > room )); do text=${text[1,-2]}; done
681
+ (( room -= ${(m)#text} ))
664
682
  for piece in "${(@)parts[2,-1]}"; do
683
+ (( room > 0 )) || break
665
684
  role=${piece%%»*}
666
685
  [[ $role == [wn] ]] && role=p
667
- text+=$z${rs[${role:-p}]}${piece#*»}
686
+ piece=${piece#*»}
687
+ while (( ${(m)#piece} > room )); do piece=${piece[1,-2]}; done
688
+ text+=$z${rs[${role:-p}]}$piece
689
+ (( room -= ${(m)#piece} ))
668
690
  done
669
691
  built+=$'\e['$r';'$sc'H'$text$z
670
692
  (( ++r ))
@@ -1027,12 +1049,15 @@ __tt_pv_draw() {
1027
1049
  fi
1028
1050
  [[ $1 == hint ]] && (( ! wiped )) || pvz=()
1029
1051
  if (( pw < 40 || ph < 12 )); then
1030
- line="ttheme"
1031
- (( color )) && line=$TTHEME_SGR[bold]$ac$line$TTHEME_SGR[reset]
1032
- out+=$line$'\e[K\n'"Needs 40×12 — now ${pw}×${ph}"$'\e[K\n'
1033
- line="esc quits"
1034
- (( color )) && line=$TTHEME_SGR[dim]$line$TTHEME_SGR[reset]
1035
- out+=$line$'\e[K\e[J'
1052
+ local -a small=(ttheme "Needs 40×12 — now ${pw}×${ph}" "esc quits") paint=("" "" "")
1053
+ (( color )) && paint=($TTHEME_SGR[bold]$ac "" $TTHEME_SGR[dim])
1054
+ for (( k = 1; k <= 3 && k <= ph; k++ )); do
1055
+ line=${small[k]}
1056
+ while (( ${(m)#line} > pw )); do line=${line[1,-2]}; done
1057
+ (( k > 1 )) && out+=$'\n'
1058
+ out+=${paint[k]}$line${paint[k]:+$TTHEME_SGR[reset]}$'\e[K'
1059
+ done
1060
+ out+=$'\e[J'
1036
1061
  __tt_pv_flush
1037
1062
  return 0
1038
1063
  fi
@@ -1100,7 +1125,7 @@ __tt_pv_draw() {
1100
1125
  line=""
1101
1126
  if (( k < h )); then
1102
1127
  if (( ! N )); then
1103
- (( k == 0 )) && line=" ${dd}No palettes match '$flt'$zz"
1128
+ (( k == 0 )) && { __tt_clip " ${dd}No palettes match '$flt'$zz" $lw; line=$REPLY }
1104
1129
  elif (( i <= N )); then
1105
1130
  __tt_pv_row $i
1106
1131
  line=$REPLY
@@ -1265,6 +1290,7 @@ __tt_pv_read() {
1265
1290
  if [[ $REPLY != '[' && $REPLY != O ]]; then
1266
1291
  key=nop
1267
1292
  [[ $REPLY == c ]] && key=altc
1293
+ [[ $REPLY == [\]P_^X] ]] && __tt_pv_string
1268
1294
  return 0
1269
1295
  fi
1270
1296
  while __tt_pv_getch 0.05; do
@@ -1286,10 +1312,33 @@ __tt_pv_read() {
1286
1312
  Z) key=stab ;;
1287
1313
  '<'<->';'<->';'<->[Mm]) __tt_pv_sgr $seq ;;
1288
1314
  M) __tt_pv_x10 ;;
1315
+ "200~") __tt_pv_paste ;;
1289
1316
  *) key=nop ;;
1290
1317
  esac
1291
1318
  }
1292
1319
 
1320
+ __tt_pv_string() {
1321
+ local prev=""
1322
+ while __tt_pv_getch 0.05; do
1323
+ [[ $REPLY == $'\a' || ( $prev == $'\e' && $REPLY == \\ ) ]] && return 0
1324
+ prev=$REPLY
1325
+ done
1326
+ }
1327
+
1328
+ __tt_pv_paste() {
1329
+ setopt localoptions extendedglob
1330
+ local text=""
1331
+ key=nop
1332
+ while __tt_pv_getch 0.5; do
1333
+ text+=$REPLY
1334
+ [[ $REPLY == '~' && $text == *$'\e[201~' ]] && break
1335
+ done
1336
+ text=${${text%$'\e[201~'}//[$'\r\n\t']##/ }
1337
+ pasted=${text//[[:cntrl:]]/}
1338
+ [[ -n $pasted ]] && key=paste
1339
+ return 0
1340
+ }
1341
+
1293
1342
  __tt_pv_sgr() {
1294
1343
  local -a p=(${(s:;:)${${1#<}%[Mm]}})
1295
1344
  local -i b=$p[1]
@@ -1534,13 +1583,14 @@ __tt_pv_screen() {
1534
1583
  to=$at
1535
1584
  fi
1536
1585
  done
1537
- printf '\e[?2026h\e[?25l%s' "$pvmouse"
1586
+ printf '\e[?2026h\e[?25l\e[?2004h%s' "$pvmouse"
1538
1587
  if [[ -n $applied ]]; then
1539
1588
  __tt_pv_paint "$applied"
1540
1589
  else
1541
1590
  __tt_osc_reset
1542
1591
  painted=""
1543
1592
  fi
1593
+ __tt_pv_size
1544
1594
  resized=1 bgname="" bgshown="" bgdim=()
1545
1595
  return 0
1546
1596
  }
@@ -1683,7 +1733,8 @@ __tt_te_edit() {
1683
1733
  __tt_bg_hide $name
1684
1734
  err=$(__tt_cli tone $name edit 2>&1 >/dev/tty)
1685
1735
  rc=$?
1686
- printf %s "$pvmouse"
1736
+ printf '\e[?2004h%s' "$pvmouse"
1737
+ __tt_pv_size
1687
1738
  err=${${err//$'\n'/ }## #}
1688
1739
  resized=1 bgname="" bgshown="" bgdim=()
1689
1740
  if (( rc == 0 )); then
@@ -2052,7 +2103,7 @@ __tt_pv_te_panel() {
2052
2103
  else
2053
2104
  (( color )) && out+=" "$b" Apply "$z || out+=" Apply "
2054
2105
  fi
2055
- out+=" "$d$note$z
2106
+ (( ${#note} <= end - ix - 10 )) && out+=" "$d$note$z
2056
2107
  return 0
2057
2108
  }
2058
2109
 
@@ -2222,6 +2273,15 @@ __tt_pv_handle() {
2222
2273
  __tt_pv_rows
2223
2274
  __tt_pv_first "$name"
2224
2275
  ;;
2276
+ paste)
2277
+ __tt_pv_lw
2278
+ name=""
2279
+ [[ ${rtype[cur]} == thm ]] && name=${rval[cur]}
2280
+ flt+=${(L)pasted}
2281
+ while [[ -n $flt ]] && (( ${(m)#flt} > reply[1] - 12 )); do flt=${flt[1,-2]}; done
2282
+ __tt_pv_rows
2283
+ __tt_pv_first "$name"
2284
+ ;;
2225
2285
  esac
2226
2286
  return 0
2227
2287
  }
@@ -2248,7 +2308,7 @@ __tt_preview() {
2248
2308
  local te=0 tfocus=0 tetop=0 tewide=0 tbtn=0 tearm=0 tename=""
2249
2309
  local -i pvgone=0 bgprepid=0 mrow=0 mcol=0 mclick=0 mwheel=0 mlwheel=0 mlrow=0 mlcol=0
2250
2310
  local -F mlast=0
2251
- local mact="" mzone="" pvmouse=""
2311
+ local mact="" mzone="" pvmouse="" pasted=""
2252
2312
  local -a pvz=()
2253
2313
  local -a cvars=(TTHEME_TAB_PALETTE TTHEME_ANNOUNCE TTHEME_FX TTHEME_SORT TTHEME_MOUSE TTHEME_BG_BLUR TTHEME_BG_COLORS) clabel=("New tabs" Announce "Search fx" Sort Mouse Blur Colors)
2254
2314
  local -a cchoice=("off seq" "1 0" "typewriter decode glitch" "abc series" "on off" "0 1 2 3 4" "tone original") cshow=("off seq" "on off" "typewriter decode glitch" "abc series" "on off" "off 1px 2px 3px 4px" "tone original")
@@ -2283,7 +2343,7 @@ __tt_preview() {
2283
2343
  tty=$(stty -g 2>/dev/null) && stty -echo -icanon -ixon min 1 time 0 2>/dev/null || tty=""
2284
2344
  TTHEME_RAW=$(( ${#tty} > 0 ))
2285
2345
  __tt_pv_bg_open
2286
- printf '\e[?2026h\e[?1049h\e[?7l\e[?25l'
2346
+ printf '\e[?2026h\e[?1049h\e[?7l\e[?25l\e[?2004h'
2287
2347
  __tt_pv_pointer
2288
2348
  while :; do
2289
2349
  printf '\e[?2026h'
@@ -2316,7 +2376,7 @@ __tt_preview() {
2316
2376
  __tt_pv_unpaint
2317
2377
  fi
2318
2378
  __tt_pv_pointer off
2319
- printf '\e[?7h'
2379
+ printf '\e[?2004l\e[?7h'
2320
2380
  (( hubleft )) || printf '\e[?1049l'
2321
2381
  printf '\e[?25h\e[?2026l'
2322
2382
  [[ -n $tty ]] && stty "$tty" 2>/dev/null
package/shell/ttheme.zsh CHANGED
@@ -112,7 +112,7 @@ fi
112
112
 
113
113
  typeset -g TTHEME_CONFIG=${XDG_CONFIG_HOME:-$HOME/.config}/ttheme/config.zsh
114
114
 
115
- [[ -r $TTHEME_CONFIG ]] && source $TTHEME_CONFIG
115
+ [[ -r $TTHEME_CONFIG ]] && source "$TTHEME_CONFIG"
116
116
 
117
117
  typeset -g TTHEME_PINS_FILE=${TTHEME_CONFIG:h}/pins
118
118
  typeset -g TTHEME_PINS_RAW="" TTHEME_PINS_AT=""
@@ -305,10 +305,10 @@ __tt_mend() {
305
305
  __tt_apply "$TTHEME_SPEC"
306
306
  }
307
307
 
308
- source $TTHEME_HOME/adapters/_osc.zsh
309
- source $TTHEME_HOME/adapters/_wired.zsh
308
+ source "$TTHEME_HOME/adapters/_osc.zsh"
309
+ source "$TTHEME_HOME/adapters/_wired.zsh"
310
310
  [[ -r $TTHEME_HOME/adapters/$TTHEME_ADAPTER.zsh ]] &&
311
- source $TTHEME_HOME/adapters/$TTHEME_ADAPTER.zsh
311
+ source "$TTHEME_HOME/adapters/$TTHEME_ADAPTER.zsh"
312
312
 
313
313
  __tt_empty() {
314
314
  print -u2 'ttheme: no palettes installed yet — run `ttheme` in a terminal to pick some, or `ttheme add <palette>`'
@@ -729,6 +729,14 @@ __tt_key() {
729
729
  C) REPLY=right ;;
730
730
  D) REPLY=left ;;
731
731
  Z) REPLY=stab ;;
732
+ "200~")
733
+ seq=""
734
+ while read -sk 1 -t 0.5 c; do
735
+ seq+=$c
736
+ [[ $c == '~' && $seq == *$'\e[201~' ]] && break
737
+ done
738
+ REPLY=nop
739
+ ;;
732
740
  *) REPLY=nop ;;
733
741
  esac
734
742
  else
@@ -795,7 +803,7 @@ __tt_unpin_choose() {
795
803
  chosen=0
796
804
  {
797
805
  tty=$(stty -g 2>/dev/null && stty -echo -icanon -ixon min 1 time 0 2>/dev/null)
798
- print -rn -- $'\e[?25l'
806
+ print -rn -- $'\e[?25l\e[?2004h'
799
807
  while :; do
800
808
  __tt_unpin_block $at
801
809
  __tt_unpin_paint $n
@@ -811,7 +819,7 @@ __tt_unpin_choose() {
811
819
  } always {
812
820
  REPLY=$'\r'
813
821
  (( n > 1 )) && REPLY+=$'\e['$(( n - 1 ))'A'
814
- print -rn -- "$REPLY"$'\e[J\e[?25h'
822
+ print -rn -- "$REPLY"$'\e[J\e[?2004l\e[?25h'
815
823
  [[ -n $tty ]] && stty "$tty" 2>/dev/null
816
824
  }
817
825
  (( chosen ))
@@ -960,14 +968,15 @@ __tt_map_tip() {
960
968
 
961
969
  __tt_map_chip() {
962
970
  local -a p=(${=TTHEME_PALETTE[$1]})
963
- local bg=${p[1]#\#} fg=${p[2]#\#}
971
+ local bg=${p[1]#\#} fg=${p[2]#\#} name=$1
972
+ (( ${#name} > $2 )) && name=${name[1,$2-1]}…
964
973
  if (( ! color )); then
965
- printf -v REPLY '%-*s' $2 "$1"
974
+ printf -v REPLY '%-*s' $2 "$name"
966
975
  elif (( ${#p} >= 20 )); then
967
976
  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})) \
968
- $((16#${fg:0:2})) $((16#${fg:2:2})) $((16#${fg:4:2})) $2 "$1"
977
+ $((16#${fg:0:2})) $((16#${fg:2:2})) $((16#${fg:4:2})) $2 "$name"
969
978
  else
970
- printf -v REPLY "${TTHEME_SGR[dim]} %-*s ${TTHEME_SGR[reset]}" $2 "$1"
979
+ printf -v REPLY "${TTHEME_SGR[dim]} %-*s ${TTHEME_SGR[reset]}" $2 "$name"
971
980
  fi
972
981
  }
973
982
 
@@ -1110,7 +1119,7 @@ __tt_map_build() {
1110
1119
 
1111
1120
  __tt_map_fit() {
1112
1121
  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
1113
- local -i width=$1 i lvl maxw namew need wr cap
1122
+ local -i width=$1 i lvl maxw namew need wr cap short
1114
1123
  local -a lw=() rw=() cut=()
1115
1124
  (( color )) || b= d= y= r= z=
1116
1125
  reply=()
@@ -1149,11 +1158,16 @@ __tt_map_fit() {
1149
1158
  (( lvl > 3 )) && lvl=3
1150
1159
  cut=()
1151
1160
  if (( need > width )); then
1152
- cap=0
1161
+ cap=0 short=0
1153
1162
  for (( i = 1; i <= ${#ll}; i++ )); do
1154
1163
  (( rw[i] > cap )) && cap=$rw[i]
1164
+ (( rw[i] && lw[i] - ${(m)#ll[i]} + 1 > short )) && short=$(( lw[i] - ${(m)#ll[i]} + 1 ))
1155
1165
  done
1156
1166
  cap=$(( width - cap ))
1167
+ if (( short > cap )); then
1168
+ short=$(( short - cap > namew - 4 ? namew - 4 : short - cap ))
1169
+ (( short > 0 )) && (( namew -= short, cap += short ))
1170
+ fi
1157
1171
  maxw=0
1158
1172
  for (( i = 1; i <= ${#ll}; i++ )); do
1159
1173
  wr=$(( rw[i] ? cap : width ))
@@ -1202,6 +1216,10 @@ __tt_map_fit() {
1202
1216
  fi
1203
1217
  fi
1204
1218
  while [[ $line == *' ' ]]; do line=${line% }; done
1219
+ if (( need > width )); then
1220
+ __tt_clip "$line" $width
1221
+ line=$REPLY
1222
+ fi
1205
1223
  reply+=("$line")
1206
1224
  done
1207
1225
  }
@@ -1481,7 +1499,7 @@ __tt_next() {
1481
1499
  REPLY=${TTHEME_PALETTE[$TTHEME_ORDER[idx]]}
1482
1500
  }
1483
1501
 
1484
- source $TTHEME_HOME/preview.zsh
1502
+ source "$TTHEME_HOME/preview.zsh"
1485
1503
 
1486
1504
  __tt_hook() {
1487
1505
  autoload -Uz add-zsh-hook add-zle-hook-widget