diff --git a/docs/docs/releases.md b/docs/docs/releases.md index 380fb370..e3a2a707 100644 --- a/docs/docs/releases.md +++ b/docs/docs/releases.md @@ -81,15 +81,6 @@ language: 'en' - `man 5 rio-bindings` - Key bindings reference and customization guide - Available in `extra/man/` directory with build instructions -### Breaking Changes - -- **Backspace key behavior**: Changed from sending DEL (`^?`, ASCII 127) to backspace (`^H`, ASCII 8) - - Updated termcap/terminfo files: `kbs=^H` instead of `kbs=^?` - - Updated XTGETTCAP response to return `^H` for `kbs` capability - - Fixes vim delete key issue when `TERM=xterm-256color` [#1169](https://github.com/raphamorim/rio/issues/1169) - - Aligns with xterm standard behavior for better compatibility - - Applications expecting DEL for backspace may need adjustment - ### Technical Details The performance optimizations in this release represent a significant architectural improvement to Rio's text rendering pipeline: diff --git a/frontends/rioterm/src/bindings/kitty_keyboard.rs b/frontends/rioterm/src/bindings/kitty_keyboard.rs index 96af9c22..b01c0557 100644 --- a/frontends/rioterm/src/bindings/kitty_keyboard.rs +++ b/frontends/rioterm/src/bindings/kitty_keyboard.rs @@ -344,7 +344,7 @@ impl SequenceBuilder { NamedKey::Enter => "13", NamedKey::Escape => "27", NamedKey::Space => "32", - NamedKey::Backspace => "8", + NamedKey::Backspace => "127", _ => "", }; diff --git a/frontends/rioterm/src/bindings/mod.rs b/frontends/rioterm/src/bindings/mod.rs index ad2985f6..5c516567 100644 --- a/frontends/rioterm/src/bindings/mod.rs +++ b/frontends/rioterm/src/bindings/mod.rs @@ -696,9 +696,9 @@ pub fn default_key_bindings( Key::Named(Delete), ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_KEYS; Action::Esc("\x1b[3~".into()); Key::Named(PageUp), ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_KEYS; Action::Esc("\x1b[5~".into()); Key::Named(PageDown), ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_KEYS; Action::Esc("\x1b[6~".into()); - Key::Named(Backspace), ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::ALL_KEYS_AS_ESC; Action::Esc("\x08".into()); - Key::Named(Backspace), ModifiersState::ALT, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_KEYS; Action::Esc("\x1b\x08".into()); - Key::Named(Backspace), ModifiersState::SHIFT, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_KEYS; Action::Esc("\x08".into()); + Key::Named(Backspace), ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::ALL_KEYS_AS_ESC; Action::Esc("\x7f".into()); + Key::Named(Backspace), ModifiersState::ALT, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_KEYS; Action::Esc("\x1b\x7f".into()); + Key::Named(Backspace), ModifiersState::SHIFT, ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_KEYS; Action::Esc("\x7f".into()); Key::Named(F1), ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_KEYS; Action::Esc("\x1bOP".into()); Key::Named(F2), ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_KEYS; Action::Esc("\x1bOQ".into()); Key::Named(F3), ~BindingMode::VI, ~BindingMode::SEARCH, ~BindingMode::ALL_KEYS_AS_ESC, ~BindingMode::DISAMBIGUATE_KEYS; Action::Esc("\x1bOR".into()); diff --git a/misc/rio.termcap b/misc/rio.termcap index a24883ad..0285cc33 100644 --- a/misc/rio.termcap +++ b/misc/rio.termcap @@ -12,7 +12,7 @@ rio:\ :ct=\E[3g:dc=\E[P:dl=\E[M:do=\n:ds=\E]2;\007:ec=\E[%dX:\ :ei=\E[4l:fs=^G:ho=\E[H:im=\E[4h:k1=\EOP:k2=\EOQ:k3=\EOR:\ :k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:\ - :k9=\E[20~:kD=\E[3~:kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=^H:\ + :k9=\E[20~:kD=\E[3~:kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=\177:\ :kd=\EOB:ke=\E[?1l:kh=\EOH:kl=\EOD:kr=\EOC:ks=\E[?1h:\ :ku=\EOA:le=^H:mb=\E[5m:md=\E[1m:me=\E[0m:mh=\E[2m:\ :mr=\E[7m:nd=\E[C:rc=\E8:sc=\E7:se=\E[27m:sf=\n:so=\E[7m:\ diff --git a/misc/rio.terminfo b/misc/rio.terminfo index 13e38db4..294cc18c 100644 --- a/misc/rio.terminfo +++ b/misc/rio.terminfo @@ -41,7 +41,7 @@ rio+base, sgr0=\E(B\E[m, smacs=\E(0, smam=\E[?7h, smir=\E[4h, smkx=\E[?1h\E=, smm=\E[?1034h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd, E3=\E[3J, - kbs=^H, + kbs=^?, ritm=\E[23m, sitm=\E[3m, mc5i, mc0=\E[i, mc4=\E[4i, mc5=\E[5i, diff --git a/rio-backend/src/performer/handler.rs b/rio-backend/src/performer/handler.rs index 2c141268..3de221e1 100644 --- a/rio-backend/src/performer/handler.rs +++ b/rio-backend/src/performer/handler.rs @@ -1588,7 +1588,7 @@ fn get_termcap_capability(name: &str) -> Option { // Navigation keys "khome" | "kh" => Some("\\EOH".to_string()), "kend" => Some("\\EOF".to_string()), - "kbs" | "kb" => Some("^H".to_string()), + "kbs" | "kb" => Some("\x7f".to_string()), "kdch1" | "kD" => Some("\\E[3~".to_string()), "kich1" | "kI" => Some("\\E[2~".to_string()), "knp" | "kN" => Some("\\E[6~".to_string()),