Enable user-defined commands in TUI configuration #1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR implements user-defined commands support in the OpenCode TUI, allowing users to extend the built-in command set through configuration. This addresses the requirement to enable user-defined commands similar to those in
packages/tui/internal/commands/command.go.What's Changed
Core Implementation
commandsfield to support user-defined commandsLoadFromConfig()to load and merge user commands with built-in defaultsparseBindings()function to properly handle leader key detection with whitespaceConfigCommandtype with support for descriptions, keybindings, and triggersConfiguration Format
Users can now define custom commands in their
opencode.json:{ "commands": { "my_command": { "description": "My custom command", "keybind": "<leader>x", "trigger": ["custom", "mycmd"] }, "quick_note": { "description": "Take a quick note", "keybind": "ctrl+shift+n", "trigger": ["note", "quick"] } } }Features Supported
/custom,/note)Integration Points
/Testing
Added comprehensive test coverage with 9 test cases:
Documentation
USER_DEFINED_COMMANDS.mdwith detailed usage instructionsBackward Compatibility
✅ Fully backward compatible - existing configurations continue to work unchanged
✅ All existing commands and keybindings remain functional
✅ No breaking changes to the command system API
Example Usage
After adding commands to config, users can:
/customto trigger the command via textCtrl+X x(leader + x) to trigger via keybinding/and searchingThis provides a solid foundation for future extensibility where users will be able to define custom behavior for their commands.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.