From 107c8720c3439703cfb8058e7581396af17a8529 Mon Sep 17 00:00:00 2001 From: Kirill Chibisov Date: Sat, 30 Dec 2023 19:29:21 +0400 Subject: [PATCH] Don't substitute `\n` in char bindings This broke unintentionally due to routing paste-like input via paste function. Fixes #7476. --- CHANGELOG.md | 1 + alacritty/src/event.rs | 24 +++++++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34e764b9..9b3e840b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - `alacritty migrate` failing with nonexistent imports - `Alt` bindings requiring composed key rather than pre-composed one on macOS - `Alt + Control` bindings not working on Windows +- `chars = "\u000A"` action in bindings inserting `\n` ## 0.13.0 diff --git a/alacritty/src/event.rs b/alacritty/src/event.rs index 3b3d8297..ff08557b 100644 --- a/alacritty/src/event.rs +++ b/alacritty/src/event.rs @@ -839,13 +839,23 @@ impl<'a, N: Notify + 'a, T: EventListener> input::ActionContext for ActionCon } else { self.on_terminal_input_start(); - // In non-bracketed (ie: normal) mode, terminal applications cannot distinguish - // pasted data from keystrokes. - // In theory, we should construct the keystrokes needed to produce the data we are - // pasting... since that's neither practical nor sensible (and probably an impossible - // task to solve in a general way), we'll just replace line breaks (windows and unix - // style) with a single carriage return (\r, which is what the Enter key produces). - self.write_to_pty(text.replace("\r\n", "\r").replace('\n', "\r").into_bytes()); + let payload = if bracketed { + // In non-bracketed (ie: normal) mode, terminal applications cannot distinguish + // pasted data from keystrokes. + // + // In theory, we should construct the keystrokes needed to produce the data we are + // pasting... since that's neither practical nor sensible (and probably an + // impossible task to solve in a general way), we'll just replace line breaks + // (windows and unix style) with a single carriage return (\r, which is what the + // Enter key produces). + text.replace("\r\n", "\r").replace('\n', "\r").into_bytes() + } else { + // When we explicitly disable bracketed paste don't manipulate with the input, + // so we pass user input as is. + text.to_owned().into_bytes() + }; + + self.write_to_pty(payload); } }