improve gui, add tick

This commit is contained in:
mtgmonkey 2025-07-06 22:22:17 -04:00
parent 883b94f1eb
commit 900bc2e56e
5 changed files with 291 additions and 88 deletions

304
Cargo.lock generated
View file

@ -132,12 +132,23 @@ version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532"
dependencies = [ dependencies = [
"event-listener", "event-listener 5.4.0",
"event-listener-strategy", "event-listener-strategy",
"futures-core", "futures-core",
"pin-project-lite", "pin-project-lite",
] ]
[[package]]
name = "async-channel"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
dependencies = [
"concurrent-queue",
"event-listener 2.5.3",
"futures-core",
]
[[package]] [[package]]
name = "async-channel" name = "async-channel"
version = "2.3.1" version = "2.3.1"
@ -158,21 +169,53 @@ checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa"
dependencies = [ dependencies = [
"async-task", "async-task",
"concurrent-queue", "concurrent-queue",
"fastrand", "fastrand 2.3.0",
"futures-lite", "futures-lite 2.6.0",
"pin-project-lite", "pin-project-lite",
"slab", "slab",
] ]
[[package]]
name = "async-fs"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06"
dependencies = [
"async-lock 2.8.0",
"autocfg",
"blocking",
"futures-lite 1.13.0",
]
[[package]] [[package]]
name = "async-fs" name = "async-fs"
version = "2.1.2" version = "2.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a"
dependencies = [ dependencies = [
"async-lock", "async-lock 3.4.0",
"blocking", "blocking",
"futures-lite", "futures-lite 2.6.0",
]
[[package]]
name = "async-io"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
dependencies = [
"async-lock 2.8.0",
"autocfg",
"cfg-if",
"concurrent-queue",
"futures-lite 1.13.0",
"log",
"parking",
"polling 2.8.0",
"rustix 0.37.28",
"slab",
"socket2",
"waker-fn",
] ]
[[package]] [[package]]
@ -181,45 +224,82 @@ version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1237c0ae75a0f3765f58910ff9cdd0a12eeb39ab2f4c7de23262f337f0aacbb3" checksum = "1237c0ae75a0f3765f58910ff9cdd0a12eeb39ab2f4c7de23262f337f0aacbb3"
dependencies = [ dependencies = [
"async-lock", "async-lock 3.4.0",
"cfg-if", "cfg-if",
"concurrent-queue", "concurrent-queue",
"futures-io", "futures-io",
"futures-lite", "futures-lite 2.6.0",
"parking", "parking",
"polling", "polling 3.8.0",
"rustix 1.0.7", "rustix 1.0.7",
"slab", "slab",
"tracing", "tracing",
"windows-sys 0.59.0", "windows-sys 0.59.0",
] ]
[[package]]
name = "async-lock"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
dependencies = [
"event-listener 2.5.3",
]
[[package]] [[package]]
name = "async-lock" name = "async-lock"
version = "3.4.0" version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18"
dependencies = [ dependencies = [
"event-listener", "event-listener 5.4.0",
"event-listener-strategy", "event-listener-strategy",
"pin-project-lite", "pin-project-lite",
] ]
[[package]]
name = "async-net"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f"
dependencies = [
"async-io 1.13.0",
"blocking",
"futures-lite 1.13.0",
]
[[package]]
name = "async-process"
version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88"
dependencies = [
"async-io 1.13.0",
"async-lock 2.8.0",
"async-signal",
"blocking",
"cfg-if",
"event-listener 3.1.0",
"futures-lite 1.13.0",
"rustix 0.38.44",
"windows-sys 0.48.0",
]
[[package]] [[package]]
name = "async-process" name = "async-process"
version = "2.3.1" version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cde3f4e40e6021d7acffc90095cbd6dc54cb593903d1de5832f435eb274b85dc" checksum = "cde3f4e40e6021d7acffc90095cbd6dc54cb593903d1de5832f435eb274b85dc"
dependencies = [ dependencies = [
"async-channel", "async-channel 2.3.1",
"async-io", "async-io 2.4.1",
"async-lock", "async-lock 3.4.0",
"async-signal", "async-signal",
"async-task", "async-task",
"blocking", "blocking",
"cfg-if", "cfg-if",
"event-listener", "event-listener 5.4.0",
"futures-lite", "futures-lite 2.6.0",
"rustix 1.0.7", "rustix 1.0.7",
"tracing", "tracing",
] ]
@ -241,8 +321,8 @@ version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7605a4e50d4b06df3898d5a70bf5fde51ed9059b0434b73105193bc27acce0d" checksum = "d7605a4e50d4b06df3898d5a70bf5fde51ed9059b0434b73105193bc27acce0d"
dependencies = [ dependencies = [
"async-io", "async-io 2.4.1",
"async-lock", "async-lock 3.4.0",
"atomic-waker", "atomic-waker",
"cfg-if", "cfg-if",
"futures-core", "futures-core",
@ -339,10 +419,10 @@ version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea"
dependencies = [ dependencies = [
"async-channel", "async-channel 2.3.1",
"async-task", "async-task",
"futures-io", "futures-io",
"futures-lite", "futures-lite 2.6.0",
"piper", "piper",
] ]
@ -392,7 +472,7 @@ checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec"
dependencies = [ dependencies = [
"bitflags 2.9.1", "bitflags 2.9.1",
"log", "log",
"polling", "polling 3.8.0",
"rustix 0.38.44", "rustix 0.38.44",
"slab", "slab",
"thiserror", "thiserror",
@ -927,6 +1007,23 @@ dependencies = [
"num-traits", "num-traits",
] ]
[[package]]
name = "event-listener"
version = "2.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
[[package]]
name = "event-listener"
version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2"
dependencies = [
"concurrent-queue",
"parking",
"pin-project-lite",
]
[[package]] [[package]]
name = "event-listener" name = "event-listener"
version = "5.4.0" version = "5.4.0"
@ -944,7 +1041,7 @@ version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
dependencies = [ dependencies = [
"event-listener", "event-listener 5.4.0",
"pin-project-lite", "pin-project-lite",
] ]
@ -954,6 +1051,15 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1" checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1"
[[package]]
name = "fastrand"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
dependencies = [
"instant",
]
[[package]] [[package]]
name = "fastrand" name = "fastrand"
version = "2.3.0" version = "2.3.0"
@ -969,18 +1075,6 @@ dependencies = [
"simd-adler32", "simd-adler32",
] ]
[[package]]
name = "filetime"
version = "0.2.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586"
dependencies = [
"cfg-if",
"libc",
"libredox",
"windows-sys 0.59.0",
]
[[package]] [[package]]
name = "flate2" name = "flate2"
version = "1.1.2" version = "1.1.2"
@ -1099,13 +1193,28 @@ version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
[[package]]
name = "futures-lite"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
dependencies = [
"fastrand 1.9.0",
"futures-core",
"futures-io",
"memchr",
"parking",
"pin-project-lite",
"waker-fn",
]
[[package]] [[package]]
name = "futures-lite" name = "futures-lite"
version = "2.6.0" version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532"
dependencies = [ dependencies = [
"fastrand", "fastrand 2.3.0",
"futures-core", "futures-core",
"futures-io", "futures-io",
"parking", "parking",
@ -1346,6 +1455,12 @@ dependencies = [
"winapi", "winapi",
] ]
[[package]]
name = "hermit-abi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
[[package]] [[package]]
name = "hermit-abi" name = "hermit-abi"
version = "0.5.2" version = "0.5.2"
@ -1408,6 +1523,7 @@ dependencies = [
"iced_core", "iced_core",
"log", "log",
"rustc-hash 2.1.1", "rustc-hash 2.1.1",
"smol",
"wasm-bindgen-futures", "wasm-bindgen-futures",
"wasm-timer", "wasm-timer",
] ]
@ -1561,6 +1677,17 @@ dependencies = [
"cfg-if", "cfg-if",
] ]
[[package]]
name = "io-lifetimes"
version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
dependencies = [
"hermit-abi 0.3.9",
"libc",
"windows-sys 0.48.0",
]
[[package]] [[package]]
name = "jni" name = "jni"
version = "0.21.1" version = "0.21.1"
@ -1673,6 +1800,12 @@ dependencies = [
"redox_syscall 0.5.13", "redox_syscall 0.5.13",
] ]
[[package]]
name = "linux-raw-sys"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
[[package]] [[package]]
name = "linux-raw-sys" name = "linux-raw-sys"
version = "0.4.15" version = "0.4.15"
@ -1870,7 +2003,7 @@ version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b"
dependencies = [ dependencies = [
"hermit-abi", "hermit-abi 0.5.2",
"libc", "libc",
] ]
@ -2333,7 +2466,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066"
dependencies = [ dependencies = [
"atomic-waker", "atomic-waker",
"fastrand", "fastrand 2.3.0",
"futures-io", "futures-io",
] ]
@ -2356,6 +2489,22 @@ dependencies = [
"miniz_oxide", "miniz_oxide",
] ]
[[package]]
name = "polling"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
dependencies = [
"autocfg",
"bitflags 1.3.2",
"cfg-if",
"concurrent-queue",
"libc",
"log",
"pin-project-lite",
"windows-sys 0.48.0",
]
[[package]] [[package]]
name = "polling" name = "polling"
version = "3.8.0" version = "3.8.0"
@ -2364,7 +2513,7 @@ checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"concurrent-queue", "concurrent-queue",
"hermit-abi", "hermit-abi 0.5.2",
"pin-project-lite", "pin-project-lite",
"rustix 1.0.7", "rustix 1.0.7",
"tracing", "tracing",
@ -2578,9 +2727,6 @@ version = "0.1.0"
dependencies = [ dependencies = [
"iced", "iced",
"nix 0.30.1", "nix 0.30.1",
"tar",
"tempfile",
"winit",
] ]
[[package]] [[package]]
@ -2595,6 +2741,20 @@ version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
[[package]]
name = "rustix"
version = "0.37.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6"
dependencies = [
"bitflags 1.3.2",
"errno",
"io-lifetimes",
"libc",
"linux-raw-sys 0.3.8",
"windows-sys 0.48.0",
]
[[package]] [[package]]
name = "rustix" name = "rustix"
version = "0.38.44" version = "0.38.44"
@ -2820,6 +2980,23 @@ dependencies = [
"wayland-backend", "wayland-backend",
] ]
[[package]]
name = "smol"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1"
dependencies = [
"async-channel 1.9.0",
"async-executor",
"async-fs 1.6.0",
"async-io 1.13.0",
"async-lock 2.8.0",
"async-net",
"async-process 1.8.1",
"blocking",
"futures-lite 1.13.0",
]
[[package]] [[package]]
name = "smol_str" name = "smol_str"
version = "0.2.2" version = "0.2.2"
@ -2829,6 +3006,16 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "socket2"
version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
dependencies = [
"libc",
"winapi",
]
[[package]] [[package]]
name = "softbuffer" name = "softbuffer"
version = "0.4.6" version = "0.4.6"
@ -2840,7 +3027,7 @@ dependencies = [
"cfg_aliases 0.2.1", "cfg_aliases 0.2.1",
"core-graphics 0.24.0", "core-graphics 0.24.0",
"drm", "drm",
"fastrand", "fastrand 2.3.0",
"foreign-types", "foreign-types",
"js-sys", "js-sys",
"log", "log",
@ -2930,23 +3117,13 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "tar"
version = "0.4.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a"
dependencies = [
"filetime",
"libc",
]
[[package]] [[package]]
name = "tempfile" name = "tempfile"
version = "3.20.0" version = "3.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1"
dependencies = [ dependencies = [
"fastrand", "fastrand 2.3.0",
"getrandom 0.3.3", "getrandom 0.3.3",
"once_cell", "once_cell",
"rustix 1.0.7", "rustix 1.0.7",
@ -3185,6 +3362,12 @@ version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]]
name = "waker-fn"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7"
[[package]] [[package]]
name = "walkdir" name = "walkdir"
version = "2.5.0" version = "2.5.0"
@ -3611,6 +3794,15 @@ dependencies = [
"windows-targets 0.42.2", "windows-targets 0.42.2",
] ]
[[package]]
name = "windows-sys"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
"windows-targets 0.48.5",
]
[[package]] [[package]]
name = "windows-sys" name = "windows-sys"
version = "0.52.0" version = "0.52.0"
@ -4046,16 +4238,16 @@ checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725"
dependencies = [ dependencies = [
"async-broadcast", "async-broadcast",
"async-executor", "async-executor",
"async-fs", "async-fs 2.1.2",
"async-io", "async-io 2.4.1",
"async-lock", "async-lock 3.4.0",
"async-process", "async-process 2.3.1",
"async-recursion", "async-recursion",
"async-task", "async-task",
"async-trait", "async-trait",
"blocking", "blocking",
"enumflags2", "enumflags2",
"event-listener", "event-listener 5.4.0",
"futures-core", "futures-core",
"futures-sink", "futures-sink",
"futures-util", "futures-util",

View file

@ -5,4 +5,4 @@ edition = "2024"
[dependencies] [dependencies]
nix = { version = "0.30.1", features = ["term", "process", "fs"], default-features = false } nix = { version = "0.30.1", features = ["term", "process", "fs"], default-features = false }
iced = "0.13.1" iced = { version = "0.13.1", features = ["smol"] }

View file

@ -14,7 +14,7 @@
... ...
}: }:
naersk.buildPackage rec { naersk.buildPackage rec {
name = "rust_pty"; name = "rust_term";
src = ./.; src = ./.;
buildInputs = [ buildInputs = [
busybox-sandbox-shell busybox-sandbox-shell

View file

@ -1,5 +1,6 @@
use iced::Element; use iced::Element;
use iced::widget::{column, scrollable, text, text_input}; use iced::Font;
use iced::widget::{column, row, scrollable, text, text_input};
use nix::pty::{ForkptyResult, forkpty}; use nix::pty::{ForkptyResult, forkpty};
use nix::unistd::write; use nix::unistd::write;
@ -49,6 +50,7 @@ fn set_nonblock(fd: &OwnedFd) {
pub enum Msg { pub enum Msg {
HasInput, HasInput,
InputChanged(String), InputChanged(String),
Tick,
} }
pub struct Model { pub struct Model {
@ -83,36 +85,51 @@ impl Model {
write_buffer.push(b'\n'); write_buffer.push(b'\n');
write(self.fd.as_fd(), &mut write_buffer); write(self.fd.as_fd(), &mut write_buffer);
self.input = String::new(); self.input = String::new();
let mut nored = 0;
while nored <= 2 {
let red = read_from_fd(&self.fd);
match &red {
Some(red) => {
nored += 1;
self.update_screen_buffer(red);
}
None => (),
};
}
} }
Msg::InputChanged(input) => self.input = input, Msg::InputChanged(input) => self.input = input,
Msg::Tick => match read_from_fd(&self.fd) {
Some(red) => self.update_screen_buffer(&red),
None => (),
},
} }
} }
pub fn view(&self) -> Element<'_, Msg> { pub fn view(&self) -> Element<'_, Msg> {
scrollable(column![ let (left, right) = match String::from_utf8(self.screen_buffer.to_vec())
text(String::from( .unwrap()
.trim_end_matches('\0')
.rsplit_once('\n')
{
Some(tup) => (tup.0.to_string(), tup.1.to_string()),
None => (
String::new(),
String::from_utf8(self.screen_buffer.to_vec()) String::from_utf8(self.screen_buffer.to_vec())
.unwrap() .unwrap()
.trim_end_matches('\0') .trim_end_matches('\0')
)), .to_string(),
text_input("", &self.input) ),
.on_input(Msg::InputChanged) };
.on_submit(Msg::HasInput) scrollable(column![
text(left).font(Font::MONOSPACE),
row![
text(right).font(Font::MONOSPACE),
text_input("", &self.input)
.on_input(Msg::InputChanged)
.on_submit(Msg::HasInput)
.font(Font::MONOSPACE)
]
]) ])
.into() .into()
} }
pub fn theme(&self) -> iced::Theme {
iced::Theme::GruvboxDark
}
pub fn subscription(&self) -> iced::Subscription<Msg> {
iced::time::every(iced::time::Duration::new(0, 100)).map(|_| Msg::Tick)
}
fn update_screen_buffer(&mut self, vec: &Vec<u8>) { fn update_screen_buffer(&mut self, vec: &Vec<u8>) {
let offset = self.screen_buffer.iter().position(|&c| c == b'\0').unwrap(); let offset = self.screen_buffer.iter().position(|&c| c == b'\0').unwrap();
for (i, chr) in vec.iter().enumerate() { for (i, chr) in vec.iter().enumerate() {

View file

@ -1,18 +1,12 @@
use iced::Element;
use iced::widget::{button, text};
use nix::unistd::write;
use std::fs::File;
use std::io::Read;
use std::io::Write;
use std::os::unix::io::{AsFd, OwnedFd};
use rust_term::*; use rust_term::*;
fn main() -> iced::Result { fn main() -> iced::Result {
iced::run("test", Model::update, Model::view) iced::application("test", Model::update, Model::view)
/* let default_shell = "/home/mtgmonkey/.nix-profile/bin/dash".to_string(); .theme(Model::theme)
.subscription(Model::subscription)
.run()
/*
let default_shell = "/home/mtgmonkey/.nix-profile/bin/dash".to_string();
let fd = spawn_pty_with_shell(default_shell); let fd = spawn_pty_with_shell(default_shell);
let mut write_buffer = "tty\n".as_bytes().to_vec(); let mut write_buffer = "tty\n".as_bytes().to_vec();
write(fd.as_fd(), &mut write_buffer); write(fd.as_fd(), &mut write_buffer);