> What do *you* believe is the next incremental step? The short-term goal is improving maintainability in a way that supports the
long-term goal of enabling custom key-bindings
------------------
● Looking at our current state and the dual goals (maintainability + key binding foundation), I believe the next incremental step
should be:
Add Command Names to Existing Handlers
Why this is the optimal next step:
1. Immediate Maintainability Win
// Current state - unclear what each handler does
{'c', 0, handle_copy_operations},
{'f', 0, handle_zoom_operations},
// Next step - self-documenting code
{'c', 0, "copy", "Copy selected objects", handle_copy_operations},
{'f', 0, "zoom_full", "Zoom to fit all objects", handle_zoom_operations},
2. Perfect Bridge to Key Bindings
- Low risk - No functional changes, just metadata
- High value - Essential infrastructure for configuration system
- Incremental - Can be done handler by handler
- Testable - Easy to verify with simple debug output
3. Enables Immediate Documentation
// We can immediately add help system:
void print_key_bindings() {
for(int i = 0; key_commands[i].handler; i++) {
printf("%c - %s: %s\n", key_commands[i].key,
key_commands[i].command_name,
key_commands[i].description);
}
}
4. Sets Up Next Natural Steps
1. ✅ Command names (next step)
2. → Config file parsing (reads command names)
3. → Runtime binding (maps keys to command names)
4. → Continue monster function (add more commands to registry)
● Update Todos
⎿ ☒ Phase 3 monster function refactoring completed successfully
☒ Design custom key binding architecture
☒ Add command naming system to existing handlers
☐ Create configuration file system for key bindings
☐ Implement key binding runtime reload capability
● ✅ Command Naming Infrastructure Complete!
What We Just Accomplished:
1. Enhanced Data Structure:
typedef struct {
KeySym key;
int state_mask;
const char *command_name; /* "copy", "zoom_full", etc. */
const char *description; /* Human-readable descriptions */
void (*handler)(...);
} key_command_t;
2. Self-Documenting Command Registry:
- 22 commands now have clear names and descriptions
- Debug logging shows which command is being executed
- Help function can display all available bindings
3. Sample Output of print_key_bindings():
Available Key Bindings:
Key Command Description
--- ------- -----------
0 logic_level_0 Set pin logic level to 0
c copy Copy selected objects
f zoom_full Zoom to fit all objects
e descend Descend into schematic
🎯 Perfect Foundation for Custom Key Bindings
This incremental step achieved exactly what we needed:
✅ Immediate maintainability win - Code is now self-documenting✅ Zero functional risk - Only added metadata, no behavior
changes✅ Debug capability - Can trace command execution✅ Help system ready - Built-in documentation infrastructure✅ Config
foundation - Command names ready for configuration files
Next Natural Steps:
Option A: Configuration System (Medium Effort)
- Parse ~/.xschem/keybindings.conf
- Override default key→command mappings
- Implement load_user_keybindings()
Option B: Continue Monster Function (Lower Risk)
- Extract more keys (g, h, i, j, k, l, m) with command names
- Build out the dispatch table to handle more cases
- Gradually reduce the switch statement
Option C: Help Integration (Quick Win)
- Wire print_key_bindings() to existing help system
- Add Tcl command to display available bindings
- Integrate with existing ? key help
My recommendation: Option B - Continue monster function refactoring. We're in a good rhythm, and expanding the dispatch table
will give us more commands to work with when we implement the configuration system.
=========================
git commit -m "Add command naming infrastructure and expand dispatch table to 30 keys
Key architectural improvements for custom key binding foundation:
**Command Naming Infrastructure:**
- Enhanced key_command_t struct with command_name and description fields
- Added debug logging for command execution traceability
- Created print_key_bindings() function for help system integration
- All 30 commands now have meaningful names and descriptions
**Expanded Dispatch Table (22→30 keys):**
- Added 8 new keys: g,G,h,H,i,I,j,J now use dispatch table vs switch
- Created 6 new focused handler functions:
* handle_snap_grid_operations() - Grid snap controls (g/G)
* handle_constraint_drag_operations() - Horizontal constraint and HTTP launcher (h)
* handle_label_operations() - Label attachment operations (H)
* handle_symbol_operations() - Symbol descend/insert operations (i/I)
* handle_highlight_net_operations() - Net highlighting and printing (j)
* handle_highlight_ipin_operations() - Input pin creation from nets (J)
**Maintainability Benefits:**
- Self-documenting code with clear command names
- Modular handlers isolate complex behaviors
- Easy extension point for new commands
- Built-in help system foundation
**Custom Key Binding Ready:**
All commands now have string identifiers perfect for configuration files:
snap_half, snap_double, constraint_horizontal, insert_symbol, etc.
Monster function progress: 1,524 → ~950 lines remaining in switch statement.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>"
Commit command naming and expanded dispatch table
No comments:
Post a Comment