mirror of
https://github.com/openai/codex.git
synced 2026-09-08 15:50:34 +00:00
Add `global.copy` to the TUI keymap schema, runtime keymap, and interactive remap action list so the Copy shortcut can be remapped or unbound like other global shortcuts. Move the existing `ctrl-o` default into a new `v3` preset while preserving older presets, and update docs plus coverage for the remapped copy behavior.
164 lines
4.7 KiB
TOML
164 lines
4.7 KiB
TOML
# Codex TUI keymap template (latest defaults)
|
|
#
|
|
# Copy the sections you need into ~/.codex/config.toml.
|
|
#
|
|
# Canonical source (Codex repo):
|
|
# https://github.com/openai/codex/blob/main/docs/default-keymap.toml
|
|
# Implementation reference: docs/tui-keymap.md
|
|
#
|
|
# Value format:
|
|
# - action = "ctrl-a" # one key
|
|
# - action = ["ctrl-a", "alt-a"] # multiple keys for one action
|
|
# - action = [] # explicit unbind for that action
|
|
#
|
|
# Precedence (highest first):
|
|
# 1. [tui.keymap.<context>] override
|
|
# 2. [tui.keymap.global] fallback (only for chat/composer actions)
|
|
# 3. preset defaults
|
|
|
|
[tui.keymap]
|
|
# Preset alias for built-in defaults.
|
|
# "latest" currently points to "v3".
|
|
preset = "latest"
|
|
|
|
[tui.keymap.global]
|
|
# Open transcript overlay.
|
|
open_transcript = "ctrl-t"
|
|
# Open external editor for current draft.
|
|
open_external_editor = "ctrl-g"
|
|
# Copy the last agent response to the clipboard.
|
|
copy = "ctrl-o"
|
|
# Begin/advance "edit previous message" when composer is empty.
|
|
edit_previous_message = "esc"
|
|
# Confirm selected message in edit-previous flow.
|
|
confirm_edit_previous_message = "enter"
|
|
# Submit current draft.
|
|
submit = "enter"
|
|
# Queue current draft while a task is running.
|
|
queue = "tab"
|
|
# Toggle composer shortcut overlay.
|
|
# Include both forms because some terminals report `?` with SHIFT and others don't.
|
|
toggle_shortcuts = ["?", "shift-?"]
|
|
# Toggle Vim mode for the composer input.
|
|
# Empty list keeps this unbound by default.
|
|
toggle_vim_mode = []
|
|
|
|
[tui.keymap.chat]
|
|
# Overrides [tui.keymap.global] for chat-only behavior.
|
|
edit_previous_message = "esc"
|
|
confirm_edit_previous_message = "enter"
|
|
|
|
[tui.keymap.composer]
|
|
# Overrides [tui.keymap.global] for composer behavior.
|
|
submit = "enter"
|
|
queue = "tab"
|
|
toggle_shortcuts = ["?", "shift-?"]
|
|
|
|
[tui.keymap.editor]
|
|
# Text input editor bindings.
|
|
insert_newline = ["ctrl-j", "ctrl-m", "enter", "shift-enter"]
|
|
move_left = ["left", "ctrl-b"]
|
|
move_right = ["right", "ctrl-f"]
|
|
move_up = ["up", "ctrl-p"]
|
|
move_down = ["down", "ctrl-n"]
|
|
move_word_left = ["alt-b", "alt-left", "ctrl-left"]
|
|
move_word_right = ["alt-f", "alt-right", "ctrl-right"]
|
|
move_line_start = ["home", "ctrl-a"]
|
|
move_line_end = ["end", "ctrl-e"]
|
|
delete_backward = ["backspace", "ctrl-h"]
|
|
delete_forward = ["delete", "ctrl-d"]
|
|
delete_backward_word = ["alt-backspace", "ctrl-w", "ctrl-alt-h"]
|
|
delete_forward_word = ["alt-d", "alt-delete"]
|
|
kill_line_start = ["ctrl-u"]
|
|
kill_line_end = ["ctrl-k"]
|
|
yank = ["ctrl-y"]
|
|
|
|
[tui.keymap.vim_normal]
|
|
# Vim normal-mode actions for modal editing.
|
|
# Shifted letter bindings also match uppercase event forms reported without
|
|
# explicit SHIFT by some terminals.
|
|
enter_insert = "i"
|
|
append_after_cursor = "a"
|
|
append_line_end = "shift-a"
|
|
insert_line_start = "shift-i"
|
|
open_line_below = "o"
|
|
open_line_above = "shift-o"
|
|
move_left = "h"
|
|
move_right = "l"
|
|
move_up = "k"
|
|
move_down = "j"
|
|
move_word_forward = "w"
|
|
move_word_backward = "b"
|
|
move_word_end = "e"
|
|
move_line_start = "0"
|
|
move_line_end = "$"
|
|
delete_char = "x"
|
|
delete_to_line_end = "shift-d"
|
|
yank_line = "shift-y"
|
|
paste_after = "p"
|
|
start_delete_operator = "d"
|
|
start_yank_operator = "y"
|
|
cancel_operator = "esc"
|
|
|
|
[tui.keymap.vim_operator]
|
|
# Vim operator-pending actions for delete/yank motions.
|
|
delete_line = "d"
|
|
yank_line = "y"
|
|
motion_left = "h"
|
|
motion_right = "l"
|
|
motion_up = "k"
|
|
motion_down = "j"
|
|
motion_word_forward = "w"
|
|
motion_word_backward = "b"
|
|
motion_word_end = "e"
|
|
motion_line_start = "0"
|
|
motion_line_end = "$"
|
|
cancel = "esc"
|
|
|
|
[tui.keymap.pager]
|
|
# Transcript/static overlay navigation.
|
|
scroll_up = ["up", "k"]
|
|
scroll_down = ["down", "j"]
|
|
page_up = ["page-up", "shift-space", "ctrl-b"]
|
|
page_down = ["page-down", "space", "ctrl-f"]
|
|
half_page_up = ["ctrl-u"]
|
|
half_page_down = ["ctrl-d"]
|
|
jump_top = ["home"]
|
|
jump_bottom = ["end"]
|
|
close = ["q", "ctrl-c"]
|
|
close_transcript = ["ctrl-t"]
|
|
# Backtrack controls inside transcript overlay.
|
|
edit_previous_message = ["esc", "left"]
|
|
edit_next_message = ["right"]
|
|
confirm_edit_message = ["enter"]
|
|
|
|
[tui.keymap.list]
|
|
# Generic list/picker navigation.
|
|
move_up = ["up", "ctrl-p", "k"]
|
|
move_down = ["down", "ctrl-n", "j"]
|
|
accept = ["enter"]
|
|
cancel = ["esc"]
|
|
|
|
[tui.keymap.approval]
|
|
# Approval modal actions.
|
|
# Include ctrl+shift fallback for terminals that preserve SHIFT on Ctrl letter chords.
|
|
open_fullscreen = ["ctrl-a", "ctrl-shift-a"]
|
|
approve = ["y"]
|
|
approve_for_session = ["a"]
|
|
approve_for_prefix = ["p"]
|
|
decline = ["esc", "n"]
|
|
cancel = ["c"]
|
|
|
|
[tui.keymap.onboarding]
|
|
# Onboarding/auth/trust screens.
|
|
move_up = ["up", "k"]
|
|
move_down = ["down", "j"]
|
|
select_first = ["1", "y"]
|
|
select_second = ["2", "n"]
|
|
select_third = ["3"]
|
|
confirm = ["enter"]
|
|
cancel = ["esc"]
|
|
quit = ["q", "ctrl-c", "ctrl-d"]
|
|
# Include ctrl+shift fallback for terminals that preserve SHIFT on Ctrl punctuation chords.
|
|
toggle_animation = ["ctrl-.", "ctrl-shift-."]
|