Skip to content

feat: add keyboard shortcuts for terminal management#4

Merged
eyelock merged 1 commit into
mainfrom
feature/keyboard-shortcuts
Jan 9, 2026
Merged

feat: add keyboard shortcuts for terminal management#4
eyelock merged 1 commit into
mainfrom
feature/keyboard-shortcuts

Conversation

@eyelock
Copy link
Copy Markdown
Owner

@eyelock eyelock commented Jan 9, 2026

Summary

  • Add keyboard shortcuts for common terminal operations
  • Use macOS standard Cmd modifier (not Ctrl, which conflicts with shell shortcuts)

Shortcuts Added

Shortcut Action
Cmd+T Quick new terminal (same column and CWD as current)
Cmd+N New terminal with dialog
Cmd+Shift+N New column
Cmd+D Toggle pin on current terminal
Cmd+] Next pinned terminal
Cmd+[ Previous pinned terminal

Implementation

  • Created FocusedValues.swift with TerminalActions struct for communicating between menu commands and views
  • Added quickNewTerminal(), nextPinnedTerminal(), previousPinnedTerminal() methods to BoardViewModel
  • Updated TermQApp.swift with command menu items and keyboard shortcuts
  • Exposed actions via focusedSceneValue in ContentView

Test plan

  • Build and run the app
  • Test Cmd+T creates a new terminal with same CWD as current
  • Test Cmd+N opens the new terminal dialog
  • Test Cmd+Shift+N creates a new column
  • Test Cmd+D toggles pin on current terminal
  • Test Cmd+] and Cmd+[ cycle through pinned terminals
  • Verify shortcuts appear in the File menu

🤖 Generated with Claude Code

Shortcuts added:
- Cmd+T: Quick new terminal (same CWD as current, auto-named)
- Cmd+N: New terminal with dialog
- Cmd+Shift+N: New column
- Cmd+D: Toggle pin on current terminal
- Cmd+]: Next pinned terminal
- Cmd+[: Previous pinned terminal

Implementation:
- Add FocusedValues for terminal actions
- Add quickNewTerminal, nextPinnedTerminal, previousPinnedTerminal to BoardViewModel
- Wire up commands in TermQApp using FocusedValue

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@eyelock eyelock merged commit c77a086 into main Jan 9, 2026
4 checks passed
@eyelock eyelock deleted the feature/keyboard-shortcuts branch January 9, 2026 10:35
eyelock pushed a commit that referenced this pull request Jan 18, 2026
Apply shared KeyValueEditor component to both Settings > Environment
and Terminal Details > Environment tabs for consistent UI and behavior.

Changes:
- Settings Environment tab: Replace inline form with KeyValueEditor
- Terminal Details Environment tab: Replace inline editor with KeyValueEditor
- Both tabs now use identical shared component with full-width inputs
- Consistent styling with Form .formStyle(.grouped)
- Proper state synchronization between KeyValueItem and EnvironmentVariable

Addresses feedback #4, #7, #8, #9, #11 from implementation plan

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
eyelock pushed a commit that referenced this pull request Jan 18, 2026
Apply shared KeyValueEditor component to both Settings > Environment
and Terminal Details > Environment tabs for consistent UI and behavior.

Changes:
- Settings Environment tab: Replace inline form with KeyValueEditor
- Terminal Details Environment tab: Replace inline editor with KeyValueEditor
- Both tabs now use identical shared component with full-width inputs
- Consistent styling with Form .formStyle(.grouped)
- Proper state synchronization between KeyValueItem and EnvironmentVariable

Addresses feedback #4, #7, #8, #9, #11 from implementation plan

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
eyelock pushed a commit that referenced this pull request Jan 18, 2026
Apply shared KeyValueEditor component to both Settings > Environment
and Terminal Details > Environment tabs for consistent UI and behavior.

Changes:
- Settings Environment tab: Replace inline form with KeyValueEditor
- Terminal Details Environment tab: Replace inline editor with KeyValueEditor
- Both tabs now use identical shared component with full-width inputs
- Consistent styling with Form .formStyle(.grouped)
- Proper state synchronization between KeyValueItem and EnvironmentVariable

Addresses feedback #4, #7, #8, #9, #11 from implementation plan

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
eyelock added a commit that referenced this pull request Jan 18, 2026
* feat: integrate KeyValueEditor in environment tabs

Apply shared KeyValueEditor component to both Settings > Environment
and Terminal Details > Environment tabs for consistent UI and behavior.

Changes:
- Settings Environment tab: Replace inline form with KeyValueEditor
- Terminal Details Environment tab: Replace inline editor with KeyValueEditor
- Both tabs now use identical shared component with full-width inputs
- Consistent styling with Form .formStyle(.grouped)
- Proper state synchronization between KeyValueItem and EnvironmentVariable

Addresses feedback #4, #7, #8, #9, #11 from implementation plan

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* feat: improve environment settings UI with component split and fixes

Split KeyValueEditor into focused components (KeyValueList + KeyValueAddForm)
for better UX with separate sections for viewing and adding items.

Changes:
- Split KeyValueEditor.swift into 3 components:
  * KeyValueList - display existing items with delete
  * KeyValueAddForm - add new items with validation
  * KeyValueEditor - legacy wrapper (deprecated)

- SettingsEnvironmentView improvements:
  * Use split components in separate sections
  * Add proper error handling with user-visible alerts
  * Fix encryption key status race condition
  * Remove nested Form wrapper

- CardEditorEnvironmentTab improvements:
  * Use split components in separate sections
  * Add secret visibility toggle for inherited globals
  * Add proper error handling with alerts
  * Store secret values in memory for display

- Add localized section headers:
  * "Global Environment Variables"
  * "Add Environment Variable" (Settings)
  * "Add Environment Variable" (Terminal Details)

Fixes:
- Secrets not being added (silent error swallowing with try?)
- Encryption key status not updating after operations
- Secret values not viewable in Terminal Details inherited list

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

---------

Co-authored-by: David Collie <support@eyelock.net>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
eyelock added a commit that referenced this pull request Jan 18, 2026
…d tags editor (#72)

* feat: integrate KeyValueEditor in environment tabs

Apply shared KeyValueEditor component to both Settings > Environment
and Terminal Details > Environment tabs for consistent UI and behavior.

Changes:
- Settings Environment tab: Replace inline form with KeyValueEditor
- Terminal Details Environment tab: Replace inline editor with KeyValueEditor
- Both tabs now use identical shared component with full-width inputs
- Consistent styling with Form .formStyle(.grouped)
- Proper state synchronization between KeyValueItem and EnvironmentVariable

Addresses feedback #4, #7, #8, #9, #11 from implementation plan

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* feat: improve environment settings UI with component split and fixes

Split KeyValueEditor into focused components (KeyValueList + KeyValueAddForm)
for better UX with separate sections for viewing and adding items.

Changes:
- Split KeyValueEditor.swift into 3 components:
  * KeyValueList - display existing items with delete
  * KeyValueAddForm - add new items with validation
  * KeyValueEditor - legacy wrapper (deprecated)

- SettingsEnvironmentView improvements:
  * Use split components in separate sections
  * Add proper error handling with user-visible alerts
  * Fix encryption key status race condition
  * Remove nested Form wrapper

- CardEditorEnvironmentTab improvements:
  * Use split components in separate sections
  * Add secret visibility toggle for inherited globals
  * Add proper error handling with alerts
  * Store secret values in memory for display

- Add localized section headers:
  * "Global Environment Variables"
  * "Add Environment Variable" (Settings)
  * "Add Environment Variable" (Terminal Details)

Fixes:
- Secrets not being added (silent error swallowing with try?)
- Encryption key status not updating after operations
- Secret values not viewable in Terminal Details inherited list

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* feat: complete Settings UI improvements with tab navigation and tags editor

This PR completes the Settings UI improvement series by:

1. Fix "Edit Global Settings" button to properly open Settings window
   - Replace problematic sheet/NSWindow approaches with SettingsLink
   - Add SettingsCoordinator for tab pre-selection
   - Settings now opens with Environment tab selected when accessed from Terminal Details

2. Replace custom tags editor with KeyValueEditor components
   - Use KeyValueList for displaying tags
   - Use KeyValueAddForm for adding new tags
   - Consistent UX with Environment variables editor
   - Remove obsolete state variables (newTagKey, newTagValue)

3. Complete localization for "Add Tag" string across all 40 languages

Technical changes:
- Created SettingsCoordinator singleton for Settings navigation coordination
- Updated SettingsView to observe coordinator and respond to tab requests
- Updated CardEditorEnvironmentTab to use SettingsLink with simultaneousGesture
- Updated CardEditorView metadata tab to use KeyValueEditor pattern
- Added sectionAddTag localization key in all 40 language files

All tests passing (521 tests, 0 failures)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

---------

Co-authored-by: David Collie <support@eyelock.net>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant