diff options
author | Aram Drevekenin <aram@poor.dev> | 2022-03-23 09:08:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-23 09:08:35 +0100 |
commit | 7141779153743cb98771c6582a1feff32ec2e494 (patch) | |
tree | bf30b37263858d5e166caa226ffadbb1e53c8c0f | |
parent | d394617a3d13e5069258042cce466c9eb43d0c14 (diff) |
chore(deps): move from termion to termwiz for STDIN handling (#1249)
* fix(deps): switch from termion to termwiz for STDIN parsing
* style(fmt): clippy
* style(fmt): moar clippy
* style(fmt): rustfmt
* fix(tests): e2e mouse press
* style(fmt): rustfmt
* bring back polling
* fmt fmt fmt
* fix some e2e flakiness
-rw-r--r-- | Cargo.lock | 378 | ||||
-rw-r--r-- | src/tests/e2e/cases.rs | 29 | ||||
-rw-r--r-- | zellij-client/src/input_handler.rs | 70 | ||||
-rw-r--r-- | zellij-client/src/lib.rs | 5 | ||||
-rw-r--r-- | zellij-client/src/os_input_output.rs | 24 | ||||
-rw-r--r-- | zellij-client/src/stdin_handler.rs | 92 | ||||
-rw-r--r-- | zellij-client/src/unit/input_handler_tests.rs | 24 | ||||
-rw-r--r-- | zellij-utils/Cargo.toml | 3 | ||||
-rw-r--r-- | zellij-utils/src/input/mod.rs | 72 | ||||
-rw-r--r-- | zellij-utils/src/input/mouse.rs | 88 | ||||
-rw-r--r-- | zellij-utils/src/lib.rs | 2 |
11 files changed, 581 insertions, 206 deletions
diff --git a/Cargo.lock b/Cargo.lock index 32664a5b0..5e2cab67d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -144,7 +144,7 @@ dependencies = [ "futures-lite", "libc", "once_cell", - "signal-hook", + "signal-hook 0.3.13", "winapi", ] @@ -253,6 +253,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] name = "blocking" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -424,6 +433,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] +name = "cpufeatures" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +dependencies = [ + "libc", +] + +[[package]] name = "cranelift-bforest" version = "0.68.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -645,6 +663,15 @@ dependencies = [ ] [[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] name = "directories-next" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -655,6 +682,27 @@ 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.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] name = "dirs-sys-next" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -729,6 +777,17 @@ dependencies = [ ] [[package]] +name = "filedescriptor" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7199d965852c3bac31f779ef99cbb4537f80e952e2d6aa0ffeb30cce00f4f46e" +dependencies = [ + "libc", + "thiserror", + "winapi", +] + +[[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -865,6 +924,16 @@ dependencies = [ ] [[package]] +name = "generic-array" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] name = "getopts" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -875,13 +944,24 @@ 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.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77" dependencies = [ "cfg-if 1.0.0", "libc", - "wasi", + "wasi 0.10.0+wasi-snapshot-preview1", ] [[package]] @@ -955,6 +1035,12 @@ dependencies = [ ] [[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] name = "highway" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1230,6 +1316,12 @@ dependencies = [ ] [[package]] +name = "memmem" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a64a92489e2744ce060c349162be1c5f33c6969234104dbd99ddb5feb08b8c15" + +[[package]] name = "memoffset" version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1329,6 +1421,16 @@ 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.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1338,6 +1440,17 @@ dependencies = [ ] [[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] name = "num-integer" version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1367,12 +1480,6 @@ dependencies = [ ] [[package]] -name = "numtoa" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef" - -[[package]] name = "object" version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1398,6 +1505,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" [[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] name = "openssl-sys" version = "0.9.72" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1472,6 +1585,53 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] +name = "pest" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +dependencies = [ + "ucd-trie", +] + +[[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.8" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1585,17 +1745,41 @@ 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", + "rand_pcg", +] + +[[package]] +name = "rand" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", + "rand_chacha 0.3.1", "rand_core 0.6.3", ] [[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", +] + +[[package]] +name = "rand_chacha" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" @@ -1621,11 +1805,38 @@ 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", + "getrandom 0.2.5", +] + +[[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", +] + +[[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]] @@ -1678,21 +1889,12 @@ dependencies = [ ] [[package]] -name = "redox_termios" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8440d8acb4fd3d277125b4bd01a6f38aee8d814b3b5fc09b3f2b825d37d3fe8f" -dependencies = [ - "redox_syscall 0.2.11", -] - -[[package]] name = "redox_users" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7776223e2696f1aa4c6b0170e83212f47296a00424305117d013dfe86fb0fe55" dependencies = [ - "getrandom", + "getrandom 0.2.5", "redox_syscall 0.2.11", "thiserror", ] @@ -1771,6 +1973,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[package]] name = "serde" version = "1.0.136" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1833,6 +2053,29 @@ dependencies = [ ] [[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer", + "cfg-if 1.0.0", + "cpufeatures", + "digest", + "opaque-debug", +] + +[[package]] +name = "signal-hook" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e31d442c16f047a671b5a71e2161d6e68814012b7f5379d269ebd915fac2729" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] name = "signal-hook" version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1858,6 +2101,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e24979f63a11545f5f2c60141afe249d4f19f84581ea2138065e400941d83d3" [[package]] +name = "siphasher" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" + +[[package]] name = "slab" version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2084,15 +2333,57 @@ dependencies = [ ] [[package]] -name = "termion" -version = "1.5.6" +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 = "termios" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "077185e2eac69c3f8379a4298e1e07cd36beb962290d4a51199acf0fdc10607e" +checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b" dependencies = [ "libc", - "numtoa", - "redox_syscall 0.2.11", - "redox_termios", +] + +[[package]] +name = "termwiz" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ef6892cc0348a9b3b8c377addba91e0f6365863d92354bf27559dca81ee8c5" +dependencies = [ + "anyhow", + "base64", + "bitflags", + "cfg-if 1.0.0", + "filedescriptor", + "hex", + "lazy_static", + "libc", + "log", + "memmem", + "num-derive", + "num-traits", + "ordered-float", + "regex", + "semver", + "sha2", + "signal-hook 0.1.17", + "terminfo", + "termios", + "thiserror", + "ucd-trie", + "unicode-segmentation", + "vtparse", + "winapi", ] [[package]] @@ -2150,7 +2441,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", - "wasi", + "wasi 0.10.0+wasi-snapshot-preview1", "winapi", ] @@ -2218,6 +2509,12 @@ dependencies = [ ] [[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + +[[package]] name = "typetag" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2242,6 +2539,12 @@ dependencies = [ ] [[package]] +name = "ucd-trie" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" + +[[package]] name = "unicode-bidi" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2355,6 +2658,15 @@ dependencies = [ ] [[package]] +name = "vtparse" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f41c9314c4dde1f43dd0c46c67bb5ae73850ce11eebaf7d8b912e178bda5401" +dependencies = [ + "utf8parse", +] + +[[package]] name = "waker-fn" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2362,6 +2674,12 @@ 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" @@ -2615,7 +2933,7 @@ dependencies = [ "bincode", "byteorder", "generational-arena", - "getrandom", + "getrandom 0.2.5", "libc", "serde", "thiserror", @@ -2819,11 +3137,11 @@ dependencies = [ "serde", "serde_json", "serde_yaml", - "signal-hook", + "signal-hook 0.3.13", "strip-ansi-escapes", "strum", "tempfile", - "termion", + "termwiz", "thiserror", "unicode-width", "url", diff --git a/src/tests/e2e/cases.rs b/src/tests/e2e/cases.rs index 8bb4d8980..19579f55a 100644 --- a/src/tests/e2e/cases.rs +++ b/src/tests/e2e/cases.rs @@ -58,15 +58,16 @@ pub const BRACKETED_PASTE_START: [u8; 6] = [27, 91, 50, 48, 48, 126]; // \u{1b}[ pub const BRACKETED_PASTE_END: [u8; 6] = [27, 91, 50, 48, 49, 126]; // \u{1b}[201 pub const SLEEP: [u8; 0] = []; -// simplified, slighty adapted version of alacritty mouse reporting code -pub fn normal_mouse_report(position: Position, button: u8) -> Vec<u8> { +pub fn sgr_mouse_report(position: Position, button: u8) -> Vec<u8> { + // button: (release is with lower case m, not supported here yet) + // 0 => left click + // 2 => right click + // 64 => scroll up + // 65 => scroll down let Position { line, column } = position; - - let mut command = vec![b'\x1b', b'[', b'M', 32 + button]; - command.push(32 + 1 + column.0 as u8); - command.push(32 + 1 + line.0 as u8); - - command + format!("\u{1b}[<{};{};{}M", button, column.0, line.0) + .as_bytes() + .to_vec() } // All the E2E tests are marked as "ignored" so that they can be run separately from the normal @@ -247,7 +248,9 @@ pub fn scrolling_inside_a_pane() { write!(&mut content_to_send, "{:0<58}", "line19 ").unwrap(); write!(&mut content_to_send, "{:0<57}", "line20 ").unwrap(); + remote_terminal.send_key(&BRACKETED_PASTE_START); remote_terminal.send_key(content_to_send.as_bytes()); + remote_terminal.send_key(&BRACKETED_PASTE_END); step_is_complete = true; } @@ -1030,7 +1033,7 @@ fn focus_pane_with_mouse() { instruction: |mut remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; if remote_terminal.cursor_position_is(63, 2) && remote_terminal.tip_appears() { - remote_terminal.send_key(&normal_mouse_report(Position::new(5, 2), 0)); + remote_terminal.send_key(&sgr_mouse_report(Position::new(5, 2), 0)); step_is_complete = true; } step_is_complete @@ -1121,7 +1124,7 @@ pub fn scrolling_inside_a_pane_with_mouse() { let mut step_is_complete = false; if remote_terminal.cursor_position_is(118, 20) { // all lines have been written to the pane - remote_terminal.send_key(&normal_mouse_report(Position::new(2, 64), 64)); + remote_terminal.send_key(&sgr_mouse_report(Position::new(2, 64), 64)); step_is_complete = true; } step_is_complete @@ -1638,8 +1641,10 @@ pub fn bracketed_paste() { remote_terminal.send_key(&BRACKETED_PASTE_START); remote_terminal.send_key(&TAB_MODE); remote_terminal.send_key(&NEW_TAB_IN_TAB_MODE); + remote_terminal.send_key("a".as_bytes()); + remote_terminal.send_key("b".as_bytes()); + remote_terminal.send_key("c".as_bytes()); remote_terminal.send_key(&BRACKETED_PASTE_END); - remote_terminal.send_key("abc".as_bytes()); step_is_complete = true; } step_is_complete @@ -1651,7 +1656,7 @@ pub fn bracketed_paste() { name: "Wait for terminal to render sent keys", instruction: |remote_terminal: RemoteTerminal| -> bool { let mut step_is_complete = false; - if remote_terminal.cursor_position_is(9, 2) { + if remote_terminal.snapshot_contains("abc") { // text has been entered into the only terminal pane step_is_complete = true; } diff --git a/zellij-client/src/input_handler.rs b/zellij-client/src/input_handler.rs index 020c55165..250485eb9 100644 --- a/zellij-client/src/input_handler.rs +++ b/zellij-client/src/input_handler.rs @@ -5,7 +5,8 @@ use zellij_utils::{ mouse::{MouseButton, MouseEvent}, options::Options, }, - termion, zellij_tile, + termwiz::input::InputEvent, + zellij_tile, }; use crate::{ @@ -14,7 +15,7 @@ use crate::{ use zellij_utils::{ channels::{Receiver, SenderWithContext, OPENCALLS}, errors::{ContextType, ErrorContext}, - input::{actions::Action, cast_termion_key, config::Config, keybinds::Keybinds}, + input::{actions::Action, cast_termwiz_key, config::Config, keybinds::Keybinds}, ipc::{ClientToServerMsg, ExitReason}, }; @@ -32,6 +33,7 @@ struct InputHandler { send_client_instructions: SenderWithContext<ClientInstruction>, should_exit: bool, receive_input_instructions: Receiver<(InputInstruction, ErrorContext)>, + holding_mouse: bool, } impl InputHandler { @@ -54,15 +56,15 @@ impl InputHandler { send_client_instructions, should_exit: false, receive_input_instructions, + holding_mouse: false, } } - /// Main input event loop. Interprets the terminal [`Event`](termion::event::Event)s + /// Main input event loop. Interprets the terminal Event /// as [`Action`]s according to the current [`InputMode`], and dispatches those actions. fn handle_input(&mut self) { let mut err_ctx = OPENCALLS.with(|ctx| *ctx.borrow()); err_ctx.add_call(ContextType::StdinHandler); - let alt_left_bracket = vec![27, 91]; let bracketed_paste_start = vec![27, 91, 50, 48, 48, 126]; // \u{1b}[200~ let bracketed_paste_end = vec![27, 91, 50, 48, 49, 126]; // \u{1b}[201~ if self.options.mouse_mode.unwrap_or(true) { @@ -73,35 +75,27 @@ impl InputHandler { break; } match self.receive_input_instructions.recv() { - Ok((InputInstruction::KeyEvent(event, raw_bytes), _error_context)) => { - match event { - termion::event::Event::Key(key) => { - let key = cast_termion_key(key); + Ok((InputInstruction::KeyEvent(input_event, raw_bytes), _error_context)) => { + match input_event { + InputEvent::Key(key_event) => { + let key = cast_termwiz_key(key_event, &raw_bytes); self.handle_key(&key, raw_bytes); } - termion::event::Event::Mouse(me) => { - |