Skip to content

feat: add pinned terminals with quick-switch tabs#2

Merged
eyelock merged 1 commit into
mainfrom
feature/pinned-terminals
Jan 9, 2026
Merged

feat: add pinned terminals with quick-switch tabs#2
eyelock merged 1 commit into
mainfrom
feature/pinned-terminals

Conversation

@eyelock
Copy link
Copy Markdown
Owner

@eyelock eyelock commented Jan 9, 2026

Summary

  • Add ability to "pin" terminals with a star toggle button
  • Pinned terminals appear as tabs at the top of the expanded/focus view
  • Tabs allow quick switching between pinned terminals without returning to the board
  • Pinned state is persisted across app restarts

Changes

  • TerminalCard model: Added isPinned property with Codable support
  • BoardViewModel: Added pinnedCards computed property and togglePin() method
  • ExpandedTerminalView: Added star toggle button and pinned tabs bar at top
  • TerminalCardView: Added star indicator for pinned cards
  • ContentView: Wired up new callbacks

Test plan

  • Build app with make clean app
  • Open the app and create 3+ terminals
  • Click the star button in expanded view to pin a terminal
  • Verify star indicator appears on the card in board view
  • Pin 2-3 terminals and verify tabs appear at the top of expanded view
  • Click tabs to switch between pinned terminals
  • Unpin a terminal and verify tab disappears
  • Quit and relaunch - verify pinned state persists

🤖 Generated with Claude Code

- Add isPinned property to TerminalCard model with persistence
- Add pinnedCards computed property and togglePin method to BoardViewModel
- Add star toggle button in expanded terminal view toolbar
- Add pinned terminals tab bar at top of expanded view for quick switching
- Add star indicator on pinned cards in board view
- Tabs allow switching between pinned terminals without returning to board

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@eyelock eyelock merged commit 1031fcb into main Jan 9, 2026
4 checks passed
@eyelock eyelock deleted the feature/pinned-terminals branch January 9, 2026 10:18
eyelock added a commit that referenced this pull request Jan 18, 2026
…#70)

* feat: add SharedToggle component and reorganize settings tabs

**SharedToggle Component**
- Create reusable toggle that respects global settings
- Show disabled state with optional clickable message
- Support help text and custom disabled messages

**Settings Reorganization**
- Reorganize General tab: Terminal, Bin, Updates, Language, Uninstall, About
- Reorganize Data & Security tab: Security, Data Storage, Data Protection
- Move Uninstall section from Data & Security to General

**Security Settings Updates**
- Add allowTerminalsToRunAgentPrompts global setting (default: false)
- Rename confirmExternalLLMModifications → allowExternalLLMModifications
- Change all security defaults to FALSE (more secure by default)

**Implementation Note**: Proper localization for new strings will be added in PR #7.
Expected warnings: file_length (535 lines) and type_body_length (409 lines) in
SettingsView.swift - will be addressed in PR #7 via view extraction.

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

* fixup: improve TermQ Data Folder layout to match PathInputField pattern

Changes:
- Use two-line layout: label + Browse button on line 1, full-width text field on line 2
- Matches PathInputField visual pattern for consistency
- Full PathInputField component integration deferred to PR #5

Updated implementation plan to include TermQ Data Folder in PR #5 scope.

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 pushed a commit that referenced this pull request Jan 18, 2026
…/8)

Apply reusable UI components from PRs #1-2 to Terminal settings tab,
improving consistency and user experience across settings interfaces.

Changes:
- Replace Working Directory TextField+Button with PathInputField component
  - Adds path validation with warning icon for invalid paths
  - Provides consistent folder browser experience
- Replace three security toggle patterns with SharedToggle component:
  - "Allow Agent Prompts" (renamed from "Allow Autorun" for clarity)
  - "Confirm External Modifications"
  - "Allow OSC Clipboard"
- Update AppStorage keys to match global settings from PR #2:
  - enableTerminalAutorun → globalAllowAgentPrompts
  - confirmExternalLLMModifications → globalAllowExternalModifications
  - Added globalAllowOscClipboard
- Reorder security toggles to match Global Settings order for consistency
- Add localization strings for Agent Prompts and disabled messages
- Fix line length warnings in Strings.swift

Technical details:
- Removed obsolete browseDirectory() function (handled by PathInputField)
- Consistent disabled messaging when global settings are off
- Matches visual patterns established in Environment tab (PR #3)
- All security toggles now use unified SharedToggle component
- Added translations to all 40 language files

Part of Settings UI improvement series (PR #5 of 8)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
eyelock added a commit that referenced this pull request Jan 18, 2026
…/8) (#73)

Apply reusable UI components from PRs #1-2 to Terminal settings tab,
improving consistency and user experience across settings interfaces.

Changes:
- Replace Working Directory TextField+Button with PathInputField component
  - Adds path validation with warning icon for invalid paths
  - Provides consistent folder browser experience
- Replace three security toggle patterns with SharedToggle component:
  - "Allow Agent Prompts" (renamed from "Allow Autorun" for clarity)
  - "Confirm External Modifications"
  - "Allow OSC Clipboard"
- Update AppStorage keys to match global settings from PR #2:
  - enableTerminalAutorun → globalAllowAgentPrompts
  - confirmExternalLLMModifications → globalAllowExternalModifications
  - Added globalAllowOscClipboard
- Reorder security toggles to match Global Settings order for consistency
- Add localization strings for Agent Prompts and disabled messages
- Fix line length warnings in Strings.swift

Technical details:
- Removed obsolete browseDirectory() function (handled by PathInputField)
- Consistent disabled messaging when global settings are off
- Matches visual patterns established in Environment tab (PR #3)
- All security toggles now use unified SharedToggle component
- Added translations to all 40 language files

Part of Settings UI improvement series (PR #5 of 8)

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