All notable changes to this project will be documented in this file.
SPC o a gopens Copilot CLI;SPC o a Gopens Copilot GUI chatSPC o a aopens Claude CLI;SPC o a Aopens Claude GUI chatSPC o a copens Codex CLI (no GUI variant)
SPC o tnow ignores editor-terminal tabs namedcodex,claude, andclaude code, so panel terminal switching no longer jumps into those CLI tabs
First stable release. Includes all changes shipped in 0.5.0, 0.5.1, and 0.5.2 pre-releases.
- Editor-group terminal workflow via SPC o T and panel terminal improvements via SPC o t.
- Normal mode Ctrl+J add line and Ctrl+K delete line.
- Explorer badge decorations disabled by default for cleaner UI.
- Which-key duplicate key resolution in sidebar/explorer contexts.
- Managed Vim keybinding merge behavior during install defaults.
- Dashboard install-status detection for managed Vim bindings.
- Sidebar focus and delay behavior around which-key open/close.
- Which-key back-navigation and footer hint text.
- Fix duplicate key handling in rendered which-key menus causing wrong nested commands from Explorer/sidebar focus (for example
SPC o uopening Output) - fixed Doom install defaults so new managed Vim keybindings merge into existing user bindings instead of being skipped
- fixed dashboard install-status detection for managed Vim bindings so extra user fields do not show false missing state
- Set default explorer.decorations.badges to false to hide Explorer badge markers (including AI context/emphasis indicators).
- In normal mode, Ctrl+J adds a line and Ctrl+K deletes a line.
- Remove back-navigation from which-key menu (backspace/arrow-left). Not part of Doom Emacs: use Esc to close and reopen
- Remove hint text from which-key footer
- Fix which-key opening instantly when sidebar is visible but editor is focused — delay now only skipped when sidebar itself has focus.
- Restore sidebar focus after closing which-key when it was opened from the sidebar
SPC o T— creates a named editor-group terminal (*vterm*/*vterm*<N>); title is locked so the shell cannot override itSPC o t— opens the most recent panel terminal (or creates one); skips editor-group terminals by name; hides the panel when the panel terminal is already active
alt+space/ctrl+spacefrom an editor-group terminal now passesterminalPanelOpen: falsevia theterminalEditorFocuscontext key, soSPC o tcorrectly callsdoom.openPanelTerminalinstead of toggling the panelEscapenow closes the which-key menu when focus is inside a terminal;doom.whichKeyHideadded toterminal.integrated.commandsToSkipShell
Spacein the command palette triggered the which-key menu when the Doom dashboard was open (default state in folder mode before any file is opened); the fourdoom.dashboardVisiblespace keybindings were missing the!inputFocusguard present in all other space binding variantsSPCfrom the file explorer or sidebar no longer waits for the idle delay before opening the which-key panel; subsequent chord keys were being swallowed by the explorer's native list widget beforedoom.triggerKeycould capture themalt+space/ctrl+spacefrom Claude Code webview no longer waits for the idle delay before opening the which-key panel; same key-capture issue applies since the webview iframe consumes keys during the delay window
SPC o T/SPC o teditor terminal (feat(terminal): add editor terminal with panel open fix) reverted — the delayed terminal scan on workspace reload caused unexpected panel terminals to open in various situations, making terminal behaviour unpredictable after reload;SPC o T/SPC o trestored to its previous panel-terminal behaviour
SPC o tnow correctly opens a panel terminal instead of stealing focus to an existing editor-group terminal when one is openctrl+j/ctrl+kin fuzzy search (SPC s s,SPC /) jumped two entries per keypress; duplicate handling between VS Code keybindings and the webview; navigation now handled entirely in the webview, removing the registereddoom.fuzzySearchMoveDown/Upcommands
SPC b BandSPC <— unfiltered buffer switcher showing all open editors including internal panels and duplicates across groups;SPC b bretains its existing filtered view
- Fuzzy search (
SPC s s,SPC /) now uses substring matching instead of subsequence matching — "test" only matches lines containing the literal string "test", eliminating false positives from scattered character matches
doom.whichKey.idleDelaysetting (default1.0seconds, matching Doom Emacs) — which-key panel is no longer shown immediately onSPC; keys pressed within the delay window are buffered and walked against the binding tree silently. If the full chord resolves to a leaf command it executes without ever opening the panel. If the chord resolves to a group the panel opens pre-navigated to that group. If the timer expires with no further input the panel opens at root as before. Set to0to restore the old instant-open behaviour. Terminal-focus invocations (alt+space) always skip the delay and open the panel immediately.- Set default: "explorer.autoReveal": false
- Added file explorer keybindings
o o(open),o v(open in vertical split), ando s(open in horizontal split). - Added file explorer keybindings
y f(copy file),y a(copy absolute path), andy r(copy relative path).
- Fast chords on Windows (e.g.
SPC b,SPC SPC) no longer drop the second key —whichkeyVisiblecontext is now set before the async panel-open chain sodoom.triggerKeyactivates immediately; unconditionaldoom.triggerKeykeybindings added for all a–z, A–Z, 0–9,.,/covering the remaining window before the webview receives focus
SPC w d/SPC w cno longer closes the wrong editor group — when two groups were open, the non-focused group was closed instead of the focused one; whichkey now snapshots the active group atSPC-press time and closes it directly via the VS Code tab group API, bypassing the focus-restoration uncertainty that follows panel close
doom-workspacecompanion extension — bundled in the extension pack and installed automatically alongside Doom Code; runs natively on the workspace host (local, WSL, or SSH remote) and handles all filesystem and git operations, finally makingSPC SPCandSPC .file pickers work correctly on SSH remotes without any SSH/WSL special-casing in the UI extension
- File picker (
SPC SPC) and directory browser (SPC .) filesystem and git calls delegated todoom-workspacerunning on the workspace host — removes the SSH/WSL workarounds that accumulated in v0.3.4–v0.3.6 and improves response time on remote connections - Selection history
globalStatewrites debounced on passive file opens — eliminates redundant I/O during rapid navigation - Buffer panel tab-change refreshes debounced — reduces redraws during rapid tab switching
- Buffer list shows correct file type badge on WSL/SSH remotes — was displaying the URI scheme (
vscode) instead of the actual file extension - Buffer list shows correct file size for directories on WSL/SSH remotes —
statreturning0now renders as"0"instead of blank - Chord keys no longer dropped on Windows after
SPC;doom.triggerKeyreplaceswhichkey.triggerKeyto avoid conflict with VSpaceCode on activation SPC o tandSPC o pcorrectly handle terminal/explorer state changed via mouse or non-DoomCode commands — panel state is now snapshotted from VSCode context atSPC-press time rather than relying on potentially stale tracked state- Buffer panel and key-bindings panel visibility context keys stay in sync after toggling
SPC SPC(no workspace open) no longer flashes the dashboard when a project is selected via the fallback project picker
SPC SPCon SSH workspaces now actually respects.gitignore—vscodevim.vim(extensionKind: ["ui"]only) was listed as anextensionDependency, which prevented Doom from installing on the remote extension host; Doom fell back to running locally wheregit ls-filescannot reach the remote filesystem and silently fell through tofindFiles(no.gitignoresupport). Moving vim toextensionPacklets Doom install on the SSH remote where git runs correctly.
SPC p b— switch to project buffer (same asSPC b b)
SPC p p,SPC p f, andSPC p .no longer show a file picker after selecting a project — the project opens directly. Extensions must load before any action can run, making the two-step pick-project-then-pick-file flow too slow to be usefulSPC p orenamed toSPC p a(Add new project)vscodevim.vimmoved fromextensionDependenciestoextensionPack— it is a recommended companion, not a hard requirement for Doom to function
SSH users: After updating, open your SSH remote in VS Code and run Developer: Restart Extension Host (
Ctrl+Shift+P). IfSPC SPCstill shows gitignored files, Doom is still running locally — uninstall and reinstall it while connected to the SSH remote so VS Code places the extension on the remote host.
SPC SPCon WSL workspaces now respects.gitignore— previously all files including ignored ones were listed; now useswsl.exe -d <distro> -- git ls-filesso git runs inside the distro and honours the remote.gitignoreSPC SPCon SSH workspaces: removed early-exit guard that skippedgit ls-filesentirely for SSH URIs and fell back tofindFiles;git ls-filesnow runs on the remote host viaextensionKind: workspace(note: full fix required v0.3.6)
SPC p precent project picker now shows a[host]indicator in the permissions column for remote projects (WSL distro name or SSH hostname), replacing the unreadable Linux-style permissions that can't be retrieved for remote pathsSPC p pskips the cross-project file picker for remote projects (WSL/SSH) — VS Code isn't connected to the host yet at that point, so files can't be listed; selecting a remote project now opens the folder directly
SPC SPCandSPC .now work correctly when connected to a WSL (or other remote) workspace — previously no files or folders were shown in the resultsSPC SPCandSPC .show----------/0for permissions and size on SSH remotes —fs.statover SSH is too slow; local and WSL connections show real valuesSPC SPCon SSH remotes uses VS Code'sfindFiles(ripgrep) instead ofgit ls-files— respects.gitignorenatively and avoids the latency of git over the networkSPC p premote project entries show----------/0for permissions and size instead of blank columns- Extension
extensionKindchanged to["workspace", "ui"]so the installed extension migrates to the remote host when opening a WSL/SSH workspace
SPC p pcross-project file picker now ranks results by frecency — shares the same selection history asSPC SPCandSPC .
SPC qwhich-key group (+quit/session) now includes:FClear current frame,qQuit VSCode,rReload VSCodeSPC SPCandSPC .file pickers now rank results by frecency (frequency × recency) — files you open often and recently surface first, matching Doom Emacs prescient.el behaviour- Selection history persists across restarts and is shared across workspaces (global, like prescient.el)
- Files opened by any method (click, git, external tools) passively seed the history via
onDidOpenTextDocument; explicit picker selections additionally boost the frecency count
- Which-key menus sorted alphabetically (case-insensitive, lowercase before uppercase):
b,d,e,f,f→i,g,o→u SPC SPCnon-open-tab files previously sorted alphabetically; now ordered by frecency score with modification time as fallback
whichkey.bindingOverridesnow respected in the doom which-key UI — useposition: -1to remove a binding, a positive index to insert at a specific position, or omitpositionto append
SPC o pno longer opens the explorer without focus when the sidebar was previously closed withq- First key of a chord no longer dropped when the which-key panel reattaches to an existing webview
- Terminal sticky scroll disabled by default
SPC ./SPC f f— new directory browser panel, mirrors Doom Emacsfind-file; starts in the current file's directory (falls back to project root, then$HOME); lists files and subdirectories; typing filters by name within the current directory; Tab completes the active item into the path; backspacing past a/removes the whole directory component for rapid upward traversalSPC SPC/SPC p f— new "find file in project" panel, Doom Emacs-style file picker- Orderless AND matching in file and project pickers — space-separate terms to filter by multiple words in any order
- File picker shows last modified time alongside each file
- Buffer switcher shows file size and accent extension badge
- Opening a project now chains directly into the file picker; editor layout resets on project open
- Paths under home directory collapse to
~across all panels - Relative time labels in file pickers expanded with clock time appended
SPC SPCreuses an existing editor tab when opening a file instead of always opening a new one
.gitignorerespected in project file picker.gitignorerespected inSPC SPCfile search (usesgit ls-files)- Which-key panel now restores the terminal tab after closing instead of collapsing the panel, when
SPC o thad opened the terminal beforehand
- Dashboard "Install now" button now refreshes the page after install, hiding the prompt once everything is applied
- Dashboard now shows a prompt when Doom keybindings are missing from your user
keybindings.json - Install now writes Doom's keybindings into your user
keybindings.jsonso magit dispatch displays the correct key hints — existing content and comments are preserved
SPC g schanged from "Status" (opens SCM panel) to "Stage hunk at point" (git.stageSelectedRanges)- Magit: remap shift keybinds to literal symbols
- Which-key menu closes when focus moves to an editor, terminal, or any other panel
- Git whichkey:
SPC g [jump to previous hunk,SPC g ]jump to next hunk - Default scrollbar hidden (
editor.scrollbar.vertical/horizontal: hidden) - SCM diff decorations default to gutter only (
scm.diffDecorations: gutter)
- Magit (
kahole.magit) added to extension pack - Git keybindings:
SPC g gstatus,SPC g /dispatch,SPC g bcheckout,SPC g Bblame magit.display-buffer-functiondefaults tosame-column- Magit buffer keybindings:
g gtop,g rrefresh,xdiscard,-reverse,_reverting,Oresetting
SPC o a cnow opens Codex CLI in a terminal editor instead of the ChatGPT sidebarSPC s sandSPC s pfuzzy search results now display in file order (by line number) instead of by match score
- Which-key buffers keys pressed before the menu finishes rendering
- Space no longer triggers which-key when Claude or GitHub Copilot chat is open in editor view
- Workspace search performance improvements
- Startup page renamed to dashboard
- Which-key menu can now be opened from settings and keyboard UI pages
SPC o a akeybinding to open Claude chat
- GitHub Copilot chat keybinding moved to
SPC o a g - Removed Gemini keybinding from
SPC o a g
- Buffer switcher now previews the first item on open
- GitHub Copilot which-key triggers work correctly
- Which-key alternative trigger works correctly when Claude chat window is open
- Buffer switcher works correctly for terminal editors
- Terminal window deletion no longer causes errors when closing the last terminal
- Toggle explorer keybinding restored to correct behavior
- Terminal toggle keybinding restored to correct behavior
- Claude chat which-key entry behaves correctly in Doom menu
- Doom which-key menu reverted to use original which-key conditions for better compatibility
doom.whichKey.menuStylesetting to choose Doom Code's custom which-key panel or the default VSpaceCode menuSPC h bto search available which-key bindings by key, name, or command- Startup page now opens on activation with manual install/cleanup actions, repository links, and embedded changelog
- Doom Code now ships its own panel-based UI for which-key, project search, and workspace buffer switching
- Added top-level shortcuts
SPC /for project search andSPC ,for workspace buffer switching - Buffer switching now better matches Doom Emacs, with clear buffer flags
- Built-in fuzzy search now replaces the external
fuzzy-searchextension for Doom Code search flows - Install defaults no longer apply silently on first activation; setup is explicit opt-in only
- Improved leader-key handling inside Doom Code menus so
SPC,Ctrl+K, andEscapebehave more consistently doom.cleanupnow operates on the active VS Code profile's keybindings, not just the default profile- Install defaults now respect existing values from any user-owned configuration scope before writing globals
- Aligned the
SPC wwindow menu to better replicate Doom Emacs window behavior - Todo Highlight and fuzzy-search now install as bundled companion extensions instead of hard requirements
- Improved WSL and remote-window activation so Doom Code no longer fails when required UI extensions are unavailable in the remote extension host
- Adjusted the
SPC bbuffer menu to better replicate Doom Emacs buffer behavior - Refreshed README keybinding highlights and release notes so documentation matches shipped bindings more closely
- Added
SPC t bas a "big mode" toggle that zooms the workbench in and resets back to normal on repeat - Added Todo Highlight as a hard dependency for
TODO:,FIXME:,NOTE:,REVIEW:, andHACK:annotations
- Added default Todo Highlight styling and overview ruler colors for supported annotation keywords
- Remapped
Ctrl+=andCtrl+-to editor font zoom in/out while editor focus is active - Removed the duplicate word-wrap toggle entry from the which-key menu
- Added
Escapesupport to close the Problems panel and Debug Console panel
- Aligned local TypeScript tooling by setting explicit
node16module resolution, declaring Node/VS Code/Mocha types - Added integrated terminal keybindings so
Ctrl+Ccopies when text is selected andCtrl+Vpastes while terminal focus is active - Added
SPC t was a toggle for soft line wrapping in the current editor - Added
SPC f Yto copy the active file path relative to the project root
- Restored
whichkey.showforAlt+SpaceandCtrl+Spacewhen focus is in VS Code auxiliary bar views
doom.cleanupcommand to detect and remove stale settings and conflicting entries (surgical per-entry removal, requires explicit user confirmation)
- Added editor-specific
Spacekeybinding and explicitvim.leaderdefault to fixSPCin focused editor context
doom.cleanuponly affects the default profile — settings in non-default VS Code profiles are not scanned or modified
- fuzzy-search as a hard dependency for
SPC s s(Search in file) - Enhanced find/replace keybindings (
Ctrl+Sto open/navigate,Ctrl+Rfor previous match) - Global keybindings for find widget control (Enter/Escape to close)
- Search view closure handling for sidebar, panel, and auxiliary bar contexts
SPC s s(Search in file) now requires fuzzy-search — fallback to native find removed- Fixed "Search Project" (
SPC s p) command to use correctworkbench.action.findInFiles
- Search functionality keybindings now properly handle disabled find widget states
- Multiple search view closure scenarios now work correctly
- Automatic one-time application of Doom defaults on first activation
- Updated extension icon in
assets/icon.png - Reordered and cleaned up
whichkey.bindingsentries in configuration defaults
- Fixed terminal popup toggle behavior
- Changed the alternative leader key from
Alt+Shift+SpacetoCtrl+Space
- Initial release of Doom Code extension
- Doom Emacs-inspired keybindings via VSCodeVim and VSpaceCode
- Which-key menu system with 40+ configured bindings
doom.installcommand to apply settings- Full documentation and MIT license