Skip to main content

Overview

Rode provides a comprehensive set of keyboard shortcuts for common editor operations. All keybindings are currently hardcoded in the application and use platform-aware modifiers (Cmd on macOS, Ctrl on Linux/Windows).
Custom keybindings are not yet supported. The shortcuts listed below are the default (and only) keybindings available in the current version.

Modifier Keys

Rode uses platform-aware modifier keys:
  • Command (Cmd ⌘) on macOS
  • Control (Ctrl) on Linux and Windows
In this documentation, we use Cmd to represent the platform-specific command modifier. Source: src/app.rs:1023 (modifiers.command())

File Operations

Cmd+O
keybinding
Open FolderOpens a folder dialog to select a workspace directory.
"o" => return Some(Message::OpenFolderDialog),
Source: src/app.rs:1040
Cmd+S
keybinding
Save FileSaves the currently active file to disk.
"s" => return Some(Message::SaveFile),
Source: src/app.rs:1042
Cmd+N
keybinding
New FileCreates a new untitled file in a new tab.
"n" => return Some(Message::NewFile),
Source: src/app.rs:1046
Cmd+W
keybinding
Close TabCloses the currently active tab.
"w" => return Some(Message::CloseActiveTab),
Source: src/app.rs:1041
Cmd+B
keybinding
Toggle SidebarShows or hides the file tree sidebar.
"b" => return Some(Message::ToggleSidebar),
Source: src/app.rs:1038
Cmd+R
keybinding
Toggle Sidebar (alternate)Alternative keybinding for toggling the sidebar.
"r" => return Some(Message::ToggleSidebar),
Source: src/app.rs:1039
Cmd+T
keybinding
File FinderOpens the fuzzy file finder for quick file navigation.
"t" => return Some(Message::ToggleFileFinder),
Source: src/app.rs:1043
Cmd+J
keybinding
Toggle TerminalShows or hides the integrated terminal panel.
"j" => return Some(Message::ToggleTerminal),
Source: src/app.rs:1044

Search & Replace

Cmd+F
keybinding
Find & ReplaceOpens the find and replace panel.
"f" => return Some(Message::ToggleFindReplace),
Source: src/app.rs:1045

Command Palette & Tools

Cmd+Shift+P
keybinding
Command PaletteOpens the command palette for quick access to editor commands.
"p" | "P" => return Some(Message::ToggleCommandPalette),
Source: src/app.rs:1032
Cmd+Shift+F
keybinding
Fuzzy FinderOpens the fuzzy finder for searching across files.
"f" | "F" => return Some(Message::ToggleFuzzyFinder),
Source: src/app.rs:1031
Cmd+Shift+S
keybinding
SettingsOpens the settings panel.
"s" | "S" => return Some(Message::ToggleSettings),
Source: src/app.rs:1033
Cmd+Shift+V
keybinding
Preview MarkdownRenders the current Markdown file in preview mode.
"v" | "V" => return Some(Message::PreviewMarkdown),
Source: src/app.rs:1030

Window Management

Cmd+Ctrl+F
keybinding
Toggle FullscreenToggles fullscreen mode for the editor window.
"f" => return Some(Message::ToggleFullscreen(window::Mode::Fullscreen)),
Source: src/app.rs:1025
This requires both Command and Control modifiers to be pressed simultaneously.

Universal Keys

Escape
keybinding
Close OverlaysCloses any open overlay panels (find, command palette, fuzzy finder, etc.).
Key::Named(iced::keyboard::key::Named::Escape) =>
    Some(Message::EscapePressed),
Source: src/app.rs:1005-1006
Arrow Up
keybinding
Navigate UpNavigates up in fuzzy finder, command palette, and other list views.
Key::Named(iced::keyboard::key::Named::ArrowUp) => {
    Some(Message::FuzzyFinderNavigate(-1))
}
Source: src/app.rs:1007-1009
Arrow Down
keybinding
Navigate DownNavigates down in fuzzy finder, command palette, and other list views.
Key::Named(iced::keyboard::key::Named::ArrowDown) => {
    Some(Message::FuzzyFinderNavigate(1))
}
Source: src/app.rs:1010-1012
Enter
keybinding
Select ItemSelects the currently highlighted item in fuzzy finder or command palette.
Key::Named(iced::keyboard::key::Named::Enter) =>
    Some(Message::FuzzyFinderSelect),
Source: src/app.rs:1013-1014

Text Editing

Standard text editing shortcuts (cut, copy, paste, undo, redo, select all) are handled by the underlying text editor component and may vary by platform.

Keybinding Implementation

Keybindings are implemented in the subscription method of the App struct, which listens for keyboard events:
Event::Keyboard(iced::keyboard::Event::KeyPressed {
    key,
    modifiers,
    ..
}) => {
    let navigation_msg = match &key {
        Key::Named(iced::keyboard::key::Named::Escape) =>
            Some(Message::EscapePressed),
        Key::Named(iced::keyboard::key::Named::ArrowUp) => {
            Some(Message::FuzzyFinderNavigate(-1))
        }
        Key::Named(iced::keyboard::key::Named::ArrowDown) => {
            Some(Message::FuzzyFinderNavigate(1))
        }
        Key::Named(iced::keyboard::key::Named::Enter) =>
            Some(Message::FuzzyFinderSelect),
        _ => None,
    };

    if navigation_msg.is_some() {
        return navigation_msg;
    }

    if let Key::Character(c) = &key {
        if modifiers.command() && modifiers.control() {
            match c.as_str() {
                "f" => return Some(Message::ToggleFullscreen(window::Mode::Fullscreen)),
                _ => {}
            }
        } else if modifiers.command() && modifiers.shift() {
            match c.as_str() {
                "v" | "V" => return Some(Message::PreviewMarkdown),
                "f" | "F" => return Some(Message::ToggleFuzzyFinder),
                "p" | "P" => return Some(Message::ToggleCommandPalette),
                "s" | "S" => return Some(Message::ToggleSettings),
                _ => {}
            }
        } else if modifiers.command() {
            match c.as_str() {
                "b" => return Some(Message::ToggleSidebar),
                "r" => return Some(Message::ToggleSidebar),
                "o" => return Some(Message::OpenFolderDialog),
                "w" => return Some(Message::CloseActiveTab),
                "s" => return Some(Message::SaveFile),
                "t" => return Some(Message::ToggleFileFinder),
                "j" => return Some(Message::ToggleTerminal),
                "f" => return Some(Message::ToggleFindReplace),
                "n" => return Some(Message::NewFile),
                _ => {}
            }
        }
    }
    None
}
Source: src/app.rs:999-1052

Quick Reference

ShortcutAction
Cmd+NNew File
Cmd+OOpen Folder
Cmd+SSave File
Cmd+WClose Tab
ShortcutAction
Cmd+FFind & Replace
Cmd+Shift+FFuzzy Finder
Cmd+Shift+PCommand Palette
Cmd+Shift+SSettings
ShortcutAction
Cmd+Shift+VPreview Markdown
Cmd+Ctrl+FToggle Fullscreen

Platform Differences

The command() modifier automatically maps to the correct key on each platform:
  • macOS: Command (⌘) key
  • Linux: Control (Ctrl) key
  • Windows: Control (Ctrl) key
This ensures keybindings feel native to each platform without requiring separate configuration.

Future Support

Custom keybindings are not currently supported. Future versions may add:
  • User-configurable keybindings
  • Keybinding configuration file (e.g., ~/.config/rode/keybindings.lua)
  • Vim mode keybindings
  • Emacs mode keybindings

Preferences

Configure tab size, indentation, and theme

Themes

Customize editor colors and syntax highlighting