aboutsummaryrefslogtreecommitdiff
path: root/src/app/api
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-07 16:24:26 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-07 16:25:36 +0300
commitd190c1f55e05419b299fc68f60ea0aabc1ff7379 (patch)
tree7bb615cf57dbe49b1505b6de1607e98f168886b2 /src/app/api
parent39ba6b7a0242768b7d3684e8163d13a0609fcaa3 (diff)
fix: send shifted punctuation as text in kitty mode
refs #1105
Diffstat (limited to 'src/app/api')
-rw-r--r--src/app/api/panes.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/app/api/panes.rs b/src/app/api/panes.rs
index 14c62942..fdda8750 100644
--- a/src/app/api/panes.rs
+++ b/src/app/api/panes.rs
@@ -2013,6 +2013,35 @@ mod tests {
}
#[tokio::test]
+ async fn api_pane_send_keys_sends_shifted_punctuation_as_text_in_kitty_mode() {
+ let (mut app, pane_id) = app_with_test_workspace();
+ let internal_pane_id = app.state.workspaces[0].tabs[0].root_pane;
+ let (runtime, mut rx) =
+ crate::terminal::TerminalRuntime::test_with_channel_and_scrollback_bytes(
+ 80,
+ 24,
+ 0,
+ b"\x1b[>7u",
+ 1,
+ );
+ app.state.insert_test_runtime(internal_pane_id, runtime);
+
+ let response = app.handle_api_request(crate::api::schema::Request {
+ id: "req".into(),
+ method: crate::api::schema::Method::PaneSendKeys(PaneSendKeysParams {
+ pane_id,
+ keys: vec!["shift+?".into()],
+ }),
+ });
+
+ let success: SuccessResponse = serde_json::from_str(&response).unwrap();
+ assert_eq!(success.id, "req");
+ assert_eq!(success.result, ResponseResult::Ok {});
+ assert_eq!(rx.try_recv().unwrap(), bytes::Bytes::from_static(b"?"));
+ assert!(rx.try_recv().is_err());
+ }
+
+ #[tokio::test]
async fn api_pane_send_input_keys_accept_key_combo_chords() {
let (mut app, pane_id, mut rx) = app_with_send_key_runtime(1);