v1.10.0
New release is out, thank you 🙏
v1.10.0 is here, with 81 pull requests and patches from 21 community contributors, including 13 first-time contributors. Thank you to everyone who tried ttt, reported issues, reviewed changes, and sent patches. This release brings more editing controls, easier file browsing, and new tools for the plugins you're building.
Highlights
- Editor improvements: Opt-in bracket and quote auto-closing, multi-cursor copy, cut, and paste, and an option to invert selection colors. Ctrl+D now brings each newly selected occurrence into view.
- Better word wrap: Set a maximum wrap column, with separate settings for each language. Up and Down now move by visible screen row when wrapping is enabled.
- Reuse a running editor: Enable
reuseWindowto open command-line files in the newest running editor using the same config directory. It is off by default and requires a restart;--new-windowopens a separate editor. - Markdown improvements: Expand and collapse
<details>sections, with fixes for nested lists and quotes, list numbering, wrapped prefixes, wide tables, and hard line breaks. - Richer plugin interfaces: Tabs and pager widgets, bordered and password inputs, table row actions and horizontal scrolling, and text selection and copying in plugin panels. Plugins can also read and navigate diff tabs.
More
What's Changed (81 pull requests)
What's Changed
- feat(plugins): add ttt-mcp to the featured community registry by @eugenioenko in #1117
- fix(widgets): measure title text and badge by display width by @somaz94 in #1116
- fix(editor): bring newly added Ctrl+D selection into view by @Hrushikesh-ramilla in #1122
- fix(terminal): close the pty exactly once by @ManManavadaria in #1121
- fix(plugins): fall back to root README when plugin documentation is missing by @iamcipherdev in #1119
- fix(plugins): keep button padding and refresh reused stack layout by @eugenioenko in #1137
- fix(widgets): scroll views fit stack content to their width by @eugenioenko in #1138
- feat(plugins): crypto.base64_encode and base64_decode by @eugenioenko in #1139
- feat(plugins): ttt.debounce by @eugenioenko in #1140
- feat(plugins): tabs widget by @eugenioenko in #1143
- feat(plugins): pager widget by @eugenioenko in #1142
- feat(ui): add option to invert colors for selection (#633) by @Hrushikesh-ramilla in #1131
- fix(buffer): keep an unsaved line ending change dirty after undo by @jayhemnani9910 in #1124
- feat(plugins): open_tab id and on_close by @eugenioenko in #1141
- feat(plugins): table on_activate, selected, row_styles, loading, empty, inset by @eugenioenko in #1144
- feat(plugins): tree and list badge_right and inset by @eugenioenko in #1145
- fix(plugins): remove the duplicate Inset field by @eugenioenko in #1169
- feat(plugins): hstack align by @eugenioenko in #1146
- feat(plugins): bordered, titled and password inputs by @eugenioenko in #1148
- feat(plugins): box title and width by @eugenioenko in #1147
- feat(plugins): button disabled by @eugenioenko in #1149
- feat(plugins): keyvalue muted_keys for details views by @eugenioenko in #1150
- feat(plugins): button styles by @eugenioenko in #1172
- feat(plugins): select and copy text in plugin panels by @eugenioenko in #1151
- fix(plugins): open a tree or list item that is already selected by @eugenioenko in #1173
- feat(plugins): env, timeout and cancel for sys.exec by @eugenioenko in #1177
- feat(plugins): focus plugin editor tabs and their autofocus inputs by @eugenioenko in #1180
- fix(search): keep replacement rescans responsive and cancellable by @huskyhao in #1092
- fix(terminal): respect application cursor key mode by @eugenioenko in #1182
- fix(plugins): check exec arguments for =! only for git by @eugenioenko in #1185
- fix(plugins): honor the plugin manifest in --plugin by @eugenioenko in #1176
- feat(plugins): scroll tables horizontally by @eugenioenko in #1188
- fix(widgets): keep the label when a right badge is too long by @eugenioenko in #1191
- fix(widgets): add a box's margins outside its fixed size by @eugenioenko in #1196
- feat(plugins): let the user approve a custom binary path by @eugenioenko in #1181
- feat(plugins): give file-handler tabs an id for close_tab and focus_tab by @eugenioenko in #1199
- fix: support multi-cursor copy, cut, and paste (#918) by @samarthyadavv in #1095
- feat(plugins): add ttt.text for width in terminal columns by @eugenioenko in #1189
- fix(ui): execute menu commands on mouse-up by @danielmrdev in #1096
- fix(plugins): show long permission entries in full in the approval dialog by @eugenioenko in #1193
- feat(markdown): support collapsible details and summary sections (#1034) by @Hrushikesh-ramilla in #1133
- fix(ui): give a press's release back when a menu took it by @eugenioenko in #1203
- fix(quick-open): add independent file visibility settings by @eugenioenko in #1194
- fix(markdown): fix nested lists and quotes, list numbering, wrapped prefixes, wide tables and hard breaks by @sercanatalik in #1129
- feat(plugins): stream sys.exec_async output and cap its size by @eugenioenko in #1201
- fix(widgets): support Page Up/Down and Home/End in trees by @Tyler-widd in #1207
- fix(editor): move Up and Down by screen row under word wrap by @eugenioenko in #1197
- fix(ui): restrict sidebar resizing to the divider by @eugenioenko in #1209
- feat(plugins): add a row actions column to tables by @eugenioenko in #1211
- fix(ui): keep the active tab when a plugin closes a tab to its left by @eugenioenko in #1213
- fix(ui): focus the tab that becomes active after a close by @eugenioenko in #1212
- fix(widgets): draw table row actions muted without an underline by @eugenioenko in #1214
- feat(widgets): select a table cell's text with a double-click by @eugenioenko in #1216
- feat(plugins): add a plugins.selectionStyle setting by @eugenioenko in #1218
- feat(editor): add bounded soft wrap with language overrides by @huskyhao in #1222
- fix(markdown): ignore closing details tags inside inline code by @orshih6 in #1219
- fix(terminal): make Ctrl+V paste configurable by @eugenioenko in #1227
- Fix/find bar paste routing by @Tyler-widd in #1231
- feat(plugin): let plugins read and navigate diff tabs by @sunburst89757 in #1225
- feat(plugin): add sys.spawn for interactive subprocess stdio by @4fthawaiian in #1232
- feat(editor): add opt-in bracket and quote auto closing by @eugenioenko in #1228
- test(e2e): isolate find-bar clipboard test by @Aaqibhafeezkhan in #1237
- feat(app): reuse the newest running editor for file opens by @salmonumbrella in #1242
- fix(buffer): pick the same indent size every time on a tie by @jayhemnani9910 in #1238
- feat(plugins): contribute bundled themes through manifests by @eugenioenko in #1247
- feat(file): add Open File command and File menu item #1234 by @byterotom in #1245
- fix(lsp): make an LSP edit batch one undo step by @lab1207 in #1077
- fix(diff): read hunk headers that leave out a count of 1 by @jayhemnani9910 in #1239
- docs(nix): update install instructions for nixpkgs by @eugenioenko in #1255
- feat(explorer) compact single directory tree by @Nandaleio in #1243
- fix(config): match .editorconfig section globs against the file path by @jayhemnani9910 in #1258
- fix(reuseWindow): preserve piped stdin and failed content tabs by @Lzcwbcgs in #1259
- perf(file): avoid redundant os.Stat calls in file picker listing by @prime120 in #1260
- test(file-picker): add stat-baseline comparison sub-benchmark by @eugenioenko in #1274
- feat(plugin): expose the running binary's path as ttt.executable_path() by @SimonOcampo1 in #1265
- fix(plugin): fail install and uninstall when the lifecycle hook fails by @SimonOcampo1 in #1266
- feat(workspace): show favorite folders first in the picker places by @SimonOcampo1 in #1268
- fix(file): preserve whitespace in Open File picker paths by @Lzcwbcgs in #1262
- fix(editor): render secondary cursors as solid blocks again by @eugenioenko in #1277
- feat(about): credit contributors and issue reporters in the About dialog by @eugenioenko in #1279
- fix(changes): leave diff mode when opening file by @eugenioenko in #1286
New Contributors (13)
New Contributors
- @somaz94 made their first contribution in #1116
- @ManManavadaria made their first contribution in #1121
- @iamcipherdev made their first contribution in #1119
- @samarthyadavv made their first contribution in #1095
- @Tyler-widd made their first contribution in #1207
- @sunburst89757 made their first contribution in #1225
- @4fthawaiian made their first contribution in #1232
- @Aaqibhafeezkhan made their first contribution in #1237
- @salmonumbrella made their first contribution in #1242
- @byterotom made their first contribution in #1245
- @Nandaleio made their first contribution in #1243
- @Lzcwbcgs made their first contribution in #1259
- @prime120 made their first contribution in #1260
Full Changelog: v1.9.0...v1.10.0