Repository navigation
Axit 3.5.0
- axTerminal: Ctrl+Up and Ctrl+Down in the command field go through the recent commands, with a short earcon on each; past the newest comes what you typed or last changed. The plain arrows only move the caret.
- axTerminal: Speak output is all lines by default, so a command's output is read as it arrives; a settings file that already says none keeps none (Options, Speech, Speak output: all lines changes it).
- axFile: Cut and Copy put the paths on the clipboard as text as well, so that a text field pastes them; File Explorer and Paste still take the files.
- axFile: Move to new folder is Move to folder: Down and Up complete the folder as in Go to folder, a folder that exists (here or by its path) takes the entries, and any other name is a new folder made here.
- axFile: Shift+F10, the Applications key and a right click open the menu bar's Item menu, as Alt+I does, so that NVDA reads its first item the first time too; the list's own context menu, silent on its first opening, is gone, and with it Ctrl+I inside the menu.
- Axit: a window that comes to the front while Alt is still held, as Alt+F4 on another window leaves it, no longer opens its menu bar when Alt is let go.
- axClaude, axTerminal: a quick key (h, p, c and the rest) says only the row the caret lands on, what Down Arrow would read there; it said the whole line, often cut short, and Down then read the same text again.
- axClaude: Session, Open folder in new window and Open recent folder in new window start axClaude in the folder in a window of its own and leave this one's session running; Open folder and Open recent folder still restart Claude in this window.
- axTerminal: Session, Open recent folder in new window, the same for a shell.
- Axit: the low note at the end of a list is louder and two notes falling an octave, so that the speech after it no longer drowns it.
- Axit: the apps are named axClaude, axDown, axJSON, axGIT, axTerminal, axFile, axMedia, axPreview and axStart, the ax in lower case, so that a screen reader says each as ax and a word. The case does not matter anywhere a name is typed or found, and the Recently closed list keeps its entries.
- Axit: a command palette in every window. Ctrl+Shift+P, or Axit, Command palette (the first item of the Axit menu), opens one search field over a list of every command in the window's menus, each read with its menu and its key, "Save as, File, Ctrl+Shift+S". Typing narrows the list to the commands holding every typed word, and after a short pause the first match is said with the count; Down and Up, Page Down and Page Up, Ctrl+Home and Ctrl+End move through the matches while the caret stays in the field. Enter runs the command where you were, Escape closes. At the first or the last match a key that cannot move plays the low note and then says the match again. The recent lists and the window lists of the menus are left out.
- axStart: Down or Up at the first or the last match plays the low note and then says the match again; the note alone had left NVDA's reading of the field as the last thing heard.
- axFile: in Go to folder, Down or Up past the first or the last completion plays the low note and then says the completion again, as the palette and axStart do.
- Axit: the command palette is the first item of the Axit menu (Alt+A, P), no longer in Help.
- Axit: a typed text finds accented names again: "cafe" finds "Café" in the command palette, in axStart and among axFile's entries. The program runs without the globalization data, where the accents stayed; the tests now run the same way, which is what found it.
- axFile: a new name that reads the same as an entry's with its accent written as two characters is refused again, for the same reason.
- axTerminal: a command sent without recording (Ctrl+Enter) no longer shows in the status bar and Ctrl+Q while it runs; they say "a command sent without recording".
- axTerminal: New session and a change of folder give the new shell a fresh screen, as Restart shell does; the new shell drew on the old one's rows, and its shorter lines showed their tails.
- axTerminal: a program inside the shell that marks the end of its own input (Claude Code does) no longer hides the whole transcript as if it were a prompt.
- Axit: F1 while a menu is open stays the menu's, as the palette's key does; it opened the shortcuts over the open menu. An update whose installer cannot be started, or that passes ten minutes, is reported as a failed update instead of an unexpected error. About, Version names all nine apps and their settings files; it named four.
- axStart: the close that ends an update installed from its own window closes it, so that the new version starts; it hid.
- axMedia: a Windows edition without the media components (an N edition without the Media Feature Pack) gets "Cannot play" with the reason instead of an unexpected error. Go to time with a number too long for a number says it is not a time instead of failing.
- For developers: a critical review of the five days of development from 2026-10-18 (
docs/axit/review-2026-10-23.md: the verdict, the inventory, what was fixed, what is open, the rewrites in order) and a plan for keeping the repository stable for years (docs/axit/longevity.md). The tests run without the globalization data, as the program does; a test checks that every app has its places in the repository; the .NET version is one property ofDirectory.Build.propsand the workflows read the SDK band fromglobal.json; the release notes name the SDK that built the release; every spec's header says what was built and checked, with the record, instead of a version it was written for. - axClaude: a question that arrives while a menu is open no longer pulls the focus out of the menu a second later; the delayed move to the question happens from the conversation, or when another program's window was in front.
- axJSON: a value that is not a number, "1abc" or "12-5", is the first error for Ctrl+E and stops Format, instead of passing as a number and being written back.
- axDown, axJSON, axPreview: a reload that cannot read the file (another program still holds it) keeps the text and shows the error; it used to empty the window to an Untitled document and say "Reloaded" over the error. Save as renames the document only once the file is written; a write that failed left the window under the old name with the new path.
- axGIT: a git command whose output a program it started keeps open (a signing agent, a hook's daemon) ends at the timeout instead of leaving the window at "Working" for good.
- axFile: an operation that ends while you are in another folder says its result and leaves the list where you are; it used to pull the list back to the folder it ran in, with the selection moved.
- axFile: the Actions list no longer shows a finished operation as running when two ran at once and the first ended; the rename box closes with the name kept when the folder changes or is read again under it; Open in Axit lists the apps that take a path, so axStart is no longer offered; Open in Axit, axPreview on a folder says "Not a file".
- axGIT: switching views keeps each view's selection on the right item when two views hold the same number of items; a view switch while a command runs says "Working" and stays, instead of showing an empty list; the log names the git subcommand only, not a commit's message.
- Axit: in every notice's text (the keyboard shortcuts of F1, the user guides, About), h and Shift+H move by heading and 1 to 6 by level, in every window now, axGIT, axFile, axMedia and axStart included; axDown, axJSON and axPreview keep their Ctrl+letter keys there as well. Ctrl+F finds a text in a notice: the Find notice takes its place and Find next brings it back with the match selected; F3 and Shift+F3 find the next and the previous match.
- axFile: the command palette holds the folder's entries after the commands, "notes.md, file", "docs, folder"; Enter on one opens it as Enter in the list does.
- axGIT: Push is Ctrl+Shift+H; Ctrl+Shift+P is the command palette's in every window.
- Axit: after a notice the focus goes back to the control it came from in every window, by one rule of the window base: the Actions list of axFile, the details of axGIT, the conversation or the message field, and the window's main control when that one is gone (a question answered meanwhile). A chain of notices (the update's progress after its offer, an error after a command) counts as one. Ctrl+S in axStart says "Nothing to save here" like the other windows without a document.
- axTerminal: an output line that starts like the shell's continuation prompt (
>> xin PowerShell,> helloin Git Bash) stays in the transcript; it was hidden as a continuation row, at once and again during a long command. A prompt of two rows printed from the bottom row is hidden whole; its first row stayed visible. A command typed before the shell's first prompt no longer turns that prompt into "Done". - axClaude, axTerminal: Close anyway, Restart now, a new session or a switch of shell over a program still at work end it at once instead of waiting two seconds for it to notice its console closing (a
ping -theld the window for four). A selection in the conversation no longer keeps the processor busy while output waits behind it. A program that redraws its screen from the top no longer brings back copies of old rows, or an old tail after a shorter line; a terminal reset is treated like a clear. - axClaude: the git exclude file keeps its Windows line endings when axClaude adds or removes its block.
- axClaude, axTerminal: after a restart of Claude or the shell, what is typed goes out at the paced speed again. A restart while an answer was being typed out left a second write pump running, which halved the pacing and could drop characters.
- For developers: axClaude's and axTerminal's windows derive from one console window in the shared project (
Axit.Forms/ConsoleForm: the view, the field, the control area, the status bar, the pty bridge, the writes, the recording, the export, find, the signals and the music), their settings from oneConsoleSettings, and their models' common parts (the decoder, the parser, the screen, the bookmarks, the cap) are the line store's; about six hundred lines that existed twice exist once (review 5.1). - For developers: the window base is one class in partial files (the hooks and menus, the notices, find, the fonts, the updates, the palette), and what every window still copied is the base's now:
Do, the Exit item, Ctrl+S, the settings-not-read notice, the folder picker, the hand-over receiver, one Find notice for the transcripts too; the windows' ownFocusToKeepandAnnounceare gone (review 5.3 and 6). - axClaude: a question that comes while the window is in the background plays the louder alert, when it is on, in place of the trill; the trill played first and the alert cut it off.
- axClaude: a question stops all other speech and reads itself, the next question of a set too. After an answer, the next question cuts off whatever NVDA was saying, and Claude's record of the question just answered is no longer read before it. What came before a question is in the conversation.
- axClaude: a question answered or dismissed within a moment of its arrival is no longer spoken after it has gone.
- axClaude: the review the app submits itself and its own list of drafts no longer flash the taskbar.
- axClaude: a message sent into a question on purpose, Enter again on the kept message, gets its Input and Output lines in the conversation like any message.
- For developers: axClaude's wait on Claude is one record and one stamp in the window (MainForm.Area.cs), with the timings of the flow as constants; what a screen's keys do in the control area is pure code (ScreenActions in AxClaude.Core), tested.
- axFile: a filter, a new order or a read of the folder drops the marks on the entries it leaves out, so that the count said and the entries acted on agree; a mark on an entry the filter hid was counted and not acted on.
- axFile: Shift+Space with no other entry selected is Space: it selects the entry you are on, or deselects it again; it said "1 selected" and changed nothing on the one selected entry.
- axFile: typing a name with a doubled letter inside it ("aab") finds it; the doubled letter started a cycle of one letter.
- axFile: a paste of cut files of which some are still on their way from an earlier paste pastes the others and says so, "Pasted 2 items, 1 already pasting"; the others went without a word.
- axFile: Ctrl+N and the restart after an update at This PC open the new window on the last folder; the new window said that This PC does not exist.
- axFile: Enter on a line of the Actions list moves the focus to the folder list before the folder is said, so that the announcement is not cut short. Delete and Move to new folder say "Deleting, please wait" and "Moving, please wait" after a second, as Paste and the zip operations do.
- For developers: axFile runs every operation through one runner (RunOperation, RunAtOnceAsync) and keeps its marks in one pure piece (Marks in AxFile.Core, tested); the type-ahead rule is FolderListing.TypeAhead, tested; the Actions list finds the line the user is on itself; OpenWay is gone.
- axGIT: Open repository on a folder outside any repository keeps the repository that is open; it was dropped before the notice.
- axGIT: a command of another view says which view to show first, "Changes view first: Ctrl+1" or "Branches view first: Ctrl+3", for Space, Enter, Delete and the menu items alike; Space, Enter and Show diff switched the view silently.
- axGIT: a detached HEAD is no longer listed as a branch; the status bar says detached.
- For developers: axGIT's views are one record each (ViewState); GitRunner.Program lets the tests run a fake git for the output, the timeout and the open pipe, which found that every timeout was reported as a program keeping the output open.
- axStart: the launcher stays up while NVDA's own menu or settings are in front; it hid as for any other program.
- For developers: axStart hands the foreground back by one rule (GiveForegroundBack) in place of three patches, and tells its first showing by the handle, not a flag; the hotkey setting's property is HotkeyText (the file's key stays hotkey).
- axMedia: a speed the engine refuses is no longer kept for the next file, which played at normal speed under a status bar showing the old speed; the status bar and Ctrl+Q say the speed the file plays at.
- axMedia: two files played in quick succession no longer let the first one's failure skip the second: an event is matched to the file it is about.
- axMedia: Ctrl+Right, Ctrl+Left and Go to time say the position reached, the file's end at most, not the one asked for.
- For developers: axMedia's hand-overs are one queue drained in order; the black video area is written into AX-7.7 as the one colour an app sets.
- axDown, axJSON: the EDIT control's own undo is out of reach: Alt+Backspace is the window's Undo, the text's context menu is the window's own, and the control's buffer is emptied after each change; its undo was recorded as another step, so Ctrl+Z then undid the control's undo.
- axDown, axJSON: a file reloaded while a line got shorter keeps the caret on its line, never between the CR and the LF of a line end; text pasted with Unix line endings is saved with the file's line ending, where a CRLF file gained bare LFs.
- axDown, axJSON: "Reloaded" is no longer said while the Open or Save as picker closes, which counted as coming back to the window; the notice for a file over 32 MB names its size in bytes and no longer names axDown in axJSON.
- axPreview: a file whose first eight kilobytes are text but which holds a NUL further in keeps the text shown, with the error, instead of emptying the window; a hand-over during an update's progress leaves the progress notice; a path that does not exist is the notice "File not found", not an empty window under its name that Edit in axDown then created.
- axFile: coming back from one of the Windows dialogs no longer reads the folder again.
- For developers: the viewer's own code is TextEditorForm.Viewer.cs and LoadDocument is the read and the showing; TextLines in Axit.Core holds the caret arithmetic, tested; every Windows dialog goes through AxitForm.ShowSystemDialog, which marks the window while one is up (DialogShowing); EditHistory tells its size, tested.
- Axit: a recent file or folder on a network share no longer stalls a menu while Windows looks for it; it is listed as it is and said to be gone when chosen. A settings file that cannot be read is copied to its .bad file once, not at every opening of the Axit menu.
- Axit: the command palette reads a menu item's text and check mark as they would be when its menu opens, axFile's Undo and axTerminal's Switch shell among them.
- axTerminal: the New session notice's help line names the shell's command line; it named Claude Code's arguments.
- For developers: the New session controls are a control of their own (SessionControls) that a notice carries (Custom, Accepts, HeadLine), out of OverlayPanel; the control area asks once whether a key may answer; LocalPaths in Axit.Core, tested.
- Axit: the install puts the console commands' folder,
%USERPROFILE%\.local\bin, on your PATH when it is not there yet, soaxclaudeand the other commands work in a console without Claude Code installed.install.cmddownloaded on its own finds the latest release through the releases page's own address instead of the GitHub API, which refuses a network address after sixty requests an hour. The shipped guide names the Windows requirement: Windows 10 version 1809 or later, or Windows 11. - axClaude: a message sent in Claude's first seconds is no longer left typed and unsent. In its first moments, even after "Ready", Claude strips an invisible character from a message, says "review and press Enter to send" and ignores the Enter; while the message still sits on Claude's prompt row a moment later, the window sends Enter again, at most three times. The copy of Claude's banner it draws then no longer shows inside the first reply.
- For developers: the automated checks (
docs/axit/automation.md): every window opens an automation channel when a test run asks for it, through whichtools/AxitDrivepresses keys, types, runs menu commands and reads what the window said and where the focus is, on a Windows desktop of its own so that a run never takes the user's keyboard, with its own settings and logs (AXIT_HOME); the first scripts are intests/scripts. - axGIT: Ctrl+Enter while a stage or its refresh still runs says "Working…"; it said "Nothing staged" from the count before the stage.
- axTerminal: with Speak output on all lines, a command's last line is spoken before "Done", not after it.
- axJSON, axDown: a command on the whole text (Format) is one step for Undo; it was two, and the first Ctrl+Z left an empty document.
- axPreview: a file over the size limit is named with its size in bytes, "is 34,000,000 bytes, over the 32 MB a window can open", as in the editors; it said "is 32 MB" for a file just over.
- axMedia: the status bar says "Paused" right after a pause and goes empty after Clear queue; it kept saying "Playing" until the engine caught up, and a key pressed at once acted on the old state. "Not a time" in Go to time keeps the notice open for another try.
- For developers: the NVDA test plans as scripts for
tools/AxitDriveintests/scripts(axDown, axJSON, axPreview, axFile, axGIT, axTerminal, axMedia): about two thousand steps, which found the bugs above. The runner gained per-run desktops, key presses one at a time with their modifiers set as each is handled, a focus event hook, plain answers,launch,adopt,expect closed,refuseon every answer andallow error; test runs skip the update check.- axClaude: after the last answer of a set of questions, the message field comes back; the set's last question stayed in its place and took the next message as its answer. The record of a set's question ("Question: Which colour…") no longer starts with Claude's quote marker. - axClaude: a session started with a name (New session,
--name demo) reaches "Ready"; the row with the name above Claude's prompt kept the window at "starting". - axClaude: a message of two lines sent in Claude's first moments no longer leaves its second line, Claude's mode line or its "review and press Enter" warning in the conversation.
- For developers: axClaude's NVDA test plan as scripts in
tests/scripts/axclaude, on Haiku, with the fixturesearly-two-linesand the named session's test.- axClaude: a question's name no longer starts its text with the quote marker Claude Code draws, "> Which colour"; NVDA was given the marker to read. - axClaude: the next question of a set cuts off other speech even with Go to them at once off, since the focus is already at the bottom of the window.
- For developers:
tools/QaRunruns several Claude sessions at once through the app's console pieces, without windows, with the model on Claude's command line (--model haiku), and reports each session's steps; it is what found the dropped Enter. - axClaude: the log and Copy diagnostics name Claude Code's version (
claude --version, asked once at the first start of a session), so that a report of a transcript bug says which Claude Code drew it. - For developers: the longevity plan's items that needed no account are in place (
docs/axit/longevity.md, section 3): the GitHub actions are pinned by commit and the runner named by its version, every project tells the compiler it is Windows code instead of CA1416 being silenced, the bundle spec's section 5.4 lists every Windows API the apps depend on with its file and its fallback,release.ps1checks the changelog section's bullets and pushesmainand waits for its build before the tag, and the test projects have NuGet lock files.
Built with the .NET SDK 10.0.402.