Skip to content

Navigation Patterns

Iris Studio follows vim-inspired keybindings for consistent, keyboard-driven navigation across all modes. This guide covers movement, selection, and panel focus.

Core Philosophy

  • Vim-like movement: hjkl or arrow keys
  • Context-aware actions: Keys behave intelligently based on what you're viewing
  • Modal focus: Different panels respond to the same keys differently
  • No mouse required: Everything is keyboard-accessible

Movement Keys

These work in all scrollable contexts (file trees, code views, diffs, lists):

KeyActionContext
j or Move down one line/itemUniversal
k or Move up one line/itemUniversal
h or Collapse directory / Previous itemContext-dependent
l or Expand directory / Next itemContext-dependent
g or HomeJump to first itemUniversal
G or EndJump to last itemUniversal
Ctrl+d or PgDnScroll down one page (~20 lines)Universal
Ctrl+u or PgUpScroll up one page (~20 lines)Universal

File Tree Navigation

In file tree panels (Explore, Commit, Review):

src/
├─ agents/          ← Current selection
│  ├─ iris.rs
│  └─ tools/
└─ studio/
  • j/k — Move between files/directories
  • l or Enter — Expand directory or load file
  • h — Collapse expanded directory
  • g/G — Jump to top/bottom of tree

Code View Navigation

In code panels (Explore mode center panel):

rust
  1  pub fn handle_commit_key(...) {
  2      if state.editing {           ← Current line (highlighted)
  3          return handle_editing_key(state, key);
  4      }
  • j/k — Move cursor up/down by line
  • Ctrl+d/Ctrl+u — Page up/down
  • g/G — Jump to first/last line
  • v — Enter visual selection mode (Explore only)

Diff Navigation

In diff panels (Commit, Review, PR, Changelog, Release modes):

diff
@@ -10,6 +10,8 @@ impl CommitMode {

 fn handle_files_key(...) {
     match key.code {
+        KeyCode::Char('s') => { ... }  ← Current hunk
+        KeyCode::Char('u') => { ... }
  • j/k — Scroll diff line by line
  • [ / ] — Jump to previous/next hunk
  • n / p — Jump to next/previous file in diff
  • Ctrl+d/Ctrl+u — Page through diff

List Navigation

In commit lists (PR, Changelog, Release modes):

● abc123f Fix authentication bug        ← Selected
● def456a Add user settings panel
● ghi789b Update dependencies
  • j/k — Select previous/next commit
  • g/G — Jump to first/last commit
  • Enter — View commit details (context-dependent)

Panel Focus

Studio has three panels: Left, Center, Right. Only one has focus at a time, indicated by a bright border color (Electric Purple). Unfocused panels have dimmed borders.

Focus Control

KeyAction
TabFocus next panel (Left → Center → Right → Left)
Shift+TabFocus previous panel (reverse)

Smart Focus

Some actions automatically move focus:

  • File selection (Enter on file in tree) → Focus moves to content panel
  • Mode switch → Focus defaults to most relevant panel for that mode
    • Commit: Center (message editor)
    • Review/PR/Changelog/Release: Center (output)
    • Explore: Left (file tree)

Visual Selection

Explore mode only: Select multiple lines for copying or analysis.

Entering Visual Mode

Press v while viewing code:

rust
  1  pub fn handle_commit_key(...) {
  2      if state.editing {           ← Anchor point
  3          return handle_editing_key(state, key);  ← Selection extends here
  4      }

Selection Controls

KeyAction
vEnter/exit visual selection mode
j/kExtend selection up/down
yCopy selected lines to clipboard
EscClear selection and exit visual mode

Selected lines are highlighted in Electric Purple (#e135ff).

Context-Specific Actions

Some keys have different meanings based on panel focus:

In File Trees (Left Panel)

KeyAction
EnterExpand directory / Load file into view
h / lCollapse / Expand directory
sStage file (Commit mode only)
uUnstage file (Commit mode only)
aStage all files (Commit mode only)
Shift+UUnstage all files (Commit mode only)

In Code Views (Center Panel)

KeyAction
j / kNavigate by line
vVisual selection (Explore)
wSemantic blame (Explore)
eEdit message (Commit)
rRegenerate (Commit/Review/PR/etc.)
yCopy to clipboard

In Diff Views (Right Panel)

KeyAction
[ / ]Jump between hunks
n / pJump between files
Ctrl+d / Ctrl+uPage through diff

Clipboard Operations

Copy content to system clipboard with y:

What Gets Copied

  • File Tree: File path
  • Code View: Current line (or selected range in visual mode)
  • Code View (Shift+Y): Entire file content
  • Message Editor: Full commit message
  • Review/PR/Changelog/Release: Full generated content

After copying, you'll see a success notification:

✓ Copied to clipboard

Scrolling Behavior

Automatic Scrolling

When you navigate past the visible area, the view automatically scrolls to keep your selection visible:

Visible area (20 lines)
┌─────────────────────┐
│  18  line           │
│  19  line           │
│  20  line  ← cursor │  ← Scrolls down when you press j
└─────────────────────┘

Page Scrolling

Ctrl+d and Ctrl+u move by ~20 lines (one page):

  • Keeps cursor in view
  • Overlaps a few lines for context
  • Works in all scrollable panels

Search & Jump

Quick Jump to File

In Explore mode:

  1. Focus file tree (Left panel)
  2. Start typing filename → files auto-filter (coming soon)
  3. Navigate filtered results with j/k

Jump to Ref (Review/PR/Changelog/Release modes)

KeyAction
fSelect "from" ref (base branch/tag)
tSelect "to" ref (target branch/tag)

Opens a filterable ref selector modal.

Hunk & File Navigation in Diffs

When viewing diffs (Commit, Review, PR modes):

Hunks

A hunk is a contiguous block of changes:

diff
@@ -10,6 +10,8 @@  ← Hunk header
 existing line
+added line      ← This is hunk 1
 existing line

@@ -20,3 +22,4 @@  ← Hunk header
 another line
+another addition ← This is hunk 2
  • [ — Jump to previous hunk
  • ] — Jump to next hunk

Files

When a diff contains multiple files:

diff
diff --git a/src/agents/iris.rs b/src/agents/iris.rs  ← File 1
...

diff --git a/src/studio/state.rs b/src/studio/state.rs  ← File 2
...
  • n — Jump to next file in diff
  • p — Jump to previous file in diff

When modals are open (Help, Chat, Settings, Selectors):

KeyAction
EscClose modal
j/kNavigate options (selectors)
EnterConfirm selection
Text inputType to filter (ref/emoji/preset selectors)

See specific mode documentation for modal-specific keys.

Tips for Efficient Navigation

1. Use Panel Focus Strategically

  • Start in Left panel to select files
  • Enter to auto-focus content panel
  • Tab to Right panel for diff details

2. Combine Movement Keys

  • g then ] — Jump to first hunk
  • G then [ — Jump to last hunk
  • v then G — Select from current to end

3. Leverage Smart Actions

  • Enter on a directory = expand it
  • Enter on a file = load and move focus
  • r anywhere = regenerate current context

4. Visual Selection Workflow

1. Press v to anchor
2. Press j/k to extend
3. Press y to copy
4. Press Esc to clear

Accessibility Notes

  • No mouse required: All actions are keyboard-accessible
  • Visual feedback: Active panel has bright border (Electric Purple)
  • Status indicators: Current line/item highlighted in selection color
  • Scroll indicators: and arrows show when content extends beyond view

Next Steps

Released under the Apache 2.0 License.