aboutsummaryrefslogtreecommitdiff
path: root/alacritty
diff options
context:
space:
mode:
authorJosh Rahm <rahm@google.com>2021-10-25 22:49:16 -0600
committerJosh Rahm <rahm@google.com>2021-10-25 22:49:16 -0600
commitb28edbad4eea1c4c8b233925ec520ec8f401d407 (patch)
treebe33004cff5a196a03ee469de0b650f685fc81f7 /alacritty
parent01554367f00f7c39ad17163cd5922a069284844a (diff)
downloadr-alacritty-b28edbad4eea1c4c8b233925ec520ec8f401d407.tar.gz
r-alacritty-b28edbad4eea1c4c8b233925ec520ec8f401d407.tar.bz2
r-alacritty-b28edbad4eea1c4c8b233925ec520ec8f401d407.zip
add logo key prefix and alt behavior configuration optionsexperimental
Diffstat (limited to 'alacritty')
-rw-r--r--alacritty/src/config/bindings.rs2
-rw-r--r--alacritty/src/config/mod.rs1
-rw-r--r--alacritty/src/config/ui_config.rs14
-rw-r--r--alacritty/src/input.rs30
4 files changed, 39 insertions, 8 deletions
diff --git a/alacritty/src/config/bindings.rs b/alacritty/src/config/bindings.rs
index dc648541..91fcd7a0 100644
--- a/alacritty/src/config/bindings.rs
+++ b/alacritty/src/config/bindings.rs
@@ -383,6 +383,8 @@ pub fn default_key_bindings() -> Vec<KeyBinding> {
Action::Esc("\x0c".into());
Tab, ModifiersState::SHIFT, ~BindingMode::VI, ~BindingMode::SEARCH;
Action::Esc("\x1b[Z".into());
+ Tab, ModifiersState::SHIFT|ModifiersState::LOGO, ~BindingMode::VI, ~BindingMode::SEARCH;
+ Action::Esc("\x1b[Z".into());
Back, ModifiersState::ALT, ~BindingMode::VI, ~BindingMode::SEARCH;
Action::Esc("\x1b\x7f".into());
Back, ModifiersState::SHIFT, ~BindingMode::VI, ~BindingMode::SEARCH;
diff --git a/alacritty/src/config/mod.rs b/alacritty/src/config/mod.rs
index 4a3c0ae9..8e834278 100644
--- a/alacritty/src/config/mod.rs
+++ b/alacritty/src/config/mod.rs
@@ -27,6 +27,7 @@ pub use crate::config::bindings::{
};
#[cfg(test)]
pub use crate::config::mouse::{ClickHandler, Mouse};
+pub use crate::config::ui_config::AltBehavior;
use crate::config::ui_config::UiConfig;
/// Maximum number of depth for the configuration file imports.
diff --git a/alacritty/src/config/ui_config.rs b/alacritty/src/config/ui_config.rs
index f05b243c..72d62c87 100644
--- a/alacritty/src/config/ui_config.rs
+++ b/alacritty/src/config/ui_config.rs
@@ -27,6 +27,13 @@ use crate::config::window::WindowConfig;
const URL_REGEX: &str = "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\
[^\u{0000}-\u{001F}\u{007F}-\u{009F}<>\"\\s{-}\\^⟨⟩`]+";
+#[derive(Deserialize, Debug, PartialEq)]
+pub enum AltBehavior {
+ NONE,
+ SEND_ESC,
+ TERMKEY,
+}
+
#[derive(ConfigDeserialize, Debug, PartialEq)]
pub struct UiConfig {
/// Font configuration.
@@ -41,7 +48,7 @@ pub struct UiConfig {
pub debug: Debug,
/// Send escape sequences using the alt key.
- pub alt_send_esc: bool,
+ pub alt_behavior: AltBehavior,
/// Live config reload.
pub live_config_reload: bool,
@@ -62,6 +69,8 @@ pub struct UiConfig {
/// Regex hints for interacting with terminal content.
pub hints: Hints,
+ pub logo_key_prefix: String,
+
/// Keybindings.
key_bindings: KeyBindings,
@@ -76,7 +85,7 @@ pub struct UiConfig {
impl Default for UiConfig {
fn default() -> Self {
Self {
- alt_send_esc: true,
+ alt_behavior: AltBehavior::SEND_ESC,
live_config_reload: true,
font: Default::default(),
window: Default::default(),
@@ -88,6 +97,7 @@ impl Default for UiConfig {
background_opacity: Default::default(),
bell: Default::default(),
colors: Default::default(),
+ logo_key_prefix: "\x1b[24;8~".into(),
draw_bold_text_with_bright_colors: Default::default(),
hints: Default::default(),
}
diff --git a/alacritty/src/input.rs b/alacritty/src/input.rs
index 7851b6e4..a5f9590b 100644
--- a/alacritty/src/input.rs
+++ b/alacritty/src/input.rs
@@ -9,6 +9,7 @@ use std::borrow::Cow;
use std::cmp::{max, min, Ordering};
use std::marker::PhantomData;
use std::time::{Duration, Instant};
+use log::{trace};
use glutin::dpi::PhysicalPosition;
use glutin::event::{
@@ -29,7 +30,7 @@ use alacritty_terminal::term::{ClipboardType, SizeInfo, Term, TermMode};
use alacritty_terminal::vi_mode::ViMotion;
use crate::clipboard::Clipboard;
-use crate::config::{Action, BindingMode, Config, Key, MouseAction, SearchAction, ViAction};
+use crate::config::{Action, BindingMode, Config, Key, MouseAction, SearchAction, ViAction, AltBehavior};
use crate::daemon::start_daemon;
use crate::display::hint::HintMatch;
use crate::display::window::Window;
@@ -723,6 +724,7 @@ impl<T: EventListener, A: ActionContext<T>> Processor<T, A> {
/// Process key input.
pub fn key_input(&mut self, input: KeyboardInput) {
+ trace!("Input {:?}\n", input);
// All key bindings are disabled while a hint is being selected.
if self.ctx.display().hint_state.active() {
*self.ctx.suppress_chars() = false;
@@ -792,10 +794,13 @@ impl<T: EventListener, A: ActionContext<T>> Processor<T, A> {
let utf8_len = c.len_utf8();
let mut all_bytes = Vec::new();
- let shift = self.ctx.modifiers().shift();
+ let mut shift = self.ctx.modifiers().shift();
let alt = self.ctx.modifiers().alt();
let ctrl = self.ctx.modifiers().ctrl();
let logo = self.ctx.modifiers().logo();
+ let termkey = alt && self.ctx.config().ui_config.alt_behavior == AltBehavior::TERMKEY;
+
+ trace!("Got Char {}", c as u32);
fn encode_extended_ctrl_char(c: char) -> bool {
return ! c.is_ascii_control()
@@ -804,11 +809,24 @@ impl<T: EventListener, A: ActionContext<T>> Processor<T, A> {
|| c == '\x07';
}
- if ((shift || alt || encode_extended_ctrl_char(c)) && ctrl) || logo {
+ if logo {
+ let prefix = &self.ctx.config().ui_config.logo_key_prefix;
+ all_bytes.append(&mut prefix.as_bytes().to_vec());
+ }
+
+ if ((shift || alt) && (ctrl || c.is_ascii_control())) || termkey {
+
+ let newshift = if c > 0x20.into() && c != 0x7f.into() {
+ // Really shift is only good for characters that don't have an
+ // associated shifted form.
+ false
+ } else {
+ shift
+ };
+
// Special, extended character code
let modifier_code =
- 1 + (shift as u32) + (alt as u32) * 2 + (ctrl as u32) * 4 + (logo as u32) * 8;
-
+ 1 + (newshift as u32) + (alt as u32) * 2 + (ctrl as u32) * 4;
let out = format!("\x1b[{};{}u", c as u32, modifier_code);
all_bytes.append(&mut out.into_bytes());
} else {
@@ -819,7 +837,7 @@ impl<T: EventListener, A: ActionContext<T>> Processor<T, A> {
c.encode_utf8(&mut char_bytes[..]);
}
- if self.ctx.config().ui_config.alt_send_esc
+ if self.ctx.config().ui_config.alt_behavior == AltBehavior::SEND_ESC
&& *self.ctx.received_count() == 0
&& alt
{