Skip to content

Improve terminal navigation shortcuts and streamline git action PR flow#42

Merged
juliusmarminge merged 2 commits into
mainfrom
codething/70a71c65
Feb 16, 2026
Merged

Improve terminal navigation shortcuts and streamline git action PR flow#42
juliusmarminge merged 2 commits into
mainfrom
codething/70a71c65

Conversation

@juliusmarminge
Copy link
Copy Markdown
Member

@juliusmarminge juliusmarminge commented Feb 14, 2026

adds basic terminal navigation


Open with Devin

Summary by CodeRabbit

  • New Features

    • Terminal now supports platform-specific navigation shortcuts (Option/Command on macOS, Ctrl/Alt on other platforms) with arrow keys for word- and line-level cursor movement.
    • Terminal keyboard handling unified so navigation and clear shortcuts are processed consistently.
  • Tests

    • Added comprehensive tests covering navigation shortcut behavior across platforms and event types.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 14, 2026

Walkthrough

Adds platform-aware terminal navigation shortcut handling via a new terminalNavigationShortcutData export and integrates it into the terminal drawer, which now routes navigation and clear shortcuts through a generalized sendTerminalInput function.

Changes

Cohort / File(s) Summary
Keybindings Module
apps/web/src/keybindings.ts, apps/web/src/keybindings.test.ts
Adds terminalNavigationShortcutData(event, platform) and tests; extends ShortcutEventLike with optional type; enforces keydown-only handling and maps arrow+modifier combos to terminal navigation sequences (word/line moves) with platform-specific rules.
Terminal Drawer Integration
apps/web/src/components/ThreadTerminalDrawer.tsx
Replaces specialized clear handler with a generalized sendTerminalInput(data, fallbackError) and integrates terminalNavigationShortcutData to intercept navigation shortcuts, prevent default, stop propagation, and send navigation sequences to the terminal.

Sequence Diagram

sequenceDiagram
    actor User
    participant Drawer as ThreadTerminalDrawer
    participant Keybindings
    participant Terminal as TerminalViewport

    User->>Drawer: Press arrow key + modifier
    Drawer->>Keybindings: terminalNavigationShortcutData(event, platform)
    alt Navigation shortcut detected
        Keybindings-->>Drawer: Return navigation sequence
        Drawer->>Drawer: preventDefault & stopPropagation
        Drawer->>Drawer: sendTerminalInput(sequence, "Failed to move cursor")
        Drawer->>Terminal: Write navigation data
        Terminal-->>User: Cursor moves
    else No shortcut match
        Keybindings-->>Drawer: Return null
        Drawer->>Drawer: Continue to other handlers (clear shortcut, default)
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Title check ⚠️ Warning The PR title 'Improve terminal navigation shortcuts and streamline git action PR flow' is overly broad and vague. The actual changes focus on adding terminal navigation shortcuts and refactoring terminal input handling, but the 'streamline git action PR flow' portion is not present in the changeset. Consider revising the title to focus on the core change: 'Add terminal navigation shortcuts support' or 'Refactor terminal shortcuts with navigation support', removing the unrelated 'git action PR flow' reference.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Merge Conflict Detection ✅ Passed ✅ No merge conflicts detected when merging into main

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/70a71c65

Comment @coderabbitai help to get the list of available commands and usage tips.

@macroscopeapp
Copy link
Copy Markdown
Contributor

macroscopeapp Bot commented Feb 14, 2026

Add terminal navigation shortcut handling and unify terminal input writing in ThreadTerminalDrawer.TerminalViewport to streamline git action PR flow

Introduce keybindings.terminalNavigationShortcutData for macOS and non-macOS word/line navigation, gate clear shortcuts to keydown events, and route all terminal input through sendTerminalInput in ThreadTerminalDrawer.tsx.

📍Where to Start

Start with terminalNavigationShortcutData and isTerminalClearShortcut in keybindings.ts, then review sendTerminalInput integration and the custom key handler in ThreadTerminalDrawer.tsx.


Macroscope summarized b7bbcb2.

@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented Feb 14, 2026

Greptile Summary

Enhanced terminal with keyboard shortcuts for cursor navigation by adding support for platform-specific word and line movement using modifier keys with arrow keys.

  • Added terminalNavigationShortcutData function to map keyboard events to terminal control sequences (ESC+b/f for word movement, Ctrl-A/E for line movement)
  • Refactored terminal input handling to use a generic sendTerminalInput helper function
  • Integrated navigation shortcuts into the terminal's custom key event handler with proper event prevention
  • Provided comprehensive test coverage for all platform-specific shortcuts (macOS Option/Cmd, non-macOS Ctrl/Alt)

Confidence Score: 5/5

  • This PR is safe to merge with minimal risk
  • The implementation is well-tested with comprehensive test coverage, follows existing patterns in the codebase, and properly handles platform-specific behavior. The refactoring improves code organization without changing existing functionality.
  • No files require special attention

Important Files Changed

Filename Overview
apps/web/src/keybindings.ts Added terminalNavigationShortcutData function to map platform-specific arrow key shortcuts (Option/Cmd on macOS, Ctrl/Alt on others) to terminal control sequences for word and line navigation
apps/web/src/components/ThreadTerminalDrawer.tsx Refactored to use generic sendTerminalInput helper and integrated terminal navigation shortcuts into the custom key event handler
apps/web/src/keybindings.test.ts Added comprehensive test suite for terminalNavigationShortcutData covering macOS (Option/Cmd) and non-macOS (Ctrl/Alt) platforms with proper edge case coverage

Flowchart

flowchart TD
    A[Keyboard Event] --> B{terminalNavigationShortcutData}
    B --> C{Is Shift Key?}
    C -->|Yes| D[Return null]
    C -->|No| E{Is ArrowLeft/Right?}
    E -->|No| D
    E -->|Yes| F{Platform?}
    F -->|macOS| G{Modifier Key?}
    F -->|non-macOS| H{Modifier Key?}
    G -->|Option/Alt only| I[Word Movement<br/>ESC+b or ESC+f]
    G -->|Cmd/Meta only| J[Line Movement<br/>Ctrl-A or Ctrl-E]
    G -->|Other| D
    H -->|Ctrl only| I
    H -->|Alt only| I
    H -->|Other| D
    I --> K[sendTerminalInput]
    J --> K
    K --> L[api.terminal.write]
    L --> M[Terminal Updates Cursor]
Loading

Last reviewed commit: 9547718

- handle platform-specific modifier+arrow combos in terminal input
- reuse terminal write path for clear and navigation actions
- add shortcut tests for macOS and non-macOS mappings
@juliusmarminge
Copy link
Copy Markdown
Member Author

juliusmarminge commented Feb 16, 2026

@greptileai review

@juliusmarminge
Copy link
Copy Markdown
Member Author

https://github.com/greptileai review

@juliusmarminge
Copy link
Copy Markdown
Member Author

@greptileai review

- guard terminal clear/navigation shortcut handlers to only process `keydown`
- add tests verifying `keyup` events are ignored
@juliusmarminge juliusmarminge merged commit f864ef1 into main Feb 16, 2026
2 of 3 checks passed
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
apps/web/src/keybindings.test.ts (1)

357-366: Consider adding a test for Alt+Arrow on non-macOS platforms.

The implementation at keybindings.ts lines 265-267 supports Alt+Arrow for word movement on non-macOS platforms, but this behavior isn't covered by tests. Adding a test would ensure this code path remains functional.

🧪 Suggested test addition
   it("maps Ctrl+Arrow on non-macOS to word movement", () => {
     assert.strictEqual(
       terminalNavigationShortcutData(event({ key: "ArrowLeft", ctrlKey: true }), "Win32"),
       "\u001bb",
     );
     assert.strictEqual(
       terminalNavigationShortcutData(event({ key: "ArrowRight", ctrlKey: true }), "Linux"),
       "\u001bf",
     );
   });
+
+  it("maps Alt+Arrow on non-macOS to word movement", () => {
+    assert.strictEqual(
+      terminalNavigationShortcutData(event({ key: "ArrowLeft", altKey: true }), "Win32"),
+      "\u001bb",
+    );
+    assert.strictEqual(
+      terminalNavigationShortcutData(event({ key: "ArrowRight", altKey: true }), "Linux"),
+      "\u001bf",
+    );
+  });

DavidIlie added a commit to DavidIlie/t3code that referenced this pull request Mar 13, 2026
…icker

Port upstream commits 3d35868..f70cb5d:
- Add pull-request thread setup for local and worktree modes (pingdotgg#42)
- Refine branch picker behavior and gate /checkout-pr by thread type (pingdotgg#43)

Includes PR resolution via GitHub CLI, worktree-aware PR checkout,
shared branch picker filtering, deferred query, conditional virtualization,
and /checkout-pr gating to local draft threads only.
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