Skip to content

terminal_view: Forward ctrl-q to PTY when terminal is focused on Linux - #58879

Merged
tomhoule merged 1 commit into
zed-industries:mainfrom
saberoueslati:fix/terminal-ctrl-q
Jul 10, 2026
Merged

terminal_view: Forward ctrl-q to PTY when terminal is focused on Linux#58879
tomhoule merged 1 commit into
zed-industries:mainfrom
saberoueslati:fix/terminal-ctrl-q

Conversation

@saberoueslati

Copy link
Copy Markdown
Contributor

Context

On Linux, ctrl-q is globally bound to zed::Quit. When a TerminalView is focused, pressing ctrl-q quit the application instead of forwarding the keycode to the shell, breaking programs like ftp, tig, and any app that uses XON/XOFF flow control.

Windows already had the fix: its Terminal keymap context overrides ctrl-q with ["terminal::SendKeystroke", "ctrl-q"]. The Linux keymap was simply missing that override.

Closes #58809

Manual test after fix below :

Screencast.from.2026-06-09.00-46-37.webm

How to Review

  • assets/keymaps/default-linux.json : One-line addition in the Terminal context under the "Overrides for conflicting keybindings" comment, mirroring the existing Windows entry.
  • crates/terminal_view/src/terminal_view.rs : Regression test ctrl_q_is_forwarded_to_terminal_not_quit (Linux-only, #[cfg(target_os = "linux")]): loads the default keymap, focuses a display-only terminal, simulates ctrl-q, and asserts the PTY receives byte 0x11 instead of the quit action firing.

Self-Review Checklist

  • I've reviewed my own diff for quality, security, and reliability
  • Unsafe blocks (if any) have justifying comments
  • The content is consistent with the UI/UX checklist
  • Tests cover the new/changed behavior
  • Performance impact has been considered and is acceptable

Release Notes:

  • Fixed ctrl-q quitting Zed instead of being forwarded to the shell when a terminal is focused on Linux

@cla-bot cla-bot Bot added the cla-signed The user has signed the Contributor License Agreement label Jun 8, 2026
@ChristopherBiscardi ChristopherBiscardi added the area:integrations/terminal Feedback for terminal integration, shell commands, etc label Jun 9, 2026
@tomhoule tomhoule self-assigned this Jul 10, 2026
@tomhoule
tomhoule force-pushed the fix/terminal-ctrl-q branch from 8a30f4f to 6c9d6b6 Compare July 10, 2026 11:19

@tomhoule tomhoule left a comment

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.

Good catch, and thank you for the fix!

@tomhoule
tomhoule enabled auto-merge July 10, 2026 11:29
@tomhoule
tomhoule added this pull request to the merge queue Jul 10, 2026
Merged via the queue into zed-industries:main with commit 5cf706c Jul 10, 2026
34 checks passed
jolutz pushed a commit to jolutz/zed that referenced this pull request Aug 8, 2026
zed-industries#58879)

## Context

On Linux, `ctrl-q` is globally bound to `zed::Quit`. When a
`TerminalView` is focused, pressing `ctrl-q` quit the application
instead of forwarding the keycode to the shell, breaking programs like
`ftp`, `tig`, and any app that uses XON/XOFF flow control.

Windows already had the fix: its `Terminal` keymap context overrides
`ctrl-q` with `["terminal::SendKeystroke", "ctrl-q"]`. The Linux keymap
was simply missing that override.

Closes zed-industries#58809

Manual test after fix below :

[Screencast from 2026-06-09
00-46-37.webm](https://github.com/user-attachments/assets/3d103b2a-bff1-4559-af1d-2a52d57a6b18)


## How to Review

- **`assets/keymaps/default-linux.json`** : One-line addition in the
`Terminal` context under the "Overrides for conflicting keybindings"
comment, mirroring the existing Windows entry.
- **`crates/terminal_view/src/terminal_view.rs`** : Regression test
`ctrl_q_is_forwarded_to_terminal_not_quit` (Linux-only, `#[cfg(target_os
= "linux")]`): loads the default keymap, focuses a display-only
terminal, simulates `ctrl-q`, and asserts the PTY receives byte `0x11`
instead of the quit action firing.

## Self-Review Checklist

- [x] I've reviewed my own diff for quality, security, and reliability
- [ ] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the UI/UX checklist
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- Fixed `ctrl-q` quitting Zed instead of being forwarded to the shell
when a terminal is focused on Linux
playdohface pushed a commit to playdohface/zed that referenced this pull request Aug 29, 2026
zed-industries#58879)

## Context

On Linux, `ctrl-q` is globally bound to `zed::Quit`. When a
`TerminalView` is focused, pressing `ctrl-q` quit the application
instead of forwarding the keycode to the shell, breaking programs like
`ftp`, `tig`, and any app that uses XON/XOFF flow control.

Windows already had the fix: its `Terminal` keymap context overrides
`ctrl-q` with `["terminal::SendKeystroke", "ctrl-q"]`. The Linux keymap
was simply missing that override.

Closes zed-industries#58809

Manual test after fix below :

[Screencast from 2026-06-09
00-46-37.webm](https://github.com/user-attachments/assets/3d103b2a-bff1-4559-af1d-2a52d57a6b18)


## How to Review

- **`assets/keymaps/default-linux.json`** : One-line addition in the
`Terminal` context under the "Overrides for conflicting keybindings"
comment, mirroring the existing Windows entry.
- **`crates/terminal_view/src/terminal_view.rs`** : Regression test
`ctrl_q_is_forwarded_to_terminal_not_quit` (Linux-only, `#[cfg(target_os
= "linux")]`): loads the default keymap, focuses a display-only
terminal, simulates `ctrl-q`, and asserts the PTY receives byte `0x11`
instead of the quit action firing.

## Self-Review Checklist

- [x] I've reviewed my own diff for quality, security, and reliability
- [ ] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the UI/UX checklist
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- Fixed `ctrl-q` quitting Zed instead of being forwarded to the shell
when a terminal is focused on Linux
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:integrations/terminal Feedback for terminal integration, shell commands, etc cla-signed The user has signed the Contributor License Agreement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Terminal thread should intercept zed shortcut

3 participants