aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKirill Chibisov <contact@kchibisov.com>2023-12-30 19:29:21 +0400
committerGitHub <noreply@github.com>2023-12-30 19:29:21 +0400
commit107c8720c3439703cfb8058e7581396af17a8529 (patch)
tree8544d49a7691c93ebe1c0a1f0662e43cf75c85c5
parentb067fcca337377a751880744b71a6576501dcdd1 (diff)
downloadalacritty-107c8720c3439703cfb8058e7581396af17a8529.tar.gz
alacritty-107c8720c3439703cfb8058e7581396af17a8529.zip
Don't substitute `\n` in char bindings
This broke unintentionally due to routing paste-like input via paste function. Fixes #7476.
-rw-r--r--CHANGELOG.md1
-rw-r--r--alacritty/src/event.rs24
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<T> 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);
}
}