forked from 1b-agent/opencadstudio-upstream
feat(commandline): always-on keyboard capture + space submits like enter
Two behaviour changes that bring the command line in line with established CAD workflow: 1. **Always-on keyboard capture.** The input was blurred whenever no command was running, so typed letters went nowhere until the user clicked into the field. Replace the blur with a re-focus on every command lifecycle transition (cmd_result.rs) and on viewport / tab / ribbon clicks (update.rs), focus the input at startup, and add a global key subscription that catches any unhandled character key or backspace and routes it into the buffer via two new messages (CommandAppendChar / CommandBackspace) — so the command line keeps accumulating keystrokes even if focus parks somewhere not focusable. Removes the unused blur_cmd_input helper. 2. **Space submits.** Typing a space at the end of the input now submits the buffer the same way Enter does. Only exception: an active command that's currently collecting free-form prose (TEXT / MTEXT / DDEDIT body, ATTDEF prompt / default value, INSERT attribute value, ATTEDIT cell). Those advertise the new `CadCommand::wants_text_with_spaces()` flag so the Space character reaches the buffer as a literal. Co-Authored-By: Claude Opus 4.7 <[email protected]>
This commit is contained in:
1 parent
e55b280dda
commit
39150d617f
16 files changed
+136
-42
No files matched your search
@@ -1539,13 +1539,14 @@ impl OpenCADStudio {
|
||||
self.restore_pre_cmd_tangent();
|
||||
}
|
||||
}
|
||||
// Focus the command-line input while a command is active; blur it when the command ends.
|
||||
if self.tabs[i].active_cmd.is_some() {
|
||||
self.focus_cmd_input()
|
||||
} else {
|
||||
// Keep the command-line input focused at all times — every typed
|
||||
// character is meant to route there (the command processor reads
|
||||
// its keystroke stream from this widget). When no command is
|
||||
// running the ribbon tool button still has to visually deactivate.
|
||||
if self.tabs[i].active_cmd.is_none() {
|
||||
self.ribbon.deactivate_tool();
|
||||
self.blur_cmd_input()
|
||||
}
|
||||
self.focus_cmd_input()
|
||||
}
|
||||
|
||||
/// Restore the tangent snap state that was in effect before the command started.
|
||||
|
||||
Reference in new issue
Block a user