diff options
| author | Thomas Linford <tlinford@users.noreply.github.com> | 2022-03-09 21:21:15 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-09 21:21:15 +0100 |
| commit | 7e008bb0396eb130c4bc4fb62240566bf6feda9f (patch) | |
| tree | cf2d42d56bab931a2d03fee38c31ffb21007626f | |
| parent | docs(changelog): replace wide chars under cursor (diff) | |
| download | sl0ppij-7e008bb0396eb130c4bc4fb62240566bf6feda9f.tar.gz sl0ppij-7e008bb0396eb130c4bc4fb62240566bf6feda9f.tar.xz sl0ppij-7e008bb0396eb130c4bc4fb62240566bf6feda9f.zip | |
fix(compatibility): home and end in cursor keys mode (#1190)
| -rw-r--r-- | Cargo.lock | 171 | ||||
| -rw-r--r-- | zellij-client/Cargo.toml | 3 | ||||
| -rw-r--r-- | zellij-client/src/stdin_handler.rs | 26 | ||||
| -rw-r--r-- | zellij-server/src/panes/terminal_pane.rs | 13 |
4 files changed, 22 insertions, 191 deletions
@@ -667,27 +667,6 @@ dependencies = [ ] [[package]] -name = "dirs" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3" -dependencies = [ - "cfg-if 0.1.10", - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] name = "dirs-sys-next" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -919,24 +898,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" dependencies = [ "cfg-if 1.0.0", "libc", - "wasi 0.10.0+wasi-snapshot-preview1", + "wasi", ] [[package]] @@ -1362,16 +1330,6 @@ dependencies = [ ] [[package]] -name = "nom" -version = "5.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" -dependencies = [ - "memchr", - "version_check", -] - -[[package]] name = "ntapi" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1506,44 +1464,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_shared", -] - -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator", - "phf_shared", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared", - "rand 0.7.3", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher", -] - -[[package]] name = "pin-project-lite" version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1669,38 +1589,14 @@ dependencies = [ [[package]] name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc 0.2.0", - "rand_pcg", -] - -[[package]] -name = "rand" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" dependencies = [ "libc", - "rand_chacha 0.3.1", + "rand_chacha", "rand_core 0.6.3", - "rand_hc 0.3.1", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", + "rand_hc", ] [[package]] @@ -1730,29 +1626,11 @@ checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" [[package]] name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ - "getrandom 0.2.3", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", + "getrandom", ] [[package]] @@ -1765,15 +1643,6 @@ dependencies = [ ] [[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] name = "rayon" version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1837,7 +1706,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" dependencies = [ - "getrandom 0.2.3", + "getrandom", "redox_syscall 0.2.10", ] @@ -2002,12 +1871,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ad1d488a557b235fc46dae55512ffbfc429d2482b08b4d9435ab07384ca8aec" [[package]] -name = "siphasher" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533494a8f9b724d33625ab53c6c4800f7cc445895924a8ef649222dcb76e938b" - -[[package]] name = "slab" version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2199,19 +2062,6 @@ dependencies = [ ] [[package]] -name = "terminfo" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76971977e6121664ec1b960d1313aacfa75642adc93b9d4d53b247bd4cb1747e" -dependencies = [ - "dirs", - "fnv", - "nom", - "phf", - "phf_codegen", -] - -[[package]] name = "termion" version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2267,7 +2117,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", - "wasi 0.10.0+wasi-snapshot-preview1", + "wasi", "winapi", ] @@ -2476,12 +2326,6 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" version = "0.10.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" @@ -2735,7 +2579,7 @@ dependencies = [ "bincode", "byteorder", "generational-arena", - "getrandom 0.2.3", + "getrandom", "libc", "serde", "thiserror", @@ -2864,7 +2708,6 @@ dependencies = [ "insta", "log", "mio", - "terminfo", "zellij-tile", "zellij-utils", ] diff --git a/zellij-client/Cargo.toml b/zellij-client/Cargo.toml index e4134143..8da1db87 100644 --- a/zellij-client/Cargo.toml +++ b/zellij-client/Cargo.toml @@ -13,8 +13,9 @@ mio = { version = "0.7.11", features = ['os-ext'] } zellij-utils = { path = "../zellij-utils/", version = "0.26.0" } zellij-tile = { path = "../zellij-tile/", version = "0.26.0" } log = "0.4.14" -terminfo = "0.7.3" [dev-dependencies] insta = "1.6.0" +[features] + diff --git a/zellij-client/src/stdin_handler.rs b/zellij-client/src/stdin_handler.rs index 3abb497a..965100f8 100644 --- a/zellij-client/src/stdin_handler.rs +++ b/zellij-client/src/stdin_handler.rs @@ -1,34 +1,10 @@ use crate::os_input_output::ClientOsApi; use crate::InputInstruction; -use std::collections::HashMap; -use terminfo::{capability as cap, Database as TerminfoDatabase}; use termion::input::TermReadEventsAndRaw; use zellij_utils::channels::SenderWithContext; use zellij_utils::input::mouse::MouseEvent; use zellij_utils::termion; -fn keys_to_adjust() -> HashMap<Vec<u8>, Vec<u8>> { - let mut keys_to_adjust = HashMap::new(); - if let Ok(terminfo_db) = TerminfoDatabase::from_env() { - // TODO: there might be more adjustments we can do here, but I held off on them because I'm - // not sure they're a thing in these modern times. It should be pretty straightforward to - // implement them if they are... - if let Some(adjusted_home_key) = terminfo_db - .get::<cap::KeyHome>() - .and_then(|k| k.expand().to_vec().ok()) - { - keys_to_adjust.insert(vec![27, 91, 72], adjusted_home_key); - } - if let Some(adjusted_end_key) = terminfo_db - .get::<cap::KeyEnd>() - .and_then(|k| k.expand().to_vec().ok()) - { - keys_to_adjust.insert(vec![27, 91, 70], adjusted_end_key); - } - } - keys_to_adjust -} - pub(crate) fn stdin_loop( os_input: Box<dyn ClientOsApi>, send_input_instructions: SenderWithContext<InputInstruction>, @@ -38,7 +14,6 @@ pub(crate) fn stdin_loop( let bracketed_paste_start = termion::event::Event::Unsupported(vec![27, 91, 50, 48, 48, 126]); // \u{1b}[200~ let bracketed_paste_end = termion::event::Event::Unsupported(vec![27, 91, 50, 48, 49, 126]); // \u{1b}[201~ let csi_mouse_sgr_start = vec![27, 91, 60]; - let adjusted_keys = keys_to_adjust(); for key_result in os_input.get_stdin_reader().events_and_raw() { let (key_event, mut raw_bytes) = key_result.unwrap(); @@ -59,7 +34,6 @@ pub(crate) fn stdin_loop( continue; } - let raw_bytes = adjusted_keys.get(&raw_bytes).cloned().unwrap_or(raw_bytes); if let termion::event::Event::Mouse(me) = key_event { let mouse_event = zellij_utils::input::mouse::MouseEvent::from(me); if let MouseEvent::Hold(_) = mouse_event { diff --git a/zellij-server/src/panes/terminal_pane.rs b/zellij-server/src/panes/terminal_pane.rs index b6ff568c..eca76986 100644 --- a/zellij-server/src/panes/terminal_pane.rs +++ b/zellij-server/src/panes/terminal_pane.rs @@ -138,6 +138,19 @@ impl Pane for TerminalPane { return "OA".as_bytes().to_vec(); } } + + [27, 91, 72] => { + // home key + if self.grid.cursor_key_mode { + return vec![27, 79, 72]; // ESC O H + } + } + [27, 91, 70] => { + // end key + if self.grid.cursor_key_mode { + return vec![27, 79, 70]; // ESC O F + } + } [27, 91, 66] => { // down arrow if self.grid.cursor_key_mode { |
