From dc8ab0d1e4bc79931c859e2ae145fd90d732f36a Mon Sep 17 00:00:00 2001 From: Reilly Wood Date: Sat, 30 Mar 2024 15:51:43 -0700 Subject: [PATCH 1/5] WIP: termwiz, icons, colour!!!! --- Cargo.lock | 1054 ++- Cargo.toml | 9 +- embed/script.js | 24 +- src/main.rs | 870 +- src/snapshots/bash_starship_prompt.input | 2 - .../escape_artist__bash_starship_prompt.snap | 393 - src/snapshots/escape_artist__nu_prompt.input | 16 - src/snapshots/escape_artist__nu_prompt.snap | 8213 ----------------- src/snapshots/escape_artist__set_bold.snap | 16 - 9 files changed, 1064 insertions(+), 9533 deletions(-) delete mode 100644 src/snapshots/bash_starship_prompt.input delete mode 100644 src/snapshots/escape_artist__bash_starship_prompt.snap delete mode 100644 src/snapshots/escape_artist__nu_prompt.input delete mode 100644 src/snapshots/escape_artist__nu_prompt.snap delete mode 100644 src/snapshots/escape_artist__set_bold.snap diff --git a/Cargo.lock b/Cargo.lock index c7a9962..3d9a530 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,24 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "ansi_colours" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a1558bd2075d341b9ca698ec8eb6fcc55a746b1fc4255585aad5b141d918a80" +dependencies = [ + "rgb", +] + [[package]] name = "anstream" version = "0.2.6" @@ -48,11 +66,17 @@ version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + [[package]] name = "arrayvec" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "async-trait" @@ -62,9 +86,15 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.57", ] +[[package]] +name = "atomic" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" + [[package]] name = "autocfg" version = "1.1.0" @@ -139,7 +169,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.57", ] [[package]] @@ -148,6 +178,21 @@ version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + [[package]] name = "bitflags" version = "1.3.2" @@ -160,6 +205,19 @@ version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +[[package]] +name = "blake3" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -169,6 +227,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bytemuck" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" + [[package]] name = "byteorder" version = "1.4.3" @@ -183,9 +247,9 @@ checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "cc" -version = "1.0.79" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" [[package]] name = "cfg-if" @@ -226,7 +290,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.57", ] [[package]] @@ -251,16 +315,10 @@ dependencies = [ ] [[package]] -name = "console" -version = "0.15.5" +name = "constant_time_eq" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" -dependencies = [ - "encode_unicode", - "lazy_static", - "libc", - "windows-sys 0.42.0", -] +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" [[package]] name = "cpufeatures" @@ -306,12 +364,28 @@ dependencies = [ "typenum", ] +[[package]] +name = "csscolorparser" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb2a7d3066da2de787b7f032c736763eb7ae5d355f81a68bab2675a96008b0bf" +dependencies = [ + "lab", + "phf", +] + [[package]] name = "data-encoding" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" +[[package]] +name = "deltae" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5729f5117e208430e437df2f4843f5e5952997175992d1414f94c57d61e270b4" + [[package]] name = "digest" version = "0.10.6" @@ -323,60 +397,78 @@ dependencies = [ ] [[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "either" -version = "1.8.1" +name = "directories" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +dependencies = [ + "dirs-sys 0.4.1", +] [[package]] -name = "encode_unicode" -version = "0.3.6" +name = "dirs" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys 0.3.7", +] [[package]] -name = "equivalent" -version = "1.0.1" +name = "dirs-sys" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] [[package]] -name = "errno" -version = "0.3.1" +name = "dirs-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ - "errno-dragonfly", "libc", + "option-ext", + "redox_users", "windows-sys 0.48.0", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "cc", "libc", + "windows-sys 0.52.0", ] [[package]] name = "escape-artist" version = "0.5.10" dependencies = [ + "ansi_colours", "anyhow", "axum", "clap", "crossterm", - "insta", - "itertools", + "iconify", "mime_guess", "open", "portable-pty", @@ -384,12 +476,36 @@ dependencies = [ "rust-embed", "serde", "serde_json", - "serde_yaml", "signal-hook", + "termwiz", "tokio", - "vte", ] +[[package]] +name = "euclid" +version = "0.22.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f253bc5c813ca05792837a0ff4b3a580336b224512d48f7eda1d7dd9210787" +dependencies = [ + "num-traits", +] + +[[package]] +name = "fancy-regex" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" +dependencies = [ + "bit-set", + "regex", +] + +[[package]] +name = "fastrand" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" + [[package]] name = "filedescriptor" version = "0.8.2" @@ -401,6 +517,18 @@ dependencies = [ "winapi", ] +[[package]] +name = "finl_unicode" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + [[package]] name = "fnv" version = "1.0.7" @@ -409,9 +537,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -469,9 +597,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "libc", @@ -490,19 +618,13 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.2.2", + "indexmap", "slab", "tokio", "tokio-util", "tracing", ] -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - [[package]] name = "hashbrown" version = "0.14.3" @@ -530,6 +652,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "http" version = "1.0.0" @@ -612,23 +740,29 @@ dependencies = [ ] [[package]] -name = "idna" -version = "0.3.0" +name = "iconify" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "d31f2e13b466d0385313e527789d38bda0b4ae0a9a31a4c92b74cb39f09eb508" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "blake3", + "directories", + "hex", + "proc-macro2", + "quote", + "syn 2.0.57", + "ureq", + "url", ] [[package]] -name = "indexmap" -version = "1.9.3" +name = "idna" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ - "autocfg", - "hashbrown 0.12.3", + "unicode-bidi", + "unicode-normalization", ] [[package]] @@ -638,21 +772,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520" dependencies = [ "equivalent", - "hashbrown 0.14.3", -] - -[[package]] -name = "insta" -version = "1.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a28d25139df397cbca21408bb742cf6837e04cdbebf1b07b760caf971d6a972" -dependencies = [ - "console", - "lazy_static", - "linked-hash-map", - "serde", - "similar", - "yaml-rust", + "hashbrown", ] [[package]] @@ -692,7 +812,7 @@ checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes", - "rustix", + "rustix 0.37.7", "windows-sys 0.48.0", ] @@ -706,21 +826,18 @@ dependencies = [ "once_cell", ] -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +[[package]] +name = "lab" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf36173d4167ed999940f804952e6b08197cae5ad5d572eb4db150ce8ad5d58f" + [[package]] name = "lazy_static" version = "1.4.0" @@ -734,10 +851,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] -name = "linked-hash-map" -version = "0.5.6" +name = "libredox" +version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall 0.4.1", +] [[package]] name = "linux-raw-sys" @@ -745,6 +867,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + [[package]] name = "lock_api" version = "0.4.9" @@ -764,6 +892,16 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "mac_address" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4863ee94f19ed315bf3bc00299338d857d4b5bc856af375cc97d237382ad3856" +dependencies = [ + "nix 0.23.2", + "winapi", +] + [[package]] name = "matchit" version = "0.7.0" @@ -776,6 +914,12 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +[[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" @@ -785,6 +929,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + [[package]] name = "mime" version = "0.3.17" @@ -801,6 +954,12 @@ dependencies = [ "unicase", ] +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "mio" version = "0.8.6" @@ -813,6 +972,19 @@ dependencies = [ "windows-sys 0.45.0", ] +[[package]] +name = "nix" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" +dependencies = [ + "bitflags 1.3.2", + "cc", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + [[package]] name = "nix" version = "0.25.1" @@ -823,10 +995,53 @@ dependencies = [ "bitflags 1.3.2", "cfg-if", "libc", - "memoffset", + "memoffset 0.6.5", + "pin-utils", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.7.1", "pin-utils", ] +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[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 1.0.109", +] + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.15.0" @@ -854,6 +1069,21 @@ dependencies = [ "pathdiff", ] +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-float" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e" +dependencies = [ + "num-traits", +] + [[package]] name = "parking_lot" version = "0.12.1" @@ -872,7 +1102,7 @@ checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "smallvec", "windows-sys 0.45.0", ] @@ -885,41 +1115,138 @@ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] -name = "pin-project" -version = "1.0.12" +name = "pest" +version = "2.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +checksum = "56f8023d0fb78c8e03784ea1c7f3fa36e68a723138990b8d5a47d916b651e7a8" dependencies = [ - "pin-project-internal", + "memchr", + "thiserror", + "ucd-trie", ] [[package]] -name = "pin-project-internal" -version = "1.0.12" +name = "pest_derive" +version = "2.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +checksum = "b0d24f72393fd16ab6ac5738bc33cdb6a9aa73f8b902e8fe29cf4e67d7dd1026" dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc17e2a6c7d0a492f0158d7a4bd66cc17280308bbaff78d5bef566dca35ab80" +dependencies = [ + "pest", + "pest_meta", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.57", ] [[package]] -name = "pin-project-lite" -version = "0.2.9" +name = "pest_meta" +version = "2.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "934cd7631c050f4674352a6e835d5f6711ffbfb9345c2fc0107155ac495ae293" +dependencies = [ + "once_cell", + "pest", + "sha2", +] [[package]] -name = "pin-utils" -version = "0.1.0" +name = "phf" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.57", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "portable-pty" @@ -934,7 +1261,7 @@ dependencies = [ "lazy_static", "libc", "log", - "nix", + "nix 0.25.1", "serial", "shared_library", "shell-words", @@ -950,18 +1277,18 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro2" -version = "1.0.55" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d0dd4be24fcdcfeaa12a432d588dc59bbad6cad3510c67e74a2b6b2fc950564" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.26" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -1005,6 +1332,79 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + +[[package]] +name = "rgb" +version = "0.8.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "rust-embed" version = "8.2.0" @@ -1028,7 +1428,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.13", + "syn 2.0.57", "walkdir", ] @@ -1052,10 +1452,54 @@ dependencies = [ "errno", "io-lifetimes", "libc", - "linux-raw-sys", + "linux-raw-sys 0.3.1", "windows-sys 0.45.0", ] +[[package]] +name = "rustix" +version = "0.38.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" +dependencies = [ + "bitflags 2.4.2", + "errno", + "libc", + "linux-raw-sys 0.4.13", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99008d7ad0bbbea527ec27bddbc0e432c5b87d8175178cee68d2eec9c4a1813c" +dependencies = [ + "log", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd36cc4259e3e4514335c4a138c6b43171a8d61d8f5c9348f9fc7529416f247" + +[[package]] +name = "rustls-webpki" +version = "0.102.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.12" @@ -1083,6 +1527,24 @@ version = "1.1.0" 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.159" @@ -1100,7 +1562,7 @@ checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.57", ] [[package]] @@ -1135,19 +1597,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_yaml" -version = "0.9.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9d684e3ec7de3bf5466b32bd75303ac16f0736426e5a4e0d6e489559ce1249c" -dependencies = [ - "indexmap 1.9.3", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - [[package]] name = "serial" version = "0.4.0" @@ -1177,7 +1626,7 @@ dependencies = [ "ioctl-rs", "libc", "serial-core", - "termios", + "termios 0.2.2", ] [[package]] @@ -1259,10 +1708,10 @@ dependencies = [ ] [[package]] -name = "similar" -version = "2.2.1" +name = "siphasher" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "slab" @@ -1299,12 +1748,24 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "strsim" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + [[package]] name = "syn" version = "1.0.109" @@ -1318,9 +1779,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.13" +version = "2.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" +checksum = "11a6ae1e52eb25aab8f3fb9fca13be982a373b8f1157ca14b897a825ba4a2d35" dependencies = [ "proc-macro2", "quote", @@ -1333,6 +1794,31 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand", + "rustix 0.38.32", + "windows-sys 0.52.0", +] + +[[package]] +name = "terminfo" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "666cd3a6681775d22b200409aad3b089c5b99fb11ecdd8a204d9d62f8148498f" +dependencies = [ + "dirs", + "fnv", + "nom", + "phf", + "phf_codegen", +] + [[package]] name = "termios" version = "0.2.2" @@ -1342,6 +1828,59 @@ dependencies = [ "libc", ] +[[package]] +name = "termios" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b" +dependencies = [ + "libc", +] + +[[package]] +name = "termwiz" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a75313e21da5d4406ea31402035b3b97aa74c04356bdfafa5d1043ab4e551d1" +dependencies = [ + "anyhow", + "base64", + "bitflags 2.4.2", + "fancy-regex", + "filedescriptor", + "finl_unicode", + "fixedbitset", + "hex", + "lazy_static", + "libc", + "log", + "memmem", + "nix 0.26.4", + "num-derive", + "num-traits", + "ordered-float", + "pest", + "pest_derive", + "phf", + "semver", + "sha2", + "signal-hook", + "siphasher", + "tempfile", + "terminfo", + "termios 0.3.3", + "thiserror", + "ucd-trie", + "unicode-segmentation", + "vtparse", + "wezterm-bidi", + "wezterm-blob-leases", + "wezterm-color-types", + "wezterm-dynamic", + "wezterm-input-types", + "winapi", +] + [[package]] name = "thiserror" version = "1.0.40" @@ -1359,7 +1898,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.57", ] [[package]] @@ -1404,7 +1943,7 @@ checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.57", ] [[package]] @@ -1507,6 +2046,12 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + [[package]] name = "unicase" version = "2.6.0" @@ -1538,16 +2083,38 @@ dependencies = [ ] [[package]] -name = "unsafe-libyaml" -version = "0.2.8" +name = "unicode-segmentation" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "2.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11f214ce18d8b2cbe84ed3aa6486ed3f5b285cf8d8fbdbce9f3f767a724adc35" +dependencies = [ + "base64", + "log", + "once_cell", + "rustls", + "rustls-pki-types", + "rustls-webpki", + "url", + "webpki-roots", +] [[package]] name = "url" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -1566,6 +2133,16 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +[[package]] +name = "uuid" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +dependencies = [ + "atomic", + "getrandom", +] + [[package]] name = "version_check" version = "0.9.4" @@ -1573,24 +2150,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] -name = "vte" -version = "0.13.0" +name = "vtparse" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40eb22ae96f050e0c0d6f7ce43feeae26c348fc4dea56928ca81537cfaa6188b" +checksum = "6d9b2acfb050df409c972a37d3b8e08cdea3bddb0c09db9d53137e504cfabed0" dependencies = [ - "arrayvec", "utf8parse", - "vte_generate_state_changes", -] - -[[package]] -name = "vte_generate_state_changes" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff" -dependencies = [ - "proc-macro2", - "quote", ] [[package]] @@ -1609,6 +2174,87 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "webpki-roots" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "wezterm-bidi" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0a6e355560527dd2d1cf7890652f4f09bb3433b6aadade4c9b5ed76de5f3ec" +dependencies = [ + "log", + "wezterm-dynamic", +] + +[[package]] +name = "wezterm-blob-leases" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5a5e0adf7eed68976410def849a4bdab6f6e9f6163f152de9cb89deea9e60b" +dependencies = [ + "getrandom", + "mac_address", + "once_cell", + "sha2", + "thiserror", + "uuid", +] + +[[package]] +name = "wezterm-color-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7de81ef35c9010270d63772bebef2f2d6d1f2d20a983d27505ac850b8c4b4296" +dependencies = [ + "csscolorparser", + "deltae", + "lazy_static", + "wezterm-dynamic", +] + +[[package]] +name = "wezterm-dynamic" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfb128bacfa86734e07681fb6068e34c144698e84ee022d6e009145d1abb77b5" +dependencies = [ + "log", + "ordered-float", + "strsim", + "thiserror", + "wezterm-dynamic-derive", +] + +[[package]] +name = "wezterm-dynamic-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9f5ef318442d07b3d071f9f43ea40b80992f87faee14bb4d017b6991c307f0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "wezterm-input-types" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7012add459f951456ec9d6c7e6fc340b1ce15d6fc9629f8c42853412c029e57e" +dependencies = [ + "bitflags 1.3.2", + "euclid", + "lazy_static", + "wezterm-dynamic", +] + [[package]] name = "winapi" version = "0.3.9" @@ -1640,21 +2286,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - [[package]] name = "windows-sys" version = "0.45.0" @@ -1673,6 +2304,15 @@ dependencies = [ "windows-targets 0.48.0", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.4", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -1703,6 +2343,21 @@ dependencies = [ "windows_x86_64_msvc 0.48.0", ] +[[package]] +name = "windows-targets" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +dependencies = [ + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -1715,6 +2370,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -1727,6 +2388,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" + [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -1739,6 +2406,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +[[package]] +name = "windows_i686_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" + [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -1751,6 +2424,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +[[package]] +name = "windows_i686_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -1763,6 +2442,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -1775,6 +2460,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -1787,6 +2478,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" + [[package]] name = "winreg" version = "0.10.1" @@ -1797,10 +2494,7 @@ dependencies = [ ] [[package]] -name = "yaml-rust" -version = "0.4.5" +name = "zeroize" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" -dependencies = [ - "linked-hash-map", -] +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" diff --git a/Cargo.toml b/Cargo.toml index 04e8e94..2a223d9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,29 +13,26 @@ license = "MIT" anyhow = "1.0.70" crossterm = "0.27.0" portable-pty = "0.8.1" -vte = "0.13.0" axum = { version = "0.7.4", features = ["macros", "ws"] } serde = { version = "1.0.159", features = ["derive", "rc"] } serde_json = "1.0.95" tokio = { version = "1.27.0", features = ["full"] } clap = { version = "4.2.1", features = ["derive"] } -itertools = "0.12.1" rust-embed = { version = "8.2.0", features = ["axum-ex"] } mime_guess = "2.0.4" open = "5.0.1" rand = "0.8.5" signal-hook = "0.3.15" +termwiz = "0.22.0" +ansi_colours = "1.2.2" +iconify = "0.2.6" [profile.release] lto = true # Enable Link Time Optimization opt-level = 'z' # Optimize for size. panic = 'abort' # Abort on panic -[dev-dependencies] -insta = { version = "1.29.0", features = ["yaml"] } -serde_yaml = "0.9" - # codegen-units = 1 # Set low to increase optimizations. Kills compile time though # strip = true # Strip symbols from binary. Big gains but idk if it's worth bad stack traces diff --git a/embed/script.js b/embed/script.js index 5026a20..fe37723 100644 --- a/embed/script.js +++ b/embed/script.js @@ -22,7 +22,15 @@ function Event(props) { const shared_classes = "w-fit outline outline-1 rounded-sm px-1 m-1 bg-slate-800" switch (dto.type) { case "Print": - return html`${dto.string}`; + if (!!dto.color && !!dto.bg_color) { + return html`${dto.string}` + } else if (!!dto.color) { + return html`${dto.string}` + } else if (!!dto.bg_color) { + return html`${dto.string}` + } else { + return html`${dto.string}`; + } case "GenericEscape": { let border = !!dto.tooltip ? "outline-blue-400" : "outline-slate-400"; @@ -31,16 +39,22 @@ function Event(props) { tooltip.style.display = 'block'; update(event.target); } - return html`` : html``; + let title = dto.title ? html`${dto.title}` : ``; + + return html`
${dto.title}`; + class="inline-block ${shared_classes} ${border} space-x-1" + > + ${svg} + ${title} +
`; } case "LineBreak": { return html` diff --git a/src/main.rs b/src/main.rs index d4c054d..15d875f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,6 @@ use std::{ - io::Read, - io::{stdout, Write}, + io::{stdout, Read, Write}, + mem::take, net::SocketAddr, path::PathBuf, sync::{ @@ -11,6 +11,7 @@ use std::{ time::Duration, }; +use ansi_colours::rgb_from_ansi256; use anyhow::{bail, Result}; use axum::{ body::Body, @@ -23,19 +24,21 @@ use axum::{ routing::get, Router, }; -use clap::Parser; +use clap::Parser as ClapParser; use crossterm::{cursor, execute, style::Stylize, terminal}; -use itertools::Itertools; use portable_pty::{native_pty_system, CommandBuilder, PtySize}; use rand::seq::SliceRandom; use rust_embed::RustEmbed; use serde::Serialize; +use termwiz::{ + color::ColorSpec, + escape::{csi::Sgr, parser::Parser, Action, ControlCode, CSI}, +}; use tokio::{ net::TcpListener, sync::{broadcast, Mutex}, time::{timeout_at, Instant}, }; -use vte::{Params, Perform}; #[derive(clap::Parser, Clone)] #[command(author, version, about, long_about = None)] @@ -89,9 +92,11 @@ fn main() -> Result<()> { ); let _clean_up = CleanUp; - let all_events: Arc>> = Arc::new(Mutex::new(vec![])); let (tx, _) = broadcast::channel::(10000); // capacity arbitrarily chosen - let state = AppState { all_events, tx }; + let state = AppState { + all_dtos: Arc::new(Mutex::new(vec![])), + tx, + }; let pty_system = native_pty_system(); @@ -124,14 +129,13 @@ fn main() -> Result<()> { // This reads output (stderr and stdout multiplexed into 1 stream) from child let mut reader = pair.master.try_clone_reader()?; + let (action_sender, mut action_receiver) = + tokio::sync::mpsc::channel::<(Action, Vec)>(10000); + // Watch the child's output, pump it into the VTE parser/performer, and forward it to the terminal - let cloned_state = state.clone(); + // We use a thread here because reading from the pty is blocking thread::spawn(move || -> Result<()> { - let mut performer = Performer { - curr_cmd_bytes: Vec::new(), - state: cloned_state, - }; - let mut statemachine = vte::Parser::new(); + let mut parser = Parser::new(); let mut recording = if cli.log_to_file { Some(std::fs::File::create("stdout.txt")?) } else { @@ -139,13 +143,19 @@ fn main() -> Result<()> { }; let mut buf = [0u8; 8192]; + let mut curr_cmd_bytes = Vec::new(); + loop { let size = reader.read(&mut buf)?; let bytes = buf[0..size].to_vec(); for byte in &bytes { - performer.curr_cmd_bytes.push(*byte); - statemachine.advance(&mut performer, *byte); + curr_cmd_bytes.push(*byte); + if let Some((action, _)) = parser.parse_first(&[*byte]) { + let cmd_bytes = take(&mut curr_cmd_bytes); + // this may fail if the receiver has been dropped because we're exiting + let _ = action_sender.blocking_send((action, cmd_bytes)); + } } stdout().write_all(&bytes)?; @@ -156,11 +166,32 @@ fn main() -> Result<()> { } } }); + let runtime = tokio::runtime::Runtime::new()?; + + let cloned_state = state.clone(); + runtime.spawn(async move { + let mut fg_color = ColorSpec::Default; + let mut bg_color = ColorSpec::Default; + + while let Some((action, raw_bytes)) = action_receiver.recv().await { + update_global_colors(&action, &mut fg_color, &mut bg_color); + + let tuple = (action, raw_bytes); + let mut dto = VteEventDto::from(&tuple); + update_dto_color(&mut dto, fg_color, bg_color); + + { + let mut dtos = cloned_state.all_dtos.lock().await; + dtos.push(dto.clone()); + } + + let _ = cloned_state.tx.send(dto); + } + }); // start web server and attempt to open it in browser let cloned_state = state; - let rt = tokio::runtime::Runtime::new()?; - let _webserver = rt.spawn(async move { + let _webserver = runtime.spawn(async move { let app = Router::new() .route("/", get(root)) .route("/events", get(events_websocket)) @@ -221,28 +252,9 @@ fn initialize_environment() { })); } -fn _print_all_events(vte_rx: &Vec) { - let mut last_was_char = true; - for event in vte_rx { - match event { - VteEvent::Print(c) => { - print!("{c}"); - last_was_char = true; - } - _ => { - if last_was_char { - println!(); - } - println!("{:?}", event); - last_was_char = false; - } - } - } -} - #[derive(Clone)] struct AppState { - all_events: Arc>>, + all_dtos: Arc>>, tx: broadcast::Sender, } @@ -269,29 +281,26 @@ async fn events_websocket( ws.on_upgrade(|ws: WebSocket| async { stream_events(state, ws).await }) } +fn hex_color(color: &ColorSpec) -> Option { + match color { + ColorSpec::Default => None, + ColorSpec::PaletteIndex(i) => { + let (r, g, b) = rgb_from_ansi256(*i); + Some(format!("#{:02x}{:02x}{:02x}", r, g, b)) + } + ColorSpec::TrueColor(srgba) => Some(srgba.to_rgb_string()), + } +} + // send all the already-logged events over the socket right away, then stream them as they occur async fn stream_events(app_state: AppState, mut ws: WebSocket) { - let events = app_state.all_events.lock().await; - for chunk in events.chunks(100) { - let dtos = chunk - .iter() - .map(VteEventDto::from) - // optimization: coalesce adjacent characters before sending to front-end - // TODO: figure out a more efficient way to do this? - .coalesce(|x, y| match (&x, &y) { - (VteEventDto::Print { string: x }, VteEventDto::Print { string: y }) => { - Ok(VteEventDto::Print { - string: format!("{x}{y}"), - }) - } - _ => Err((x, y)), - }) - .collect::>(); - ws.send(Message::Text(serde_json::to_string(&dtos).unwrap())) + let dtos = app_state.all_dtos.lock().await; + for chunk in dtos.chunks(100) { + ws.send(Message::Text(serde_json::to_string(&chunk).unwrap())) .await .unwrap(); } - drop(events); + drop(dtos); let mut rx = app_state.tx.subscribe(); // throttle event sending so we can cut down on renders @@ -301,17 +310,19 @@ async fn stream_events(app_state: AppState, mut ws: WebSocket) { loop { if let Ok(Ok(e)) = timeout_at(next_send, rx.recv()).await { + // TODO rebuild this // optimization: if this is a string and the last item in the batch is also a string, concatenate them // this greatly cuts down on the number of events sent to the front-end - if let VteEventDto::Print { string } = &e { - if let Some(VteEventDto::Print { - string: last_string, - }) = batch.last_mut() - { - last_string.push_str(string); - continue; - } - } + // if let VteEventDto::Print { string } = &e { + // if let Some(VteEventDto::Print { + // string: last_string, + // .. + // }) = batch.last_mut() + // { + // last_string.push_str(string); + // continue; + // } + // } batch.push(e) } @@ -333,137 +344,58 @@ async fn stream_events(app_state: AppState, mut ws: WebSocket) { } } -struct CleanUp; - -impl Drop for CleanUp { - fn drop(&mut self) { - terminal::disable_raw_mode().expect("Could not disable raw mode"); - execute!(stdout(), cursor::SetCursorStyle::DefaultUserShape).unwrap(); +fn update_dto_color(dto: &mut VteEventDto, fg_color: ColorSpec, bg_color: ColorSpec) { + if let VteEventDto::Print { + color: dto_color, + bg_color: dto_bg_color, + .. + } = dto + { + *dto_color = hex_color(&fg_color); + *dto_bg_color = hex_color(&bg_color); } } -struct Performer { - curr_cmd_bytes: Vec, - state: AppState, -} - -impl Performer { - fn log(&mut self, event: VteEvent) { - let _ = self.state.tx.send(VteEventDto::from(&event)); // this will fail if there's nobody listening yet, and that's OK - self.state.all_events.blocking_lock().push(event); - self.curr_cmd_bytes.clear(); +fn update_global_colors(action: &Action, fg_color: &mut ColorSpec, bg_color: &mut ColorSpec) { + if let Action::CSI(csi) = action { + if let CSI::Sgr(sgr) = csi { + match sgr { + Sgr::Foreground(color) => { + *fg_color = color.clone(); + } + Sgr::Background(color) => { + *bg_color = color.clone(); + } + Sgr::Reset => { + *fg_color = ColorSpec::Default; + *bg_color = ColorSpec::Default; + } + _ => {} + } + } } } -impl Perform for Performer { - fn print(&mut self, c: char) { - self.log(VteEvent::Print(c)); - } - - fn execute(&mut self, byte: u8) { - self.log(VteEvent::Execute(byte)); - } - - fn hook(&mut self, params: &Params, intermediates: &[u8], ignore: bool, c: char) { - let p = params.iter().map(|p| p.to_vec()).collect(); - - self.log(VteEvent::Hook { - params: p, - intermediates: intermediates.to_vec(), - ignore, - c, - raw_bytes: self.curr_cmd_bytes.clone(), - }); - } - - fn put(&mut self, byte: u8) { - self.log(VteEvent::Put { - byte, - raw_bytes: self.curr_cmd_bytes.clone(), - }); - } - - fn unhook(&mut self) { - self.log(VteEvent::Unhook { - raw_bytes: self.curr_cmd_bytes.clone(), - }); - } - - fn osc_dispatch(&mut self, params: &[&[u8]], bell_terminated: bool) { - self.log(VteEvent::OscDispatch { - params: params.iter().map(|p| p.to_vec()).collect(), - bell_terminated, - raw_bytes: self.curr_cmd_bytes.clone(), - }); - } - - fn csi_dispatch(&mut self, params: &Params, intermediates: &[u8], ignore: bool, c: char) { - self.log(VteEvent::CsiDispatch { - params: params.iter().map(|p| p.to_vec()).collect(), - intermediates: intermediates.to_vec(), - ignore, - c, - raw_bytes: self.curr_cmd_bytes.clone(), - }); - } +struct CleanUp; - fn esc_dispatch(&mut self, intermediates: &[u8], ignore: bool, byte: u8) { - self.log(VteEvent::EscDispatch { - intermediates: intermediates.to_vec(), - ignore, - byte, - raw_bytes: self.curr_cmd_bytes.clone(), - }); +impl Drop for CleanUp { + fn drop(&mut self) { + terminal::disable_raw_mode().expect("Could not disable raw mode"); + execute!(stdout(), cursor::SetCursorStyle::DefaultUserShape).unwrap(); } } -// These all map directly to their equivalent events in the `vte` library -#[derive(Debug, Serialize, Clone)] -enum VteEvent { - Print(char), - Execute(u8), - Hook { - params: Vec>, - intermediates: Vec, - ignore: bool, - c: char, - raw_bytes: Vec, - }, - Put { - byte: u8, - raw_bytes: Vec, - }, - Unhook { - raw_bytes: Vec, - }, - OscDispatch { - params: Vec>, - bell_terminated: bool, - raw_bytes: Vec, - }, - CsiDispatch { - params: Vec>, - intermediates: Vec, - ignore: bool, - c: char, - raw_bytes: Vec, - }, - EscDispatch { - intermediates: Vec, - ignore: bool, - byte: u8, - raw_bytes: Vec, - }, -} - #[derive(Debug, Serialize, Clone)] #[serde(tag = "type")] // give each JSON record a "type" field indicating the enum type, easier to consume from JS enum VteEventDto { Print { string: String, + color: Option, + bg_color: Option, }, GenericEscape { - title: String, + title: Option, + icon_svg: Option, tooltip: Option, raw_bytes: String, }, @@ -472,490 +404,81 @@ enum VteEventDto { }, } -impl From<&VteEvent> for VteEventDto { - fn from(value: &VteEvent) -> Self { - match value { - VteEvent::Print(c) => VteEventDto::Print { - string: String::from(*c), +impl From<&(Action, Vec)> for VteEventDto { + fn from(value: &(Action, Vec)) -> Self { + let (action, raw_bytes) = value; + let raw_bytes = sanitize_raw_bytes(raw_bytes); + + match action { + Action::Print(c) => VteEventDto::Print { + string: c.to_string(), + color: None, + bg_color: None, }, - VteEvent::Execute(byte) => match byte { - 10 => VteEventDto::LineBreak { title: "CR".into() }, - 13 => VteEventDto::LineBreak { title: "LF".into() }, - _ => { - let bytes = [*byte]; - let str = sanitize_raw_bytes(&bytes.to_vec()); - Self::GenericEscape { - title: format!("Execute {str}"), - tooltip: None, - raw_bytes: str, - } - } + Action::PrintString(s) => VteEventDto::Print { + string: s.clone(), + color: None, + bg_color: None, }, - VteEvent::Hook { raw_bytes, .. } => VteEventDto::GenericEscape { - title: "Hook".into(), + Action::Control(ctrl) => { + if matches!(ctrl, ControlCode::CarriageReturn) { + return VteEventDto::LineBreak { title: "CR".into() }; + } + if matches!(ctrl, ControlCode::LineFeed) { + return VteEventDto::LineBreak { title: "LF".into() }; + } + let description = format!("{ctrl:?}"); + VteEventDto::GenericEscape { + title: Some(description), + icon_svg: None, + tooltip: None, + raw_bytes, + } + } + Action::DeviceControl(dcm) => VteEventDto::GenericEscape { + title: Some(format!("DCM {dcm:?}")), + icon_svg: None, tooltip: None, - raw_bytes: sanitize_raw_bytes(raw_bytes), + raw_bytes, }, - VteEvent::Put { raw_bytes, .. } => VteEventDto::GenericEscape { - title: "Put".into(), + Action::OperatingSystemCommand(osc) => VteEventDto::GenericEscape { + title: Some(format!("OSC {osc:?}")), + icon_svg: None, tooltip: None, - raw_bytes: sanitize_raw_bytes(raw_bytes), + raw_bytes, }, - VteEvent::Unhook { raw_bytes } => VteEventDto::GenericEscape { - title: "Unhook".into(), + Action::CSI(csi) => csi_to_dto(csi, raw_bytes), + Action::Esc(e) => VteEventDto::GenericEscape { + title: Some(format!("ESC {e:?}")), + icon_svg: None, tooltip: None, - raw_bytes: sanitize_raw_bytes(raw_bytes), - }, - VteEvent::OscDispatch { - params, - bell_terminated, - raw_bytes, - } => osc_front_end(params, bell_terminated, raw_bytes), - VteEvent::CsiDispatch { - params, - intermediates, - ignore, - c, raw_bytes, - } => csi_front_end(params, intermediates, ignore, c, raw_bytes), - VteEvent::EscDispatch { - byte, raw_bytes, .. - } => other_escape_front_end(byte, raw_bytes), + }, + Action::Sixel(_) => todo!("sixel not implemented yet"), + Action::XtGetTcap(_) => todo!("xt get tcap not implemented yet"), + Action::KittyImage(_) => todo!("kitty image not implemented yet"), } } } -fn other_escape_front_end(byte: &u8, raw_bytes: &Vec) -> VteEventDto { - let c = char::from(*byte); - let (title, tooltip) = match c { - 'c' => ("RIS".into(), Some("Reset to initial state".into())), - '7' => ("DECSC".into(), Some("Save Cursor Position".into())), - '8' => ("DECRC".into(), Some("Restore Cursor Position".into())), - _ => ("Other".into(), None), +fn csi_to_dto(csi: &CSI, raw_bytes: String) -> VteEventDto { + let (title, tooltip, icon_svg) = match csi { + CSI::Sgr(sgr) => match sgr { + Sgr::Reset => ( + None, + Some("SGR (Select Graphic Rendition) Reset".into()), + Some(iconify::svg!("carbon:reset").into()), + ), + _ => (Some("SGR".into()), None, None), + }, + _ => (Some("CSI".into()), None, None), }; VteEventDto::GenericEscape { title, tooltip, - raw_bytes: sanitize_raw_bytes(raw_bytes), - } -} - -fn csi_front_end( - params: &[Vec], - intermediates: &[u8], - _ignore: &bool, - c: &char, - raw_bytes: &Vec, -) -> VteEventDto { - let intermediates = intermediates.iter().map(|i| char::from(*i)).collect_vec(); - let mut ascii = intermediates.iter().collect::(); - ascii += ¶ms - .iter() - .map(|p| p.iter().map(|s| s.to_string()).join(",")) - .join(";"); - ascii.push(*c); - - let params_without_subparams: Vec = - params.iter().filter_map(|p| p.first().copied()).collect(); - - let tooltip = match *c { - 'A' => move_cursor('A', params_without_subparams), - 'B' => move_cursor('B', params_without_subparams), - 'C' => move_cursor('C', params_without_subparams), - 'D' => move_cursor('D', params_without_subparams), - 'E' => move_cursor('E', params_without_subparams), - 'F' => move_cursor('F', params_without_subparams), - 'h' => csi_h(params_without_subparams, intermediates), - 'H' => csi_H(params_without_subparams), - 'J' => csi_J(params_without_subparams), - 'K' => csi_K(params_without_subparams), - 'l' => csi_l(params_without_subparams, intermediates), - 'm' => sgr(params), - 'n' => csi_n(params_without_subparams), - _ => None, - }; - - VteEventDto::GenericEscape { - title: format!("CSI {ascii}"), - tooltip, - raw_bytes: sanitize_raw_bytes(raw_bytes), - } -} - -fn move_cursor(c: char, params: Vec) -> Option { - if let [n] = params.as_slice() { - return match c { - 'A' => Some(format!("Move cursor {n} rows up")), - 'B' => Some(format!("Move cursor {n} rows down")), - 'C' => Some(format!("Move cursor {n} columns right")), - 'D' => Some(format!("Move cursor {n} columns left")), - 'E' => Some(format!("Move cursor {n} rows down, to column 1")), - 'F' => Some(format!("Move cursor {n} rows up, to column 1")), - _ => None, - }; - } - - None -} - -fn csi_h(params: Vec, intermediates: Vec) -> Option { - let mut actions: Vec = Vec::new(); - - // private use sequences https://unix.stackexchange.com/a/289055/ - if intermediates.contains(&'?') { - if params.contains(&1) { - actions.push("Application Cursor Keys".into()); - } - if params.contains(&25) { - actions.push("Show cursor".into()); - } - if params.contains(&47) { - actions.push("Save screen".into()); - } - if params.contains(&1049) { - actions.push("Enable the alternative buffer".into()); - } - if params.contains(&2004) { - actions.push("Enable bracketed paste mode".into()); - } - } - - if actions.is_empty() { - return None; - } - - Some(actions.join(". ")) -} - -#[allow(non_snake_case)] -fn csi_H(params: Vec) -> Option { - let mut actions: Vec = Vec::new(); - - match params.as_slice() { - [] => actions.push("Move cursor to top left corner (0,0)".into()), - // I believe a single param is just the row, but I'm not sure - [row] => actions.push(format!("Move cursor to ({row},0)")), - [row, column] => actions.push(format!("Move cursor to ({}, {})", row, column)), - _ => {} - } - - if actions.is_empty() { - return None; - } - - Some(actions.join(". ")) -} - -fn csi_l(params: Vec, intermediates: Vec) -> Option { - let mut actions: Vec = Vec::new(); - if intermediates.contains(&'?') { - if params.contains(&1) { - actions.push("Reset Cursor Keys".into()); - } - if params.contains(&12) { - actions.push("Stop blinking cursor".into()); - } - if params.contains(&25) { - actions.push("Hide cursor".into()); - } - if params.contains(&47) { - actions.push("Restore screen".into()); - } - if params.contains(&1049) { - actions.push("Disable the alternative buffer".into()); - } - if params.contains(&2004) { - actions.push("Disable bracketed paste mode".into()); - } - } - - if actions.is_empty() { - return None; - } - - Some(actions.join(". ")) -} - -fn csi_n(params: Vec) -> Option { - let mut actions: Vec = Vec::new(); - if params.contains(&6) { - actions.push("Query cursor position".into()); - } - - if actions.is_empty() { - return None; - } - - Some(actions.join(". ")) -} - -#[allow(non_snake_case)] -fn csi_J(params: Vec) -> Option { - let mut actions: Vec = Vec::new(); - - if params.is_empty() || params.contains(&0) { - actions.push("Clear from cursor to end of screen".into()); - } - if params.contains(&1) { - actions.push("Clear from cursor to start of screen".into()); - } - if params.contains(&2) { - actions.push("Clear entire screen".into()); - } - if params.contains(&3) { - actions.push("Clear saved lines".into()); - } - - if actions.is_empty() { - return None; - } - - Some(actions.join(". ")) -} - -#[allow(non_snake_case)] -fn csi_K(params: Vec) -> Option { - let mut actions: Vec = Vec::new(); - - if params.is_empty() || params.contains(&0) { - actions.push("Clear from cursor to end of line".into()); - } - if params.contains(&1) { - actions.push("Clear from start of line to cursor".into()); - } - if params.contains(&2) { - actions.push("Clear entire line".into()); - } - - if actions.is_empty() { - return None; - } - - Some(actions.join(". ")) -} - -// Select Graphic Rendition https://stackoverflow.com/a/33206814/ -fn sgr(params: &[Vec]) -> Option { - let mut foreground_colors: Vec = vec![]; - let mut background_colors: Vec = vec![]; - let mut attributes: Vec = vec![]; - let mut reset_attributes: Vec = vec![]; - - // this iterator returns items of Vec - // the first item in the vec is the parameter, later items are subparameters - // however, I believe that the VTE crate only attaches subparameters if they are separated with a colon... - // and in practice most applications separate subparameters with semicolons - let mut iter = params.iter().peekable(); - - loop { - // - let Some(param) = iter.next() else { - break; - }; - - match param[0] { - 0 => return Some("Reset all modes (styles and colours)".into()), - 1 => attributes.push("bold".into()), - 2 => attributes.push("dim".into()), - 3 => attributes.push("italic".into()), - 4 => attributes.push("underline".into()), - 5 => attributes.push("blink".into()), - 7 => attributes.push("reverse".into()), - 8 => attributes.push("hidden".into()), - 9 => attributes.push("strikethrough".into()), - 22 => reset_attributes.push("bold/dim".into()), - 23 => reset_attributes.push("italic".into()), - 24 => reset_attributes.push("underline".into()), - 25 => reset_attributes.push("blink".into()), - 27 => reset_attributes.push("reverse".into()), - 28 => reset_attributes.push("hidden".into()), - 29 => reset_attributes.push("strikethrough".into()), - 30 => foreground_colors.push("black".into()), - 31 => foreground_colors.push("red".into()), - 32 => foreground_colors.push("green".into()), - 33 => foreground_colors.push("yellow".into()), - 34 => foreground_colors.push("blue".into()), - 35 => foreground_colors.push("magenta".into()), - 36 => foreground_colors.push("cyan".into()), - 37 => foreground_colors.push("white".into()), - 38 => { - // Set foreground colour to a custom value - // This is a little tricky because, as I understand it, the subparameters following 38 - // can be separated by either ; or : and that will affect whether VTE parses them as parameters or subparameters - // https://wezfurlong.org/wezterm/escape-sequences.html#graphic-rendition-sgr - // TODO: handle : subparameters - - foreground_colors.push("custom value".into()); - - if let Some(next) = iter.peek() { - if next[0] == 5 { - // Next arguments are `5;` - iter.next(); - iter.next(); - } else if next[0] == 2 { - // Next arguments are `2;;;` - iter.next(); - iter.next(); - iter.next(); - iter.next(); - } - } - } - 39 => foreground_colors.push("default".into()), - 40 => background_colors.push("black".into()), - 41 => background_colors.push("red".into()), - 42 => background_colors.push("green".into()), - 43 => background_colors.push("yellow".into()), - 44 => background_colors.push("blue".into()), - 45 => background_colors.push("magenta".into()), - 46 => background_colors.push("cyan".into()), - 47 => background_colors.push("white".into()), - 48 => { - // Set background colour to a custom value - // This is a little tricky because, as I understand it, the subparameters following 48 - // can be separated by either ; or : and that will affect whether VTE parses them as parameters or subparameters - // https://wezfurlong.org/wezterm/escape-sequences.html#graphic-rendition-sgr - // TODO: handle : subparameters - - background_colors.push("custom value".into()); - - if let Some(next) = iter.peek() { - if next[0] == 5 { - // Next arguments are `5;` - iter.next(); - iter.next(); - } else if next[0] == 2 { - // Next arguments are `2;;;` - iter.next(); - iter.next(); - iter.next(); - iter.next(); - } - } - } - 49 => background_colors.push("default".into()), - 90 => foreground_colors.push("bright black".into()), - 91 => foreground_colors.push("bright red".into()), - 92 => foreground_colors.push("bright green".into()), - 93 => foreground_colors.push("bright yellow".into()), - 94 => foreground_colors.push("bright blue".into()), - 95 => foreground_colors.push("bright magenta".into()), - 96 => foreground_colors.push("bright cyan".into()), - 97 => foreground_colors.push("bright white".into()), - 100 => background_colors.push("bright black".into()), - 101 => background_colors.push("bright red".into()), - 102 => background_colors.push("bright green".into()), - 103 => background_colors.push("bright yellow".into()), - 104 => background_colors.push("bright blue".into()), - 105 => background_colors.push("bright magenta".into()), - 106 => background_colors.push("bright cyan".into()), - 107 => background_colors.push("bright white".into()), - _ => continue, - } - } - - let mut tooltip = String::new(); - - if !attributes.is_empty() { - tooltip.push_str(&format!("Set text to {}. ", attributes.join(", "))); - } - - if !reset_attributes.is_empty() { - tooltip.push_str(&format!( - "Reset {} text attributes. ", - reset_attributes.join("/") - )); - } - - if !foreground_colors.is_empty() { - tooltip.push_str(&format!( - "Set foreground color to {}. ", - foreground_colors.join(", ") - )); - } - - if !background_colors.is_empty() { - tooltip.push_str(&format!( - "Set background color to {}. ", - background_colors.join(", ") - )); - } - - if tooltip.is_empty() { - None - } else { - Some(tooltip) - } -} - -fn osc_front_end( - params: &Vec>, - _bell_terminated: &bool, - raw_bytes: &Vec, -) -> VteEventDto { - // TODO handle things like OSC 133;B. Show more than first param - // ]133;B - - if params.is_empty() { - return VteEventDto::GenericEscape { - title: "OSC".into(), - tooltip: None, - raw_bytes: sanitize_raw_bytes(raw_bytes), - }; - } - - let params = params - .iter() - .map(|p| String::from_utf8_lossy(p).to_string()) - .collect::>(); - let first = ¶ms[0]; - - // set title https://tldp.org/HOWTO/Xterm-Title-3.html - if first == "0" && params.len() > 1 { - return VteEventDto::GenericEscape { - title: format!("OSC {first}"), - tooltip: Some(format!("Set icon name and window title to '{}'", params[1])), - raw_bytes: sanitize_raw_bytes(raw_bytes), - }; - } - - if first == "1" && params.len() > 1 { - return VteEventDto::GenericEscape { - title: format!("OSC {first}"), - tooltip: Some(format!("Set icon name to '{}'", params[1])), - raw_bytes: sanitize_raw_bytes(raw_bytes), - }; - } - - if first == "2" && params.len() > 1 { - return VteEventDto::GenericEscape { - title: format!("OSC {first}"), - tooltip: Some(format!("Set window title to '{}'", params[1])), - raw_bytes: sanitize_raw_bytes(raw_bytes), - }; - } - - if first == "133" && params.len() > 1 { - let (title, tooltip) = match params[1].as_str() { - "A" => ("Pre-prompt", Some("OSC 133 pre-prompt marker")), - "B" => ("Post-prompt", Some("OSC 133 post-prompt marker")), - "C" => ("Pre-input", Some("OSC 133 pre-input marker")), - "D" => ("Post-input", Some("OSC 133 post-input marker")), - _ => ("OSC 133", None), - }; - - return VteEventDto::GenericEscape { - title: title.into(), - tooltip: tooltip.map(|s| s.into()), - raw_bytes: sanitize_raw_bytes(raw_bytes), - }; - } - - VteEventDto::GenericEscape { - title: format!("OSC {first}"), - tooltip: None, - raw_bytes: sanitize_raw_bytes(raw_bytes), + icon_svg, + raw_bytes, } } @@ -993,60 +516,3 @@ where } } } - -// Some snapshot tests that are mostly useful for seeing what VTE is doing -#[test] -fn set_bold() -> Result<()> { - let esc = [b'\x1b']; - let input = "[1m"; - let combined = esc.iter().chain(input.as_bytes()).copied(); - - let events = parse_bytes(combined); - insta::assert_yaml_snapshot!(events); - - Ok(()) -} - -#[test] -fn nu_prompt() -> Result<()> { - let input = include_bytes!("snapshots/escape_artist__nu_prompt.input"); - - let events = parse_bytes(input.iter().copied()); - insta::assert_yaml_snapshot!(events); - - Ok(()) -} - -#[test] -fn bash_starship_prompt() -> Result<()> { - let input = include_bytes!("snapshots/bash_starship_prompt.input"); - - let events = parse_bytes(input.iter().copied()); - insta::assert_yaml_snapshot!(events); - - Ok(()) -} - -#[cfg(test)] -fn parse_bytes(combined: impl Iterator) -> Vec { - // capacity arbitrarily chosen - let (tx, _) = broadcast::channel::(10000); - let state = AppState { - all_events: Arc::new(Mutex::new(vec![])), - tx, - }; - - let mut performer = Performer { - curr_cmd_bytes: Vec::new(), - state: state.clone(), - }; - - let mut statemachine = vte::Parser::new(); - - for byte in combined { - performer.curr_cmd_bytes.push(byte); - statemachine.advance(&mut performer, byte); - } - let events = state.all_events.blocking_lock(); - events.clone() -} diff --git a/src/snapshots/bash_starship_prompt.input b/src/snapshots/bash_starship_prompt.input deleted file mode 100644 index 08ddb66..0000000 --- a/src/snapshots/bash_starship_prompt.input +++ /dev/null @@ -1,2 +0,0 @@ -escape-artist on  master [?] is 📦 v0.5.1 via 🦀 v1.66.1  -❯ \ No newline at end of file diff --git a/src/snapshots/escape_artist__bash_starship_prompt.snap b/src/snapshots/escape_artist__bash_starship_prompt.snap deleted file mode 100644 index 62d3251..0000000 --- a/src/snapshots/escape_artist__bash_starship_prompt.snap +++ /dev/null @@ -1,393 +0,0 @@ ---- -source: src/main.rs -expression: events ---- -- CsiDispatch: - params: - - - 1 - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 54 - - 109 -- Print: e -- Print: s -- Print: c -- Print: a -- Print: p -- Print: e -- Print: "-" -- Print: a -- Print: r -- Print: t -- Print: i -- Print: s -- Print: t -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Print: " " -- Print: o -- Print: n -- Print: " " -- CsiDispatch: - params: - - - 1 - - - 35 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 53 - - 109 -- Print:  -- Print: " " -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - - - 35 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 53 - - 109 -- Print: m -- Print: a -- Print: s -- Print: t -- Print: e -- Print: r -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Print: " " -- CsiDispatch: - params: - - - 1 - - - 31 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 49 - - 109 -- Print: "[" -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - - - 31 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 49 - - 109 -- Print: "?" -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - - - 31 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 49 - - 109 -- Print: "]" -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Print: " " -- Print: i -- Print: s -- Print: " " -- CsiDispatch: - params: - - - 1 - - - 38 - - - 5 - - - 208 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 56 - - 59 - - 53 - - 59 - - 50 - - 48 - - 56 - - 109 -- Print: 📦 -- Print: " " -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - - - 38 - - - 5 - - - 208 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 56 - - 59 - - 53 - - 59 - - 50 - - 48 - - 56 - - 109 -- Print: v -- Print: "0" -- Print: "." -- Print: "5" -- Print: "." -- Print: "1" -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Print: " " -- Print: v -- Print: i -- Print: a -- Print: " " -- CsiDispatch: - params: - - - 1 - - - 31 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 49 - - 109 -- Print: 🦀 -- Print: " " -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - - - 31 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 49 - - 109 -- Print: v -- Print: "1" -- Print: "." -- Print: "6" -- Print: "6" -- Print: "." -- Print: "1" -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - - - 31 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 49 - - 109 -- Print: " " -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Execute: 13 -- Execute: 10 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: ❯ -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Print: " " - diff --git a/src/snapshots/escape_artist__nu_prompt.input b/src/snapshots/escape_artist__nu_prompt.input deleted file mode 100644 index 21c77f3..0000000 --- a/src/snapshots/escape_artist__nu_prompt.input +++ /dev/null @@ -1,16 +0,0 @@ - __ , - .--()°'.' Welcome to Nushell, -'|, . ,' based on the nu language, - !_-(_\ where all data is structured! - -Please join our Discord community at https://discord.gg/NtAbbGn -Our GitHub repository is at https://github.com/nushell/nushell -Our Documentation is located at https://nushell.sh -Tweet us at @nu_shell -Learn how to remove this at: https://nushell.sh/book/configuration.html#remove-welcome-message - -It's been this long since Nushell's first commit: -3yr 11month 1wk 2day 13hr 26min 17sec 122ms 811µs 392ns - -Startup Time: 52ms 52µs 214ns -[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM878[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8l7g8[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lk78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkd78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdm78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdmf78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdmfl78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdmflg78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdmflgk78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdmflgkm78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdmflgkmd78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdmflgkmdl78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdmflgkmdlf78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdmflgkmdlfk78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdmflgkmdlfkg78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdmflgkmdlfkgm78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdmflgkmdlfkgmlk78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdmflgkmdlfkgmlkm78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdmflgkmdlfkgmlkml78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdmflgkmdlfkgmlkmlk78[2 q[?25h[?25l]133;A\~]133;B\> 704/13/2023 11:25:29 PM8lkdmflgkmdlfkgmlkmlkm78[2 q[?25h]133;D;0\[?25l]133;A\~]133;B\> 704/13/2023 11:25:45 PM878[2 q[?25h \ No newline at end of file diff --git a/src/snapshots/escape_artist__nu_prompt.snap b/src/snapshots/escape_artist__nu_prompt.snap deleted file mode 100644 index a99fbf1..0000000 --- a/src/snapshots/escape_artist__nu_prompt.snap +++ /dev/null @@ -1,8213 +0,0 @@ ---- -source: src/main.rs -expression: events ---- -- CsiDispatch: - params: - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 50 - - 109 -- Print: " " -- Print: " " -- Print: " " -- Print: " " -- Print: " " -- Print: _ -- Print: _ -- Print: " " -- Print: " " -- Print: "," -- Execute: 13 -- Execute: 10 -- CsiDispatch: - params: - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 50 - - 109 -- Print: " " -- Print: "." -- Print: "-" -- Print: "-" -- Print: ( -- Print: ) -- Print: ° -- Print: "'" -- Print: "." -- Print: "'" -- Print: " " -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Print: W -- Print: e -- Print: l -- Print: c -- Print: o -- Print: m -- Print: e -- Print: " " -- Print: t -- Print: o -- Print: " " -- CsiDispatch: - params: - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 50 - - 109 -- Print: N -- Print: u -- Print: s -- Print: h -- Print: e -- Print: l -- Print: l -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Print: "," -- Execute: 13 -- Execute: 10 -- CsiDispatch: - params: - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 50 - - 109 -- Print: "'" -- Print: "|" -- Print: "," -- Print: " " -- Print: "." -- Print: " " -- Print: "," -- Print: "'" -- Print: " " -- Print: " " -- Print: " " -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Print: b -- Print: a -- Print: s -- Print: e -- Print: d -- Print: " " -- Print: o -- Print: n -- Print: " " -- Print: t -- Print: h -- Print: e -- Print: " " -- CsiDispatch: - params: - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 50 - - 109 -- Print: n -- Print: u -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Print: " " -- Print: l -- Print: a -- Print: n -- Print: g -- Print: u -- Print: a -- Print: g -- Print: e -- Print: "," -- Execute: 13 -- Execute: 10 -- CsiDispatch: - params: - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 50 - - 109 -- Print: " " -- Print: "!" -- Print: _ -- Print: "-" -- Print: ( -- Print: _ -- Print: "\\" -- Print: " " -- Print: " " -- Print: " " -- Print: " " -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Print: w -- Print: h -- Print: e -- Print: r -- Print: e -- Print: " " -- Print: a -- Print: l -- Print: l -- Print: " " -- Print: d -- Print: a -- Print: t -- Print: a -- Print: " " -- Print: i -- Print: s -- Print: " " -- Print: s -- Print: t -- Print: r -- Print: u -- Print: c -- Print: t -- Print: u -- Print: r -- Print: e -- Print: d -- Print: "!" -- Execute: 13 -- Execute: 10 -- Execute: 13 -- Execute: 10 -- Print: P -- Print: l -- Print: e -- Print: a -- Print: s -- Print: e -- Print: " " -- Print: j -- Print: o -- Print: i -- Print: n -- Print: " " -- Print: o -- Print: u -- Print: r -- Print: " " -- CsiDispatch: - params: - - - 35 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 53 - - 109 -- Print: D -- Print: i -- Print: s -- Print: c -- Print: o -- Print: r -- Print: d -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Print: " " -- Print: c -- Print: o -- Print: m -- Print: m -- Print: u -- Print: n -- Print: i -- Print: t -- Print: y -- Print: " " -- Print: a -- Print: t -- Print: " " -- CsiDispatch: - params: - - - 35 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 53 - - 109 -- Print: h -- Print: t -- Print: t -- Print: p -- Print: s -- Print: ":" -- Print: / -- Print: / -- Print: d -- Print: i -- Print: s -- Print: c -- Print: o -- Print: r -- Print: d -- Print: "." -- Print: g -- Print: g -- Print: / -- Print: N -- Print: t -- Print: A -- Print: b -- Print: b -- Print: G -- Print: n -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Execute: 13 -- Execute: 10 -- Print: O -- Print: u -- Print: r -- Print: " " -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: G -- Print: i -- Print: t -- Print: H -- Print: u -- Print: b -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Print: " " -- Print: r -- Print: e -- Print: p -- Print: o -- Print: s -- Print: i -- Print: t -- Print: o -- Print: r -- Print: y -- Print: " " -- Print: i -- Print: s -- Print: " " -- Print: a -- Print: t -- Print: " " -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: h -- Print: t -- Print: t -- Print: p -- Print: s -- Print: ":" -- Print: / -- Print: / -- Print: g -- Print: i -- Print: t -- Print: h -- Print: u -- Print: b -- Print: "." -- Print: c -- Print: o -- Print: m -- Print: / -- Print: n -- Print: u -- Print: s -- Print: h -- Print: e -- Print: l -- Print: l -- Print: / -- Print: n -- Print: u -- Print: s -- Print: h -- Print: e -- Print: l -- Print: l -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Execute: 13 -- Execute: 10 -- Print: O -- Print: u -- Print: r -- Print: " " -- CsiDispatch: - params: - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 50 - - 109 -- Print: D -- Print: o -- Print: c -- Print: u -- Print: m -- Print: e -- Print: n -- Print: t -- Print: a -- Print: t -- Print: i -- Print: o -- Print: n -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Print: " " -- Print: i -- Print: s -- Print: " " -- Print: l -- Print: o -- Print: c -- Print: a -- Print: t -- Print: e -- Print: d -- Print: " " -- Print: a -- Print: t -- Print: " " -- CsiDispatch: - params: - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 50 - - 109 -- Print: h -- Print: t -- Print: t -- Print: p -- Print: s -- Print: ":" -- Print: / -- Print: / -- Print: n -- Print: u -- Print: s -- Print: h -- Print: e -- Print: l -- Print: l -- Print: "." -- Print: s -- Print: h -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Execute: 13 -- Execute: 10 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: T -- Print: w -- Print: e -- Print: e -- Print: t -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Print: " " -- Print: u -- Print: s -- Print: " " -- Print: a -- Print: t -- Print: " " -- CsiDispatch: - params: - - - 1 - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 54 - - 109 -- Print: "@" -- Print: n -- Print: u -- Print: _ -- Print: s -- Print: h -- Print: e -- Print: l -- Print: l -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Execute: 13 -- Execute: 10 -- Print: L -- Print: e -- Print: a -- Print: r -- Print: n -- Print: " " -- Print: h -- Print: o -- Print: w -- Print: " " -- Print: t -- Print: o -- Print: " " -- Print: r -- Print: e -- Print: m -- Print: o -- Print: v -- Print: e -- Print: " " -- Print: t -- Print: h -- Print: i -- Print: s -- Print: " " -- Print: a -- Print: t -- Print: ":" -- Print: " " -- CsiDispatch: - params: - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 50 - - 109 -- Print: h -- Print: t -- Print: t -- Print: p -- Print: s -- Print: ":" -- Print: / -- Print: / -- Print: n -- Print: u -- Print: s -- Print: h -- Print: e -- Print: l -- Print: l -- Print: "." -- Print: s -- Print: h -- Print: / -- Print: b -- Print: o -- Print: o -- Print: k -- Print: / -- Print: c -- Print: o -- Print: n -- Print: f -- Print: i -- Print: g -- Print: u -- Print: r -- Print: a -- Print: t -- Print: i -- Print: o -- Print: n -- Print: "." -- Print: h -- Print: t -- Print: m -- Print: l -- Print: "#" -- Print: r -- Print: e -- Print: m -- Print: o -- Print: v -- Print: e -- Print: "-" -- Print: w -- Print: e -- Print: l -- Print: c -- Print: o -- Print: m -- Print: e -- Print: "-" -- Print: m -- Print: e -- Print: s -- Print: s -- Print: a -- Print: g -- Print: e -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Execute: 13 -- Execute: 10 -- Execute: 13 -- Execute: 10 -- Print: I -- Print: t -- Print: "'" -- Print: s -- Print: " " -- Print: b -- Print: e -- Print: e -- Print: n -- Print: " " -- Print: t -- Print: h -- Print: i -- Print: s -- Print: " " -- Print: l -- Print: o -- Print: n -- Print: g -- Print: " " -- Print: s -- Print: i -- Print: n -- Print: c -- Print: e -- Print: " " -- CsiDispatch: - params: - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 50 - - 109 -- Print: N -- Print: u -- Print: s -- Print: h -- Print: e -- Print: l -- Print: l -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Print: "'" -- Print: s -- Print: " " -- Print: f -- Print: i -- Print: r -- Print: s -- Print: t -- Print: " " -- Print: c -- Print: o -- Print: m -- Print: m -- Print: i -- Print: t -- Print: ":" -- Execute: 13 -- Execute: 10 -- Print: "3" -- Print: y -- Print: r -- Print: " " -- Print: "1" -- Print: "1" -- Print: m -- Print: o -- Print: n -- Print: t -- Print: h -- Print: " " -- Print: "1" -- Print: w -- Print: k -- Print: " " -- Print: "2" -- Print: d -- Print: a -- Print: y -- Print: " " -- Print: "1" -- Print: "3" -- Print: h -- Print: r -- Print: " " -- Print: "2" -- Print: "6" -- Print: m -- Print: i -- Print: n -- Print: " " -- Print: "1" -- Print: "7" -- Print: s -- Print: e -- Print: c -- Print: " " -- Print: "1" -- Print: "2" -- Print: "2" -- Print: m -- Print: s -- Print: " " -- Print: "8" -- Print: "1" -- Print: "1" -- Print: µ -- Print: s -- Print: " " -- Print: "3" -- Print: "9" -- Print: "2" -- Print: n -- Print: s -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- Execute: 13 -- Execute: 10 -- Execute: 13 -- Execute: 10 -- Print: S -- Print: t -- Print: a -- Print: r -- Print: t -- Print: u -- Print: p -- Print: " " -- Print: T -- Print: i -- Print: m -- Print: e -- Print: ":" -- Print: " " -- Print: "5" -- Print: "2" -- Print: m -- Print: s -- Print: " " -- Print: "5" -- Print: "2" -- Print: µ -- Print: s -- Print: " " -- Print: "2" -- Print: "1" -- Print: "4" -- Print: n -- Print: s -- Execute: 13 -- Execute: 10 -- CsiDispatch: - params: - - - 6 - intermediates: [] - ignore: false - c: n - raw_bytes: - - 27 - - 91 - - 54 - - 110 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 90 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 57 - - 48 - - 109 -- Print: g -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- Print: f -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- Print: f -- Print: l -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- Print: f -- Print: l -- Print: g -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- Print: f -- Print: l -- Print: g -- Print: k -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- Print: f -- Print: l -- Print: g -- Print: k -- Print: m -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- Print: f -- Print: l -- Print: g -- Print: k -- Print: m -- Print: d -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- Print: f -- Print: l -- Print: g -- Print: k -- Print: m -- Print: d -- Print: l -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- Print: f -- Print: l -- Print: g -- Print: k -- Print: m -- Print: d -- Print: l -- Print: f -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- Print: f -- Print: l -- Print: g -- Print: k -- Print: m -- Print: d -- Print: l -- Print: f -- Print: k -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- Print: f -- Print: l -- Print: g -- Print: k -- Print: m -- Print: d -- Print: l -- Print: f -- Print: k -- Print: g -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- Print: f -- Print: l -- Print: g -- Print: k -- Print: m -- Print: d -- Print: l -- Print: f -- Print: k -- Print: g -- Print: m -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- Print: f -- Print: l -- Print: g -- Print: k -- Print: m -- Print: d -- Print: l -- Print: f -- Print: k -- Print: g -- Print: m -- Print: l -- Print: k -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- Print: f -- Print: l -- Print: g -- Print: k -- Print: m -- Print: d -- Print: l -- Print: f -- Print: k -- Print: g -- Print: m -- Print: l -- Print: k -- Print: m -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- Print: f -- Print: l -- Print: g -- Print: k -- Print: m -- Print: d -- Print: l -- Print: f -- Print: k -- Print: g -- Print: m -- Print: l -- Print: k -- Print: m -- Print: l -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- Print: f -- Print: l -- Print: g -- Print: k -- Print: m -- Print: d -- Print: l -- Print: f -- Print: k -- Print: g -- Print: m -- Print: l -- Print: k -- Print: m -- Print: l -- Print: k -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "2" -- Print: "9" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- CsiDispatch: - params: - - - 36 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 54 - - 109 -- Print: l -- Print: k -- Print: d -- Print: m -- Print: f -- Print: l -- Print: g -- Print: k -- Print: m -- Print: d -- Print: l -- Print: f -- Print: k -- Print: g -- Print: m -- Print: l -- Print: k -- Print: m -- Print: l -- Print: k -- Print: m -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: S - raw_bytes: - - 27 - - 91 - - 49 - - 83 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 68 - - - 48 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 68 - - 59 - - 48 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 6 - intermediates: [] - ignore: false - c: n - raw_bytes: - - 27 - - 91 - - 54 - - 110 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: l - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 108 -- CsiDispatch: - params: - - - 31 - - - 1 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 72 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: J - raw_bytes: - - 27 - - 91 - - 74 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 10 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 48 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 65 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 65 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 1 - - - 32 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 59 - - 51 - - 50 - - 109 -- Print: "~" -- OscDispatch: - params: - - - 49 - - 51 - - 51 - - - 66 - bell_terminated: false - raw_bytes: - - 27 - - 93 - - 49 - - 51 - - 51 - - 59 - - 66 - - 27 -- EscDispatch: - intermediates: [] - ignore: false - byte: 92 - raw_bytes: - - 92 -- CsiDispatch: - params: - - - 38 - - - 5 - - - 14 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 49 - - 52 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- Print: ">" -- Print: " " -- CsiDispatch: - params: - - - 38 - - - 5 - - - 5 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 51 - - 56 - - 59 - - 53 - - 59 - - 53 - - 109 -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- CsiDispatch: - params: - - - 31 - - - 112 - intermediates: [] - ignore: false - c: H - raw_bytes: - - 27 - - 91 - - 51 - - 49 - - 59 - - 49 - - 49 - - 50 - - 72 -- Print: "0" -- Print: "4" -- Print: / -- Print: "1" -- Print: "3" -- Print: / -- Print: "2" -- Print: "0" -- Print: "2" -- Print: "3" -- Print: " " -- Print: "1" -- Print: "1" -- Print: ":" -- Print: "2" -- Print: "5" -- Print: ":" -- Print: "4" -- Print: "5" -- Print: " " -- Print: P -- Print: M -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 0 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 48 - - 109 -- EscDispatch: - intermediates: [] - ignore: false - byte: 55 - raw_bytes: - - 27 - - 55 -- EscDispatch: - intermediates: [] - ignore: false - byte: 56 - raw_bytes: - - 27 - - 56 -- CsiDispatch: - params: - - - 2 - intermediates: - - 32 - ignore: false - c: q - raw_bytes: - - 27 - - 91 - - 50 - - 32 - - 113 -- CsiDispatch: - params: - - - 25 - intermediates: - - 63 - ignore: false - c: h - raw_bytes: - - 27 - - 91 - - 63 - - 50 - - 53 - - 104 - diff --git a/src/snapshots/escape_artist__set_bold.snap b/src/snapshots/escape_artist__set_bold.snap deleted file mode 100644 index b4d3d3f..0000000 --- a/src/snapshots/escape_artist__set_bold.snap +++ /dev/null @@ -1,16 +0,0 @@ ---- -source: src/main.rs -expression: events ---- -- CsiDispatch: - params: - - - 1 - intermediates: [] - ignore: false - c: m - raw_bytes: - - 27 - - 91 - - 49 - - 109 - From b18643293c7ab9018e8fb0ff4c3d854212df0d19 Mon Sep 17 00:00:00 2001 From: Reilly Wood Date: Sat, 30 Mar 2024 16:24:29 -0700 Subject: [PATCH 2/5] better CSI and control codes --- src/main.rs | 75 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 52 insertions(+), 23 deletions(-) diff --git a/src/main.rs b/src/main.rs index 15d875f..167cf28 100644 --- a/src/main.rs +++ b/src/main.rs @@ -407,8 +407,6 @@ enum VteEventDto { impl From<&(Action, Vec)> for VteEventDto { fn from(value: &(Action, Vec)) -> Self { let (action, raw_bytes) = value; - let raw_bytes = sanitize_raw_bytes(raw_bytes); - match action { Action::Print(c) => VteEventDto::Print { string: c.to_string(), @@ -420,39 +418,25 @@ impl From<&(Action, Vec)> for VteEventDto { color: None, bg_color: None, }, - Action::Control(ctrl) => { - if matches!(ctrl, ControlCode::CarriageReturn) { - return VteEventDto::LineBreak { title: "CR".into() }; - } - if matches!(ctrl, ControlCode::LineFeed) { - return VteEventDto::LineBreak { title: "LF".into() }; - } - let description = format!("{ctrl:?}"); - VteEventDto::GenericEscape { - title: Some(description), - icon_svg: None, - tooltip: None, - raw_bytes, - } - } + Action::Control(ctrl) => ctrl_to_dto(ctrl), Action::DeviceControl(dcm) => VteEventDto::GenericEscape { title: Some(format!("DCM {dcm:?}")), icon_svg: None, tooltip: None, - raw_bytes, + raw_bytes: sanitize_raw_bytes(raw_bytes), }, Action::OperatingSystemCommand(osc) => VteEventDto::GenericEscape { title: Some(format!("OSC {osc:?}")), icon_svg: None, tooltip: None, - raw_bytes, + raw_bytes: sanitize_raw_bytes(raw_bytes), }, - Action::CSI(csi) => csi_to_dto(csi, raw_bytes), + Action::CSI(csi) => csi_to_dto(csi, sanitize_raw_bytes(raw_bytes)), Action::Esc(e) => VteEventDto::GenericEscape { title: Some(format!("ESC {e:?}")), icon_svg: None, tooltip: None, - raw_bytes, + raw_bytes: sanitize_raw_bytes(raw_bytes), }, Action::Sixel(_) => todo!("sixel not implemented yet"), Action::XtGetTcap(_) => todo!("xt get tcap not implemented yet"), @@ -461,6 +445,27 @@ impl From<&(Action, Vec)> for VteEventDto { } } +fn ctrl_to_dto(ctrl: &ControlCode) -> VteEventDto { + if matches!(ctrl, ControlCode::CarriageReturn) { + return VteEventDto::LineBreak { title: "CR".into() }; + } + if matches!(ctrl, ControlCode::LineFeed) { + return VteEventDto::LineBreak { title: "LF".into() }; + } + + let as_byte = *ctrl as u8; + + // let (title, tooltip, icon_svg) = match csi { + + let title = format!("{ctrl:?}"); + VteEventDto::GenericEscape { + title: Some(title), + icon_svg: None, + tooltip: None, + raw_bytes: format!("{:#02x}", as_byte), + } +} + fn csi_to_dto(csi: &CSI, raw_bytes: String) -> VteEventDto { let (title, tooltip, icon_svg) = match csi { CSI::Sgr(sgr) => match sgr { @@ -469,9 +474,33 @@ fn csi_to_dto(csi: &CSI, raw_bytes: String) -> VteEventDto { Some("SGR (Select Graphic Rendition) Reset".into()), Some(iconify::svg!("carbon:reset").into()), ), - _ => (Some("SGR".into()), None, None), + Sgr::Foreground(color) => ( + Some("FG".into()), + Some(format!("Set foreground color to: {color:?}")), + None, + ), + Sgr::Background(color) => ( + Some("BG".into()), + Some(format!("Set background color to: {color:?}")), + None, + ), + + _ => (Some("SGR".into()), Some(format!("Set {sgr:?}")), None), }, - _ => (Some("CSI".into()), None, None), + CSI::Cursor(cursor) => ( + None, + Some(format!("Move cursor: {cursor:?}")), + Some(iconify::svg!("ph:cursor-text-fill").into()), + ), + // CSI::Edit(_) => todo!(), + // CSI::Mode(_) => todo!(), + // CSI::Device(_) => todo!(), + // CSI::Mouse(_) => todo!(), + // CSI::Window(_) => todo!(), + // CSI::Keyboard(_) => todo!(), + // CSI::SelectCharacterPath(_, _) => todo!(), + // CSI::Unspecified(_) => todo!(), + _ => (Some("CSI".into()), Some(format!("{csi:?}")), None), }; VteEventDto::GenericEscape { From 5f6387656cbc62d814a224e6412b4380cc15401f Mon Sep 17 00:00:00 2001 From: Reilly Wood Date: Sun, 31 Mar 2024 09:10:42 -0700 Subject: [PATCH 3/5] implement coalescing optimizations, more icons etc --- embed/script.js | 14 +++--- src/main.rs | 122 ++++++++++++++++++++++++++++++++++-------------- 2 files changed, 93 insertions(+), 43 deletions(-) diff --git a/embed/script.js b/embed/script.js index fe37723..ac84b63 100644 --- a/embed/script.js +++ b/embed/script.js @@ -17,6 +17,12 @@ url.protocol = url.protocol.replace("http", "ws"); let events = []; +function showTooltip(event) { + const tooltip = document.querySelector('#tooltip'); + tooltip.style.display = 'block'; + update(event.target); +} + function Event(props) { let dto = props.dto; const shared_classes = "w-fit outline outline-1 rounded-sm px-1 m-1 bg-slate-800" @@ -33,16 +39,8 @@ function Event(props) { } case "GenericEscape": { let border = !!dto.tooltip ? "outline-blue-400" : "outline-slate-400"; - - let showTooltip = (event) => { - const tooltip = document.querySelector('#tooltip'); - tooltip.style.display = 'block'; - update(event.target); - } - let svg = dto.icon_svg ? html`` : html``; let title = dto.title ? html`${dto.title}` : ``; - return html`
Result<()> { let mut bg_color = ColorSpec::Default; while let Some((action, raw_bytes)) = action_receiver.recv().await { - update_global_colors(&action, &mut fg_color, &mut bg_color); + // optimization: if the last DTO was a print and this action is a print, concatenate them + // this greatly cuts down on the number of events sent to the front-end + if let Some(VteEventDto::Print { + string: last_string, + .. + }) = cloned_state.all_dtos.lock().await.last_mut() + { + if let Action::Print(c) = &action { + last_string.push(*c); + let tuple = (action, raw_bytes); + let dto = VteEventDto::from(&tuple); + let _ = cloned_state.tx.send(dto); + continue; + } + } + + // otherwise, carry on; update global colours if needed and add the event to the list + + update_global_colors(&action, &mut fg_color, &mut bg_color); let tuple = (action, raw_bytes); let mut dto = VteEventDto::from(&tuple); update_dto_color(&mut dto, fg_color, bg_color); @@ -190,7 +208,7 @@ fn main() -> Result<()> { }); // start web server and attempt to open it in browser - let cloned_state = state; + let cloned_state = state.clone(); let _webserver = runtime.spawn(async move { let app = Router::new() .route("/", get(root)) @@ -236,6 +254,12 @@ fn main() -> Result<()> { // EOF child.clone_killer().kill()?; drop(_clean_up); + let event_count = &state.all_dtos.blocking_lock().len(); + println!( + "{}{}", + "Exited. Viewed ".cyan(), + format!("{} escape codes", event_count).magenta() + ); // print_all_events(&state.all_events.blocking_lock()); return Ok(()); } @@ -304,7 +328,7 @@ async fn stream_events(app_state: AppState, mut ws: WebSocket) { let mut rx = app_state.tx.subscribe(); // throttle event sending so we can cut down on renders - const THROTTLE_DURATION: Duration = Duration::from_millis(10); + const THROTTLE_DURATION: Duration = Duration::from_millis(100); let mut batch = vec![]; let mut next_send = Instant::now() + THROTTLE_DURATION; @@ -313,16 +337,16 @@ async fn stream_events(app_state: AppState, mut ws: WebSocket) { // TODO rebuild this // optimization: if this is a string and the last item in the batch is also a string, concatenate them // this greatly cuts down on the number of events sent to the front-end - // if let VteEventDto::Print { string } = &e { - // if let Some(VteEventDto::Print { - // string: last_string, - // .. - // }) = batch.last_mut() - // { - // last_string.push_str(string); - // continue; - // } - // } + if let VteEventDto::Print { string, .. } = &e { + if let Some(VteEventDto::Print { + string: last_string, + .. + }) = batch.last_mut() + { + last_string.push_str(string); + continue; + } + } batch.push(e) } @@ -432,12 +456,7 @@ impl From<&(Action, Vec)> for VteEventDto { raw_bytes: sanitize_raw_bytes(raw_bytes), }, Action::CSI(csi) => csi_to_dto(csi, sanitize_raw_bytes(raw_bytes)), - Action::Esc(e) => VteEventDto::GenericEscape { - title: Some(format!("ESC {e:?}")), - icon_svg: None, - tooltip: None, - raw_bytes: sanitize_raw_bytes(raw_bytes), - }, + Action::Esc(e) => esc_to_dto(e, raw_bytes), Action::Sixel(_) => todo!("sixel not implemented yet"), Action::XtGetTcap(_) => todo!("xt get tcap not implemented yet"), Action::KittyImage(_) => todo!("kitty image not implemented yet"), @@ -445,24 +464,57 @@ impl From<&(Action, Vec)> for VteEventDto { } } -fn ctrl_to_dto(ctrl: &ControlCode) -> VteEventDto { - if matches!(ctrl, ControlCode::CarriageReturn) { - return VteEventDto::LineBreak { title: "CR".into() }; - } - if matches!(ctrl, ControlCode::LineFeed) { - return VteEventDto::LineBreak { title: "LF".into() }; +fn esc_to_dto(esc: &Esc, raw_bytes: &[u8]) -> VteEventDto { + let raw_bytes_str = sanitize_raw_bytes(raw_bytes); + match esc { + Esc::Unspecified { .. } => VteEventDto::GenericEscape { + title: None, + icon_svg: Some(iconify::svg!("mdi:question-mark-box").into()), + tooltip: Some("Unspecified escape sequence".into()), + raw_bytes: raw_bytes_str, + }, + Esc::Code(code) => match code { + EscCode::StringTerminator => VteEventDto::GenericEscape { + title: Some("\\".into()), + icon_svg: None, + tooltip: Some("ST / String Terminator".into()), + raw_bytes: raw_bytes_str, + }, + _ => VteEventDto::GenericEscape { + title: Some(format!("ESC {code:?}")), + icon_svg: None, + tooltip: None, + raw_bytes: raw_bytes_str, + }, + }, } +} +fn ctrl_to_dto(ctrl: &ControlCode) -> VteEventDto { let as_byte = *ctrl as u8; - - // let (title, tooltip, icon_svg) = match csi { - - let title = format!("{ctrl:?}"); - VteEventDto::GenericEscape { - title: Some(title), - icon_svg: None, - tooltip: None, - raw_bytes: format!("{:#02x}", as_byte), + let raw_bytes = format!("{:#02x}", as_byte); + + match ctrl { + ControlCode::Bell => VteEventDto::GenericEscape { + title: None, + icon_svg: Some(iconify::svg!("mdi:bell").into()), + tooltip: Some("Bell".into()), + raw_bytes, + }, + ControlCode::Backspace => VteEventDto::GenericEscape { + title: None, + icon_svg: Some(iconify::svg!("mdi:backspace").into()), + tooltip: Some("Backspace".into()), + raw_bytes, + }, + ControlCode::LineFeed => VteEventDto::LineBreak { title: "LF".into() }, + ControlCode::CarriageReturn => VteEventDto::LineBreak { title: "CR".into() }, + _ => VteEventDto::GenericEscape { + title: Some(format!("{ctrl:?}")), + icon_svg: None, + tooltip: None, + raw_bytes, + }, } } From 4c7201d82a3248aac2b429d6162c4a726b64c070 Mon Sep 17 00:00:00 2001 From: Reilly Wood Date: Sun, 31 Mar 2024 19:13:00 -0700 Subject: [PATCH 4/5] fewer panics --- src/main.rs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 96ed730..a14f371 100644 --- a/src/main.rs +++ b/src/main.rs @@ -457,9 +457,24 @@ impl From<&(Action, Vec)> for VteEventDto { }, Action::CSI(csi) => csi_to_dto(csi, sanitize_raw_bytes(raw_bytes)), Action::Esc(e) => esc_to_dto(e, raw_bytes), - Action::Sixel(_) => todo!("sixel not implemented yet"), - Action::XtGetTcap(_) => todo!("xt get tcap not implemented yet"), - Action::KittyImage(_) => todo!("kitty image not implemented yet"), + Action::Sixel(_) => VteEventDto::GenericEscape { + title: Some("Sixel".into()), + icon_svg: Some(iconify::svg!("mdi:image").into()), + tooltip: Some("Sixel image".into()), + raw_bytes: sanitize_raw_bytes(raw_bytes), + }, + Action::XtGetTcap(x) => VteEventDto::GenericEscape { + title: Some("XTGETTCAP".into()), + icon_svg: None, + tooltip: Some(format!("Get termcap, terminfo for: {}", x.join(", "))), + raw_bytes: sanitize_raw_bytes(raw_bytes), + }, + Action::KittyImage(_) => VteEventDto::GenericEscape { + title: Some("Kitty".into()), + icon_svg: Some(iconify::svg!("mdi:image").into()), + tooltip: Some("Kitty image".into()), + raw_bytes: sanitize_raw_bytes(raw_bytes), + }, } } } From fed8431496e61b733d5884fbdf24d3e727634a65 Mon Sep 17 00:00:00 2001 From: Reilly Wood Date: Sun, 31 Mar 2024 19:31:22 -0700 Subject: [PATCH 5/5] Add icons for saving/restoring curos --- src/main.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index a14f371..82d40ec 100644 --- a/src/main.rs +++ b/src/main.rs @@ -495,6 +495,18 @@ fn esc_to_dto(esc: &Esc, raw_bytes: &[u8]) -> VteEventDto { tooltip: Some("ST / String Terminator".into()), raw_bytes: raw_bytes_str, }, + EscCode::DecSaveCursorPosition => VteEventDto::GenericEscape { + title: None, + icon_svg: Some(iconify::svg!("mdi:content-save").into()), + tooltip: Some("Save cursor position".into()), + raw_bytes: raw_bytes_str, + }, + EscCode::DecRestoreCursorPosition => VteEventDto::GenericEscape { + title: None, + icon_svg: Some(iconify::svg!("mdi:file-restore").into()), + tooltip: Some("Restore cursor position".into()), + raw_bytes: raw_bytes_str, + }, _ => VteEventDto::GenericEscape { title: Some(format!("ESC {code:?}")), icon_svg: None, @@ -538,7 +550,7 @@ fn csi_to_dto(csi: &CSI, raw_bytes: String) -> VteEventDto { CSI::Sgr(sgr) => match sgr { Sgr::Reset => ( None, - Some("SGR (Select Graphic Rendition) Reset".into()), + Some("SGR (Select Graphic Rendition) Reset (reset all styles)".into()), Some(iconify::svg!("carbon:reset").into()), ), Sgr::Foreground(color) => (