Skip to content

fix(cli): prevent quit flow on Ctrl+C when input has text#27001

Open
cynthialong0-0 wants to merge 2 commits into
mainfrom
fix/ctrl-c-text
Open

fix(cli): prevent quit flow on Ctrl+C when input has text#27001
cynthialong0-0 wants to merge 2 commits into
mainfrom
fix/ctrl-c-text

Conversation

@cynthialong0-0
Copy link
Copy Markdown
Contributor

@cynthialong0-0 cynthialong0-0 commented May 13, 2026

Summary

Fix Ctrl+C behavior in interactive mode where it trigger quit instead of clearing input.

Details

  • Update AppContainer.ts so that Ctrl+C direct to edit.clear when active input, idle streaming, non-empty buffer.
  • The quit state for Ctrl+C is reset when input is cleared, ensuring correct subsequent quit behavior

Related Issues

Fixes #23146

How to Validate

  • type some text in input, press Ctrl+C, expecting to see input clears.
  • Press Ctrl+C again on empty input, expecting to see the normal quit flow.

Pre-Merge Checklist

  • Updated relevant documentation and README (if needed)
  • Added/updated tests (if needed)
  • Noted breaking changes (if any)
  • Validated on required platforms/methods:
    • MacOS
      • npm run
      • npx
      • Docker
      • Podman
      • Seatbelt
    • Windows
      • npm run
      • npx
      • Docker
    • Linux
      • npm run
      • npx
      • Docker

@cynthialong0-0 cynthialong0-0 marked this pull request as ready for review May 13, 2026 17:40
@cynthialong0-0 cynthialong0-0 requested a review from a team as a code owner May 13, 2026 17:40
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request improves the user experience in the interactive CLI by refining the behavior of the Ctrl+C shortcut. Previously, Ctrl+C would trigger the application quit flow regardless of the input state. The changes ensure that if a user has text in their input buffer, the first Ctrl+C press will clear the input instead of exiting the application, aligning with expected terminal behavior.

Highlights

  • Ctrl+C Behavior: Updated the CLI to prioritize clearing the input buffer over triggering the quit flow when Ctrl+C is pressed while the input is non-empty.
  • State Management: Added a reset mechanism for the Ctrl+C press count to ensure that subsequent quit attempts function correctly after an input clear.
  • Testing: Added a new test case to verify that Ctrl+C does not trigger the quit flow when the input buffer contains text.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@github-actions
Copy link
Copy Markdown

Size Change: +366 B (0%)

Total Size: 34.1 MB

Filename Size Change
./bundle/chunk-6AIOZIDI.js 0 B -2.78 MB (removed) 🏆
./bundle/chunk-CH4UWQF3.js 0 B -49.2 kB (removed) 🏆
./bundle/chunk-IC26CJPW.js 0 B -12.5 kB (removed) 🏆
./bundle/chunk-LR25YWNO.js 0 B -14.8 MB (removed) 🏆
./bundle/chunk-M7PDVWR6.js 0 B -659 kB (removed) 🏆
./bundle/chunk-RVRDSQAL.js 0 B -19.5 kB (removed) 🏆
./bundle/chunk-UIGLWLXU.js 0 B -3.8 kB (removed) 🏆
./bundle/chunk-YHIG3S3V.js 0 B -3.43 kB (removed) 🏆
./bundle/core-TWEHYMSG.js 0 B -49.3 kB (removed) 🏆
./bundle/devtoolsService-JKZQZCLO.js 0 B -28 kB (removed) 🏆
./bundle/gemini-X75SFSVN.js 0 B -587 kB (removed) 🏆
./bundle/interactiveCli-CAPQOEKA.js 0 B -1.3 MB (removed) 🏆
./bundle/liteRtServerManager-TBBRDTIU.js 0 B -2.11 kB (removed) 🏆
./bundle/oauth2-provider-H4LD54LC.js 0 B -9.16 kB (removed) 🏆
./bundle/chunk-BJ62MHC5.js 49.2 kB +49.2 kB (new file) 🆕
./bundle/chunk-BKLKQ4UC.js 3.43 kB +3.43 kB (new file) 🆕
./bundle/chunk-D66VOMMZ.js 12.5 kB +12.5 kB (new file) 🆕
./bundle/chunk-GRLJNV63.js 659 kB +659 kB (new file) 🆕
./bundle/chunk-INFXYDZ2.js 3.8 kB +3.8 kB (new file) 🆕
./bundle/chunk-J2MF36RU.js 14.8 MB +14.8 MB (new file) 🆕
./bundle/chunk-KKROHFRY.js 19.5 kB +19.5 kB (new file) 🆕
./bundle/chunk-XTVMOJG5.js 2.78 MB +2.78 MB (new file) 🆕
./bundle/core-2JRJQPPP.js 49.3 kB +49.3 kB (new file) 🆕
./bundle/devtoolsService-4KIS2LRJ.js 28 kB +28 kB (new file) 🆕
./bundle/gemini-NINAXOZD.js 587 kB +587 kB (new file) 🆕
./bundle/interactiveCli-5CNQOKEV.js 1.3 MB +1.3 MB (new file) 🆕
./bundle/liteRtServerManager-ZYIQSBLB.js 2.11 kB +2.11 kB (new file) 🆕
./bundle/oauth2-provider-FPQDB2M6.js 9.16 kB +9.16 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size Change
./bundle/bundled/third_party/index.js 8 MB 0 B
./bundle/chunk-2C3Y3D3A.js 1.98 MB 0 B
./bundle/chunk-34MYV7JD.js 2.45 kB 0 B
./bundle/chunk-5AUYMPVF.js 858 B 0 B
./bundle/chunk-5PS3AYFU.js 1.18 kB 0 B
./bundle/chunk-664ZODQF.js 124 kB 0 B
./bundle/chunk-DAHVX5MI.js 206 kB 0 B
./bundle/chunk-IUUIT4SU.js 56.5 kB 0 B
./bundle/chunk-RJTRUG2J.js 39.8 kB 0 B
./bundle/cleanup-KJZYFPE7.js 0 B -932 B (removed) 🏆
./bundle/devtools-36NN55EP.js 696 kB 0 B
./bundle/dist-T73EYRDX.js 356 B 0 B
./bundle/events-XB7DADIJ.js 418 B 0 B
./bundle/examples/hooks/scripts/on-start.js 188 B 0 B
./bundle/examples/mcp-server/example.js 1.43 kB 0 B
./bundle/gemini.js 5.1 kB 0 B
./bundle/getMachineId-bsd-TXG52NKR.js 1.55 kB 0 B
./bundle/getMachineId-darwin-7OE4DDZ6.js 1.55 kB 0 B
./bundle/getMachineId-linux-SHIFKOOX.js 1.34 kB 0 B
./bundle/getMachineId-unsupported-5U5DOEYY.js 1.06 kB 0 B
./bundle/getMachineId-win-6KLLGOI4.js 1.72 kB 0 B
./bundle/memoryDiscovery-C42VB5N5.js 980 B 0 B
./bundle/multipart-parser-KPBZEGQU.js 11.7 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/client/main.js 222 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js 229 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js 13.4 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/types.js 132 B 0 B
./bundle/sandbox-macos-permissive-open.sb 890 B 0 B
./bundle/sandbox-macos-permissive-proxied.sb 1.31 kB 0 B
./bundle/sandbox-macos-restrictive-open.sb 3.36 kB 0 B
./bundle/sandbox-macos-restrictive-proxied.sb 3.56 kB 0 B
./bundle/sandbox-macos-strict-open.sb 4.82 kB 0 B
./bundle/sandbox-macos-strict-proxied.sb 5.02 kB 0 B
./bundle/src-QVCVGIUX.js 47 kB 0 B
./bundle/start-QCCI2LFC.js 0 B -652 B (removed) 🏆
./bundle/tree-sitter-7U6MW5PS.js 274 kB 0 B
./bundle/tree-sitter-bash-34ZGLXVX.js 1.84 MB 0 B
./bundle/cleanup-HWR2M76X.js 932 B +932 B (new file) 🆕
./bundle/start-UPWS4E2J.js 652 B +652 B (new file) 🆕

compressed-size-action

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request updates the Ctrl+C handling in AppContainer.tsx to prevent the application from exiting when the input buffer is not empty. It introduces a mechanism to reset the exit counter and delegate the keypress to the input prompt for clearing text. A unit test was added to validate this logic. The reviewer noted that the implementation relies on Command.QUIT and Command.CLEAR_INPUT sharing a key binding, which might not hold true and could conflict with the Esc-Esc shortcut requirement for clearing input.

Comment on lines +1836 to +1842
if (
keyMatchers[Command.QUIT](key) &&
keyMatchers[Command.CLEAR_INPUT](key) &&
isInputActive &&
streamingState === StreamingState.Idle &&
buffer.text.length > 0
) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

high

The condition keyMatchers[Command.QUIT](key) && keyMatchers[Command.CLEAR_INPUT](key) assumes that both commands are bound to the same key. However, repository rules specify that the Esc-Esc shortcut should be used to clear the input buffer, including when it contains only whitespace. If Command.QUIT is bound to a different key (e.g., Ctrl+C), this condition will never be true. Please ensure the logic correctly handles the Esc-Esc requirement for clearing input.

References
  1. The Esc-Esc shortcut should clear the input buffer, including when it contains only whitespace.

@gemini-cli gemini-cli Bot added priority/p2 Important but can be addressed in a future release. area/core Issues related to User Interface, OS Support, Core Functionality labels May 13, 2026
@cynthialong0-0 cynthialong0-0 changed the title Fix(core): let ctrl c clean text first if the input is not empty fix(cli): prevent quit flow on Ctrl+C when input has text May 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/core Issues related to User Interface, OS Support, Core Functionality priority/p2 Important but can be addressed in a future release.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Ctrl+C doesn't consistently "Clear all text in the input field", as documented

1 participant