diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 29aa721a..532582fd 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -11,48 +11,36 @@ env: jobs: build: - name: Build & test + name: Build & Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Add WASM target run: rustup target add wasm32-wasi - - name: Build - run: ./build-all.sh --verbose - - name: Run tests - run: cargo test -j 1 --verbose - fmt: - name: Rustfmt + - name: Install cargo-make + run: cargo install --debug cargo-make + - name: Build & Test + run: cargo make + + format: + name: Check Formatting runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: stable - override: true - - run: rustup component add rustfmt - - uses: actions-rs/cargo@v1 - with: - command: fmt - args: --all -- --check + - uses: actions/checkout@v2 + - name: Install cargo-make + run: cargo install --debug cargo-make + - name: Check Format + run: cargo make check-format + clippy: - name: Clippy + name: Check Clippy Lints runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - components: clippy - - name: Add WASM target - run: rustup target add wasm32-wasi - - name: Build - run: ./build-all.sh --verbose - - uses: actions-rs/cargo@v1 - with: - command: clippy - args: --all-features --all-targets + - uses: actions/checkout@v2 + - name: Install cargo-make + run: cargo install --debug cargo-make + - name: Check Lints + run: cargo make clippy -D clippy::all diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 45af4a8c..f833285a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,16 +14,30 @@ Before contributing please read our [Code of Conduct](CODE_OF_CONDUCT.md) which all contributors are expected to adhere to. ## Building -To work around a [Cargo bug][https://github.com/rust-lang/cargo/issues/7004], you'll need to use the included `build-all.sh` script. +To build Zellij, we're using cargo-make – you can install it by running `cargo install --force cargo-make`. + +Here are some of the commands currently supported by the build system: ```sh -# An unoptimized debug build -./build-all.sh -# A fully optimized release build -./build-all.sh --release +# Format code, build, then run tests and clippy +cargo make +# You can also perform these actions individually +cargo make format +cargo make build +cargo make test +# Run Zellij (optionally with a non-default layout) +cargo make run +cargo make run strider +# Run Clippy (potentially with additional options) +cargo make clippy +cargo make clippy -W clippy::pedantic +# Install Zellij to some directory +cargo make install /path/of/zellij/binary +# Publish the zellij and zellij-tile crates +cargo make publish ``` -The build script has an optional dependency on `binaryen --version` > 97, for it's command `wasm-opt`. +To run `install` or `publish`, you'll need `binaryen --version` > 97, for it's command `wasm-opt`. ## Looking for something to work on? diff --git a/Cargo.lock b/Cargo.lock index abc7504b..471408e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,5 +1,7 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +version = 3 + [[package]] name = "addr2line" version = "0.14.1" @@ -207,11 +209,10 @@ dependencies = [ [[package]] name = "bincode" -version = "1.3.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d175dfa69e619905c4c3cdb7c3c203fa3bdd5d51184e3afdb2742c0280493772" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ - "byteorder", "serde", ] @@ -255,9 +256,9 @@ checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe" [[package]] name = "byteorder" -version = "1.3.4" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "cache-padded" @@ -320,9 +321,9 @@ dependencies = [ [[package]] name = "console" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc80946b3480f421c2f17ed1cb841753a371c7c5104f51d507e13f532c856aa" +checksum = "3993e6445baa160675931ec041a5e03ca84b9c6e32a056150d3aa2bdda0a1f45" dependencies = [ "encode_unicode", "lazy_static", @@ -407,9 +408,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", @@ -452,9 +453,9 @@ dependencies = [ [[package]] name = "ctor" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8f45d9ad417bcef4817d614a501ab55cdd96a6fdb24f49aab89a54acfd66b19" +checksum = "5e98e2ad1a782e33928b96fc3948e7c355e5af34ba4de7670fe8bac2a3b2006d" dependencies = [ "quote", "syn", @@ -462,9 +463,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06d4a9551359071d1890820e3571252b91229e0712e7c36b08940e603c5a8fc" +checksum = "e9d6ddad5866bb2170686ed03f6839d31a76e5407d80b1c334a2c24618543ffa" dependencies = [ "darling_core", "darling_macro", @@ -472,9 +473,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b443e5fb0ddd56e0c9bfa47dc060c5306ee500cb731f2b91432dd65589a77684" +checksum = "a9ced1fd13dc386d5a8315899de465708cf34ee2a6d9394654515214e67bb846" dependencies = [ "fnv", "ident_case", @@ -486,9 +487,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0220073ce504f12a70efc4e7cdaea9e9b1b324872e7ad96a208056d7a638b81" +checksum = "0a7a1445d54b2f9792e3b31a3e715feabbace393f38dc4ffd49d94ee9bc487d5" dependencies = [ "darling_core", "quote", @@ -518,9 +519,9 @@ dependencies = [ [[package]] name = "dtoa" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d7ed2934d741c6b37e33e3832298e8850b53fd2d2bea03873375596c7cea4e" +checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" [[package]] name = "either" @@ -599,9 +600,9 @@ checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" [[package]] name = "futures" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f55667319111d593ba876406af7c409c0ebb44dc4be6132a783ccf163ea14c1" +checksum = "a9d5813545e459ad3ca1bff9915e9ad7f1a47dc6a91b627ce321d5863b7dd253" dependencies = [ "futures-channel", "futures-core", @@ -614,9 +615,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c2dd2df839b57db9ab69c2c9d8f3e8c81984781937fe2807dc6dcf3b2ad2939" +checksum = "ce79c6a52a299137a6013061e0cf0e688fce5d7f1bc60125f520912fdb29ec25" dependencies = [ "futures-core", "futures-sink", @@ -624,15 +625,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15496a72fabf0e62bdc3df11a59a3787429221dd0710ba8ef163d6f7a9112c94" +checksum = "098cd1c6dda6ca01650f1a37a794245eb73181d0d4d4e955e2f3c37db7af1815" [[package]] name = "futures-executor" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891a4b7b96d84d5940084b2a37632dd65deeae662c114ceaa2c879629c9c0ad1" +checksum = "10f6cb7042eda00f0049b1d2080aa4b93442997ee507eb3828e8bd7577f94c9d" dependencies = [ "futures-core", "futures-task", @@ -641,9 +642,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71c2c65c57704c32f5241c1223167c2c3294fd34ac020c807ddbe6db287ba59" +checksum = "365a1a1fb30ea1c03a830fdb2158f5236833ac81fa0ad12fe35b29cddc35cb04" [[package]] name = "futures-lite" @@ -662,9 +663,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea405816a5139fb39af82c2beb921d52143f556038378d6db21183a5c37fbfb7" +checksum = "668c6733a182cd7deb4f1de7ba3bf2120823835b3bcfbeacf7d2c4a773c1bb8b" dependencies = [ "proc-macro-hack", "proc-macro2", @@ -674,21 +675,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85754d98985841b7d4f5e8e6fbfa4a4ac847916893ec511a2917ccd8525b8bb3" +checksum = "5c5629433c555de3d82861a7a4e3794a4c40040390907cfbfd7143a92a426c23" [[package]] name = "futures-task" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa189ef211c15ee602667a6fcfe1c1fd9e07d42250d2156382820fba33c9df80" +checksum = "ba7aa51095076f3ba6d9a1f702f74bd05ec65f555d70d2033d55ba8d69f581bc" [[package]] name = "futures-util" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1812c7ab8aedf8d6f2701a43e1243acdbcc2b36ab26e2ad421eb99ac963d96d1" +checksum = "3c144ad54d60f23927f0a6b6d816e4271278b64f005ad65e4e35291d2de9c025" dependencies = [ "futures-channel", "futures-core", @@ -818,9 +819,9 @@ dependencies = [ [[package]] name = "insta" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b6cf41e31a7e7b78055b548826da45c7dc74e6a13a3fa6b897a17a01322f26" +checksum = "c4a1b21a2971cea49ca4613c0e9fe8225ecaf5de64090fddc6002284726e9244" dependencies = [ "console", "lazy_static", @@ -893,9 +894,9 @@ checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" [[package]] name = "js-sys" -version = "0.3.48" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc9f84f9b115ce7843d60706df1422a916680bfdfcbdb0447c5614ff9d7e4d78" +checksum = "2d99f9e3e84b8f67f846ef5b4cbbc3b1c29f6c759fcbce6f01aa0e73d932a24c" dependencies = [ "wasm-bindgen", ] @@ -936,9 +937,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.88" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b07a082330a35e43f63177cc01689da34fbffa0105e1246cf0311472cac73a" +checksum = "9385f66bf6105b241aa65a61cb923ef20efc665cb9f9bb50ac2f0c4b7f378d41" [[package]] name = "libloading" @@ -958,9 +959,9 @@ checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" [[package]] name = "lock_api" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" +checksum = "5a3c91c24eae6777794bb1997ad98bbb87daf92890acab859f7eaa4320333176" dependencies = [ "scopeguard", ] @@ -992,18 +993,18 @@ checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" [[package]] name = "memmap2" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e3e85b970d650e2ae6d70592474087051c11c54da7f7b4949725c5735fbcc6" +checksum = "397d1a6d6d0563c0f5462bbdae662cf6c784edf5e828e40c7257f85d82bf56dd" dependencies = [ "libc", ] [[package]] name = "memoffset" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87" +checksum = "f83fb6581e8ed1f85fd45c116db8405483899489e38406156c25eb743554361d" dependencies = [ "autocfg", ] @@ -1026,9 +1027,9 @@ checksum = "0debeb9fcf88823ea64d64e4a815ab1643f33127d995978e099942ce38f25238" [[package]] name = "nb-connect" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670361df1bc2399ee1ff50406a0d422587dd3bb0da596e1978fe8e05dabddf4f" +checksum = "a19900e7eee95eb2b3c2e26d12a874cc80aaf750e31be6fcbe743ead369fa45d" dependencies = [ "libc", "socket2", @@ -1117,11 +1118,11 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "polling" -version = "2.0.2" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a7bc6b2a29e632e45451c941832803a18cce6781db04de8a04696cdca8bde4" +checksum = "4fc12d774e799ee9ebae13f4076ca003b40d18a11ac0f3641e6f899618580b7b" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", "log", "wepoll-sys", @@ -1182,9 +1183,9 @@ checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec" dependencies = [ "unicode-xid", ] @@ -1347,15 +1348,6 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "scopeguard" version = "1.1.0" @@ -1364,9 +1356,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "serde" -version = "1.0.124" +version = "1.0.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd761ff957cb2a45fbb9ab3da6512de9de55872866160b23c25f1a841e99d29f" +checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171" dependencies = [ "serde_derive", ] @@ -1382,9 +1374,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.124" +version = "1.0.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1800f7693e94e186f5e25a28291ae1570da908aff7d97a095dec1e56ff99069b" +checksum = "b093b7a2bb58203b5da3056c05b4ec1fed827dcfdb37347a8841695263b3d06d" dependencies = [ "proc-macro2", "quote", @@ -1416,9 +1408,9 @@ dependencies = [ [[package]] name = "signal-hook" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7f3f92a1da3d6b1d32245d0cbcbbab0cfc45996d8df619c42bccfa6d2bbb5f" +checksum = "ef33d6d0cd06e0840fba9985aab098c147e67e05cee14d412d3345ed14ff30ac" dependencies = [ "libc", "signal-hook-registry", @@ -1453,11 +1445,10 @@ checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" [[package]] name = "socket2" -version = "0.3.19" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" +checksum = "9e3dfc207c526015c632472a77be09cf1b6e46866581aecae5cc38fb4235dea2" dependencies = [ - "cfg-if 1.0.0", "libc", "winapi", ] @@ -1566,9 +1557,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.62" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "123a78a3596b24fee53a6464ce52d8ecbf62241e6294c7e7fe12086cd161f512" +checksum = "48fe99c6bd8b1cc636890bcc071842de909d902c81ac7dab53ba33c421ab8ffb" dependencies = [ "proc-macro2", "quote", @@ -1680,15 +1671,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "toml" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" -dependencies = [ - "serde", -] - [[package]] name = "tracing" version = "0.1.25" @@ -1704,9 +1686,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.13" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a9bd1db7706f2373a190b0d067146caa39350c486f3d455b0e33b431f94c07" +checksum = "c42e6fa53307c8a17e4ccd4dc81cf5ec38db9209f59b222210375b54ee40d1e2" dependencies = [ "proc-macro2", "quote", @@ -1802,9 +1784,9 @@ dependencies = [ [[package]] name = "vec-arena" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eafc1b9b2dfc6f5529177b62cf806484db55b32dc7c9658a118e11bbeb33061d" +checksum = "34b2f665b594b07095e3ac3f718e13c2197143416fae4c5706cffb7b1af8d7f1" [[package]] name = "vec_map" @@ -1814,9 +1796,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" [[package]] name = "vte" @@ -1854,17 +1836,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" -[[package]] -name = "walkdir" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" -dependencies = [ - "same-file", - "winapi", - "winapi-util", -] - [[package]] name = "wasi" version = "0.10.2+wasi-snapshot-preview1" @@ -1873,9 +1844,9 @@ checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" [[package]] name = "wasm-bindgen" -version = "0.2.71" +version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee1280240b7c461d6a0071313e08f34a60b0365f14260362e5a2b17d1d31aa7" +checksum = "83240549659d187488f91f33c0f8547cbfef0b2088bc470c116d1d260ef623d9" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -1883,9 +1854,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.71" +version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b7d8b6942b8bb3a9b0e73fc79b98095a27de6fa247615e59d096754a3bc2aa8" +checksum = "ae70622411ca953215ca6d06d3ebeb1e915f0f6613e3b495122878d7ebec7dae" dependencies = [ "bumpalo", "lazy_static", @@ -1898,9 +1869,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.21" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e67a5806118af01f0d9045915676b22aaebecf4178ae7021bc171dab0b897ab" +checksum = "81b8b767af23de6ac18bf2168b690bed2902743ddf0fb39252e36f9e2bfc63ea" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -1910,9 +1881,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.71" +version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ac38da8ef716661f0f36c0d8320b89028efe10c7c0afde65baffb496ce0d3b" +checksum = "3e734d91443f177bfdb41969de821e15c516931c3c3db3d318fa1b68975d0f6f" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1920,9 +1891,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.71" +version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc053ec74d454df287b9374ee8abb36ffd5acb95ba87da3ba5b7d3fe20eb401e" +checksum = "d53739ff08c8a68b0fdbcd54c372b8ab800b1449ab3c9d706503bc7dd1621b2c" dependencies = [ "proc-macro2", "quote", @@ -1933,9 +1904,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.71" +version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d6f8ec44822dd71f5f221a5847fb34acd9060535c1211b70a05844c0f6383b1" +checksum = "d9a543ae66aa233d14bb765ed9af4a33e81b8b58d1584cf1b47ff8cd0b9e4489" [[package]] name = "wasmer" @@ -2139,27 +2110,27 @@ checksum = "87cc2fe6350834b4e528ba0901e7aa405d78b89dc1fa3145359eb4de0e323fcf" [[package]] name = "wast" -version = "35.0.0" +version = "35.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db5ae96da18bb5926341516fd409b5a8ce4e4714da7f0a1063d3b20ac9f9a1e1" +checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68" dependencies = [ "leb128", ] [[package]] name = "wat" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b0fa059022c5dabe129f02b429d67086400deb8277f89c975555dacc1dadbcc" +checksum = "8ec280a739b69173e0ffd12c1658507996836ba4e992ed9bc1e5385a0bd72a02" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.48" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec600b26223b2948cedfde2a0aa6756dcf1fef616f43d7b3097aaf53a6c4d92b" +checksum = "a905d57e488fec8861446d3393670fb50d27a262344013181c2cdf9fff5481be" dependencies = [ "js-sys", "wasm-bindgen", @@ -2176,12 +2147,12 @@ dependencies = [ [[package]] name = "which" -version = "4.0.2" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c14ef7e1b8b8ecfc75d5eca37949410046e66f15d185c01d70824f1f8111ef" +checksum = "b55551e42cbdf2ce2bedd2203d0cc08dba002c27510f86dab6d0ce304cba3dfe" dependencies = [ + "either", "libc", - "thiserror", ] [[package]] @@ -2200,15 +2171,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -2255,11 +2217,9 @@ dependencies = [ "strum", "termion", "termios", - "toml", "unicode-truncate", "unicode-width", "vte 0.8.0", - "walkdir", "wasmer", "wasmer-wasi", "zellij-tile", diff --git a/Cargo.toml b/Cargo.toml index ee226a9b..a581dda6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,9 +7,6 @@ description = "Terminal workspace (WIP)" license = "MIT" repository = "https://github.com/zellij-org/zellij" -[features] -publish = [] - # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] @@ -47,10 +44,7 @@ features = ["unstable"] insta = "1.6.0" [build-dependencies] -directories-next = "2.0" structopt = "0.3" -walkdir = "2" -toml = "0.5.8" [workspace] members = [ @@ -58,6 +52,7 @@ members = [ "default-tiles/status-bar", "default-tiles/strider", "default-tiles/tab-bar", + ".", ] [profile.release] diff --git a/Makefile.toml b/Makefile.toml new file mode 100644 index 00000000..a4388ebc --- /dev/null +++ b/Makefile.toml @@ -0,0 +1,167 @@ +# Global Settings +[env] +CARGO_MAKE_EXTEND_WORKSPACE_MAKEFILE = true +SKIP_TEST = false + +# Add clippy to the default flow +[tasks.dev-test-flow] +dependencies = [ + "format-flow", + "format-toml-conditioned-flow", + "pre-build", + "build", + "post-build", + "test-flow", + "clippy", +] + +# Patching the default flows to skip testing of wasm32-wasi targets +[tasks.pre-test] +condition = { env = { "CARGO_MAKE_CRATE_TARGET_TRIPLE" = "wasm32-wasi" } } +env = { "SKIP_TEST" = true } + +[tasks.test] +condition = { env_false = ["SKIP_TEST"] } +dependencies = ["pre-test"] + +[tasks.post-test] +env = { "SKIP_TEST" = false } + +# Running Zellij using patched layouts +[tasks.run] +workspace = false +dependencies = ["build-workspace", "patch-layouts"] +run_task = "launch" + +[tasks.build-workspace] +run_task = { name = "build", fork = true } + +[tasks.patch-layouts] +script_runner = "@rust" +script = ''' +//! ```cargo +//! [dependencies] +//! yaml-rust = "0.4" +//! ``` +use std::{env, error::Error, fs, path::Path}; +use yaml_rust::{Yaml, YamlEmitter, YamlLoader}; + +fn main() -> Result<(), Box> { + let root = env::var("CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY")?; + let layout_path = Path::new(&root).join("assets/layouts"); + for layout in fs::read_dir(layout_path)? { + let layout = layout?.path(); + let yaml = fs::read_to_string(&layout)?; + let yaml = YamlLoader::load_from_str(&yaml)?.remove(0); + let yaml = patch_plugins(&root, yaml); + let new_layout = Path::new(&root) + .join("target") + .join(layout.file_name().unwrap()); + let mut new_yaml = String::new(); + let mut emitter = YamlEmitter::new(&mut new_yaml); + emitter.dump(&yaml)?; + fs::write(new_layout, new_yaml)?; + } + Ok(()) +} + +fn patch_plugins(root: &str, part: Yaml) -> Yaml { + let mut map = part.into_hash().unwrap(); + if let Some(plugin) = map.get_mut(&Yaml::from_str("plugin")) { + let new_plugin = Path::new(root) + .join("target/wasm32-wasi/debug") + .join(plugin.as_str().unwrap()); + *plugin = Yaml::String(new_plugin.to_string_lossy().into_owned()); + } + if let Some(parts) = map.get_mut(&Yaml::from_str("parts")) { + let new_parts = parts + .clone() + .into_iter() + .map(|p| patch_plugins(root, p)) + .collect(); + *parts = Yaml::Array(new_parts); + } + Yaml::Hash(map) +} +''' + +[tasks.pre-launch] +script_runner = "@duckscript" +script = ''' +if is_empty ${CARGO_MAKE_TASK_ARGS} + set_env CARGO_MAKE_TASK_ARGS default +end +''' + +[tasks.launch] +dependencies = ["pre-launch"] +command = "cargo" +args = ["run", "--", "-l", "${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/target/${CARGO_MAKE_TASK_ARGS}.yaml"] + +# Simple clippy tweak +[tasks.clippy] +args = ["clippy", "--", "@@split(CARGO_MAKE_TASK_ARGS,;)"] + +# Release building and installing Zellij +[tasks.install] +workspace = false +dependencies = ["build-tiles-release", "wasm-opt-tiles", "build-release", "clear-data-directory"] +script_runner = "@duckscript" +script = ''' +cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/target/release/${CARGO_MAKE_CRATE_NAME} ${CARGO_MAKE_TASK_ARGS} +''' + +[tasks.build-tiles-release] +env = { "CARGO_MAKE_WORKSPACE_SKIP_MEMBERS" = ["."] } +run_task = { name = "build-release", fork = true } + +[tasks.wasm-opt-tiles] +script_runner = "@duckscript" +script = ''' +tiles = glob_array ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/target/wasm32-wasi/release/*.wasm + +for tile in ${tiles} + tile_name = basename ${tile} + tile_out = set ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/assets/plugins/${tile_name} + if is_path_newer ${tile} ${tile_out} + exec wasm-opt -O ${tile} -o ${tile_out} + end +end +''' + +# FIXME: Maybe this should be more generic? Or just blow away the whole directory? +[tasks.clear-data-directory] +script_runner = "@rust" +script = ''' +//! ```cargo +//! [dependencies] +//! directories-next = "2.0" +//! ``` +use directories_next::ProjectDirs; +use std::fs; + +fn main() { + let project_dirs = ProjectDirs::from("org", "Zellij Contributors", "Zellij").unwrap(); + let data_dir = project_dirs.data_dir(); + drop(fs::remove_file(data_dir.join("plugins/status-bar.wasm"))); + drop(fs::remove_file(data_dir.join("plugins/tab-bar.wasm"))); + drop(fs::remove_file(data_dir.join("plugins/strider.wasm"))); + drop(fs::remove_file(data_dir.join("layouts/default.yaml"))); + drop(fs::remove_file(data_dir.join("layouts/strider.yaml"))); +} +''' + +# Publishing Zellij +[tasks.publish] +clear = true +workspace = false +dependencies = ["build-tiles-release", "wasm-opt-tiles", "build-release", "publish-zellij-tile", "publish-zellij"] + +[tasks.publish-zellij-tile] +cwd = "zellij-tile" +command = "cargo" +args = ["publish"] + +[tasks.publish-zellij] +command = "cargo" +args = ["publish"] \ No newline at end of file diff --git a/README.md b/README.md index 203de8cc..8b05e1f5 100644 --- a/README.md +++ b/README.md @@ -30,12 +30,16 @@ Zellij was initially called "Mosaic". ## How to use it? * Clone the project -* In the project folder, run: `./build-all.sh && cargo run` +* Install cargo-make with `cargo install --force cargo-make` +* Make sure that the `~/.cargo/bin` directory is on your PATH +* In the project folder, run: `cargo make run` (note that right now Zellij only supports linux and mac) The status bar on the bottom should guide you through the possible keyboard shortcuts in the app. +For more build commands, take a look at [`Contributing.md`](CONTRIBUTING.md). + # Configuration It is possible to configure keyboard shortcuts and their actions in a yaml file. An example file can be found under `example/config.yaml`. diff --git a/assets/plugins/status-bar.wasm b/assets/plugins/status-bar.wasm index 7a5b0e51..5dba9a50 100644 Binary files a/assets/plugins/status-bar.wasm and b/assets/plugins/status-bar.wasm differ diff --git a/assets/plugins/strider.wasm b/assets/plugins/strider.wasm index ec479353..e9024abb 100644 Binary files a/assets/plugins/strider.wasm and b/assets/plugins/strider.wasm differ diff --git a/assets/plugins/tab-bar.wasm b/assets/plugins/tab-bar.wasm index e895d7ea..cc2f9eef 100644 Binary files a/assets/plugins/tab-bar.wasm and b/assets/plugins/tab-bar.wasm differ diff --git a/build-all.sh b/build-all.sh deleted file mode 100755 index f267b110..00000000 --- a/build-all.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -total=5 - -# This is temporary while https://github.com/rust-lang/cargo/issues/7004 is open - -echo "Building status-bar (1/$total)..." -cd default-tiles/status-bar -cargo build --release --target-dir ../../target - -echo "Building strider (2/$total)..." -cd ../strider -cargo build --release --target-dir ../../target - -echo "Building tab-bar (3/$total)..." -cd ../tab-bar -cargo build --release --target-dir ../../target - -echo "Optimising WASM executables (4/$total)..." -cd ../.. -wasm-opt -O target/wasm32-wasi/release/status-bar.wasm -o target/status-bar.wasm || cp target/wasm32-wasi/release/status-bar.wasm target/status-bar.wasm -wasm-opt -O target/wasm32-wasi/release/strider.wasm -o target/strider.wasm || cp target/wasm32-wasi/release/strider.wasm target/strider.wasm -wasm-opt -O target/wasm32-wasi/release/tab-bar.wasm -o target/tab-bar.wasm || cp target/wasm32-wasi/release/tab-bar.wasm target/tab-bar.wasm -echo "Building zellij (5/$total)..." -cargo build --target-dir target $@ diff --git a/build.rs b/build.rs index fdb7ab7a..3240db67 100644 --- a/build.rs +++ b/build.rs @@ -1,7 +1,5 @@ -use directories_next::ProjectDirs; -use std::{ffi::OsStr, fs}; +use std::fs; use structopt::clap::Shell; -use walkdir::WalkDir; include!("src/cli.rs"); @@ -22,32 +20,4 @@ fn main() { clap_app.gen_completions(BIN_NAME, Shell::Bash, &out_dir); clap_app.gen_completions(BIN_NAME, Shell::Zsh, &out_dir); clap_app.gen_completions(BIN_NAME, Shell::Fish, &out_dir); - - // Clear Default Plugins and Layouts - - // Rerun on layout change - for entry in WalkDir::new("assets/layouts") { - let entry = entry.unwrap(); - println!("cargo:rerun-if-changed={}", entry.path().to_string_lossy()); - } - - // Rerun on plugin change - #[cfg(not(feature = "publish"))] - let plugin_dir = "target"; - #[cfg(feature = "publish")] - let plugin_dir = "assets/plugins"; - for entry in WalkDir::new(plugin_dir) { - let entry = entry.unwrap(); - if entry.path().extension() == Some(OsStr::new("wasm")) { - println!("cargo:rerun-if-changed={}", entry.path().to_string_lossy()); - } - } - - let project_dirs = ProjectDirs::from("org", "Zellij Contributors", "Zellij").unwrap(); - let data_dir = project_dirs.data_dir(); - drop(fs::remove_file(data_dir.join("plugins/status-bar.wasm"))); - drop(fs::remove_file(data_dir.join("plugins/tab-bar.wasm"))); - drop(fs::remove_file(data_dir.join("plugins/strider.wasm"))); - drop(fs::remove_file(data_dir.join("layouts/default.yaml"))); - drop(fs::remove_file(data_dir.join("layouts/strider.yaml"))); } diff --git a/publish.sh b/publish.sh deleted file mode 100755 index d6e22da8..00000000 --- a/publish.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -total=6 - -echo "Building zellij-tile (1/$total)..." -cd zellij-tile -cargo build --release -echo "Building status-bar (2/$total)..." -cd ../default-tiles/status-bar -cargo build --release -echo "Building strider (3/$total)..." -cd ../strider -cargo build --release -echo "Building tab-bar (4/$total)..." -cd ../tab-bar -cargo build --release -echo "Optimising WASM executables (5/$total)..." -cd ../.. -wasm-opt -O target/wasm32-wasi/release/status-bar.wasm -o assets/plugins/status-bar.wasm -wasm-opt -O target/wasm32-wasi/release/strider.wasm -o assets/plugins/strider.wasm -wasm-opt -O target/wasm32-wasi/release/tab-bar.wasm -o assets/plugins/tab-bar.wasm -echo "Publishing zellij (6/$total)..." -cargo publish --features publish $@ diff --git a/rust-toolchain b/rust-toolchain index 89459e2c..09f9a2a1 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1,8 +1,4 @@ -# https://rust-lang.github.io/rustup/overrides.html#the-toolchain-file [toolchain] -# can be further pinned eg: -# date: "stable-2020-07-10" -# version: "nightly-1.0.0" -channel = "1.49.0" -components = [ "rustfmt", "rust-src", "clippy", "rust-analysis"] +channel = "nightly" +components = ["rustfmt", "clippy", "rust-analysis"] targets = ["wasm32-wasi"] diff --git a/src/client/pane_resizer.rs b/src/client/pane_resizer.rs index 007dc33f..16eda5c8 100644 --- a/src/client/pane_resizer.rs +++ b/src/client/pane_resizer.rs @@ -1,7 +1,10 @@ use crate::os_input_output::OsApi; use crate::panes::{PaneId, PositionAndSize}; use crate::tab::Pane; -use std::collections::{BTreeMap, HashSet}; +use std::{ + cmp::Ordering, + collections::{BTreeMap, HashSet}, +}; pub struct PaneResizer<'a> { panes: &'a mut BTreeMap>, @@ -29,63 +32,72 @@ impl<'a> PaneResizer<'a> { let mut successfully_resized = false; let mut column_difference: isize = 0; let mut row_difference: isize = 0; - if new_size.columns < current_size.columns { - let reduce_by = current_size.columns - new_size.columns; - find_reducible_vertical_chain( - &self.panes, - reduce_by, - current_size.columns, - current_size.rows, - ) - .map(|panes_to_resize| { - self.reduce_panes_left_and_pull_adjacents_left(panes_to_resize, reduce_by); - column_difference = new_size.columns as isize - current_size.columns as isize; - current_size.columns = (current_size.columns as isize + column_difference) as usize; - successfully_resized = true; - }); - } else if new_size.columns > current_size.columns { - let increase_by = new_size.columns - current_size.columns; - find_increasable_vertical_chain( - &self.panes, - increase_by, - current_size.columns, - current_size.rows, - ) - .map(|panes_to_resize| { - self.increase_panes_right_and_push_adjacents_right(panes_to_resize, increase_by); - column_difference = new_size.columns as isize - current_size.columns as isize; - current_size.columns = (current_size.columns as isize + column_difference) as usize; - successfully_resized = true; - }); + match new_size.columns.cmp(¤t_size.columns) { + Ordering::Greater => { + let increase_by = new_size.columns - current_size.columns; + if let Some(panes_to_resize) = find_increasable_vertical_chain( + &self.panes, + increase_by, + current_size.columns, + current_size.rows, + ) { + self.increase_panes_right_and_push_adjacents_right( + panes_to_resize, + increase_by, + ); + column_difference = new_size.columns as isize - current_size.columns as isize; + current_size.columns = + (current_size.columns as isize + column_difference) as usize; + successfully_resized = true; + }; + } + Ordering::Less => { + let reduce_by = current_size.columns - new_size.columns; + if let Some(panes_to_resize) = find_reducible_vertical_chain( + &self.panes, + reduce_by, + current_size.columns, + current_size.rows, + ) { + self.reduce_panes_left_and_pull_adjacents_left(panes_to_resize, reduce_by); + column_difference = new_size.columns as isize - current_size.columns as isize; + current_size.columns = + (current_size.columns as isize + column_difference) as usize; + successfully_resized = true; + }; + } + Ordering::Equal => (), } - if new_size.rows < current_size.rows { - let reduce_by = current_size.rows - new_size.rows; - find_reducible_horizontal_chain( - &self.panes, - reduce_by, - current_size.columns, - current_size.rows, - ) - .map(|panes_to_resize| { - self.reduce_panes_up_and_pull_adjacents_up(panes_to_resize, reduce_by); - row_difference = new_size.rows as isize - current_size.rows as isize; - current_size.rows = (current_size.rows as isize + row_difference) as usize; - successfully_resized = true; - }); - } else if new_size.rows > current_size.rows { - let increase_by = new_size.rows - current_size.rows; - find_increasable_horizontal_chain( - &self.panes, - increase_by, - current_size.columns, - current_size.rows, - ) - .map(|panes_to_resize| { - self.increase_panes_down_and_push_down_adjacents(panes_to_resize, increase_by); - row_difference = new_size.rows as isize - current_size.rows as isize; - current_size.rows = (current_size.rows as isize + row_difference) as usize; - successfully_resized = true; - }); + match new_size.rows.cmp(¤t_size.rows) { + Ordering::Greater => { + let increase_by = new_size.rows - current_size.rows; + if let Some(panes_to_resize) = find_increasable_horizontal_chain( + &self.panes, + increase_by, + current_size.columns, + current_size.rows, + ) { + self.increase_panes_down_and_push_down_adjacents(panes_to_resize, increase_by); + row_difference = new_size.rows as isize - current_size.rows as isize; + current_size.rows = (current_size.rows as isize + row_difference) as usize; + successfully_resized = true; + }; + } + Ordering::Less => { + let reduce_by = current_size.rows - new_size.rows; + if let Some(panes_to_resize) = find_reducible_horizontal_chain( + &self.panes, + reduce_by, + current_size.columns, + current_size.rows, + ) { + self.reduce_panes_up_and_pull_adjacents_up(panes_to_resize, reduce_by); + row_difference = new_size.rows as isize - current_size.rows as isize; + current_size.rows = (current_size.rows as isize + row_difference) as usize; + successfully_resized = true; + }; + } + Ordering::Equal => (), } if successfully_resized { Some((column_difference, row_difference)) @@ -229,13 +241,12 @@ impl<'a> PaneResizer<'a> { fn find_next_increasable_horizontal_pane( panes: &BTreeMap>, - right_of: &Box, + right_of: &dyn Pane, increase_by: usize, ) -> Option { let next_pane_candidates = panes.values().filter( |p| { - p.x() == right_of.x() + right_of.columns() + 1 - && p.horizontally_overlaps_with(right_of.as_ref()) + p.x() == right_of.x() + right_of.columns() + 1 && p.horizontally_overlaps_with(right_of) }, // TODO: the name here is wrong, it should be vertically_overlaps_with ); let resizable_candidates = @@ -255,11 +266,11 @@ fn find_next_increasable_horizontal_pane( fn find_next_increasable_vertical_pane( panes: &BTreeMap>, - below: &Box, + below: &dyn Pane, increase_by: usize, ) -> Option { let next_pane_candidates = panes.values().filter( - |p| p.y() == below.y() + below.rows() + 1 && p.vertically_overlaps_with(below.as_ref()), // TODO: the name here is wrong, it should be horizontally_overlaps_with + |p| p.y() == below.y() + below.rows() + 1 && p.vertically_overlaps_with(below), // TODO: the name here is wrong, it should be horizontally_overlaps_with ); let resizable_candidates = next_pane_candidates.filter(|p| p.can_increase_width_by(increase_by)); @@ -278,11 +289,11 @@ fn find_next_increasable_vertical_pane( fn find_next_reducible_vertical_pane( panes: &BTreeMap>, - below: &Box, + below: &dyn Pane, reduce_by: usize, ) -> Option { let next_pane_candidates = panes.values().filter( - |p| p.y() == below.y() + below.rows() + 1 && p.vertically_overlaps_with(below.as_ref()), // TODO: the name here is wrong, it should be horizontally_overlaps_with + |p| p.y() == below.y() + below.rows() + 1 && p.vertically_overlaps_with(below), // TODO: the name here is wrong, it should be horizontally_overlaps_with ); let resizable_candidates = next_pane_candidates.filter(|p| p.can_reduce_width_by(reduce_by)); resizable_candidates.fold(None, |next_pane_id, p| match next_pane_id { @@ -300,13 +311,12 @@ fn find_next_reducible_vertical_pane( fn find_next_reducible_horizontal_pane( panes: &BTreeMap>, - right_of: &Box, + right_of: &dyn Pane, reduce_by: usize, ) -> Option { let next_pane_candidates = panes.values().filter( |p| { - p.x() == right_of.x() + right_of.columns() + 1 - && p.horizontally_overlaps_with(right_of.as_ref()) + p.x() == right_of.x() + right_of.columns() + 1 && p.horizontally_overlaps_with(right_of) }, // TODO: the name here is wrong, it should be vertically_overlaps_with ); let resizable_candidates = next_pane_candidates.filter(|p| p.can_reduce_height_by(reduce_by)); @@ -351,7 +361,11 @@ fn find_increasable_horizontal_chain( if current_pane.x() + current_pane.columns() == screen_width { return Some(panes_to_resize); } - match find_next_increasable_horizontal_pane(panes, ¤t_pane, increase_by) { + match find_next_increasable_horizontal_pane( + panes, + current_pane.as_ref(), + increase_by, + ) { Some(next_pane_id) => { current_pane = panes.get(&next_pane_id).unwrap(); } @@ -397,7 +411,11 @@ fn find_increasable_vertical_chain( if current_pane.y() + current_pane.rows() == screen_height { return Some(panes_to_resize); } - match find_next_increasable_vertical_pane(panes, ¤t_pane, increase_by) { + match find_next_increasable_vertical_pane( + panes, + current_pane.as_ref(), + increase_by, + ) { Some(next_pane_id) => { current_pane = panes.get(&next_pane_id).unwrap(); } @@ -443,7 +461,11 @@ fn find_reducible_horizontal_chain( if current_pane.x() + current_pane.columns() == screen_width { return Some(panes_to_resize); } - match find_next_reducible_horizontal_pane(panes, ¤t_pane, reduce_by) { + match find_next_reducible_horizontal_pane( + panes, + current_pane.as_ref(), + reduce_by, + ) { Some(next_pane_id) => { current_pane = panes.get(&next_pane_id).unwrap(); } @@ -489,7 +511,11 @@ fn find_reducible_vertical_chain( if current_pane.y() + current_pane.rows() == screen_height { return Some(panes_to_resize); } - match find_next_reducible_vertical_pane(panes, ¤t_pane, increase_by) { + match find_next_reducible_vertical_pane( + panes, + current_pane.as_ref(), + increase_by, + ) { Some(next_pane_id) => { current_pane = panes.get(&next_pane_id).unwrap(); } diff --git a/src/client/panes/grid.rs b/src/client/panes/grid.rs index 7651bdc0..87df3023 100644 --- a/src/client/panes/grid.rs +++ b/src/client/panes/grid.rs @@ -29,11 +29,9 @@ fn get_top_non_canonical_rows(rows: &mut Vec) -> Vec { fn get_bottom_canonical_row_and_wraps(rows: &mut Vec) -> Vec { let mut index_of_last_non_canonical_row = None; for (i, row) in rows.iter().enumerate().rev() { + index_of_last_non_canonical_row = Some(i); if row.is_canonical { - index_of_last_non_canonical_row = Some(i); break; - } else { - index_of_last_non_canonical_row = Some(i); } } match index_of_last_non_canonical_row { @@ -496,9 +494,7 @@ impl Grid { } pub fn add_character(&mut self, terminal_character: TerminalCharacter) { // TODO: try to separate adding characters from moving the cursors in this function - if self.cursor.x < self.width { - self.insert_character_at_cursor_position(terminal_character); - } else { + if self.cursor.x >= self.width { // line wrap self.cursor.x = 0; if self.cursor.y == self.height - 1 { @@ -519,8 +515,8 @@ impl Grid { self.viewport.push(line_wrapped_row); } } - self.insert_character_at_cursor_position(terminal_character); } + self.insert_character_at_cursor_position(terminal_character); self.move_cursor_forward_until_edge(1); } pub fn move_cursor_forward_until_edge(&mut self, count: usize) { diff --git a/src/client/panes/plugin_pane.rs b/src/client/panes/plugin_pane.rs index 49cf2aee..24daec08 100644 --- a/src/client/panes/plugin_pane.rs +++ b/src/client/panes/plugin_pane.rs @@ -1,5 +1,3 @@ -#![allow(clippy::clippy::if_same_then_else)] - use crate::{common::SenderWithContext, pty_bus::VteBytes, tab::Pane, wasm_vm::PluginInstruction}; use std::{sync::mpsc::channel, unimplemented}; diff --git a/src/client/panes/terminal_character.rs b/src/client/panes/terminal_character.rs index ce967ef8..7569e993 100644 --- a/src/client/panes/terminal_character.rs +++ b/src/client/panes/terminal_character.rs @@ -48,7 +48,7 @@ pub enum NamedColor { } impl NamedColor { - fn to_foreground_ansi_code(&self) -> String { + fn to_foreground_ansi_code(self) -> String { match self { NamedColor::Black => format!("{}", 30), NamedColor::Red => format!("{}", 31), @@ -68,7 +68,7 @@ impl NamedColor { NamedColor::BrightWhite => format!("{}", 97), } } - fn to_background_ansi_code(&self) -> String { + fn to_background_ansi_code(self) -> String { match self { NamedColor::Black => format!("{}", 40), NamedColor::Red => format!("{}", 41), diff --git a/src/client/panes/terminal_pane.rs b/src/client/panes/terminal_pane.rs index d2473ba3..fd9bbb07 100644 --- a/src/client/panes/terminal_pane.rs +++ b/src/client/panes/terminal_pane.rs @@ -1,5 +1,3 @@ -#![allow(clippy::clippy::if_same_then_else)] - use crate::tab::Pane; use ::nix::pty::Winsize; use ::std::os::unix::io::RawFd; @@ -566,12 +564,6 @@ impl vte::Perform for TerminalPane { } else { self.grid.clear_scroll_region(); } - } else if c == 't' { - // TBD - title? - } else if c == 'n' { - // TBD - device status report - } else if c == 'c' { - // TBD - identify terminal } else if c == 'M' { // delete lines if currently inside scroll region let line_count_to_delete = if params[0] == 0 { diff --git a/src/client/tab.rs b/src/client/tab.rs index 9cafdcec..07e0f042 100644 --- a/src/client/tab.rs +++ b/src/client/tab.rs @@ -205,6 +205,7 @@ pub trait Pane { impl Tab { // FIXME: Too many arguments here! Maybe bundle all of the senders for the whole program in a struct? + #[allow(clippy::too_many_arguments)] pub fn new( index: usize, position: usize, @@ -1720,24 +1721,22 @@ impl Tab { // this is not ideal but until we get rid of expansion_boundary, it's a necessity self.toggle_active_pane_fullscreen(); } - match PaneResizer::new(&mut self.panes, &mut self.os_api) - .resize(self.full_screen_ws, new_screen_size) + if let Some((column_difference, row_difference)) = + PaneResizer::new(&mut self.panes, &mut self.os_api) + .resize(self.full_screen_ws, new_screen_size) { - Some((column_difference, row_difference)) => { - self.should_clear_display_before_rendering = true; - self.expansion_boundary.as_mut().map(|expansion_boundary| { - // TODO: this is not always accurate - expansion_boundary.columns = - (expansion_boundary.columns as isize + column_difference) as usize; - expansion_boundary.rows = - (expansion_boundary.rows as isize + row_difference) as usize; - }); - self.full_screen_ws.columns = - (self.full_screen_ws.columns as isize + column_difference) as usize; - self.full_screen_ws.rows = - (self.full_screen_ws.rows as isize + row_difference) as usize; - } - None => {} + self.should_clear_display_before_rendering = true; + if let Some(expansion_boundary) = self.expansion_boundary.as_mut() { + // TODO: this is not always accurate + expansion_boundary.columns = + (expansion_boundary.columns as isize + column_difference) as usize; + expansion_boundary.rows = + (expansion_boundary.rows as isize + row_difference) as usize; + }; + self.full_screen_ws.columns = + (self.full_screen_ws.columns as isize + column_difference) as usize; + self.full_screen_ws.rows = + (self.full_screen_ws.rows as isize + row_difference) as usize; }; } pub fn resize_left(&mut self) { diff --git a/src/common/input/config.rs b/src/common/input/config.rs index 4bb9e10f..1926b11c 100644 --- a/src/common/input/config.rs +++ b/src/common/input/config.rs @@ -51,7 +51,6 @@ impl Config { } /// Deserializes from given path. - #[allow(unused_must_use)] pub fn new(path: &Path) -> ConfigResult { match File::open(path) { Ok(mut file) => { @@ -90,7 +89,6 @@ impl Config { } } - //#[allow(unused_must_use)] /// In order not to mess up tests from changing configurations #[cfg(test)] pub fn from_cli_config(_: Option) -> ConfigResult { diff --git a/src/common/os_input_output.rs b/src/common/os_input_output.rs index 013b9f12..35d77fdd 100644 --- a/src/common/os_input_output.rs +++ b/src/common/os_input_output.rs @@ -84,15 +84,10 @@ fn handle_command_exit(mut child: Child) { } for signal in signals.pending() { - // FIXME: We need to handle more signals here! - #[allow(clippy::single_match)] - match signal { - SIGINT => { - child.kill().unwrap(); - child.wait().unwrap(); - break 'handle_exit; - } - _ => {} + if let SIGINT = signal { + child.kill().unwrap(); + child.wait().unwrap(); + break 'handle_exit; } } } diff --git a/src/common/screen.rs b/src/common/screen.rs index 1e37ca4f..01ac04fc 100644 --- a/src/common/screen.rs +++ b/src/common/screen.rs @@ -81,7 +81,9 @@ pub struct Screen { } impl Screen { + // FIXME: This lint needs actual fixing! Maybe by bundling the Senders /// Creates and returns a new [`Screen`]. + #[allow(clippy::too_many_arguments)] pub fn new( receive_screen_instructions: Receiver<(ScreenInstruction, ErrorContext)>, send_pty_instructions: SenderWithContext, diff --git a/src/common/utils/logging.rs b/src/common/utils/logging.rs index d08639aa..06827bfc 100644 --- a/src/common/utils/logging.rs +++ b/src/common/utils/logging.rs @@ -47,8 +47,7 @@ pub fn _debug_log_to_file_pid_3(message: String, pid: RawFd) -> io::Result<()> { } } -#[allow(dead_code)] -pub fn delete_log_file() -> io::Result<()> { +pub fn _delete_log_file() -> io::Result<()> { if fs::metadata(ZELLIJ_TMP_LOG_FILE).is_ok() { fs::remove_file(ZELLIJ_TMP_LOG_FILE) } else { @@ -56,8 +55,7 @@ pub fn delete_log_file() -> io::Result<()> { } } -#[allow(dead_code)] -pub fn delete_log_dir() -> io::Result<()> { +pub fn _delete_log_dir() -> io::Result<()> { if fs::metadata(ZELLIJ_TMP_LOG_DIR).is_ok() { fs::remove_dir_all(ZELLIJ_TMP_LOG_DIR) } else { diff --git a/src/common/utils/shared.rs b/src/common/utils/shared.rs index 93892d4f..d5ba943b 100644 --- a/src/common/utils/shared.rs +++ b/src/common/utils/shared.rs @@ -18,9 +18,9 @@ pub fn adjust_to_size(s: &str, rows: usize, columns: usize) -> String { if actual_len > columns { let mut line = String::from(l); line.truncate(columns); - return line; + line } else { - return [l, &str::repeat(" ", columns - ansi_len(l))].concat(); + [l, &str::repeat(" ", columns - ansi_len(l))].concat() } }) .chain(iter::repeat(str::repeat(" ", columns))) diff --git a/src/main.rs b/src/main.rs index 7d8ca6d5..d6cbb05d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -34,14 +34,6 @@ pub fn main() { "assets/layouts/default.yaml" => "layouts/default.yaml", "assets/layouts/strider.yaml" => "layouts/strider.yaml", }; - // FIXME: This is a hideous hack and I hate it (a lot) - #[cfg(not(feature = "publish"))] - assets.extend(asset_map! { - "target/status-bar.wasm" => "plugins/status-bar.wasm", - "target/tab-bar.wasm" => "plugins/tab-bar.wasm", - "target/strider.wasm" => "plugins/strider.wasm", - }); - #[cfg(feature = "publish")] assets.extend(asset_map! { "assets/plugins/status-bar.wasm" => "plugins/status-bar.wasm", "assets/plugins/tab-bar.wasm" => "plugins/tab-bar.wasm",