Repository navigation
v1.12.0
It’s Thursday! I love Thursdays and releasing ttt.
v1.12.0 is here, with 110 pull requests and patches from 23 community contributors, including 12 first-time contributors. Thank you to everyone who tried ttt, reported issues, reviewed changes, and sent patches. This release brings interface language packs, terminals in editor tabs, and more ways to work with files and changes.
In terms of new features, this is one of our biggest releases yet.
Thank you all 🙏
Highlights
- Interface language packs: Install a language pack through the Plugins panel, then choose Change Display Language or select a language in Settings. Restart to apply it; missing or outdated translations fall back to English.
- More flexible terminals: Open terminals as editor tabs, navigate between terminal tabs with the keyboard, and choose whether reserved shortcuts go to ttt or the terminal. Bash shell integration improves prompt resizing too.
- More useful Explorer: Search loaded folders with /, open a terminal in a folder from its context menu, and open files in configured external apps. Deleted files and folders now go to system Trash by default on supported platforms.
- More editing controls: Enable optional indent guides, wrap long lines between words, and use new half-page and viewport-only scrolling commands. Home and End are now rebindable, Alt+click can remove individual cursors, and the new Code Actions picker brings language-server actions into the editor.
- Better tab controls: Reopen closed tabs from the command palette or tabs menu, close tabs with a middle-click, and turn off preview tabs if you prefer every opened file to stay open. Long tab names are capped at 32 columns, with the full name available on hover.
- Work with whole folders of changes: Stage, unstage, or discard a folder from the Changes tree. Detail views now show totals for files and lines changed.
- Updates when you want them: Check for updates on demand and restart ttt after updating.
- Reliability fixes: Workspace replacements undo in one step, trailing blank lines survive loading, and formatters reject empty output for nonempty files and time out when stalled. Language-server initialization stays off the typing path, settings writes preserve concurrent changes, and stalled clipboard commands no longer hang the editor.
More
What's Changed (110 pull requests)
What's Changed
- fix(auto-update-flake-hash): keep Nix vendor hash automation current and fail visibly by @mvanhorn in #1367
- chore(about): update contributors and issue reporters by @eugenioenko in #1368
- "feat(editor): make Home and End rebindable commands" by @costajohnt in #1373
- fix(ui): add undo and redo support for input widgets (#1377) by @Hrushikesh-ramilla in #1378
- refactor(ui): consolidate text inputs on shared widget by @eugenioenko in #1380
- feat(i18n): centralize core UI copy in an English catalog by @eugenioenko in #1384
- refactor(scm): introduce provider boundary for status and staging by @eugenioenko in #1387
- feat(changes): stage, unstage and discard a whole folder from the tree by @sunburst89757 in #1390
- build(deps): update textmate-go to v0.2.4 by @eugenioenko in #1396
- chore: update vendorHash by @github-actions[bot] in #1397
- chore(plugins): list the auto-save plugin by @Fishason in #1388
- feat(plugins): warn before installing community plugins by @eugenioenko in #1400
- docs(agents): tighten the PR checklist and follow-up, document screenshots by @eugenioenko in #1401
- feat(editor): add half-page scroll commands by @starwish9527 in #1395
- refactor(scm): carry typed changes through working-tree state by @eugenioenko in #1394
- feat(i18n): add language pack plugins and automatic catalog updates by @eugenioenko in #1385
- fix(terminal): resolve bare shell commands against PATH before setting working directory (#1379) by @Hrushikesh-ramilla in #1383
- feat(editor): toggle off individual cursors with Alt+Click (#1381) by @Hrushikesh-ramilla in #1386
- fix(quick-open): route paste to the focused select dialog input (#1389) by @Hrushikesh-ramilla in #1391
- chore: update vendorHash by @github-actions[bot] in #1404
- fix(ui): keep grabbing pointer throughout editor tab dragging (#1329) by @Hrushikesh-ramilla in #1376
- fix(editor): prevent duplicate buffers when saving to an open file by @Lzcwbcgs in #1370
- chore: update vendorHash by @github-actions[bot] in #1405
- ci(about): add manual contributor update workflow by @eugenioenko in #1369
- fix(markdown): keep a multiline code span out of the details boundary by @bfs2021 in #1230
- feat(explorer): open a terminal in a folder from the context menu by @SimonOcampo1 in #1410
- feat(editor): add viewport-only line scrolling by @starwish9527 in #1409
- refactor(scm): read editor baselines through providers by @eugenioenko in #1406
- feat(menu): group options into focused submenus by @eugenioenko in #1413
- fix(menu): separate option toggles from menu actions by @eugenioenko in #1415
- feat(explorer): move deleted files to system trash by @eugenioenko in #1407
- refactor(settings): give Explorer its own settings tab by @eugenioenko in #1416
- refactor(scm): read single-file changes through providers by @eugenioenko in #1414
- fix(diff): keep markers stable after unchanged formatting by @eugenioenko in #1417
- fix(format): honor save-time final newline policy by @eugenioenko in #1419
- feat(tabs): reopen closed tabs from the command palette by @SimonOcampo1 in #1269
- refactor(scm): read aggregate current changes through providers by @eugenioenko in #1422
- refactor(scm): read paged history through repository capabilities by @eugenioenko in #1425
- refactor(scm): read revision details and content through providers by @eugenioenko in #1427
- feat(editor): Optional indent guides by @lien-hung in #1423
- feat(theme): add editor.indentGuide style by @eugenioenko in #1431
- feat(terminal): open terminals as editor tabs by @eugenioenko in #1420
- fix(editor): preserve multi-cursors over indent guides by @lanangptraa in #1435
- feat: prompt to create missing save directories by @Aaqibhafeezkhan in #1411
- perf(ui): bound the indent guide blank-line scan by @bfs2021 in #1432
- feat(update): add on-demand update checks and restart by @huskyhao in #1433
- feat(editor): break soft-wrapped rows between words by @eugenioenko in #1438
- ci: add binary size comparison on pull requests by @eugenioenko in #1443
- feat(picker): add heading label before Home/system places by @mahilsaily306-max in #1281
- ci: publish pull request binaries with download links by @Araxeus in #1449
- ci: run native Trash tests only when Trash can change by @eugenioenko in #1450
- feat(apps): configure apps and open files from Explorer or palette by @eugenioenko in #1421
- feat(plugin): add active option to list and tree by @eugenioenko in #1456
- "feat(terminal): close a single terminal from the tab context menu and More menu" by @costajohnt in #1452
- fix(ui): correctly render decomposed Unicode filenames (NFD) by @rafjaf in #1444
- fix(markdown): hide HTML comments and tags instead of printing them by @eugenioenko in #1455
- feat(changes): show files and lines changed in detail views by @eugenioenko in #1458
- test(e2e): make missing-directory prompt assertions independent of wr… by @Lzcwbcgs in #1457
- chore: update vendorHash by @github-actions[bot] in #1459
- ci: compare main with the latest release daily by @eugenioenko in #1451
- fix(sidebar): show icons in overflow dropdown for label-icon tabs by @HarshRajSinghania in #1310
- build(deps): update textmate-go to v0.3.0 by @eugenioenko in #1464
- chore: update vendorHash by @github-actions[bot] in #1467
- feat(tabs): cap tab names at 32 columns and show the full name on hover by @eugenioenko in #1453
- fix(keys): shift+tab bindings never match by @BrettKinny in #1465
- docs(lsp): match servers by extension when the grammar can change by @eugenioenko in #1469
- fix(picker): add 1-row padding between search input and places column by @mahilsaily306-max in #1282
- fix(highlight): keep embedded language names from plugin scope suffixes by @eugenioenko in #1468
- fix(keyboard): apply shortcut modifier preference across the UI by @eugenioenko in #1318
- fix(settings): build display language options from the form's settings by @eugenioenko in #1484
- fix(tabs): lead the more menu with Reopen Closed Tab and disable it without history by @eugenioenko in #1485
- feat(tabs): middle-click closes tab by @BrettKinny in #1478
- fix(menu): pad submenu chevron from the right border by @jay23606 in #1472
- refactor(ui): remove unused SelectableList by @Lzcwbcgs in #1487
- feat(terminal): add bash shell integration for prompt resizes by @eugenioenko in #1365
- fix(sidebar): move focus to editor when hiding a focused sidebar by @BrettKinny in #1490
- fix(statusbar): attach the LSP icon to the language segment by @eugenioenko in #1493
- feat(terminal): add configurable shortcut forwarding by @eugenioenko in #1491
- test(plugin): make the dial-after-unload RPC test deterministic by @eugenioenko in #1494
- feat(explorer): search loaded folders with / by @eugenioenko in #1470
- feat(lsp): code actions picker by @lien-hung in #1486
- feat(editor): add editor.previewTabs setting (closes #1474) by @painbaba in #1480
- fix(palette): load Quick Open files lazily and asynchronously by @eugenioenko in #1503
- fix(buffer): preserve trailing blank lines on load by @eugenioenko in #1502
- ci(pr-binaries): build linux-386 for the live browser preview by @eugenioenko in #1506
- ci(pr-binaries): link the emulated live preview in the binaries comment by @eugenioenko in #1508
- fix(search): group replacement edits into one undo step by @eugenioenko in #1505
- feat(plugin): expose terminal color palette by @danielmrdev in #1500
- fix(formatter): reject empty output for nonempty documents by @eugenioenko in #1510
- fix(formatter): time out external formatters after five seconds by @eugenioenko in #1512
- fix(lsp): execute code action command when workspace edit is empty (closes #1495) by @chiragjangiir in #1497
- fix(lsp): keep server initialization off the typing path by @eugenioenko in #1514
- fix(settings): preserve invalid configuration on settings writes by @eugenioenko in #1516
- fix(terminal): exclude editor commands from terminal chords by @eugenioenko in #1520
- fix(settings): preserve concurrent changes when applying forms by @eugenioenko in #1522
- fix(app): return focus to where it was when an overlay closes by @cristianchiriac in #1082
- fix(settings): persist changes to the active custom config by @eugenioenko in #1524
- fix(ci): avoid duplicate authentication in contributors workflow by @eugenioenko in #1535
- chore(about): update contributors and issue reporters by @github-actions[bot] in #1536
- fix(search): honor case-insensitive workspace searches by @eugenioenko in #1538
- fix(search): allow panel focus while find is open by @eugenioenko in #1539
- fix(search): reflect input focus in chevron styling by @eugenioenko in #1542
- fix(icons): update branch and commit glyphs by @eugenioenko in #1540
- fix(quit): show unsaved confirmation above open dialogs by @eugenioenko in #1545
- fix(formatter): preserve file paths with spaces by @danielmrdev in #1544
- fix(outline): jump to sections instead of collapsing them by @eugenioenko in #1546
- fix(config): load default-dark when theme is unset by @eugenioenko in #1549
- feat(terminal): add keyboard navigation between tabs by @danielmrdev in #1548
- fix(clipboard): prevent hangs from stalled clipboard commands by @eugenioenko in #1550
- chore(about): update contributors and issue reporters by @github-actions[bot] in #1556
New Contributors (12)
New Contributors
- @mvanhorn made their first contribution in #1367
- @costajohnt made their first contribution in #1373
- @Fishason made their first contribution in #1388
- @starwish9527 made their first contribution in #1395
- @lien-hung made their first contribution in #1423
- @lanangptraa made their first contribution in #1435
- @mahilsaily306-max made their first contribution in #1281
- @Araxeus made their first contribution in #1449
- @HarshRajSinghania made their first contribution in #1310
- @BrettKinny made their first contribution in #1465
- @painbaba made their first contribution in #1480
- @chiragjangiir made their first contribution in #1497
Full Changelog: v1.11.0...v1.12.0