- 🔍 Instant Tab Search: Filter open tabs as you type
- ⚡ Fast Navigation: Keyboard-driven tab switching
- 🎯 Smart Matching: Find tabs by title or application name
- 🔧 Clean Interface: Seamlessly integrated with PowerToys Command Palette
- 🛡️ Robust Error Handling: Graceful handling of edge cases
- Open Command Palette (
Win + Alt + Spaceby default) - Type "TabSwitch" or "tab"
- Press Enter to open the tab list
- Type to filter tabs in real-time
- Use arrow keys to navigate
- Press Enter to switch to selected tab
| Action | Keys |
|---|---|
| Open TabSwitch | Type TabSwitch → Enter |
| Search tabs | Type to filter instantly |
| Navigate | ↑ ↓ arrow keys |
| Switch to tab | Enter |
| Go back | Escape or Alt + ← |
- Type "TabSwitch" → Press Enter → Tab list appears
- Real-time filtering as you type in the tab list
- Arrow key navigation and Enter to switch
- Clean, responsive interface
- Type "tab" → Instant activation (no Enter required)
- Direct search/filtering as you continue typing
- Backspace navigation to return to keyword
- Exactly like built-in "files" command
After extensive analysis of the PowerToys source code, we discovered that built-in commands like "files" use internal APIs that are not available to extensions:
- DirectCommand interface: Not exposed to extensions
- Instant activation: Reserved for core commands
- Backspace navigation: Internal message passing only
- Extension API constraints: Security and stability limitations
Our extension implements:
- Clean architecture with proper separation of concerns
- Async tab enumeration with robust error handling
- Real-time filtering within the extension page
- Professional UI/UX with icons and placeholder text
- Cross-platform builds (x64, x86, ARM64)
- Zero build warnings across all configurations
We've prepared a comprehensive feature request for the PowerToys team to add DirectCommand support to the Extension API. This would enable true "files"-like behavior for all extensions.
Status: Feature request prepared - Ready for submission
While waiting for upstream changes:
- Enhanced keyword recognition patterns
- Improved user guidance and tooltips
- Performance optimizations
- Additional tab management features
# Clone and navigate
git clone https://github.com/your-repo/TabSwitchExtension.git
cd TabSwitchExtension
# Restore dependencies
dotnet restore
# Build (choose configuration)
dotnet build --configuration Release
dotnet build --configuration Debug
# Package for deployment
dotnet publish --configuration ReleaseTabSwitchExtension/
├── TabSwitchExtension/ # Main extension project
│ ├── Pages/ # UI pages (OpenTabsPage)
│ ├── Commands/ # Command implementations
│ ├── Services/ # Tab enumeration service
│ ├── Assets/ # Icons and resources
│ └── *.cs # Core extension files
├── NativeHost/ # Native tab enumeration
├── register-cmdpal-extension.ps1 # Registration script
└── TabSwitchExtension.sln # Solution file
TabSwitchExtensionCommandsProvider: Main entry pointOpenTabsPage: Primary tab list interfaceTabEnumerationService: Native tab discoveryDummyCommand: Error state handling
The PowerToys Command Palette has different APIs for built-in commands vs extensions. Built-in commands can activate instantly, but extensions must go through the standard workflow (keyword → Enter → page).
We're advocating for enhanced Extension API capabilities. The PowerToys team is responsive to well-reasoned feature requests, especially when backed by technical analysis.
Absolutely! While it requires one extra Enter keypress, TabSwitch still provides fast, keyboard-driven tab switching with real-time filtering - a significant productivity improvement.
This project is licensed under the MIT License - see the LICENSE file for details.
- PowerToys Team for the extensible Command Palette architecture
- Microsoft for the comprehensive extension documentation
- Community for feedback and testing
⭐ Star this repo if you find it useful! ⭐
