tscode v0.1.0-pre.94
Pre-release
Pre-release
·
23 commits
to main
since this release
tscode prerelease
This prerelease delivers the first SSH-friendly VS Code-style TUI workspace.
Highlights
- Mouse-first file explorer with real filesystem reads, expand/collapse, file open, hover, and wheel scrolling.
tscode path/to/filenow opens the file immediately, uses its parent directory as the workspace root, reveals it in the explorer, and starts the integrated terminal in that parent directory.tscode --help/--versionnow print CLI metadata before entering raw mode, making installer and package verification work without an interactive terminal.- Explorer sorting can now be changed by keyboard (
s), command palette, or right-click context menu between name, type, modified time, and size while keeping folders first and preserving the selected path. - Explorer copy, cut, paste, duplicate, and reveal-active-file actions backed by real filesystem operations.
- Explorer New File/New Folder now prefill the selected folder path, create items under the selected folder or selected file's parent, reveal new folders, open new files, and refuse workspace-escaping paths.
- Explorer multi-select is now a real file-operation selection model:
Spacetoggles the focused row,Shift+click range-selects visible rows,Ctrl/Command/Meta+click toggles rows, selected rows show a distinct marker/background, and copy/cut/paste/duplicate/delete/path-copy apply to the whole selected set. - Explorer drag/drop now moves selected rows into the highlighted destination folder, while
Alt+drag copies them instead; normal click-to-open still happens on release when no drag occurs. - Explorer rows now support a right-click context menu whose mouse-selectable actions call the same real open/toggle, create, copy/cut/paste/duplicate, rename, delete, path-copy, New Terminal Here, refresh, collapse, and visibility operations as shortcuts and the command palette.
- Explorer Compare Selected Files with
v, the command palette, or the right-click context menu now reads two selected text files from disk and opens a protected read-only unified diff tab. - Explorer
Right/Leftkeys now follow normal file-tree semantics: expand, descend into the first child, collapse, and move back to the parent instead of using a simple toggle-only behavior. - Editor and terminal areas now support right-click context menus backed by the same real
CommandActionpath as shortcuts and the command palette. Editor menus cover save, clipboard, search, navigation, rename, suggestions, formatting, comments, run-in-terminal, path-copy, revert, and close-tab actions; terminal menus cover copy/paste/search, clear/restart/rename, session management, maximize/resize, and focus actions when the child app is not using terminal mouse reporting. - File moves keep open editor tab paths in sync and reveal pasted/duplicated targets in the tree.
- Explorer filtering with
/scans the real workspace tree, auto-expands collapsed parent folders for nested matches, preserves dotfile/generated-folder visibility rules, and keeps file metadata/read-only markers in tree rows. - Explorer and workspace scans now respect
.gitignore,.ignore, parent/global Git ignore rules, and generated-folder defaults through one shared visibility policy; toggling ignored entries withireveals them in the explorer, quick open, workspace search, symbols, references, rename, and replace-in-files. - Explorer now auto-refreshes when visible workspace files or folders are created, deleted, renamed, or have metadata changed by the integrated terminal, Git, build tools, or other external processes; expanded folders, selection, active filters, newly matching filtered paths, and Git badges are preserved/refreshed without a manual
r. - Explorer rows now show Git working tree badges such as
git:M,git:?, and dirty foldergit:*when the workspace is inside a Git repository. - Command Palette with
F1orCtrl-Shift-P, fuzzy command matching, and actions for files, editor commands, explorer operations, focus changes, and terminal management. - Prompt and quick-panel inputs now behave like editable command fields:
Left/Right,Home/End,Backspace,Delete,Ctrl-A/Ctrl-E,Ctrl-U/Ctrl-K, and paste operate at the visible cursor instead of only appending text. - Quick Open overlay with
Ctrl-Pfuzzy matching across workspace file paths. - Binary, non-UTF-8, and very large files now open as protected read-only hex/ascii previews, and those previews are excluded from workspace search, replace, symbol scans, rename fallback, and completion token scans so original bytes cannot be rewritten accidentally.
- Workspace text search overlay with
Ctrl-Shift-ForCtrl-G, real file scanning plus unsaved open-buffer scanning, result previews, dirty-buffer markers, and jump-to-line open. - Document Symbols with
Ctrl-Shift-Oasks an installed language server fortextDocument/documentSymbolfirst, lists hierarchical or flat LSP symbols in a filterable quick panel, falls back to local extraction when needed, and jumps to the selected symbol. - Workspace Symbols with
Ctrl-Tasks an installed language server forworkspace/symbolfirst, lists returned server symbols in the same filterable quick panel, falls back to visible workspace scans including dirty open buffers, and jumps directly to the selected file location. - Optional installed-language-server integration now speaks stdio JSON-RPC/LSP for
textDocument/hover,textDocument/signatureHelp,textDocument/definition,textDocument/typeDefinition,textDocument/implementation,textDocument/prepareCallHierarchy,callHierarchy/incomingCalls,callHierarchy/outgoingCalls,textDocument/documentHighlight,textDocument/references,textDocument/rename,textDocument/completion,textDocument/documentSymbol,workspace/symbol,textDocument/formatting,textDocument/codeAction, andtextDocument/publishDiagnostics. Rust, Python, TypeScript/JavaScript, Go, and C-family files try common servers such asrust-analyzer,pyright-langserver,typescript-language-server,gopls, andclangd, whileTSCODE_LSP_COMMANDcan override the server for custom setups. - Code suggestions with
Ctrl-Spaceor command palette Trigger Suggest use installed LSP candidates when available plus workspace symbols, identifier tokens, dirty open buffers, and file-type keywords, then insert the selected suggestion into the active editor as one undoable edit. - Code Action from the command palette or editor context menu asks the installed language server for quick fixes/refactors at the editor cursor, lists returned actions in a filterable quick panel, applies returned workspace edits, and executes command-only actions that produce
workspace/applyEditedits throughworkspace/executeCommand. - Code folding now detects delimiter and indentation blocks, shows fold markers in the editor gutter, supports mouse gutter toggles,
Alt-[toggle-fold,Alt-]unfold-all, command palette actions, and editor context-menu actions while keeping scroll and mouse coordinates mapped to visible lines. - Go to Matching Bracket with
Ctrl-Shift-\, the command palette, or the editor context menu jumps between matching(),[], and{}pairs in the active buffer, including nested pairs and after-bracket cursor positions, while preserving editor navigation history. - Split Editor with
Ctrl-\, the command palette, or the editor context menu renders side-by-side editor panes; ExplorerCtrl-Enter, the explorer context menu, or the command palette opens the selected file to the side, and mouse click/wheel events activate and scroll the pane under the pointer. - Editor symbol hover now resolves the identifier under the mouse against workspace symbols/references and shows definition/reference counts plus the first matching definition in a hover overlay and status summary.
- Show Hover from the command palette or editor context menu asks the installed language server for hover documentation and displays it in a quick panel without leaving the TUI.
- Signature Help with
Ctrl-Shift-Space, the command palette, or the editor context menu asks the installed language server fortextDocument/signatureHelpand displays signatures, active parameter labels, and documentation in a filterable quick panel. - Go to Definition with
Ctrl-]or the command palette asks the installed language server first, then falls back to matching workspace symbol definitions or listing multiple definition candidates when needed. - Go to Type Definition and Go to Implementation from the command palette or editor context menu ask the installed language server for
textDocument/typeDefinitionandtextDocument/implementation, jump directly for one result, or list multiple server locations in a filterable quick panel. - Show Incoming Calls and Show Outgoing Calls from the command palette or editor context menu ask the installed language server for Call Hierarchy results, list callers/callees in filterable quick panels, and jump to the selected caller call site or callee symbol.
- Highlight Symbol with
Ctrl-Shift-E, the command palette, or the editor context menu asks the installed language server fortextDocument/documentHighlight, paints text/read/write ranges in the active editor, shows the highlight count in the status bar, and clears stale ranges after buffer edits. - Find References with
Ctrl-Ror the command palette asks the installed language server first, then falls back to whole-word workspace references for the editor cursor symbol and jumps directly to the selected occurrence. - Run LSP Diagnostics from the command palette or editor context menu asks the installed language server for active-buffer diagnostics, opens the Problems panel, and feeds editor gutter/status markers.
- Source Control from the command palette lists Git changed files and parsed diff hunks, opens changed-file rows as read-only diff tabs, supports fuzzy filtering, can stage/unstage or discard selected paths or all changes with typed confirmation, blocks discard when dirty editor buffers would be lost, and jumps from a hunk row to the changed source line.
- Run Task with
Ctrl-Shift-Bor the command palette detects.vscode/tasks.json,package.jsonscripts, Cargo, Make, Go, and Python project tasks, filters them in a quick panel, and starts the selected task in a new real PTY terminal. - Terminal search with terminal
Ctrl-For the command palette scans the active PTY terminal's visible screen and scrollback, highlights matches, showsfind:n/min the terminal header, and usesF3/Shift-F3to move between matches. - Terminal Copy All Output and Scroll to Bottom commands now operate on the active PTY viewport plus retained scrollback from the command palette and terminal context menu.
- Editor navigation history:
Alt-Left,Alt-Right, or the command palette move backward and forward after quick-open, search, symbol, definition, reference, go-to-line, or terminalpath:line:columnjumps. - Rename Symbol with
F2or the command palette asks the installed language server for a semanticWorkspaceEditfirst, applies returned edits to open buffers as undoable dirty edits and closed files on disk, then falls back to visible workspace text-file rename with identifier boundaries. - Replace in Files with
Ctrl-Shift-Hor the command palette scans real workspace text files, writes replacements to disk, updates clean open tabs, and skips dirty open buffers instead of overwriting unsaved work. - Run Workspace Check from the command palette detects Cargo, Go, or Python projects, runs the project checker, collects parseable diagnostics into a Problems panel, filters those problems, and jumps directly to the source location.
- Collected workspace and language-server diagnostics now appear in the editor with severity gutter badges, subtle line backgrounds, active-file problem counts, and active-line status messages.
- Terminal file-reference clicks now recognize richer compiler, test, traceback, and stack-frame output including quoted paths, Python
File "path", line Nlines, andpath(line,column)references. - Terminal file-reference clicks now also recognize Node/Jest/TypeScript stack frames like
at fn (path:line:column), including paths with spaces inside the parentheses. - Terminal link hover/click now recognizes
http://,https://, and percent-encodedfile://...:line:columnURLs; web URLs are copied through the internal/OSC52 clipboard, and file URLs open directly in the editor. - Run Selection in Terminal with
Ctrl-Enteror the command palette sends selected editor text, or the current editor line when there is no selection, to the active PTY shell and focuses the integrated terminal. - Editable tabbed code buffers with line numbers, syntax highlighting, dirty markers, cursor movement, paste, save, repeated search, undo, and redo.
- New Untitled File with
Ctrl-Nor the command palette creates a real editable scratch tab without touching disk; Save File opens Save As, Save All reports dirty Untitled tabs, and Save As retargets the tab to the new file. - Save As from the command palette writes the active editor buffer to a new relative or absolute path, creates parent folders, retargets the tab, refreshes explorer and Git status, and refuses dirty open target tabs.
- Open editor tabs now detect external disk changes while the app is running: clean tabs reload automatically after terminal/Git/tool writes, dirty tabs keep unsaved edits with
!/status-bar conflict markers, deleted files show deleted-on-disk state, and Save File/Save All refuse accidental overwrites until Reload/Revert or Save As is chosen. - Long editor lines now support horizontal scrolling with cursor tracking, mouse-click coordinate mapping, and horizontal wheel panning.
- Editor mouse drag selection now keeps the drag active after leaving the editor body, clamps the endpoint to the nearest code location, edge-scrolls the viewport, and feeds the same copy/cut/replace/run-selection paths as keyboard selection.
- In-file search now highlights visible matches and shows a match count in the status bar.
Ctrl-Hand the command palette can replace the current/next active-file match, while replace-all changes every match as one undoable edit.- Editor text selection with
Shift+arrow keys and mouse drag, visual selection highlighting, and selection counts in the status bar. - Mouse multi-cursor editing:
Alt+click inside the editor toggles extra cursors at clicked text positions, and typing/paste continues through every active cursor as one undoable edit. - Multi-occurrence editor selection:
Ctrl-Dadds the next active-file occurrence of the current word or selection,Ctrl-Shift-Lselects all active-file occurrences, and typing/paste/delete changes every selected occurrence as one undoable edit. - Editor word movement and word selection with
Ctrl-Left,Ctrl-Right,Ctrl-Shift-Left, andCtrl-Shift-Rightwhere the terminal reports modified arrow keys. - Editor smart editing now preserves indentation on newline, adds one extra indent level after opening braces/brackets/parentheses, and splits immediate closing pairs onto their own line.
- Editor auto-pairs for brackets, braces, parentheses, quotes, apostrophes, and backticks support insertion, selection wrapping, skip-over, and paired Backspace deletion.
- Internal editor clipboard support for
Ctrl-A,Ctrl-C,Ctrl-X, andCtrl-V, including replacing selected ranges as single undoable edits. - Editor
Ctrl-CandCtrl-Xnow copy or cut the current line when there is no active selection, including the trailing newline, so line clipboard behavior matches normal code editors. - Editor copy/cut now also exports selected text through OSC52 terminal clipboard integration where the host terminal allows it.
- Command palette path-copy commands copy active-file or selected-explorer absolute/relative paths through the same terminal clipboard export without disturbing explorer file copy/cut state.
- Editor line commands for indent/outdent, duplicate, delete, move up/down, and toggle comments now work on selected line ranges as one undoable edit, while still supporting the current line when no selection is active.
- Toggle Block Comment with
Shift-Alt-A, the command palette, or the editor context menu wraps/unwraps the active selection or current line using supported file-type block comment tokens such as/* */,<!-- -->,--[[ ]], and Python triple quotes. - Format Document with
Shift-Alt-For the command palette now tries installed LSPtextDocument/formattingfirst, applies returned text edits as one undoable dirty-buffer edit, and falls back to external formatters such asrustfmt,prettier,gofmt,black,shfmt, orclang-format. - Command palette Trim Trailing Whitespace removes spaces and tabs at line ends in the active editor buffer as one undoable edit, then saves cleanly to the real file when
Ctrl-Sor Save File is used. - Command palette Revert File and Reload File From Disk reload the active editor tab from disk, discard unsaved buffer edits, clear per-tab edit history, reset dirty/external-file markers, and refresh Git status markers.
- Opening files now canonicalizes paths before tab lookup, avoiding duplicate tabs and broken relative-path behavior when the OS exposes aliases such as
/tmpand/private/tmp. - File explorer actions for refresh, new file, new folder, rename, and delete with confirmation; rename refuses to move the workspace root or overwrite an existing target, folder rename/delete keeps open tabs in sync, and explorer delete now refuses to discard unsaved dirty open tabs.
- Explorer collapse-all is available through the command palette.
- Tab close support through the tab
x, middle click, orCtrl-W, with a mouse-selectable Save and Close / Don't Save / Cancel panel for dirty tabs, including Save As then close for Untitled tabs. - File save preserves existing trailing newlines.
- Bottom integrated terminal panel backed by a real PTY shell with forwarded keyboard input, shell state,
Ctrl-C, terminal scrollback, clear-terminal, restart-terminal commands, and a live header showing the active session, cwd, live/exited state, childexit:Norsignal:NAMEstatus, scrollback offset, and active terminal modes. - Terminal cwd tracking now consumes OSC 7 current-directory reports and automatically hooks zsh/bash sessions so
cdupdates the terminal header, context menus, and restart-terminal working directory. - Terminal title tracking now consumes OSC 0/2 title reports from shells and terminal apps for unlocked sessions, while user-renamed terminal tabs stay locked to the chosen title.
- Terminal child apps that emit OSC52 clipboard writes now update tscode's internal clipboard and forward the copy request to the host terminal clipboard where supported.
- Multiple integrated terminal sessions:
F7creates a new PTY shell,F8switches to the next terminal,F9closes the active terminal, terminal tabs switch on click, tab close targets close on click or middle-click, and+creates a new terminal. - Split Terminal with
Ctrl-Shift-5, the command palette, or the terminal context menu creates a side-by-side PTY pane from the active terminal's current working directory; clicking either pane focuses that shell, and closing one pane leaves the other shell alive. - New Terminal Here opens a real PTY shell in the selected explorer folder, or the selected file's parent directory, and restarting that terminal preserves its working directory.
- Rename Terminal changes and locks the active terminal tab/header title without restarting the PTY shell or losing its cwd/session state.
- The normal integrated terminal panel can now be resized by hovering the highlighted top border and dragging it with the mouse; the resize keeps a usable terminal height and leaves editor space visible.
- Terminal focus and maximize shortcuts now work from inside terminal focus too, so
F6/Ctrl-`andF12/Ctrl-Jcan move in and out of the integrated terminal without trapping the user in the PTY. - Full-screen terminal apps now receive terminal-owned keys before tscode shortcuts when alternate-screen or mouse-reporting modes are active, so keys such as
Ctrl-F,F3,F7-F9,F12,Ctrl-J, andShift-PageUp/Downreach tools like pagers, editors, and pickers inside the PTY. - Terminal ANSI rendering preserves parsed foreground/background colors plus bold, dim, italic, underline, and inverse styles.
- Terminal paste now honors bracketed paste mode when the child application requests it.
- Terminal output selection now works inside the TUI: drag visible shell output to highlight cells and copy on release, use
Ctrl-Shift-Cto copy the active terminal selection again, and useCtrl-Shift-Vto paste the internal clipboard into the active PTY shell. - Terminal modified navigation keys, function keys, Shift-Tab, null, and application-cursor arrows use xterm-compatible sequences for better shell/editor behavior inside the PTY.
- Terminal shell-editing shortcuts now forward more real terminal bytes, including
Alt-Backspace,Ctrl-Backspace,Alt-Enter,Alt-Tab, and control punctuation/digits such asCtrl-/,Ctrl-6, andCtrl-8. - Terminal clicks on visible existing
path:line:columnreferences open the file in the editor when the shell is not using terminal mouse mode. - Terminal apps that request mouse events now receive xterm-compatible mouse down, release, drag, move, and wheel events through the PTY, including SGR, default, and UTF-8 coordinate encodings.
- Release CI now builds
aarch64-unknown-linux-gnuwith the Ubuntugcc-aarch64-linux-gnulinker instead of the older cross Docker image path, avoiding a proc-macro resolution failure seen in the prerelease pipeline. - Installer latest-version resolution now compares semantic prerelease tags so
pre.10sorts afterpre.9even when the GitHub API returns prereleases out of lexical order. - Keyboard fallback for focus cycling, navigation, scrolling, command entry, and exit.
Install
curl -fsSL https://raw.githubusercontent.com/hungryZoo/tscode/main/install.sh | shRelease assets
- macOS:
x86_64-apple-darwin,aarch64-apple-darwin - Linux GNU:
x86_64-unknown-linux-gnu,aarch64-unknown-linux-gnu,armv7-unknown-linux-gnueabihf - Linux static tarballs:
x86_64-unknown-linux-musl,aarch64-unknown-linux-musl - Linux packages:
.deband.rpmfor GNU Linux targets - Windows:
x86_64-pc-windows-msvc,aarch64-pc-windows-msvc