Prompt textarea does not support Shift+Arrow text selection
Open 💬 6 comments Opened Feb 26, 2026 by mexicorea
What variant of Codex are you using?
CLI
What feature would you like to see?
In the prompt input textarea, I cannot select text using keyboard selection shortcuts (Shift + Arrow keys). Cursor movement works, but selection range is not created/highlighted, which makes editing long prompts difficult.
I'd like to see standard keyboard text selection working in the prompt textarea (Shift+Arrow to extend selection), similar to common terminal editors/input widgets.
Additional information
This may be a missing feature rather than a regression, but it significantly impacts usability for long prompts.
6 Comments
This issue feels like it should probably be interpreted as the broader baseline selection/editing parity gap in the composer, not only plain
Shift+Arrow.The concrete set that feels missing:
Shift+Left/Rightto extend/shrink selection by characterCtrl+Shift+Left/Righton Win/Linux, platform-appropriate equivalent on macOS)Ctrl+X/ cut on the selected rangeOnce selection exists, word-wise selection really wants to share the same boundary logic as cursor word navigation, so this also seems related to #12339.
And at the broader control-surface level, this is another reason #3049 matters: these baseline editing keys should not stay hardcoded forever if Codex wants serious TUI/editor parity.
I inspected the current TUI composer implementation and this looks like missing functionality rather than a one-off regression.
Current state on
main:TextAreatrackstext,cursor_pos, placeholder elements, wrap state, and a single-entry kill buffer, but no selection anchor/range.Shift+Arrow.Backspace/Delete/ typed input to operate on a highlighted range.A minimal first patch that seems tractable and reviewable would be:
TextAreaShift+Left/Right/Up/DownandShift+Home/EndBackspace/Deleteremove the active selection when presentI’m intentionally not bundling mouse selection or transcript-wide copy behavior into this, since those look like separate design problems.
If this scope aligns with maintainer intent, I can prepare a patch on that basis.
I implemented the first scoped slice for this on my fork and pushed it to branch
composer-shift-selection.Current scope:
Shift+Left/Shift+Rightselection in the composer textareaShift+Up/Shift+Downselection across visual linesShift+Home/Shift+Endselection to line boundariesBackspace/Deleteremove the active selectionI kept this intentionally limited to keyboard selection/editing in the prompt textarea and did not bundle mouse-selection or transcript-wide copy behavior into the same change.
If that scope aligns with maintainer intent, I can open a PR from the branch.
Additionally in any text input in Windows I often use combinations like
Shift+Left/Rightto select textCtrl+Shift+Left/Rightto select text quickly by wordCtrl+Backspaceto delete word to the left of the caret. CurrentlyAlt+Backspaceworks instead which if frustrating.Ctrl+Delto delete word to the right of the caret. Also,Alt+Delworks instead.There is actually no way to select and quickly edit text using keyboard (tested only in Windows).
I can reproduce the same class of issue with keyboard selection in the Codex CLI composer.
Environment:
0.128.0Reproduction:
Shift+Home,Shift+End, orShift+Arrow.Expected:
The editable range inside the composer should become selected.
Then:
Actual:
The caret moves or no selection-like behavior happens, but no editable selection range is created/highlighted inside the prompt textarea.
Important distinction:
This is not terminal screen/scrollback selection for copying rendered output. I agree that terminal screen selection is normally handled by the terminal emulator.
This request is about editor selection inside the Codex composer input buffer before submitting the prompt.
That behavior requires application/editor state: a selection anchor/range, selection-aware movement actions, rendering of the selected range, and insert/delete behavior that operates on the active selection.
Related issue: #20645
Bumping this.
This feels like pretty important functionality despite how many upvotes this issue gets, unless someone has figured out an elegant workaround...