diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index f905eb2..a58d308 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -1,4 +1,4 @@
-# These are supported funding model platforms
-
-github: Kethku
-ko_fi: keithsimmons
+# These are supported funding model platforms
+
+github: Kethku
+ko_fi: keithsimmons
\ No newline at end of file
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 2d044aa..5daf9a5 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -10,7 +10,21 @@ jobs:
steps:
- uses: actions/checkout@v2
- - name: Check formatting
+ - name: Install Nightly Toolchain
+ uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: nightly
+ components: rustfmt, clippy
+ override: true
+
+ - name: Install Utilities
+ run: |
+ cargo install cargo2junit
+
+ - uses: Swatinem/rust-cache@v1
+
+ - name: Check Formatting
run: |
cargo fmt --all -- --check
@@ -27,7 +41,13 @@ jobs:
NEOVIM_BIN: "C:/tools/neovim/Neovim/bin/nvim.exe"
RUST_BACKTRACE: full
run: |
- cargo test
+ cargo test -- -- -Z unstable-options --format json | cargo2junit > results.xml
+
+ - name: Publish Test Results
+ uses: EnricoMi/publish-unit-test-result-action/composite@v1
+ if: always()
+ with:
+ files: results.xml
- name: Build Release
run: |
@@ -45,17 +65,26 @@ jobs:
steps:
- uses: actions/checkout@v2
- - name: Install Vulkan SDK
- run: brew install apenngrace/vulkan/vulkan-sdk
+ - name: Install Nightly Toolchain
+ uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: nightly
+ components: rustfmt, clippy
+ override: true
- - name: Check formatting
+ - name: Install Utilities
+ run: |
+ cargo install cargo2junit
+
+ - uses: Swatinem/rust-cache@v1
+
+ - name: Check Formatting
run: |
- rustup component add rustfmt --toolchain stable-x86_64-apple-darwin
cargo fmt --all -- --check
- name: Lint with Clippy
run: |
- rustup component add clippy --toolchain stable-x86_64-apple-darwin
cargo clippy --all -- -D warnings
- name: Uninstall Conflicting LLVM
@@ -67,8 +96,16 @@ jobs:
brew install neovim
- name: Test
+ env:
+ RUST_BACKTRACE: full
run: |
- RUST_BACKTRACE=full cargo test
+ cargo test -- -- -Z unstable-options --format json | cargo2junit > results.xml
+
+ - name: Publish Test Results
+ uses: EnricoMi/publish-unit-test-result-action/composite@v1
+ if: always()
+ with:
+ files: results.xml
- name: Build Release
run: |
@@ -76,18 +113,6 @@ jobs:
cargo install cargo-bundle
cargo bundle --release
- - name: Update Bundle
- run: |
- cd target/release/bundle/osx/Neovide.app/Contents
- mkdir Frameworks
- cp /usr/local/lib/libvulkan.dylib ./Frameworks/
- cp /usr/local/lib/libMoltenVK.dylib ./Frameworks/
- mkdir -p Resources/vulkan
- cp -r /usr/local/share/vulkan/icd.d ./Resources/vulkan/
- jq '.ICD.library_path = "../../../Frameworks/libMoltenVK.dylib"' ./Resources/vulkan/icd.d/MoltenVK_icd.json > MoltenVK_icd.json
- mv MoltenVK_icd.json ./Resources/vulkan/icd.d/
- install_name_tool -add_rpath "@executable_path/../Frameworks" ./MacOS/neovide
-
- name: Create .dmg file
run: |
hdiutil create Neovide-uncompressed.dmg -volname "Neovide" -srcfolder target/release/bundle/osx
@@ -105,18 +130,25 @@ jobs:
steps:
- uses: actions/checkout@v2
- - name: Install Vulkan SDK
- run: |
- curl -sL "http://packages.lunarg.com/lunarg-signing-key-pub.asc" | sudo apt-key add -
- sudo curl -sLo "/etc/apt/sources.list.d/lunarg-vulkan-1.2.131-bionic.list" "http://packages.lunarg.com/vulkan/1.2.131/lunarg-vulkan-1.2.131-bionic.list"
- sudo apt-get update -y --ignore-missing
- sudo apt-get install -y vulkan-sdk
+ - name: Install Nightly Toolchain
+ uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: nightly
+ components: rustfmt, clippy
+ override: true
+
+ - name: Install Utilities
+ run: |
+ cargo install cargo2junit
+
+ - uses: Swatinem/rust-cache@v1
- - name: Install dependencies
+ - name: Install Dependencies
run: |
- sudo apt-get install -y curl gnupg ca-certificates git gcc-multilib g++-multilib cmake libssl-dev pkg-config libfreetype6-dev libasound2-dev libexpat1-dev libxcb-composite0-dev libbz2-dev freeglut3-dev libxi-dev libsdl2-dev
+ sudo apt-get install -y curl gnupg ca-certificates git gcc-multilib g++-multilib cmake libssl-dev pkg-config libfreetype6-dev libasound2-dev libexpat1-dev libxcb-composite0-dev libbz2-dev freeglut3-dev libxi-dev
- - name: Check formatting
+ - name: Check Formatting
run: |
cargo fmt --all -- --check
@@ -129,8 +161,16 @@ jobs:
sudo apt-get install -y neovim
- name: Test
+ env:
+ RUST_BACKTRACE: full
run: |
- RUST_BACKTRACE=full cargo test
+ cargo test -- -- -Z unstable-options --format json | cargo2junit > results.xml
+
+ - name: Publish Test Results
+ uses: EnricoMi/publish-unit-test-result-action@v1
+ if: always()
+ with:
+ files: results.xml
- name: Build Release
run: |
@@ -140,3 +180,62 @@ jobs:
with:
name: neovide-linux
path: ./target/release/neovide
+
+ build-m1:
+
+ runs-on: self-hosted
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Install Nightly Toolchain
+ uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: nightly
+ components: rustfmt, clippy
+ override: true
+
+ - name: Install Utilities
+ run: |
+ cargo install cargo2junit
+
+ - name: Check Formatting
+ run: |
+ cargo fmt --all -- --check
+
+ - name: Lint with Clippy
+ run: |
+ cargo clippy --all -- -D warnings
+
+ - name: Install Neovim
+ run: |
+ brew install neovim
+
+ - name: Test
+ env:
+ RUST_BACKTRACE: full
+ run: |
+ cargo test -- -- -Z unstable-options --format json | cargo2junit > results.xml
+
+ - name: Publish Test Results
+ uses: EnricoMi/publish-unit-test-result-action/composite@v1
+ if: always()
+ with:
+ files: results.xml
+
+ - name: Build Release
+ run: |
+ cargo build --release
+ cargo install cargo-bundle
+ cargo bundle --release
+
+ - name: Create .dmg file
+ run: |
+ hdiutil create Neovide-uncompressed.dmg -volname "Neovide" -srcfolder target/release/bundle/osx
+ hdiutil convert Neovide-uncompressed.dmg -format UDZO -o Neovide.dmg
+
+ - uses: actions/upload-artifact@v1
+ with:
+ name: Neovide-m1.dmg
+ path: ./Neovide.dmg
diff --git a/.github/workflows/snap.yaml b/.github/workflows/snap.yaml
new file mode 100644
index 0000000..dab110d
--- /dev/null
+++ b/.github/workflows/snap.yaml
@@ -0,0 +1,26 @@
+name: Snap
+
+on: [push]
+
+jobs:
+ snap:
+ runs-on: ubuntu-18.04
+
+ steps:
+ - name: Check out Git repository
+ uses: actions/checkout@v2
+
+ - uses: snapcore/action-build@v1
+ env:
+ SNAPCRAFT_BUILD_ENVIRONMENT_MEMORY: 6G
+ id: snapcraft
+
+ - uses: actions/upload-artifact@v2
+ with:
+ name: snap
+ path: ${{ steps.snapcraft.outputs.snap }}
+
+ - uses: snapcore/action-publish@v1
+ with:
+ store_login: ${{ secrets.SNAPCRAFT_TOKEN }}
+ snap: ${{ steps.snapcraft.outputs.snap }}
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 82015db..6abcc43 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -1,31 +1,15 @@
-{
- // Use IntelliSense to learn about possible attributes.
- // Hover to view descriptions of existing attributes.
- // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
- "version": "0.2.0",
- "configurations": [
- {
- "name": "(Mac/Linux) Debug",
- "type": "lldb",
- "request": "launch",
- "program": "${workspaceRoot}/target/debug/neovide",
- "args": [],
- "cwd": "${workspaceRoot}",
- "env": {
- "RUST_LOG": "info",
- "RUST_BACKTRACE": "1"
- }
- },
- {
- "name": "(Windows) Debug",
- "type": "cppvsdbg",
- "request": "launch",
- "program": "${workspaceRoot}/target/debug/neovide.exe",
- "args": [],
- "stopAtEntry": false,
- "cwd": "${workspaceRoot}",
- "environment": [],
- "externalConsole": true
- },
- ]
-}
\ No newline at end of file
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Launch",
+ "type": "lldb",
+ "request": "launch",
+ "program": "${workspaceFolder}/target/debug/neovide.exe",
+ "args": [],
+ },
+ ]
+}
diff --git a/Cargo.lock b/Cargo.lock
index 41b4cee..bc1cf57 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -8,9 +8,9 @@ checksum = "d9fe5e32de01730eb1f6b7f5b51c17e03e2325bf40a74f754f04f130043affff"
[[package]]
name = "adler"
-version = "0.2.3"
+version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "adler32"
@@ -29,27 +29,13 @@ dependencies = [
[[package]]
name = "aho-corasick"
-version = "0.7.15"
+version = "0.7.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
dependencies = [
"memchr",
]
-[[package]]
-name = "andrew"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b7f09f89872c2b6b29e319377b1fbe91c6f5947df19a25596e121cf19a7b35e"
-dependencies = [
- "bitflags",
- "line_drawing",
- "rusttype 0.7.9",
- "walkdir",
- "xdg",
- "xml-rs",
-]
-
[[package]]
name = "andrew"
version = "0.3.1"
@@ -57,17 +43,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c4afb09dd642feec8408e33f92f3ffc4052946f6b20f32fb99c1f58cd4fa7cf"
dependencies = [
"bitflags",
- "rusttype 0.9.2",
+ "rusttype",
"walkdir",
"xdg",
"xml-rs",
]
[[package]]
-name = "android_log-sys"
-version = "0.1.2"
+name = "android_glue"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8052e2d8aabbb8d556d6abbcce2a22b9590996c5f849b9c7ce4544a2e3b984e"
+checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407"
[[package]]
name = "ansi_term"
@@ -78,62 +64,15 @@ dependencies = [
"winapi 0.3.9",
]
-[[package]]
-name = "anyhow"
-version = "1.0.38"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1"
-
-[[package]]
-name = "approx"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3"
-dependencies = [
- "num-traits",
-]
-
-[[package]]
-name = "arrayref"
-version = "0.3.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
-
-[[package]]
-name = "arrayvec"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
-
-[[package]]
-name = "ash"
-version = "0.31.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c69a8137596e84c22d57f3da1b5de1d4230b1742a710091c85f4d7ce50f00f38"
-dependencies = [
- "libloading 0.6.7",
-]
-
-[[package]]
-name = "ash-window"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "905c4ca25f752e7ab3c3e8f2882625f876e4c3ea5feffbc83f81d697e043afd6"
-dependencies = [
- "ash",
- "raw-window-handle",
- "raw-window-metal",
-]
-
[[package]]
name = "async-trait"
-version = "0.1.42"
+version = "0.1.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d"
+checksum = "0b98e84bbb4cbcdd97da190ba0c58a1bb0de2c1fdf67d159e192ed766aeca722"
dependencies = [
- "proc-macro2 1.0.24",
- "quote 1.0.8",
- "syn 1.0.58",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
+ "syn 1.0.72",
]
[[package]]
@@ -167,13 +106,12 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
[[package]]
name = "bindgen"
-version = "0.54.0"
+version = "0.58.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "66c0bb6167449588ff70803f4127f0684f9063097eca5016f37eb52b92c2cf36"
+checksum = "0f8523b410d7187a43085e7e064416ea32ded16bd0a4e6fc025e21616d01258f"
dependencies = [
"bitflags",
"cexpr",
- "cfg-if 0.1.10",
"clang-sys",
"clap",
"env_logger",
@@ -181,8 +119,8 @@ dependencies = [
"lazycell",
"log",
"peeking_take_while",
- "proc-macro2 1.0.24",
- "quote 1.0.8",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
"regex",
"rustc-hash",
"shlex",
@@ -195,28 +133,23 @@ version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
-[[package]]
-name = "blake2b_simd"
-version = "0.5.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587"
-dependencies = [
- "arrayref",
- "arrayvec",
- "constant_time_eq",
-]
-
[[package]]
name = "block"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+[[package]]
+name = "bumpalo"
+version = "3.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe"
+
[[package]]
name = "byteorder"
-version = "1.4.2"
+version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
[[package]]
name = "bytes"
@@ -234,17 +167,6 @@ version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
-[[package]]
-name = "calloop"
-version = "0.4.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7aa2097be53a00de9e8fc349fea6d76221f398f5c4fa550d420669906962d160"
-dependencies = [
- "mio",
- "mio-extras",
- "nix 0.14.1",
-]
-
[[package]]
name = "calloop"
version = "0.6.5"
@@ -255,17 +177,11 @@ dependencies = [
"nix 0.18.0",
]
-[[package]]
-name = "cargo-husky"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b02b629252fe8ef6460461409564e2c21d0c8e77e0944f3d189ff06c4e932ad"
-
[[package]]
name = "cc"
-version = "1.0.66"
+version = "1.0.67"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48"
+checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd"
[[package]]
name = "cexpr"
@@ -288,6 +204,15 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+[[package]]
+name = "cgl"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff"
+dependencies = [
+ "libc",
+]
+
[[package]]
name = "chrono"
version = "0.4.19"
@@ -301,15 +226,21 @@ dependencies = [
"winapi 0.3.9",
]
+[[package]]
+name = "chunked_transfer"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff857943da45f546682664a79488be82e69e43c1a7a2307679ab9afb3a66d2e"
+
[[package]]
name = "clang-sys"
-version = "0.29.3"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe6837df1d5cba2397b835c8530f51723267e16abbf83892e9e5af4f0e5dd10a"
+checksum = "fa785e9017cb8e8c8045e3f096b7d1ebc4d7337cceccdca8d678a27f788ac133"
dependencies = [
"glob",
"libc",
- "libloading 0.5.2",
+ "libloading 0.6.7",
]
[[package]]
@@ -336,30 +267,6 @@ dependencies = [
"bitflags",
]
-[[package]]
-name = "cmake"
-version = "0.1.45"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb6210b637171dfba4cda12e579ac6dc73f5165ad56133e5d72ef3131f320855"
-dependencies = [
- "cc",
-]
-
-[[package]]
-name = "cocoa"
-version = "0.20.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c49e86fc36d5704151f5996b7b3795385f50ce09e3be0f47a0cfde869681cf8"
-dependencies = [
- "bitflags",
- "block",
- "core-foundation 0.7.0",
- "core-graphics 0.19.2",
- "foreign-types",
- "libc",
- "objc",
-]
-
[[package]]
name = "cocoa"
version = "0.23.0"
@@ -435,18 +342,6 @@ dependencies = [
"tiny-keccak",
]
-[[package]]
-name = "const_fn"
-version = "0.4.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6"
-
-[[package]]
-name = "constant_time_eq"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
-
[[package]]
name = "core-foundation"
version = "0.7.0"
@@ -516,18 +411,6 @@ dependencies = [
"libc",
]
-[[package]]
-name = "core-text"
-version = "19.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2c7f46e8b820fd5f4b28528104b28b0a91cbe9e9c5bde8017087fb44bc93a60"
-dependencies = [
- "core-foundation 0.9.1",
- "core-graphics 0.22.2",
- "foreign-types",
- "libc",
-]
-
[[package]]
name = "core-video-sys"
version = "0.1.4"
@@ -576,12 +459,12 @@ 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 0.8.1",
+ "crossbeam-utils 0.8.4",
]
[[package]]
@@ -602,8 +485,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9"
dependencies = [
"cfg-if 1.0.0",
- "crossbeam-epoch 0.9.1",
- "crossbeam-utils 0.8.1",
+ "crossbeam-epoch 0.9.4",
+ "crossbeam-utils 0.8.4",
]
[[package]]
@@ -623,15 +506,14 @@ dependencies = [
[[package]]
name = "crossbeam-epoch"
-version = "0.9.1"
+version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d"
+checksum = "52fb27eab85b17fbb9f6fd667089e07d6a2eb8743d02639ee7f6a7a7729c9c94"
dependencies = [
"cfg-if 1.0.0",
- "const_fn",
- "crossbeam-utils 0.8.1",
+ "crossbeam-utils 0.8.4",
"lazy_static",
- "memoffset 0.6.1",
+ "memoffset 0.6.3",
"scopeguard",
]
@@ -659,9 +541,9 @@ dependencies = [
[[package]]
name = "crossbeam-utils"
-version = "0.8.1"
+version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d"
+checksum = "4feb231f0d4d6af81aed15928e58ecf5816aa62a2393e2c82f46973e92a9a278"
dependencies = [
"autocfg 1.0.1",
"cfg-if 1.0.0",
@@ -676,7 +558,7 @@ checksum = "8434f61eb40fc72030b18a370f7a06b428d27de66b0281977967216312b14dc7"
dependencies = [
"async-trait",
"crossbeam",
- "futures 0.3.12",
+ "futures 0.3.15",
]
[[package]]
@@ -685,36 +567,6 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
-[[package]]
-name = "curl"
-version = "0.4.34"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e268162af1a5fe89917ae25ba3b0a77c8da752bdc58e7dbb4f15b91fbd33756e"
-dependencies = [
- "curl-sys",
- "libc",
- "openssl-probe",
- "openssl-sys",
- "schannel",
- "socket2",
- "winapi 0.3.9",
-]
-
-[[package]]
-name = "curl-sys"
-version = "0.4.39+curl-7.74.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07a8ce861e7b68a0b394e814d7ee9f1b2750ff8bd10372c6ad3bacc10e86f874"
-dependencies = [
- "cc",
- "libc",
- "libz-sys",
- "openssl-sys",
- "pkg-config",
- "vcpkg",
- "winapi 0.3.9",
-]
-
[[package]]
name = "darling"
version = "0.10.2"
@@ -733,10 +585,10 @@ checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b"
dependencies = [
"fnv",
"ident_case",
- "proc-macro2 1.0.24",
- "quote 1.0.8",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
"strsim 0.9.3",
- "syn 1.0.58",
+ "syn 1.0.72",
]
[[package]]
@@ -746,8 +598,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
dependencies = [
"darling_core",
- "quote 1.0.8",
- "syn 1.0.58",
+ "quote 1.0.9",
+ "syn 1.0.72",
]
[[package]]
@@ -762,24 +614,24 @@ dependencies = [
[[package]]
name = "derivative"
-version = "2.1.3"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eaed5874effa6cde088c644ddcdcb4ffd1511391c5be4fdd7a5ccd02c7e4a183"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
dependencies = [
- "proc-macro2 1.0.24",
- "quote 1.0.8",
- "syn 1.0.58",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
+ "syn 1.0.72",
]
[[package]]
name = "derive-new"
-version = "0.5.8"
+version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71f31892cd5c62e414316f2963c5689242c43d8e7bbcaaeca97e5e28c95d91d9"
+checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535"
dependencies = [
- "proc-macro2 1.0.24",
- "quote 1.0.8",
- "syn 1.0.58",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
+ "syn 1.0.72",
]
[[package]]
@@ -800,9 +652,9 @@ dependencies = [
[[package]]
name = "dirs-sys"
-version = "0.3.5"
+version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a"
+checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780"
dependencies = [
"libc",
"redox_users",
@@ -824,6 +676,15 @@ dependencies = [
"libloading 0.6.7",
]
+[[package]]
+name = "dlib"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794"
+dependencies = [
+ "libloading 0.7.0",
+]
+
[[package]]
name = "downcast"
version = "0.10.0"
@@ -836,38 +697,17 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
-[[package]]
-name = "dwrote"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b"
-dependencies = [
- "lazy_static",
- "libc",
- "winapi 0.3.9",
- "wio",
-]
-
[[package]]
name = "either"
version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
-[[package]]
-name = "encoding_rs"
-version = "0.8.26"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "801bbab217d7f79c0062f4f7205b5d4427c6d1a7bd7aafdd1475f7c59d62b283"
-dependencies = [
- "cfg-if 1.0.0",
-]
-
[[package]]
name = "env_logger"
-version = "0.7.1"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
+checksum = "17392a012ea30ef05a610aa97dfb49496e71c9f676b27879922ea5bdf60d9d3f"
dependencies = [
"atty",
"humantime",
@@ -885,33 +725,23 @@ dependencies = [
"num-traits",
]
-[[package]]
-name = "expat-sys"
-version = "2.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "658f19728920138342f68408b7cf7644d90d4784353d8ebc32e7e8663dbe45fa"
-dependencies = [
- "cmake",
- "pkg-config",
-]
-
[[package]]
name = "filetime"
-version = "0.2.13"
+version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c122a393ea57648015bf06fbd3d372378992e86b9ff5a7a497b076a28c79efe"
+checksum = "1d34cfa13a63ae058bfa601fe9e313bbdb3746427c1459185464ce0fcf62e1e8"
dependencies = [
"cfg-if 1.0.0",
"libc",
- "redox_syscall",
+ "redox_syscall 0.2.8",
"winapi 0.3.9",
]
[[package]]
name = "flate2"
-version = "1.0.19"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7411863d55df97a419aa64cb4d2f167103ea9d767e2c54a1868b7ac3f6b47129"
+checksum = "cd3aec53de10fe96d7d8c565eb17f2c687bb5518a2ec453b5b1252964526abe0"
dependencies = [
"cfg-if 1.0.0",
"crc32fast",
@@ -921,14 +751,14 @@ dependencies = [
[[package]]
name = "flexi_logger"
-version = "0.14.8"
+version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "515fb7f6541dafe542c87c12a7ab6a52190cccb6c348b5951ef62d9978189ae8"
+checksum = "33ab94b6ac8eb69f1496a6993f26f785b5fd6d99b7416023eb2a6175c0b242b1"
dependencies = [
"chrono",
"glob",
"log",
- "regex",
+ "thiserror",
]
[[package]]
@@ -940,43 +770,12 @@ dependencies = [
"num-traits",
]
-[[package]]
-name = "float-ord"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7bad48618fdb549078c333a7a8528acb57af271d0433bdecd523eb620628364e"
-
[[package]]
name = "fnv"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
-[[package]]
-name = "font-kit"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f9042cb45150fb2b2a012fc03d0f1d2071f18e90397b9d2a5ec8ade8464bf20"
-dependencies = [
- "bitflags",
- "byteorder",
- "core-foundation 0.9.1",
- "core-graphics 0.22.2",
- "core-text",
- "dirs",
- "dwrote",
- "float-ord",
- "freetype",
- "lazy_static",
- "libc",
- "log",
- "pathfinder_geometry",
- "pathfinder_simd",
- "servo-fontconfig",
- "walkdir",
- "winapi 0.3.9",
-]
-
[[package]]
name = "foreign-types"
version = "0.3.2"
@@ -993,31 +792,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
[[package]]
-name = "fragile"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69a039c3498dc930fe810151a34ba0c1c70b02b8625035592e74432f678591f2"
-
-[[package]]
-name = "freetype"
-version = "0.7.0"
+name = "form_urlencoded"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bee38378a9e3db1cc693b4f88d166ae375338a0ff75cb8263e1c601d51f35dc6"
+checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
dependencies = [
- "freetype-sys",
- "libc",
+ "matches",
+ "percent-encoding",
]
[[package]]
-name = "freetype-sys"
-version = "0.13.1"
+name = "fragile"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a"
-dependencies = [
- "cmake",
- "libc",
- "pkg-config",
-]
+checksum = "69a039c3498dc930fe810151a34ba0c1c70b02b8625035592e74432f678591f2"
[[package]]
name = "fuchsia-zircon"
@@ -1037,15 +825,15 @@ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
[[package]]
name = "futures"
-version = "0.1.30"
+version = "0.1.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c7e4c2612746b0df8fed4ce0c69156021b704c9aefa360311c04e6e9e002eed"
+checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678"
[[package]]
name = "futures"
-version = "0.3.12"
+version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da9052a1a50244d8d5aa9bf55cbc2fb6f357c86cc52e46c62ed390a7180cf150"
+checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27"
dependencies = [
"futures-channel",
"futures-core",
@@ -1058,9 +846,9 @@ dependencies = [
[[package]]
name = "futures-channel"
-version = "0.3.12"
+version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2d31b7ec7efab6eefc7c57233bb10b847986139d88cc2f5a02a1ae6871a1846"
+checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2"
dependencies = [
"futures-core",
"futures-sink",
@@ -1068,15 +856,15 @@ dependencies = [
[[package]]
name = "futures-core"
-version = "0.3.12"
+version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79e5145dde8da7d1b3892dad07a9c98fc04bc39892b1ecc9692cf53e2b780a65"
+checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1"
[[package]]
name = "futures-executor"
-version = "0.3.12"
+version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9e59fdc009a4b3096bf94f740a0f2424c082521f20a9b08c5c07c48d90fd9b9"
+checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79"
dependencies = [
"futures-core",
"futures-task",
@@ -1085,44 +873,43 @@ dependencies = [
[[package]]
name = "futures-io"
-version = "0.3.12"
+version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28be053525281ad8259d47e4de5de657b25e7bac113458555bb4b70bc6870500"
+checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1"
[[package]]
name = "futures-macro"
-version = "0.3.12"
+version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c287d25add322d9f9abdcdc5927ca398917996600182178774032e9f8258fedd"
+checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121"
dependencies = [
+ "autocfg 1.0.1",
"proc-macro-hack",
- "proc-macro2 1.0.24",
- "quote 1.0.8",
- "syn 1.0.58",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
+ "syn 1.0.72",
]
[[package]]
name = "futures-sink"
-version = "0.3.12"
+version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "caf5c69029bda2e743fddd0582d1083951d65cc9539aebf8812f36c3491342d6"
+checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282"
[[package]]
name = "futures-task"
-version = "0.3.12"
+version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13de07eb8ea81ae445aca7b69f5f7bf15d7bf4912d8ca37d6645c77ae8a58d86"
-dependencies = [
- "once_cell",
-]
+checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae"
[[package]]
name = "futures-util"
-version = "0.3.12"
+version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "632a8cd0f2a4b3fdea1657f08bde063848c3bd00f9bbf6e256b8be78802e624b"
+checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967"
dependencies = [
- "futures 0.1.30",
+ "autocfg 1.0.1",
+ "futures 0.1.31",
"futures-channel",
"futures-core",
"futures-io",
@@ -1130,7 +917,7 @@ dependencies = [
"futures-sink",
"futures-task",
"memchr",
- "pin-project-lite 0.2.4",
+ "pin-project-lite 0.2.6",
"pin-utils",
"proc-macro-hack",
"proc-macro-nested",
@@ -1157,7 +944,7 @@ checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
dependencies = [
"cfg-if 1.0.0",
"libc",
- "wasi 0.10.1+wasi-snapshot-preview1",
+ "wasi 0.10.2+wasi-snapshot-preview1",
]
[[package]]
@@ -1171,56 +958,125 @@ dependencies = [
]
[[package]]
-name = "glob"
-version = "0.3.0"
+name = "gl"
+version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+checksum = "a94edab108827d67608095e269cf862e60d920f144a5026d3dbcfd8b877fb404"
+dependencies = [
+ "gl_generator",
+]
[[package]]
-name = "harfbuzz"
-version = "0.4.0"
+name = "gl_generator"
+version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "776caa9519beb53f697d578b6777eebd1262265c84ae797620b7f8f9b3648d91"
+checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d"
dependencies = [
- "harfbuzz-sys",
+ "khronos_api",
+ "log",
+ "xml-rs",
]
[[package]]
-name = "harfbuzz-sys"
-version = "0.5.0"
+name = "glob"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf8c27ca13930dc4ffe474880040fe9e0f03c2121600dc9c95423624cab3e467"
-dependencies = [
- "cc",
- "core-graphics 0.22.2",
- "core-text",
- "foreign-types",
- "freetype",
- "pkg-config",
-]
+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
[[package]]
-name = "hashbrown"
-version = "0.6.3"
+name = "glutin"
+version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead"
+checksum = "1ae1cbb9176b9151c4ce03f012e3cd1c6c18c4be79edeaeb3d99f5d8085c5fa3"
dependencies = [
- "ahash",
- "autocfg 0.1.7",
+ "android_glue",
+ "cgl",
+ "cocoa 0.23.0",
+ "core-foundation 0.9.1",
+ "glutin_egl_sys",
+ "glutin_emscripten_sys",
+ "glutin_gles2_sys",
+ "glutin_glx_sys",
+ "glutin_wgl_sys",
+ "lazy_static",
+ "libloading 0.6.7",
+ "log",
+ "objc",
+ "osmesa-sys",
+ "parking_lot 0.11.1",
+ "wayland-client",
+ "wayland-egl",
+ "winapi 0.3.9",
+ "winit",
]
[[package]]
-name = "heck"
-version = "0.3.2"
+name = "glutin_egl_sys"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac"
+checksum = "2abb6aa55523480c4adc5a56bbaa249992e2dddb2fc63dc96e04a3355364c211"
dependencies = [
- "unicode-segmentation",
+ "gl_generator",
+ "winapi 0.3.9",
]
[[package]]
-name = "hermit-abi"
-version = "0.1.18"
+name = "glutin_emscripten_sys"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80de4146df76e8a6c32b03007bc764ff3249dcaeb4f675d68a06caf1bac363f1"
+
+[[package]]
+name = "glutin_gles2_sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8094e708b730a7c8a1954f4f8a31880af00eb8a1c5b5bf85d28a0a3c6d69103"
+dependencies = [
+ "gl_generator",
+ "objc",
+]
+
+[[package]]
+name = "glutin_glx_sys"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e393c8fc02b807459410429150e9c4faffdb312d59b8c038566173c81991351"
+dependencies = [
+ "gl_generator",
+ "x11-dl",
+]
+
+[[package]]
+name = "glutin_wgl_sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3da5951a1569dbab865c6f2a863efafff193a93caf05538d193e9e3816d21696"
+dependencies = [
+ "gl_generator",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead"
+dependencies = [
+ "ahash",
+ "autocfg 0.1.7",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"
dependencies = [
@@ -1229,12 +1085,9 @@ dependencies = [
[[package]]
name = "humantime"
-version = "1.3.0"
+version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
-dependencies = [
- "quick-error",
-]
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "ident_case"
@@ -1242,6 +1095,17 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
[[package]]
name = "image"
version = "0.22.5"
@@ -1300,14 +1164,22 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
[[package]]
name = "jpeg-decoder"
-version = "0.1.20"
+version = "0.1.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc797adac5f083b8ff0ca6f6294a999393d76e197c36488e2ef732c4715f6fa3"
+checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
dependencies = [
- "byteorder",
"rayon",
]
+[[package]]
+name = "js-sys"
+version = "0.3.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83bdfbace3a0e81a4253f73b49e960b053e396a11012cbd49b9b74d6a2b67062"
+dependencies = [
+ "wasm-bindgen",
+]
+
[[package]]
name = "kernel32-sys"
version = "0.2.2"
@@ -1318,6 +1190,12 @@ dependencies = [
"winapi-build",
]
+[[package]]
+name = "khronos_api"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
+
[[package]]
name = "lazy_static"
version = "1.4.0"
@@ -1332,19 +1210,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
[[package]]
name = "libc"
-version = "0.2.82"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89203f3fba0a3795506acaad8ebce3c80c0af93f994d5a1d7a0b1eeb23271929"
-
-[[package]]
-name = "libloading"
-version = "0.5.2"
+version = "0.2.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753"
-dependencies = [
- "cc",
- "winapi 0.3.9",
-]
+checksum = "18794a8ad5b29321f790b55d93dfba91e125cb1a9edbd4f8e3150acc771c1a5e"
[[package]]
name = "libloading"
@@ -1357,24 +1225,13 @@ dependencies = [
]
[[package]]
-name = "libz-sys"
-version = "1.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "602113192b08db8f38796c4e85c39e960c145965140e918018bcde1952429655"
-dependencies = [
- "cc",
- "libc",
- "pkg-config",
- "vcpkg",
-]
-
-[[package]]
-name = "line_drawing"
+name = "libloading"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5cc7ad3d82c845bdb5dde34ffdcc7a5fb4d2996e1e1ee0f19c33bc80e15196b9"
+checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a"
dependencies = [
- "num-traits",
+ "cfg-if 1.0.0",
+ "winapi 0.3.9",
]
[[package]]
@@ -1388,20 +1245,20 @@ dependencies = [
[[package]]
name = "lock_api"
-version = "0.4.2"
+version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312"
+checksum = "0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb"
dependencies = [
"scopeguard",
]
[[package]]
name = "log"
-version = "0.4.13"
+version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcf3805d4480bb5b86070dcfeb9e2cb2ebc148adb753c5cca5f884d1d65a42b2"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
dependencies = [
- "cfg-if 0.1.10",
+ "cfg-if 1.0.0",
]
[[package]]
@@ -1428,6 +1285,12 @@ dependencies = [
"libc",
]
+[[package]]
+name = "matches"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
+
[[package]]
name = "maybe-uninit"
version = "2.0.0"
@@ -1436,19 +1299,9 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
[[package]]
name = "memchr"
-version = "2.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
-
-[[package]]
-name = "memmap"
-version = "0.7.0"
+version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b"
-dependencies = [
- "libc",
- "winapi 0.3.9",
-]
+checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc"
[[package]]
name = "memmap2"
@@ -1470,18 +1323,18 @@ dependencies = [
[[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 1.0.1",
]
[[package]]
name = "miniz_oxide"
-version = "0.4.3"
+version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d"
+checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
dependencies = [
"adler",
"autocfg 1.0.1",
@@ -1526,7 +1379,7 @@ checksum = "0840c1c50fd55e521b247f949c241c9997709f23bd7f023b9762cd561e935656"
dependencies = [
"log",
"mio",
- "miow 0.3.6",
+ "miow 0.3.7",
"winapi 0.3.9",
]
@@ -1555,11 +1408,10 @@ dependencies = [
[[package]]
name = "miow"
-version = "0.3.6"
+version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897"
+checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
dependencies = [
- "socket2",
"winapi 0.3.9",
]
@@ -1585,20 +1437,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a673cb441f78cd9af4f5919c28576a3cc325fb6b54e42f7047dacce3c718c17b"
dependencies = [
"cfg-if 0.1.10",
- "proc-macro2 1.0.24",
- "quote 1.0.8",
- "syn 1.0.58",
-]
-
-[[package]]
-name = "ndk"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95a356cafe20aee088789830bfea3a61336e84ded9e545e00d3869ce95dcb80c"
-dependencies = [
- "jni-sys",
- "ndk-sys 0.1.0",
- "num_enum",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
+ "syn 1.0.72",
]
[[package]]
@@ -1608,25 +1449,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5eb167c1febed0a496639034d0c76b3b74263636045db5489eee52143c246e73"
dependencies = [
"jni-sys",
- "ndk-sys 0.2.1",
+ "ndk-sys",
"num_enum",
"thiserror",
]
-[[package]]
-name = "ndk-glue"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d1730ee2e3de41c3321160a6da815f008c4006d71b095880ea50e17cf52332b8"
-dependencies = [
- "android_log-sys",
- "lazy_static",
- "libc",
- "log",
- "ndk 0.1.0",
- "ndk-sys 0.1.0",
-]
-
[[package]]
name = "ndk-glue"
version = "0.2.1"
@@ -1636,9 +1463,9 @@ dependencies = [
"lazy_static",
"libc",
"log",
- "ndk 0.2.1",
+ "ndk",
"ndk-macro",
- "ndk-sys 0.2.1",
+ "ndk-sys",
]
[[package]]
@@ -1649,17 +1476,11 @@ checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d"
dependencies = [
"darling",
"proc-macro-crate",
- "proc-macro2 1.0.24",
- "quote 1.0.8",
- "syn 1.0.58",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
+ "syn 1.0.72",
]
-[[package]]
-name = "ndk-sys"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b2820aca934aba5ed91c79acc72b6a44048ceacc5d36c035ed4e051f12d887d"
-
[[package]]
name = "ndk-sys"
version = "0.2.1"
@@ -1670,17 +1491,17 @@ checksum = "c44922cb3dbb1c70b5e5f443d63b64363a898564d739ba5198e3a9138442868d"
name = "neovide"
version = "0.7.0"
dependencies = [
- "anyhow",
"async-trait",
- "cargo-husky",
"cfg-if 0.1.10",
+ "clap",
"crossfire",
"derive-new",
"dirs",
"euclid",
"flexi_logger",
- "font-kit",
- "futures 0.3.12",
+ "futures 0.3.15",
+ "gl",
+ "glutin",
"image",
"lazy_static",
"log",
@@ -1691,15 +1512,14 @@ dependencies = [
"parking_lot 0.10.2",
"pin-project",
"rand",
+ "regex",
"rmpv",
"rust-embed",
- "sdl2-sys",
"skia-safe",
- "skribo",
- "skulpin",
+ "swash",
"tokio",
"unicode-segmentation",
- "which 4.0.2",
+ "which 4.1.0",
"winapi 0.3.9",
"winres",
]
@@ -1708,8 +1528,8 @@ dependencies = [
name = "neovide-derive"
version = "0.1.0"
dependencies = [
- "quote 1.0.8",
- "syn 1.0.58",
+ "quote 1.0.9",
+ "syn 1.0.72",
]
[[package]]
@@ -1725,26 +1545,25 @@ dependencies = [
[[package]]
name = "nix"
-version = "0.14.1"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c722bee1037d430d0f8e687bbdbf222f27cc6e4e68d5caf630857bb2b6dbdce"
+checksum = "83450fe6a6142ddd95fb064b746083fc4ef1705fe81f64a64e1d4b39f54a1055"
dependencies = [
"bitflags",
"cc",
"cfg-if 0.1.10",
"libc",
- "void",
]
[[package]]
name = "nix"
-version = "0.18.0"
+version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83450fe6a6142ddd95fb064b746083fc4ef1705fe81f64a64e1d4b39f54a1055"
+checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a"
dependencies = [
"bitflags",
"cc",
- "cfg-if 0.1.10",
+ "cfg-if 1.0.0",
"libc",
]
@@ -1760,9 +1579,9 @@ dependencies = [
[[package]]
name = "nom"
-version = "6.0.1"
+version = "6.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88034cfd6b4a0d54dd14f4a507eceee36c0b70e5a02236c4e4df571102be17f0"
+checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2"
dependencies = [
"memchr",
"version_check",
@@ -1853,9 +1672,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d"
dependencies = [
"proc-macro-crate",
- "proc-macro2 1.0.24",
- "quote 1.0.8",
- "syn 1.0.58",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
+ "syn 1.0.72",
]
[[package]]
@@ -1864,7 +1683,7 @@ version = "0.1.1-alpha.0"
source = "git+https://github.com/kethku/nvim-rs#109feea9e345fcbb2674384b0d6914ba4b8fc61e"
dependencies = [
"async-trait",
- "futures 0.3.12",
+ "futures 0.3.15",
"log",
"pin-project",
"rmp",
@@ -1883,36 +1702,17 @@ dependencies = [
[[package]]
name = "once_cell"
-version = "1.5.2"
+version = "1.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0"
+checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3"
[[package]]
-name = "openssl-probe"
+name = "osmesa-sys"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
-
-[[package]]
-name = "openssl-sys"
-version = "0.9.60"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "921fc71883267538946025deffb622905ecad223c28efbfdef9bb59a0175f3e6"
+checksum = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b"
dependencies = [
- "autocfg 1.0.1",
- "cc",
- "libc",
- "pkg-config",
- "vcpkg",
-]
-
-[[package]]
-name = "ordered-float"
-version = "1.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3305af35278dd29f46fcdd139e0b1fbfae2153f0e5928b39b035542dd31e37b7"
-dependencies = [
- "num-traits",
+ "shared_library",
]
[[package]]
@@ -1941,8 +1741,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb"
dependencies = [
"instant",
- "lock_api 0.4.2",
- "parking_lot_core 0.8.2",
+ "lock_api 0.4.4",
+ "parking_lot_core 0.8.3",
]
[[package]]
@@ -1954,44 +1754,25 @@ dependencies = [
"cfg-if 0.1.10",
"cloudabi",
"libc",
- "redox_syscall",
+ "redox_syscall 0.1.57",
"smallvec",
"winapi 0.3.9",
]
[[package]]
name = "parking_lot_core"
-version = "0.8.2"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272"
+checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018"
dependencies = [
"cfg-if 1.0.0",
"instant",
"libc",
- "redox_syscall",
+ "redox_syscall 0.2.8",
"smallvec",
"winapi 0.3.9",
]
-[[package]]
-name = "pathfinder_geometry"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b7b7e7b4ea703700ce73ebf128e1450eb69c3a8329199ffbfb9b2a0418e5ad3"
-dependencies = [
- "log",
- "pathfinder_simd",
-]
-
-[[package]]
-name = "pathfinder_simd"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b451513912d6b3440e443aa75a73ab22203afedc4a90df8526d008c0f86f7cb3"
-dependencies = [
- "rustc_version",
-]
-
[[package]]
name = "peeking_take_while"
version = "0.1.2"
@@ -2006,35 +1787,35 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
[[package]]
name = "pin-project"
-version = "0.4.27"
+version = "0.4.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2ffbc8e94b38ea3d2d8ba92aea2983b503cd75d0888d75b86bb37970b5698e15"
+checksum = "918192b5c59119d51e0cd221f4d49dde9112824ba717369e903c97d076083d0f"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
-version = "0.4.27"
+version = "0.4.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "65ad2ae56b6abe3a1ee25f15ee605bacadb9a764edaba9c2bf4103800d4a1895"
+checksum = "3be26700300be6d9d23264c73211d8190e755b6b5ca7a1b28230025511b52a5e"
dependencies = [
- "proc-macro2 1.0.24",
- "quote 1.0.8",
- "syn 1.0.58",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
+ "syn 1.0.72",
]
[[package]]
name = "pin-project-lite"
-version = "0.1.11"
+version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b"
+checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777"
[[package]]
name = "pin-project-lite"
-version = "0.2.4"
+version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827"
+checksum = "dc0e1f259c92177c30a4c9d177246edd0a3568b25756a977d0632cf8fa37e905"
[[package]]
name = "pin-utils"
@@ -2068,9 +1849,9 @@ checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
[[package]]
name = "predicates"
-version = "1.0.6"
+version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73dd9b7b200044694dfede9edf907c1ca19630908443e9447e624993700c6932"
+checksum = "f49cfaf7fdaa3bfacc6fa3e7054e65148878354a5cfddcf661df4c851f8021df"
dependencies = [
"difference",
"float-cmp",
@@ -2081,15 +1862,15 @@ dependencies = [
[[package]]
name = "predicates-core"
-version = "1.0.1"
+version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb3dbeaaf793584e29c58c7e3a82bbb3c7c06b63cea68d13b0e3cddc124104dc"
+checksum = "57e35a3326b75e49aa85f5dc6ec15b41108cf5aee58eabb1f274dd18b73c2451"
[[package]]
name = "predicates-tree"
-version = "1.0.1"
+version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aee95d988ee893cb35c06b148c80ed2cd52c8eea927f50ba7a0be1a786aeab73"
+checksum = "15f553275e5721409451eb85e15fd9a860a6e5ab4496eb215987502b5f5391f2"
dependencies = [
"predicates-core",
"treeline",
@@ -2127,19 +1908,13 @@ dependencies = [
[[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 0.2.1",
+ "unicode-xid 0.2.2",
]
-[[package]]
-name = "quick-error"
-version = "1.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
-
[[package]]
name = "quote"
version = "0.6.13"
@@ -2151,11 +1926,11 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.8"
+version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df"
+checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
dependencies = [
- "proc-macro2 1.0.24",
+ "proc-macro2 1.0.26",
]
[[package]]
@@ -2208,18 +1983,6 @@ dependencies = [
"libc",
]
-[[package]]
-name = "raw-window-metal"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2cd21ed1cdef7f1b1579b972148ba6058b5b545959a14d91ea83c4f0ea9f289b"
-dependencies = [
- "cocoa 0.24.0",
- "core-graphics 0.22.2",
- "objc",
- "raw-window-handle",
-]
-
[[package]]
name = "rayon"
version = "1.5.0"
@@ -2238,9 +2001,9 @@ version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a"
dependencies = [
- "crossbeam-channel 0.5.0",
+ "crossbeam-channel 0.5.1",
"crossbeam-deque 0.8.0",
- "crossbeam-utils 0.8.1",
+ "crossbeam-utils 0.8.4",
"lazy_static",
"num_cpus",
]
@@ -2251,65 +2014,75 @@ version = "0.1.57"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
+[[package]]
+name = "redox_syscall"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "742739e41cd49414de871ea5e549afb7e2a3ac77b589bcbebe8c82fab37147fc"
+dependencies = [
+ "bitflags",
+]
+
[[package]]
name = "redox_users"
-version = "0.3.5"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d"
+checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
dependencies = [
- "getrandom 0.1.16",
- "redox_syscall",
- "rust-argon2",
+ "getrandom 0.2.2",
+ "redox_syscall 0.2.8",
]
[[package]]
name = "regex"
-version = "1.4.3"
+version = "1.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a"
+checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
- "thread_local",
]
[[package]]
name = "regex-syntax"
-version = "0.6.22"
+version = "0.6.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581"
+checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
[[package]]
-name = "rmp"
-version = "0.8.9"
+name = "ring"
+version = "0.16.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f10b46df14cf1ee1ac7baa4d2fbc2c52c0622a4b82fa8740e37bc452ac0184f"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
dependencies = [
- "byteorder",
- "num-traits",
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi 0.3.9",
]
[[package]]
-name = "rmpv"
-version = "0.4.6"
+name = "rmp"
+version = "0.8.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "601e306fb529fadf3faa482684fba756e1b93897864ef2ab2080b12775c04235"
+checksum = "4f55e5fa1446c4d5dd1f5daeed2a4fe193071771a2636274d0d7a3b082aa7ad6"
dependencies = [
+ "byteorder",
"num-traits",
- "rmp",
]
[[package]]
-name = "rust-argon2"
-version = "0.8.3"
+name = "rmpv"
+version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb"
+checksum = "7c760afe11955e16121e36485b6b828326c3f0eaff1c31758d96dbeb5cf09fd5"
dependencies = [
- "base64",
- "blake2b_simd",
- "constant_time_eq",
- "crossbeam-utils 0.8.1",
+ "num-traits",
+ "rmp",
]
[[package]]
@@ -2329,10 +2102,10 @@ version = "5.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ed91c41c42ef7bf687384439c312e75e0da9c149b0390889b94de3c7d9d9e66"
dependencies = [
- "proc-macro2 1.0.24",
- "quote 1.0.8",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
"rust-embed-utils",
- "syn 1.0.58",
+ "syn 1.0.72",
"walkdir",
]
@@ -2352,32 +2125,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
[[package]]
-name = "rustc_version"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
-dependencies = [
- "semver",
-]
-
-[[package]]
-name = "rusttype"
-version = "0.7.9"
+name = "rustls"
+version = "0.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "310942406a39981bed7e12b09182a221a29e0990f3e7e0c971f131922ed135d5"
+checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
dependencies = [
- "rusttype 0.8.3",
-]
-
-[[package]]
-name = "rusttype"
-version = "0.8.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f61411055101f7b60ecf1041d87fb74205fb20b0c7a723f07ef39174cf6b4c0"
-dependencies = [
- "approx",
- "ordered-float",
- "stb_truetype",
+ "base64",
+ "log",
+ "ring",
+ "sct",
+ "webpki",
]
[[package]]
@@ -2405,16 +2162,6 @@ dependencies = [
"winapi-util",
]
-[[package]]
-name = "schannel"
-version = "0.1.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75"
-dependencies = [
- "lazy_static",
- "winapi 0.3.9",
-]
-
[[package]]
name = "scoped-tls"
version = "1.0.0"
@@ -2434,59 +2181,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
-name = "sdl2"
-version = "0.34.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcbb85f4211627a7291c83434d6bbfa723e28dcaa53c7606087e3c61929e4b9c"
-dependencies = [
- "bitflags",
- "lazy_static",
- "libc",
- "raw-window-handle",
- "sdl2-sys",
-]
-
-[[package]]
-name = "sdl2-sys"
-version = "0.34.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4cb164f53dbcad111de976bbf1f3083d3fcdeda88da9cfa281c70822720ee3da"
-dependencies = [
- "cfg-if 0.1.10",
- "cmake",
- "flate2",
- "libc",
- "tar",
- "unidiff",
- "version-compare",
-]
-
-[[package]]
-name = "semver"
-version = "0.9.0"
+name = "sct"
+version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
dependencies = [
- "semver-parser",
+ "ring",
+ "untrusted",
]
-[[package]]
-name = "semver-parser"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
-
[[package]]
name = "serde"
-version = "1.0.120"
+version = "1.0.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "166b2349061381baf54a58e4b13c89369feb0ef2eaa57198899e2312aac30aab"
+checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03"
[[package]]
name = "serde_json"
-version = "1.0.61"
+version = "1.0.64"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fceb2595057b6891a4ee808f70054bd2d12f0e97f1cbb78689b59f676df325a"
+checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79"
dependencies = [
"itoa",
"ryu",
@@ -2494,31 +2208,20 @@ dependencies = [
]
[[package]]
-name = "servo-fontconfig"
-version = "0.5.1"
+name = "shared_library"
+version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7e3e22fe5fd73d04ebf0daa049d3efe3eae55369ce38ab16d07ddd9ac5c217c"
+checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11"
dependencies = [
+ "lazy_static",
"libc",
- "servo-fontconfig-sys",
-]
-
-[[package]]
-name = "servo-fontconfig-sys"
-version = "5.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e36b879db9892dfa40f95da1c38a835d41634b825fbd8c4c418093d53c24b388"
-dependencies = [
- "expat-sys",
- "freetype-sys",
- "pkg-config",
]
[[package]]
name = "shlex"
-version = "0.1.1"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
+checksum = "42a568c8f2cd051a4d283bd6eb0343ac214c1b0f1ac19f93e1175b2dee38c73d"
[[package]]
name = "signal-hook-registry"
@@ -2531,113 +2234,38 @@ dependencies = [
[[package]]
name = "skia-bindings"
-version = "0.32.1"
+version = "0.39.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad6f9d1f255ac966c531823efb71a0ad45f37325428ad3e4f363f676737184d8"
+checksum = "751462e70a68391c38c76d5e14ea24ed4bedd7db4b9bcefffa179f63bddf5c86"
dependencies = [
"bindgen",
"cc",
- "curl",
+ "clang-sys",
"flate2",
"heck",
"regex",
"serde_json",
"tar",
"toml",
+ "ureq",
]
[[package]]
name = "skia-safe"
-version = "0.32.1"
+version = "0.39.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bea0f1e6e251bb1d895d99c4d32460adc206f9fb30f1a0b27c5edf4de4908946"
+checksum = "4b06dfa844d8f75dd616b600c1dd018950ee5eff19bb36d97ec4a7232b3bdb60"
dependencies = [
"bitflags",
"lazy_static",
"skia-bindings",
]
-[[package]]
-name = "skribo"
-version = "0.1.0"
-source = "git+https://github.com/linebender/skribo#a35c876b9297f23b854b082b71b6a275b26cc18d"
-dependencies = [
- "font-kit",
- "harfbuzz",
- "harfbuzz-sys",
- "log",
- "pathfinder_geometry",
- "unicode-normalization",
-]
-
-[[package]]
-name = "skulpin"
-version = "0.11.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d11f1c75af5e20eaa1dd985692b42b697b49f3581eb8088526688120a951b1ad"
-dependencies = [
- "log",
- "skulpin-app-winit",
- "skulpin-renderer",
- "skulpin-renderer-sdl2",
- "skulpin-renderer-winit",
-]
-
-[[package]]
-name = "skulpin-app-winit"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "daf156763a67080ce9a8965bba2b1c7cdee9f51f4e1fdb2b3ef6dcf7d9fbf63f"
-dependencies = [
- "log",
- "skulpin-renderer",
- "skulpin-renderer-winit",
-]
-
-[[package]]
-name = "skulpin-renderer"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19f77569926563e91b3e8a5b1b77d192be6a8db8e3f0c4e05e887843998dd47e"
-dependencies = [
- "ash",
- "log",
- "skia-bindings",
- "skia-safe",
-]
-
-[[package]]
-name = "skulpin-renderer-sdl2"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2391513a1fcb62aad9e95fa0c7ab2ecaf0565dd68fee8bf096f1ed9a25abf936"
-dependencies = [
- "ash-window",
- "log",
- "raw-window-handle",
- "sdl2",
- "skulpin-renderer",
-]
-
-[[package]]
-name = "skulpin-renderer-winit"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc972e8252690259199c00f3e0a307082c6b666e57b72d629cf608e0396a0f01"
-dependencies = [
- "ash-window",
- "log",
- "raw-window-handle",
- "skulpin-renderer",
- "winit 0.22.2",
- "winit 0.23.0",
-]
-
[[package]]
name = "slab"
-version = "0.4.2"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
+checksum = "f173ac3d1a7e3b28003f40de0b5ce7fe2710f9b9dc3fc38664cebee46b3b6527"
[[package]]
name = "smallvec"
@@ -2647,58 +2275,28 @@ checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
[[package]]
name = "smithay-client-toolkit"
-version = "0.6.6"
+version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "421c8dc7acf5cb205b88160f8b4cc2c5cfabe210e43b2f80f009f4c1ef910f1d"
+checksum = "4750c76fd5d3ac95fa3ed80fe667d6a3d8590a960e5b575b98eea93339a80b80"
dependencies = [
- "andrew 0.2.1",
+ "andrew",
"bitflags",
- "dlib",
- "lazy_static",
- "memmap",
- "nix 0.14.1",
- "wayland-client 0.23.6",
- "wayland-protocols 0.23.6",
-]
-
-[[package]]
-name = "smithay-client-toolkit"
-version = "0.12.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "316e13a3eb853ce7bf72ad3530dc186cb2005c57c521ef5f4ada5ee4eed74de6"
-dependencies = [
- "andrew 0.3.1",
- "bitflags",
- "calloop 0.6.5",
- "dlib",
+ "calloop",
+ "dlib 0.4.2",
"lazy_static",
"log",
"memmap2",
"nix 0.18.0",
- "wayland-client 0.28.3",
+ "wayland-client",
"wayland-cursor",
- "wayland-protocols 0.28.3",
-]
-
-[[package]]
-name = "socket2"
-version = "0.3.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
-dependencies = [
- "cfg-if 1.0.0",
- "libc",
- "winapi 0.3.9",
+ "wayland-protocols",
]
[[package]]
-name = "stb_truetype"
-version = "0.3.1"
+name = "spin"
+version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f77b6b07e862c66a9f3e62a07588fee67cd90a9135a2b942409f195507b4fb51"
-dependencies = [
- "byteorder",
-]
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
name = "strsim"
@@ -2712,6 +2310,16 @@ version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
+[[package]]
+name = "swash"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f17dda4029832e4e76811523e06387273a9964c2cd4df1cecd35832d2b4b6d3"
+dependencies = [
+ "yazi",
+ "zeno",
+]
+
[[package]]
name = "syn"
version = "0.15.44"
@@ -2725,24 +2333,23 @@ dependencies = [
[[package]]
name = "syn"
-version = "1.0.58"
+version = "1.0.72"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc60a3d73ea6594cd712d830cc1f0390fd71542d8c8cd24e70cc54cdfd5e05d5"
+checksum = "a1e8cdbefb79a9a5a65e0db8b47b723ee907b7c7f8496c76a1770b5c310bab82"
dependencies = [
- "proc-macro2 1.0.24",
- "quote 1.0.8",
- "unicode-xid 0.2.1",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
+ "unicode-xid 0.2.2",
]
[[package]]
name = "tar"
-version = "0.4.30"
+version = "0.4.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "489997b7557e9a43e192c527face4feacc78bfbe6eed67fd55c4c9e381cba290"
+checksum = "c0bcfbd6a598361fda270d82469fff3d65089dc33e175c9a131f7b4cd395f228"
dependencies = [
"filetime",
"libc",
- "redox_syscall",
"xattr",
]
@@ -2766,31 +2373,22 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "1.0.23"
+version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146"
+checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.23"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1"
-dependencies = [
- "proc-macro2 1.0.24",
- "quote 1.0.8",
- "syn 1.0.58",
-]
-
-[[package]]
-name = "thread_local"
-version = "1.1.0"
+version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bb9bc092d0d51e76b2b19d9d85534ffc9ec2db959a2523cdae0697e2972cd447"
+checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0"
dependencies = [
- "lazy_static",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
+ "syn 1.0.72",
]
[[package]]
@@ -2826,9 +2424,9 @@ dependencies = [
[[package]]
name = "tinyvec"
-version = "1.1.0"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccf8dbc19eb42fba10e8feaaec282fb50e2c14b2726d6301dbfeed0f73306a6f"
+checksum = "5b5220f05bb7de7f3f53c7c065e1199b3172696fe2db9f9c4d8ad9b4ee74c342"
dependencies = [
"tinyvec_macros",
]
@@ -2841,9 +2439,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
[[package]]
name = "tokio"
-version = "0.2.24"
+version = "0.2.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "099837d3464c16a808060bb3f02263b412f6fafcb5d01c533d309985fbeebe48"
+checksum = "6703a273949a90131b290be1fe7b039d0fc884aa1935860dfcbe056f28cd8092"
dependencies = [
"bytes 0.5.6",
"fnv",
@@ -2855,7 +2453,7 @@ dependencies = [
"mio-named-pipes",
"mio-uds",
"num_cpus",
- "pin-project-lite 0.1.11",
+ "pin-project-lite 0.1.12",
"signal-hook-registry",
"slab",
"tokio-macros",
@@ -2869,7 +2467,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674"
dependencies = [
"bytes 0.4.12",
- "futures 0.1.30",
+ "futures 0.1.31",
"log",
]
@@ -2879,9 +2477,9 @@ version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e44da00bfc73a25f814cd8d7e57a68a5c31b74b3152a0a1d1f590c97ed06265a"
dependencies = [
- "proc-macro2 1.0.24",
- "quote 1.0.8",
- "syn 1.0.58",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
+ "syn 1.0.72",
]
[[package]]
@@ -2905,11 +2503,20 @@ version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e5d7cd7ab3e47dda6e56542f4bbf3824c15234958c6e1bd6aaa347e93499fdc"
+[[package]]
+name = "unicode-bidi"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eeb8be209bb1c96b7c177c7420d26e04eccacb0eeae6b980e35fcb74678107e0"
+dependencies = [
+ "matches",
+]
+
[[package]]
name = "unicode-normalization"
-version = "0.1.16"
+version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a13e63ab62dbe32aeee58d1c5408d35c36c392bba5d9d3142287219721afe606"
+checksum = "07fbfce1c8a97d547e8b5334978438d9d6ec8c20e38f56d4a4374d181493eaef"
dependencies = [
"tinyvec",
]
@@ -2934,26 +2541,43 @@ checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
[[package]]
name = "unicode-xid"
-version = "0.2.1"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
+checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
[[package]]
-name = "unidiff"
-version = "0.3.3"
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "ureq"
+version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8a62719acf1933bfdbeb73a657ecd9ecece70b405125267dd549e2e2edc232c"
+checksum = "2475a6781e9bc546e7b64f4013d2f4032c8c6a40fcffd7c6f4ee734a890972ab"
dependencies = [
- "encoding_rs",
- "lazy_static",
- "regex",
+ "base64",
+ "chunked_transfer",
+ "log",
+ "once_cell",
+ "rustls",
+ "url",
+ "webpki",
+ "webpki-roots",
]
[[package]]
-name = "vcpkg"
-version = "0.2.11"
+name = "url"
+version = "2.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb"
+checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "matches",
+ "percent-encoding",
+]
[[package]]
name = "vec_map"
@@ -2961,29 +2585,17 @@ version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
-[[package]]
-name = "version-compare"
-version = "0.0.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d63556a25bae6ea31b52e640d7c41d1ab27faba4ccb600013837a3d0b3994ca1"
-
[[package]]
name = "version_check"
-version = "0.9.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed"
-
-[[package]]
-name = "void"
-version = "1.0.2"
+version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
[[package]]
name = "walkdir"
-version = "2.3.1"
+version = "2.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d"
+checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
dependencies = [
"same-file",
"winapi 0.3.9",
@@ -2998,141 +2610,174 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
[[package]]
name = "wasi"
-version = "0.10.1+wasi-snapshot-preview1"
+version = "0.10.2+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93c6c3420963c5c64bca373b25e77acb562081b9bb4dd5bb864187742186cea9"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
[[package]]
-name = "wayland-client"
-version = "0.23.6"
+name = "wasm-bindgen"
+version = "0.2.74"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af1080ebe0efabcf12aef2132152f616038f2d7dcbbccf7b2d8c5270fe14bcda"
+checksum = "d54ee1d4ed486f78874278e63e4069fc1ab9f6a18ca492076ffb90c5eb2997fd"
dependencies = [
- "bitflags",
- "calloop 0.4.4",
- "downcast-rs",
- "libc",
- "mio",
- "nix 0.14.1",
- "wayland-commons 0.23.6",
- "wayland-scanner 0.23.6",
- "wayland-sys 0.23.6",
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
]
[[package]]
-name = "wayland-client"
-version = "0.28.3"
+name = "wasm-bindgen-backend"
+version = "0.2.74"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bdbdbe01d03b2267809f3ed99495b37395387fde789e0f2ebb78e8b43f75b6d7"
+checksum = "3b33f6a0694ccfea53d94db8b2ed1c3a8a4c86dd936b13b9f0a15ec4a451b900"
dependencies = [
- "bitflags",
- "downcast-rs",
- "libc",
- "nix 0.18.0",
- "scoped-tls",
- "wayland-commons 0.28.3",
- "wayland-scanner 0.28.3",
- "wayland-sys 0.28.3",
+ "bumpalo",
+ "lazy_static",
+ "log",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
+ "syn 1.0.72",
+ "wasm-bindgen-shared",
]
[[package]]
-name = "wayland-commons"
-version = "0.23.6"
+name = "wasm-bindgen-macro"
+version = "0.2.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "088169ca61430fe1e58b8096c24975251700e7b1f6fd91cc9d59b04fb9b18bd4"
+dependencies = [
+ "quote 1.0.9",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.74"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bb66b0d1a27c39bbce712b6372131c6e25149f03ffb0cd017cf8f7de8d66dbdb"
+checksum = "be2241542ff3d9f241f5e2cb6dd09b37efe786df8851c54957683a49f0987a97"
dependencies = [
- "nix 0.14.1",
- "wayland-sys 0.23.6",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
+ "syn 1.0.72",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7cff876b8f18eed75a66cf49b65e7f967cb354a7aa16003fb55dbfd25b44b4f"
+
+[[package]]
+name = "wayland-client"
+version = "0.28.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06ca44d86554b85cf449f1557edc6cc7da935cc748c8e4bf1c507cbd43bae02c"
+dependencies = [
+ "bitflags",
+ "downcast-rs",
+ "libc",
+ "nix 0.20.0",
+ "scoped-tls",
+ "wayland-commons",
+ "wayland-scanner",
+ "wayland-sys",
]
[[package]]
name = "wayland-commons"
-version = "0.28.3"
+version = "0.28.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "480450f76717edd64ad04a4426280d737fc3d10a236b982df7b1aee19f0e2d56"
+checksum = "8bd75ae380325dbcff2707f0cd9869827ea1d2d6d534cff076858d3f0460fd5a"
dependencies = [
- "nix 0.18.0",
+ "nix 0.20.0",
"once_cell",
"smallvec",
- "wayland-sys 0.28.3",
+ "wayland-sys",
]
[[package]]
name = "wayland-cursor"
-version = "0.28.3"
+version = "0.28.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d6eb122c160223a7660feeaf949d0100281d1279acaaed3720eb3c9894496e5f"
+checksum = "b37e5455ec72f5de555ec39b5c3704036ac07c2ecd50d0bffe02d5fe2d4e65ab"
dependencies = [
- "nix 0.18.0",
- "wayland-client 0.28.3",
+ "nix 0.20.0",
+ "wayland-client",
"xcursor",
]
[[package]]
-name = "wayland-protocols"
-version = "0.23.6"
+name = "wayland-egl"
+version = "0.28.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6cc286643656742777d55dc8e70d144fa4699e426ca8e9d4ef454f4bf15ffcf9"
+checksum = "9461a67930ec16da7a4fd8b50e9ffa23f4417240b43ec84008bd1b2c94421c94"
dependencies = [
- "bitflags",
- "wayland-client 0.23.6",
- "wayland-commons 0.23.6",
- "wayland-scanner 0.23.6",
+ "wayland-client",
+ "wayland-sys",
]
[[package]]
name = "wayland-protocols"
-version = "0.28.3"
+version = "0.28.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "319a82b4d3054dd25acc32d9aee0f84fa95b63bc983fffe4703b6b8d47e01a30"
+checksum = "95df3317872bcf9eec096c864b69aa4769a1d5d6291a5b513f8ba0af0efbd52c"
dependencies = [
"bitflags",
- "wayland-client 0.28.3",
- "wayland-commons 0.28.3",
- "wayland-scanner 0.28.3",
+ "wayland-client",
+ "wayland-commons",
+ "wayland-scanner",
]
[[package]]
name = "wayland-scanner"
-version = "0.23.6"
+version = "0.28.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93b02247366f395b9258054f964fe293ddd019c3237afba9be2ccbe9e1651c3d"
+checksum = "389d680d7bd67512dc9c37f39560224327038deb0f0e8d33f870900441b68720"
dependencies = [
- "proc-macro2 0.4.30",
- "quote 0.6.13",
+ "proc-macro2 1.0.26",
+ "quote 1.0.9",
"xml-rs",
]
[[package]]
-name = "wayland-scanner"
-version = "0.28.3"
+name = "wayland-sys"
+version = "0.28.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7010ba5767b3fcd350decc59055390b4ebe6bd1b9279a9feb1f1888987f1133d"
+checksum = "2907bd297eef464a95ba9349ea771611771aa285b932526c633dc94d5400a8e2"
dependencies = [
- "proc-macro2 1.0.24",
- "quote 1.0.8",
- "xml-rs",
+ "dlib 0.5.0",
+ "lazy_static",
+ "pkg-config",
]
[[package]]
-name = "wayland-sys"
-version = "0.23.6"
+name = "web-sys"
+version = "0.3.51"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d94e89a86e6d6d7c7c9b19ebf48a03afaac4af6bc22ae570e9a24124b75358f4"
+checksum = "e828417b379f3df7111d3a2a9e5753706cae29c41f7c4029ee9fd77f3e09e582"
dependencies = [
- "dlib",
- "lazy_static",
+ "js-sys",
+ "wasm-bindgen",
]
[[package]]
-name = "wayland-sys"
-version = "0.28.3"
+name = "webpki"
+version = "0.21.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6793834e0c35d11fd96a97297abe03d37be627e1847da52e17d7e0e3b51cc099"
+checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
dependencies = [
- "dlib",
- "lazy_static",
- "pkg-config",
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940"
+dependencies = [
+ "webpki",
]
[[package]]
@@ -3146,12 +2791,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]]
@@ -3199,43 +2844,12 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "winit"
-version = "0.22.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e4ccbf7ddb6627828eace16cacde80fc6bf4dbb3469f88487262a02cf8e7862"
-dependencies = [
- "bitflags",
- "cocoa 0.20.2",
- "core-foundation 0.7.0",
- "core-graphics 0.19.2",
- "core-video-sys",
- "dispatch",
- "instant",
- "lazy_static",
- "libc",
- "log",
- "mio",
- "mio-extras",
- "ndk 0.1.0",
- "ndk-glue 0.1.0",
- "ndk-sys 0.1.0",
- "objc",
- "parking_lot 0.10.2",
- "percent-encoding",
- "raw-window-handle",
- "smithay-client-toolkit 0.6.6",
- "wayland-client 0.23.6",
- "winapi 0.3.9",
- "x11-dl",
-]
-
-[[package]]
-name = "winit"
-version = "0.23.0"
+version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5bc559da567d8aa671bbcd08304d49e982c7bf2cb91e10288b9188931c1b772"
+checksum = "da4eda6fce0eb84bd0a33e3c8794eb902e1033d0a1d5a31bc4f19b1b4bbff597"
dependencies = [
"bitflags",
- "cocoa 0.23.0",
+ "cocoa 0.24.0",
"core-foundation 0.9.1",
"core-graphics 0.22.2",
"core-video-sys",
@@ -3246,15 +2860,15 @@ dependencies = [
"log",
"mio",
"mio-extras",
- "ndk 0.2.1",
- "ndk-glue 0.2.1",
- "ndk-sys 0.2.1",
+ "ndk",
+ "ndk-glue",
+ "ndk-sys",
"objc",
"parking_lot 0.11.1",
"percent-encoding",
"raw-window-handle",
- "smithay-client-toolkit 0.12.2",
- "wayland-client 0.28.3",
+ "smithay-client-toolkit",
+ "wayland-client",
"winapi 0.3.9",
"x11-dl",
]
@@ -3268,15 +2882,6 @@ dependencies = [
"toml",
]
-[[package]]
-name = "wio"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5"
-dependencies = [
- "winapi 0.3.9",
-]
-
[[package]]
name = "ws2_32-sys"
version = "0.2.1"
@@ -3314,7 +2919,7 @@ version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a9a231574ae78801646617cefd13bfe94be907c0e4fa979cfd8b770aa3c5d08"
dependencies = [
- "nom 6.0.1",
+ "nom 6.1.2",
]
[[package]]
@@ -3328,3 +2933,15 @@ name = "xml-rs"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b07db065a5cf61a7e4ba64f29e67db906fb1787316516c4e6e5ff0fea1efcd8a"
+
+[[package]]
+name = "yazi"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3c1df78998bea4c8b5f315efe7e5c12bc06eb794478f8b46636ac321306e972"
+
+[[package]]
+name = "zeno"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea708573d4a67f939793b0d3f923d105bfdf06bbd6acb3f9cd02ce1bd905f6c8"
diff --git a/Cargo.toml b/Cargo.toml
index 5892245..11f3497 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -8,62 +8,57 @@ description = "A simple GUI for Neovim."
resolver = "2"
[workspace]
-members = [
- "neovide-derive"
-]
+members = ["neovide-derive"]
[features]
-default = ["sdl2"]
+default = []
embed-fonts = []
-sdl2 = ["skulpin/skulpin_sdl2"]
-winit = ["skulpin/skulpin_winit", "skulpin/winit-23"]
[dependencies]
neovide-derive = { path = "neovide-derive" }
euclid = "0.20.7"
-font-kit = "0.10.0"
-skribo = { git = "https://github.com/linebender/skribo" }
lru = "0.4.3"
-skulpin = "0.11.0"
derive-new = "0.5"
rmpv = "0.4.4"
rust-embed = { version = "5.2.0", features = ["debug-embed"] }
image = "0.22.3"
-nvim-rs = { git = "https://github.com/kethku/nvim-rs", features = [ "use_tokio" ] }
-tokio = { version = "0.2.9", features = [ "blocking", "process", "time", "tcp" ] }
+nvim-rs = { git = "https://github.com/kethku/nvim-rs", features = ["use_tokio"] }
+tokio = { version = "0.2.9", features = ["blocking", "process", "time", "tcp"] }
async-trait = "0.1.18"
crossfire = "0.1"
lazy_static = "1.4.0"
unicode-segmentation = "1.6.0"
log = "0.4.8"
-flexi_logger = { version = "0.14.6", default-features = false }
-anyhow = "1.0.26"
-parking_lot="0.10.0"
+flexi_logger = { version = "0.17.1", default-features = false }
+parking_lot = "0.10.0"
cfg-if = "0.1.10"
which = "4"
dirs = "2"
rand = "0.7"
-skia-safe = "0.32.1"
pin-project = "0.4.27"
futures = "0.3.12"
+glutin = "0.26"
+gl = "0.14.0"
+regex = "1.5.4"
+swash = "0.1.2"
+clap="2.33.3"
[dev-dependencies]
mockall = "0.7.0"
-[dev-dependencies.cargo-husky]
-version = "1"
-default-features = false
-features = ["precommit-hook", "run-cargo-test", "run-cargo-clippy", "run-cargo-fmt"]
-
[target.'cfg(windows)'.dependencies]
winapi = { version = "0.3.9", features = ["winuser"] }
[target.'cfg(windows)'.build-dependencies]
winres = "0.1.11"
-sdl2-sys = { version = "0.34.4", default-features = false, features = ["bundled", "static-link"] }
-[target.'cfg(macos)'.build-dependencies]
-sdl2-sys = { version = "0.34.4", default-features = false, features = ["bundled", "static-link"] }
+[target.'cfg(linux)'.dependencies.skia-safe]
+features = ["gl", "egl"]
+version = "0.39.1"
+
+[target.'cfg(not(linux))'.dependencies.skia-safe]
+features = ["gl"]
+version = "0.39.1"
[profile.release]
debug = true
@@ -74,9 +69,9 @@ incremental = true
name = "Neovide"
identifier = "com.kethku.neovide"
icon = ["assets/nvim.ico"]
-version = "0.6.0"
+version = "0.7.0"
resources = []
-copyright = "Copyright (c) keith 2020. All rights reserved."
+copyright = "Copyright (c) Keith 2021. All rights reserved."
category = "Productivity"
short_description = "A simple GUI for Neovim."
long_description = """
diff --git a/README.md b/README.md
index 3d1ac93..a74827c 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
# Neovide [![Gitter](https://badges.gitter.im/neovide/community.svg)](https://gitter.im/neovide/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Discussions](https://img.shields.io/badge/GitHub-Discussions-green?logo=github)](https://github.com/Kethku/neovide/discussions)
-This is a simple graphical user interface for Neovim. Where possible there are some graphical improvements, but it should act
-functionally like the terminal UI.
+This is a simple graphical user interface for [Neovim](https://github.com/neovim/neovim) (an aggressively refactored and updated
+Vim editor). Where possible there are some graphical improvements, but functionally it should act like the terminal UI.
![Basic Screen Cap](./assets/BasicScreenCap.png)
@@ -14,7 +14,7 @@ any critiques that you might have to offer. I won't take all of them, but I prom
## Features
-Should be a standard full features Neovim GUI. Beyond that there are some visual niceties:
+Should be a standard fully featured Neovim GUI. Beyond that there are some visual niceties:
### Ligatures
@@ -84,6 +84,8 @@ By specifying to listen on localhost, you only allow connections from your local
ssh -L 6666:localhost:6666 ip.of.other.machine nvim --headless --listen localhost:6666
```
+Finally, if you would like to leave the neovim server running, close the neovide application window instead of issuing a `:q` command.
+
### Some Nonsense ;)
```vim
@@ -110,11 +112,25 @@ necessary. On Windows this should be enabled by default if you have a relatively
### From binary
-Relatively recent binaries can be found in the [project releases](https://github.com/Kethku/neovide/releases). But if you want the latest and greatest you should clone it and build yourself.
+Building instructions are somewhat limited at the moment. All the libraries I use are cross platform and should have support for Windows, Mac, and Linux. The rendering is based on opengl, so a good gpu driver will be
+necessary. On Windows this should be enabled by default if you have a relatively recent system.
Installing should be as simple as downloading the binary, making sure `nvim.exe` with version 0.4 or greater is on your path, and running it. Everything should be self contained.
-### Windows (from source)
+### Windows
+
+#### Package manager
+
+[Scoop](https://scoop.sh/) has Neovide in the `extras` bucket. Ensure you have the `extras` bucket, and install:
+
+```
+$ scoop bucket list
+main
+extras
+$ scoop install neovide
+```
+
+#### From source
1. Install the latest version of Rust. I recommend
2. Install CMake. I use chocolatey: `choco install cmake --installargs '"ADD_CMAKE_TO_PATH=System"' -y`
@@ -134,16 +150,10 @@ Installing should be as simple as downloading the binary, making sure `nvim.exe`
1. Install the latest version of Rust. I recommend
2. Install CMake. Using homebrew: `brew install cmake`
-3. Install the Vulkan SDK. I'm told `brew install apenngrace/vulkan/vulkan-sdk` works, but I can't test locally to find out.
-4. Build and install Neovide:
-
- ```sh
- git clone https://github.com/Kethku/neovide
- cd neovide
- cargo build --release
- ```
-
-5. Copy `./target/release/neovide` to a known location and enjoy.
+3. `git clone https://github.com/Kethku/neovide`
+4. `cd neovide`
+5. `cargo build --release`
+6. Copy `./target/release/neovide` to a known location and enjoy.
### Linux
@@ -165,6 +175,20 @@ cd neovide-git
makepkg -si
```
+To install a non-default branch:
+
+```sh
+git clone https://aur.archlinux.org/neovide-git.git
+cd neovide-git
+nvim PKGBUILD
+:%s/l}/l}#branch=branch-name-here/
+:wq
+makepkg -si
+```
+
+Note: Neovide requires that a font be set in `init.vim` otherwise errors might be encountered.
+See [#527](https://github.com/Kethku/neovide/issues/527)
+
##### With non-default branch
```sh
@@ -186,40 +210,31 @@ makepkg -si
libbz2-dev libsndio-dev freeglut3-dev libxmu-dev libxi-dev
```
-2. Install Vulkan SDK (adjust for your preferred package manager, may already be in your repository)
-
- ```sh
- curl -sL "http://packages.lunarg.com/lunarg-signing-key-pub.asc" | sudo apt-key add -
- sudo curl -sLo "/etc/apt/sources.list.d/lunarg-vulkan-1.2.131-bionic.list" "http://packages.lunarg.com/vulkan/1.2.131/lunarg-vulkan-1.2.131-bionic.list"
- sudo apt update -y
- sudo apt install -y vulkan-sdk
- ```
-
-3. Install Rust
+2. Install Rust
```sh
curl --proto '=https' --tlsv1.2 -sSf "https://sh.rustup.rs" | sh
```
-4. Clone the repository
+3. Clone the repository
```sh
git clone "https://github.com/Kethku/neovide"
```
-5. Build
+4. Build
```sh
cd neovide && ~/.cargo/bin/cargo build --release
```
-6. Copy `./target/release/neovide` to a known location and enjoy.
+5. Copy `./target/release/neovide` to a known location and enjoy.
## Troubleshooting
- Neovide requires that a font be set in `init.vim` otherwise errors might be encountered. This can be fixed by adding `set guifont=Your\ Font\ Name:h15` in init.vim file. Reference issue [#527](https://github.com/Kethku/neovide/issues/527).
-- On OSX, if you run into issues with the vulkan libraries being reported as not verified, please reference issue [#167](https://github.com/Kethku/neovide/issues/167#issuecomment-593314579).
### Linux-specific
-- If you recieve an error of `SdlError("Installed Vulkan doesn't implement the VK_KHR_surface extension")`, please try installing the AMD Vulkan Driver (commonly, `amdvlk`). Reference issue [#209](https://github.com/Kethku/neovide/issues/209).
- If you recieve errors complaining about DRI3 settings, please reference issue [#44](https://github.com/Kethku/neovide/issues/44#issuecomment-578618052).
-- If you recieve libsndio-related errors, try building without default features (this disables static linking of the SDL library).
+
+[![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-white.svg)](https://snapcraft.io/neovide)
+
diff --git a/assets/fonts/FiraCode-Regular.ttf b/assets/fonts/FiraCode-Regular.ttf
new file mode 100644
index 0000000..0d57068
Binary files /dev/null and b/assets/fonts/FiraCode-Regular.ttf differ
diff --git a/assets/fonts/LICENSE b/assets/fonts/LICENSE
new file mode 100644
index 0000000..10ab55d
--- /dev/null
+++ b/assets/fonts/LICENSE
@@ -0,0 +1,86 @@
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/assets/fonts/LastResort-Regular.ttf b/assets/fonts/LastResort-Regular.ttf
new file mode 100644
index 0000000..30dbb79
Binary files /dev/null and b/assets/fonts/LastResort-Regular.ttf differ
diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml
new file mode 100644
index 0000000..6906a83
--- /dev/null
+++ b/snap/snapcraft.yaml
@@ -0,0 +1,114 @@
+name: neovide # you probably want to 'snapcraft register '
+base: core18 # the base snap is the execution environment for this snap
+version: "0.7.1+git"
+summary: The snappiest vim editor you are likely to find.
+description: |
+ This is a simple graphical user interface for Neovim. Where possible there are some graphical improvements,
+ but it should act functionally like the terminal UI.
+
+grade: devel # must be 'stable' to release into candidate/stable channels
+confinement: strict # use 'strict' once you have the right plugs and slots
+build-packages:
+ - cmake
+ - freeglut3-dev
+ - libbz2-dev
+ - libexpat1-dev
+ - libgl-dev
+ - libssl-dev
+ - libxmu-dev
+ - pkg-config
+
+parts:
+ nvim:
+ source: https://github.com/neovim/neovim.git
+ override-pull: |
+ snapcraftctl pull
+ latest_tag="$(git tag -l --sort=refname|head -1)"
+ git checkout "${latest_tag}"
+ major="$(awk '/NVIM_VERSION_MAJOR/{gsub(")","",$2); print $2}' CMakeLists.txt)"
+ minor="$(awk '/NVIM_VERSION_MINOR/{gsub(")","",$2); print $2}' CMakeLists.txt)"
+ patch="$(awk '/NVIM_VERSION_PATCH/{gsub(")","",$2); print $2}' CMakeLists.txt)"
+ version_prefix="v$major.$minor.$patch"
+ git_described="$(git describe --first-parent --dirty 2> /dev/null | perl -lpe 's/v\d.\d.\d-//g')"
+ git_described="${git_described:-$(git describe --first-parent --tags --always --dirty)}"
+ if [ "${version_prefix}" != "${git_described}" ]; then
+ VERSION="${version_prefix}-${git_described}-${latest_tag}"
+ else
+ VERSION="${version_prefix}-${latest_tag}"
+ fi
+ snapcraftctl set-version "${VERSION}"
+ plugin: make
+ make-parameters:
+ - CMAKE_BUILD_TYPE=RelWithDebInfo
+ - CMAKE_INSTALL_PREFIX=/usr
+ - CMAKE_FLAGS=-DPREFER_LUA=ON
+ - DEPS_CMAKE_FLAGS="-DUSE_BUNDLED_LUA=ON -DUSE_BUNDLED_LUAJIT=OFF"
+ override-build: |
+ echo "Building on $SNAP_ARCH"
+ set -x
+ case "$SNAP_ARCH" in
+ "arm64" | "ppc64el" | "s390x")
+ make -j"${SNAPCRAFT_PARALLEL_BUILD_COUNT}" \
+ CMAKE_BUILD_TYPE=RelWithDebInfo \
+ CMAKE_INSTALL_PREFIX=/usr \
+ CMAKE_FLAGS=-DPREFER_LUA=ON \
+ DEPS_CMAKE_FLAGS="-DUSE_BUNDLED_LUA=ON -DUSE_BUNDLED_LUAJIT=OFF"
+ ;;
+ *)
+ make -j"${SNAPCRAFT_PARALLEL_BUILD_COUNT}" \
+ CMAKE_BUILD_TYPE=RelWithDebInfo \
+ CMAKE_INSTALL_PREFIX=/usr
+ ;;
+ esac
+ make DESTDIR="$SNAPCRAFT_PART_INSTALL" install
+ # Fix Desktop file
+ sed -i 's|^Exec=nvim|Exec=/snap/bin/nvim.nvim|' ${SNAPCRAFT_PART_INSTALL}/usr/share/applications/nvim.desktop
+ sed -i 's|^TryExec=nvim|TryExec=/snap/bin/nvim.nvim|' ${SNAPCRAFT_PART_INSTALL}/usr/share/applications/nvim.desktop
+ sed -i 's|^Icon=.*|Icon=${SNAP}/usr/share/pixmaps/nvim.png|' ${SNAPCRAFT_PART_INSTALL}/usr/share/applications/nvim.desktop
+ build-packages:
+ - ninja-build
+ - libtool
+ - libtool-bin
+ - autoconf
+ - automake
+ - gawk
+ - g++
+ - git
+ - gettext
+ - unzip
+ - wget
+ prime:
+ - -usr/share/man
+ desktop-glib-only:
+ plugin: make
+ source: https://github.com/ubuntu/snapcraft-desktop-helpers.git
+ source-subdir: glib-only
+ neovide:
+ plugin: rust
+ source: .
+ build-packages:
+ - fontconfig
+ - libfontconfig1-dev
+ - libfreetype6-dev
+ stage-packages:
+ - fontconfig
+ - fonts-noto
+ - libfontconfig1
+ - libibus-1.0-5
+ - libpng16-16
+ - libx11-dev
+ - libx11-xcb1
+ - libxcursor1
+ - libxi-dev
+ - libxrandr-dev
+ - locales-all
+ - xdg-user-dirs
+
+apps:
+ neovide:
+ command: bin/neovide
+ plugs:
+ - desktop
+ - desktop-legacy
+ command-chain:
+ - bin/desktop-launch
diff --git a/src/bridge/events.rs b/src/bridge/events.rs
index e8bf172..dc7643f 100644
--- a/src/bridge/events.rs
+++ b/src/bridge/events.rs
@@ -1,40 +1,43 @@
use std::convert::TryInto;
use std::error;
use std::fmt;
+use std::fmt::Debug;
use rmpv::Value;
-use skulpin::skia_safe::Color4f;
+use skia_safe::Color4f;
use crate::editor::{Colors, CursorMode, CursorShape, Style};
-#[derive(Debug, Clone)]
+#[derive(Clone, Debug)]
pub enum ParseError {
- InvalidArray(Value),
- InvalidMap(Value),
- InvalidString(Value),
- InvalidU64(Value),
- InvalidI64(Value),
- InvalidF64(Value),
- InvalidBool(Value),
- InvalidWindowAnchor(Value),
- InvalidFormat,
+ Array(Value),
+ Map(Value),
+ String(Value),
+ U64(Value),
+ I64(Value),
+ F64(Value),
+ Bool(Value),
+ WindowAnchor(Value),
+ Format(String),
}
type Result = std::result::Result;
impl fmt::Display for ParseError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
- ParseError::InvalidArray(value) => write!(f, "invalid array format {}", value),
- ParseError::InvalidMap(value) => write!(f, "invalid map format {}", value),
- ParseError::InvalidString(value) => write!(f, "invalid string format {}", value),
- ParseError::InvalidU64(value) => write!(f, "invalid u64 format {}", value),
- ParseError::InvalidI64(value) => write!(f, "invalid i64 format {}", value),
- ParseError::InvalidF64(value) => write!(f, "invalid f64 format {}", value),
- ParseError::InvalidBool(value) => write!(f, "invalid bool format {}", value),
- ParseError::InvalidWindowAnchor(value) => {
+ ParseError::Array(value) => write!(f, "invalid array format {}", value),
+ ParseError::Map(value) => write!(f, "invalid map format {}", value),
+ ParseError::String(value) => write!(f, "invalid string format {}", value),
+ ParseError::U64(value) => write!(f, "invalid u64 format {}", value),
+ ParseError::I64(value) => write!(f, "invalid i64 format {}", value),
+ ParseError::F64(value) => write!(f, "invalid f64 format {}", value),
+ ParseError::Bool(value) => write!(f, "invalid bool format {}", value),
+ ParseError::WindowAnchor(value) => {
write!(f, "invalid window anchor format {}", value)
}
- ParseError::InvalidFormat => write!(f, "invalid event format"),
+ ParseError::Format(debug_text) => {
+ write!(f, "invalid event format {}", debug_text)
+ }
}
}
}
@@ -45,7 +48,7 @@ impl error::Error for ParseError {
}
}
-#[derive(Debug)]
+#[derive(Clone, Debug)]
pub struct GridLineCell {
pub text: String,
pub highlight_id: Option,
@@ -54,7 +57,7 @@ pub struct GridLineCell {
pub type StyledContent = Vec<(u64, String)>;
-#[derive(Debug)]
+#[derive(Clone, Debug)]
pub enum MessageKind {
Unknown,
Confirm,
@@ -91,7 +94,7 @@ impl MessageKind {
}
}
-#[derive(Debug)]
+#[derive(Clone, Debug)]
pub enum GuiOption {
ArabicShape(bool),
AmbiWidth(String),
@@ -106,7 +109,7 @@ pub enum GuiOption {
Unknown(String, Value),
}
-#[derive(Debug)]
+#[derive(Clone, Debug)]
pub enum WindowAnchor {
NorthWest,
NorthEast,
@@ -114,7 +117,7 @@ pub enum WindowAnchor {
SouthEast,
}
-#[derive(Debug, Clone)]
+#[derive(Clone, Debug)]
pub enum EditorMode {
// The set of modes reported will change in new versions of Nvim, for
// instance more sub-modes and temporary states might be represented as
@@ -128,7 +131,7 @@ pub enum EditorMode {
Unknown(String),
}
-#[derive(Debug)]
+#[derive(Clone, Debug)]
pub enum RedrawEvent {
SetTitle {
title: String,
@@ -200,7 +203,7 @@ pub enum RedrawEvent {
anchor_row: f64,
anchor_column: f64,
focusable: bool,
- z_index: i64,
+ sort_order: Option,
},
WindowExternalPosition {
grid: u64,
@@ -356,7 +359,7 @@ fn extract_values>(values: Vec, mut arr: Arr) -> Resu
let arr_ref = arr.as_mut();
if values.len() != arr_ref.len() {
- Err(ParseError::InvalidFormat)
+ Err(ParseError::Format(format!("{:?}", values)))
} else {
for (i, val) in values.into_iter().enumerate() {
arr_ref[i] = val;
@@ -367,31 +370,31 @@ fn extract_values>(values: Vec, mut arr: Arr) -> Resu
}
fn parse_array(array_value: Value) -> Result> {
- array_value.try_into().map_err(ParseError::InvalidArray)
+ array_value.try_into().map_err(ParseError::Array)
}
fn parse_map(map_value: Value) -> Result> {
- map_value.try_into().map_err(ParseError::InvalidMap)
+ map_value.try_into().map_err(ParseError::Map)
}
fn parse_string(string_value: Value) -> Result {
- string_value.try_into().map_err(ParseError::InvalidString)
+ string_value.try_into().map_err(ParseError::String)
}
fn parse_u64(u64_value: Value) -> Result {
- u64_value.try_into().map_err(ParseError::InvalidU64)
+ u64_value.try_into().map_err(ParseError::U64)
}
fn parse_i64(i64_value: Value) -> Result {
- i64_value.try_into().map_err(ParseError::InvalidI64)
+ i64_value.try_into().map_err(ParseError::I64)
}
fn parse_f64(f64_value: Value) -> Result {
- f64_value.try_into().map_err(ParseError::InvalidF64)
+ f64_value.try_into().map_err(ParseError::F64)
}
fn parse_bool(bool_value: Value) -> Result {
- bool_value.try_into().map_err(ParseError::InvalidBool)
+ bool_value.try_into().map_err(ParseError::Bool)
}
fn parse_set_title(set_title_arguments: Vec) -> Result {
@@ -564,7 +567,7 @@ fn parse_grid_line_cell(grid_line_cell: Value) -> Result {
let text_value = cell_contents
.first_mut()
.map(|v| take_value(v))
- .ok_or(ParseError::InvalidFormat)?;
+ .ok_or_else(|| ParseError::Format(format!("{:?}", cell_contents)))?;
let highlight_id = cell_contents
.get_mut(1)
@@ -677,33 +680,59 @@ fn parse_window_anchor(value: Value) -> Result {
"NE" => Ok(WindowAnchor::NorthEast),
"SW" => Ok(WindowAnchor::SouthWest),
"SE" => Ok(WindowAnchor::SouthEast),
- _ => Err(ParseError::InvalidWindowAnchor(value_str.into())),
+ _ => Err(ParseError::WindowAnchor(value_str.into())),
}
}
fn parse_win_float_pos(win_float_pos_arguments: Vec) -> Result {
- let values = [
- Value::Nil,
- Value::Nil,
- Value::Nil,
- Value::Nil,
- Value::Nil,
- Value::Nil,
- Value::Nil,
- Value::Nil,
- ];
- let [grid, _window, anchor, anchor_grid, anchor_row, anchor_column, focusable, z_index] =
- extract_values(win_float_pos_arguments, values)?;
-
- Ok(RedrawEvent::WindowFloatPosition {
- grid: parse_u64(grid)?,
- anchor: parse_window_anchor(anchor)?,
- anchor_grid: parse_u64(anchor_grid)?,
- anchor_row: parse_f64(anchor_row)?,
- anchor_column: parse_f64(anchor_column)?,
- focusable: parse_bool(focusable)?,
- z_index: parse_i64(z_index)?,
- })
+ if win_float_pos_arguments.len() == 8 {
+ let values = [
+ Value::Nil,
+ Value::Nil,
+ Value::Nil,
+ Value::Nil,
+ Value::Nil,
+ Value::Nil,
+ Value::Nil,
+ Value::Nil,
+ ];
+
+ let [grid, _window, anchor, anchor_grid, anchor_row, anchor_column, focusable, sort_order] =
+ extract_values(win_float_pos_arguments, values)?;
+
+ Ok(RedrawEvent::WindowFloatPosition {
+ grid: parse_u64(grid)?,
+ anchor: parse_window_anchor(anchor)?,
+ anchor_grid: parse_u64(anchor_grid)?,
+ anchor_row: parse_f64(anchor_row)?,
+ anchor_column: parse_f64(anchor_column)?,
+ focusable: parse_bool(focusable)?,
+ sort_order: Some(parse_u64(sort_order)?),
+ })
+ } else {
+ let values = [
+ Value::Nil,
+ Value::Nil,
+ Value::Nil,
+ Value::Nil,
+ Value::Nil,
+ Value::Nil,
+ Value::Nil,
+ ];
+
+ let [grid, _window, anchor, anchor_grid, anchor_row, anchor_column, focusable] =
+ extract_values(win_float_pos_arguments, values)?;
+
+ Ok(RedrawEvent::WindowFloatPosition {
+ grid: parse_u64(grid)?,
+ anchor: parse_window_anchor(anchor)?,
+ anchor_grid: parse_u64(anchor_grid)?,
+ anchor_row: parse_f64(anchor_row)?,
+ anchor_column: parse_f64(anchor_column)?,
+ focusable: parse_bool(focusable)?,
+ sort_order: None,
+ })
+ }
}
fn parse_win_external_pos(win_external_pos_arguments: Vec) -> Result {
@@ -896,7 +925,7 @@ pub fn parse_redraw_event(event_value: Value) -> Result> {
let mut event_contents = parse_array(event_value)?.into_iter();
let event_name = event_contents
.next()
- .ok_or(ParseError::InvalidFormat)
+ .ok_or_else(|| ParseError::Format(format!("{:?}", event_contents)))
.and_then(parse_string)?;
let events = event_contents;
@@ -960,7 +989,7 @@ pub fn parse_channel_stream_type(channel_stream_value: Value) -> Result Ok(ChannelStreamType::Stderr),
"socket" => Ok(ChannelStreamType::Socket),
"job" => Ok(ChannelStreamType::Job),
- _ => Err(ParseError::InvalidFormat),
+ stream_type => Err(ParseError::Format(format!("{:?}", stream_type))),
}
}
@@ -969,7 +998,7 @@ pub fn parse_channel_mode(channel_mode_value: Value) -> Result {
"bytes" => Ok(ChannelMode::Bytes),
"terminal" => Ok(ChannelMode::Terminal),
"rpc" => Ok(ChannelMode::Rpc),
- _ => Err(ParseError::InvalidFormat),
+ channel_mode => Err(ParseError::Format(format!("{:?}", channel_mode))),
}
}
@@ -1003,7 +1032,7 @@ pub fn parse_client_type(client_type_value: Value) -> Result {
"embedder" => Ok(ClientType::Embedder),
"host" => Ok(ClientType::Host),
"plugin" => Ok(ClientType::Plugin),
- _ => Err(ParseError::InvalidFormat),
+ client_type => Err(ParseError::Format(format!("{:?}", client_type))),
}
}
diff --git a/src/bridge/handler.rs b/src/bridge/handler.rs
index 3a75544..82094a4 100644
--- a/src/bridge/handler.rs
+++ b/src/bridge/handler.rs
@@ -1,7 +1,6 @@
use std::sync::Arc;
use async_trait::async_trait;
-use crossfire::mpsc::TxUnbounded;
use log::trace;
use nvim_rs::{Handler, Neovim};
use parking_lot::Mutex;
@@ -11,19 +10,20 @@ use tokio::task;
use super::events::{parse_redraw_event, RedrawEvent};
use super::ui_commands::UiCommand;
use crate::bridge::TxWrapper;
+use crate::channel_utils::*;
use crate::error_handling::ResultPanicExplanation;
use crate::settings::SETTINGS;
#[derive(Clone)]
pub struct NeovimHandler {
- ui_command_sender: Arc>>,
- redraw_event_sender: Arc>>,
+ ui_command_sender: Arc>>,
+ redraw_event_sender: Arc>>,
}
impl NeovimHandler {
pub fn new(
- ui_command_sender: TxUnbounded,
- redraw_event_sender: TxUnbounded,
+ ui_command_sender: LoggingTx,
+ redraw_event_sender: LoggingTx,
) -> NeovimHandler {
NeovimHandler {
ui_command_sender: Arc::new(Mutex::new(ui_command_sender)),
diff --git a/src/bridge/mod.rs b/src/bridge/mod.rs
index f1d7c47..41147c5 100644
--- a/src/bridge/mod.rs
+++ b/src/bridge/mod.rs
@@ -4,24 +4,25 @@ mod handler;
mod tx_wrapper;
mod ui_commands;
-use std::env;
use std::path::Path;
use std::process::Stdio;
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
-use crossfire::mpsc::{RxUnbounded, TxUnbounded};
+use crossfire::mpsc::RxUnbounded;
use log::{error, info, warn};
use nvim_rs::UiAttachOptions;
use rmpv::Value;
use tokio::process::Command;
use tokio::runtime::Runtime;
-use crate::error_handling::ResultPanicExplanation;
+use crate::channel_utils::*;
use crate::settings::*;
use crate::window::window_geometry_or_default;
+use crate::{cmd_line::CmdLineSettings, error_handling::ResultPanicExplanation};
pub use events::*;
use handler::NeovimHandler;
+use regex::Regex;
pub use tx_wrapper::{TxWrapper, WrapTx};
pub use ui_commands::UiCommand;
@@ -32,7 +33,7 @@ fn set_windows_creation_flags(cmd: &mut Command) {
#[cfg(windows)]
fn platform_build_nvim_cmd(bin: &str) -> Option {
- if env::args().any(|arg| arg == "--wsl") {
+ if SETTINGS.get::().wsl {
let mut cmd = Command::new("wsl");
cmd.args(&[
bin.trim(),
@@ -57,7 +58,7 @@ fn platform_build_nvim_cmd(bin: &str) -> Option {
}
fn build_nvim_cmd() -> Command {
- if let Ok(path) = env::var("NEOVIM_BIN") {
+ if let Some(path) = SETTINGS.get::().neovim_bin {
if let Some(cmd) = platform_build_nvim_cmd(&path) {
return cmd;
} else {
@@ -65,7 +66,7 @@ fn build_nvim_cmd() -> Command {
}
}
#[cfg(windows)]
- if env::args().any(|arg| arg == "--wsl") {
+ if SETTINGS.get::().wsl {
if let Ok(output) = std::process::Command::new("wsl")
.args(&["bash", "-ic", "which nvim"])
.output()
@@ -125,7 +126,10 @@ pub fn create_nvim_command() -> Command {
let mut cmd = build_nvim_cmd();
cmd.arg("--embed")
- .args(SETTINGS.neovim_arguments.iter().skip(1));
+ .args(SETTINGS.get::().neovim_args.iter())
+ .args(SETTINGS.get::().files_to_open.iter());
+
+ info!("Starting neovim with: {:?}", cmd);
#[cfg(not(debug_assertions))]
cmd.stderr(Stdio::piped());
@@ -145,20 +149,17 @@ enum ConnectionMode {
}
fn connection_mode() -> ConnectionMode {
- let tcp_prefix = "--remote-tcp=";
-
- if let Some(arg) = std::env::args().find(|arg| arg.starts_with(tcp_prefix)) {
- let input = &arg[tcp_prefix.len()..];
- ConnectionMode::RemoteTcp(input.to_owned())
+ if let Some(arg) = SETTINGS.get::().remote_tcp {
+ ConnectionMode::RemoteTcp(arg)
} else {
ConnectionMode::Child
}
}
async fn start_neovim_runtime(
- ui_command_sender: TxUnbounded,
+ ui_command_sender: LoggingTx,
ui_command_receiver: RxUnbounded,
- redraw_event_sender: TxUnbounded,
+ redraw_event_sender: LoggingTx,
running: Arc,
) {
let (width, height) = window_geometry_or_default();
@@ -189,13 +190,14 @@ async fn start_neovim_runtime(
close_watcher_running.store(false, Ordering::Relaxed);
});
- if let Ok(Value::Integer(correct_version)) = nvim.eval("has(\"nvim-0.4\")").await {
- if correct_version.as_i64() != Some(1) {
- error!("Neovide requires version 0.4 or higher");
+ if let Ok(output) = nvim.command_output("version").await {
+ let re = Regex::new(r"NVIM v0.[4-9]\d*.\d+").unwrap();
+ if !re.is_match(&output) {
+ error!("Neovide requires nvim version 0.4 or higher. Download the latest version here https://github.com/neovim/neovim/wiki/Installing-Neovim");
std::process::exit(0);
}
} else {
- error!("Neovide requires version 0.4 or higher");
+ error!("Neovide requires nvim version 0.4 or higher. Download the latest version here https://github.com/neovim/neovim/wiki/Installing-Neovim");
std::process::exit(0);
};
@@ -276,7 +278,8 @@ async fn start_neovim_runtime(
let mut options = UiAttachOptions::new();
options.set_linegrid_external(true);
- if env::args().any(|arg| arg == "--multiGrid") || env::var("NeovideMultiGrid").is_ok() {
+
+ if SETTINGS.get::().multi_grid {
options.set_multigrid_external(true);
}
options.set_rgb(true);
@@ -320,9 +323,9 @@ pub struct Bridge {
}
pub fn start_bridge(
- ui_command_sender: TxUnbounded,
+ ui_command_sender: LoggingTx,
ui_command_receiver: RxUnbounded,
- redraw_event_sender: TxUnbounded,
+ redraw_event_sender: LoggingTx,
running: Arc,
) -> Bridge {
let runtime = Runtime::new().unwrap();
diff --git a/src/bridge/ui_commands.rs b/src/bridge/ui_commands.rs
index c3fdc4a..4d501bb 100644
--- a/src/bridge/ui_commands.rs
+++ b/src/bridge/ui_commands.rs
@@ -14,6 +14,7 @@ use crate::windows_utils::{
#[derive(Debug, Clone)]
pub enum UiCommand {
+ Quit,
Resize {
width: u32,
height: u32,
@@ -45,6 +46,9 @@ pub enum UiCommand {
impl UiCommand {
pub async fn execute(self, nvim: &Neovim) {
match self {
+ UiCommand::Quit => {
+ nvim.command("qa!").await.ok();
+ }
UiCommand::Resize { width, height } => nvim
.ui_try_resize(width.max(10) as i64, height.max(3) as i64)
.await
diff --git a/src/channel_utils.rs b/src/channel_utils.rs
new file mode 100644
index 0000000..edb8807
--- /dev/null
+++ b/src/channel_utils.rs
@@ -0,0 +1,54 @@
+use std::fmt::Debug;
+use std::sync::mpsc::{SendError, Sender};
+
+use crossfire::mpsc::{SendError as TxError, TxUnbounded};
+use log::trace;
+
+#[derive(Clone)]
+pub struct LoggingSender
+where
+ T: Debug,
+{
+ sender: Sender,
+ channel_name: String,
+}
+
+impl LoggingSender
+where
+ T: Debug,
+{
+ pub fn attach(sender: Sender, channel_name: String) -> Self {
+ Self {
+ sender,
+ channel_name,
+ }
+ }
+
+ pub fn send(&self, message: T) -> Result<(), SendError> {
+ trace!("{} {:?}", self.channel_name, &message);
+ self.sender.send(message)
+ }
+}
+
+#[derive(Clone)]
+pub struct LoggingTx
+where
+ T: Debug,
+{
+ tx: TxUnbounded,
+ channel_name: String,
+}
+
+impl LoggingTx
+where
+ T: Debug,
+{
+ pub fn attach(tx: TxUnbounded, channel_name: String) -> Self {
+ Self { tx, channel_name }
+ }
+
+ pub fn send(&self, message: T) -> Result<(), TxError> {
+ trace!("{} {:?}", self.channel_name, &message);
+ self.tx.send(message)
+ }
+}
diff --git a/src/cmd_line.rs b/src/cmd_line.rs
new file mode 100644
index 0000000..1751902
--- /dev/null
+++ b/src/cmd_line.rs
@@ -0,0 +1,136 @@
+use crate::settings::*;
+
+use clap::{App, Arg};
+
+#[derive(Clone, Debug)]
+pub struct CmdLineSettings {
+ pub verbosity: u64,
+ pub log_to_file: bool,
+ pub neovim_args: Vec,
+ pub neovim_bin: Option,
+ pub files_to_open: Vec,
+
+ pub disowned: bool,
+ pub geometry: Option,
+ pub wsl: bool,
+ pub remote_tcp: Option,
+ pub multi_grid: bool,
+ pub maximized: bool,
+ pub frameless: bool,
+}
+
+impl Default for CmdLineSettings {
+ fn default() -> Self {
+ Self {
+ neovim_bin: None,
+ verbosity: 0,
+ log_to_file: false,
+ neovim_args: vec![],
+ files_to_open: vec![],
+ disowned: false,
+ geometry: None,
+ wsl: false,
+ remote_tcp: None,
+ multi_grid: false,
+ maximized: false,
+ frameless: false,
+ }
+ }
+}
+
+pub fn handle_command_line_arguments() {
+ let clapp = App::new("Neovide")
+ .version(crate_version!())
+ .author(crate_authors!())
+ .about(crate_description!())
+ .arg(
+ Arg::with_name("verbosity")
+ .short("v")
+ .multiple(true)
+ .help("Set the level of verbosity"),
+ )
+ .arg(
+ Arg::with_name("log_to_file")
+ .long("log")
+ .help("Log to a file"),
+ )
+ .arg(
+ Arg::with_name("disowned")
+ .long("disowned")
+ .help("Disown the process. (only on macos)"),
+ )
+ .arg(
+ Arg::with_name("maximized")
+ .long("maximized")
+ .help("Maximize the window"),
+ )
+ .arg(
+ Arg::with_name("multi_grid")
+ //.long("multi-grid") TODO: multiGrid is the current way to call this, but I
+ //personally would prefer sticking to a unix-y way of naming things...
+ .long("multiGrid")
+ .help("Enable Multigrid"),
+ )
+ .arg(
+ Arg::with_name("frameless")
+ .long("frameless")
+ .help("Removes the window frame. NOTE: Window might not be resizable after this setting is enabled.")
+ )
+ .arg(Arg::with_name("wsl").long("wsl").help("Run in WSL"))
+ .arg(
+ Arg::with_name("remote_tcp")
+ .long("remote-tcp")
+ .takes_value(true)
+ .help("Connect to Remote TCP"),
+ )
+ .arg(
+ Arg::with_name("geometry")
+ .long("geometry")
+ .takes_value(true)
+ .help("Specify the Geometry of the window"),
+ )
+ .arg(
+ Arg::with_name("files")
+ .multiple(true)
+ .takes_value(true)
+ .help("Specify the Geometry of the window"),
+ )
+ .arg(
+ Arg::with_name("neovim_args")
+ .multiple(true)
+ .takes_value(true)
+ .last(true)
+ .help("Specify Arguments to pass down to neovim"),
+ );
+
+ let matches = clapp.get_matches();
+
+ /*
+ * Integrate Environment Variables as Defaults to the command-line ones.
+ *
+ * NEOVIM_BIN
+ * NeovideMultiGrid || --multiGrid
+ */
+ SETTINGS.set::(&CmdLineSettings {
+ neovim_bin: std::env::var("NEOVIM_BIN").ok(),
+ neovim_args: matches
+ .values_of("neovim_args")
+ .map(|opt| opt.map(|v| v.to_owned()).collect())
+ .unwrap_or_default(),
+ verbosity: matches.occurrences_of("verbosity"),
+ log_to_file: matches.is_present("log_to_file"),
+ files_to_open: matches
+ .values_of("files")
+ .map(|opt| opt.map(|v| v.to_owned()).collect())
+ .unwrap_or_default(),
+ maximized: matches.is_present("maximized") || std::env::var("NEOVIDE_MAXIMIZED").is_ok(),
+ multi_grid: std::env::var("NEOVIDE_MULTIGRID").is_ok()
+ || std::env::var("NeovideMultiGrid").is_ok()
+ || matches.is_present("multi_grid"),
+ remote_tcp: matches.value_of("remote_tcp").map(|i| i.to_owned()),
+ disowned: matches.is_present("disowned"),
+ wsl: matches.is_present("wsl"),
+ geometry: matches.value_of("geometry").map(|i| i.to_owned()),
+ frameless: matches.is_present("frameless") || std::env::var("NEOVIDE_FRAMELESS").is_ok(),
+ });
+}
diff --git a/src/editor/cursor.rs b/src/editor/cursor.rs
index 5900097..4040e5a 100644
--- a/src/editor/cursor.rs
+++ b/src/editor/cursor.rs
@@ -1,7 +1,7 @@
use std::collections::HashMap;
use std::sync::Arc;
-use skulpin::skia_safe::Color4f;
+use skia_safe::Color4f;
use super::style::{Colors, Style};
@@ -70,10 +70,9 @@ impl Cursor {
style
.colors
.foreground
- .clone()
- .unwrap_or_else(|| default_colors.background.clone().unwrap())
+ .unwrap_or_else(|| default_colors.background.unwrap())
} else {
- default_colors.background.clone().unwrap()
+ default_colors.background.unwrap()
}
}
@@ -82,10 +81,9 @@ impl Cursor {
style
.colors
.background
- .clone()
- .unwrap_or_else(|| default_colors.foreground.clone().unwrap())
+ .unwrap_or_else(|| default_colors.foreground.unwrap())
} else {
- default_colors.foreground.clone().unwrap()
+ default_colors.foreground.unwrap()
}
}
@@ -159,18 +157,18 @@ mod tests {
assert_eq!(
cursor.foreground(&DEFAULT_COLORS),
- DEFAULT_COLORS.background.clone().unwrap()
+ DEFAULT_COLORS.background.unwrap()
);
cursor.style = style.clone();
assert_eq!(
cursor.foreground(&DEFAULT_COLORS),
- COLORS.foreground.clone().unwrap()
+ COLORS.foreground.unwrap()
);
cursor.style = Some(Arc::new(Style::new(NONE_COLORS)));
assert_eq!(
cursor.foreground(&DEFAULT_COLORS),
- DEFAULT_COLORS.background.clone().unwrap()
+ DEFAULT_COLORS.background.unwrap()
);
}
@@ -181,18 +179,18 @@ mod tests {
assert_eq!(
cursor.background(&DEFAULT_COLORS),
- DEFAULT_COLORS.foreground.clone().unwrap()
+ DEFAULT_COLORS.foreground.unwrap()
);
cursor.style = style.clone();
assert_eq!(
cursor.background(&DEFAULT_COLORS),
- COLORS.background.clone().unwrap()
+ COLORS.background.unwrap()
);
cursor.style = Some(Arc::new(Style::new(NONE_COLORS)));
assert_eq!(
cursor.background(&DEFAULT_COLORS),
- DEFAULT_COLORS.foreground.clone().unwrap()
+ DEFAULT_COLORS.foreground.unwrap()
);
}
diff --git a/src/editor/draw_command_batcher.rs b/src/editor/draw_command_batcher.rs
index 8fef22e..d9f01d9 100644
--- a/src/editor/draw_command_batcher.rs
+++ b/src/editor/draw_command_batcher.rs
@@ -1,16 +1,17 @@
use std::sync::mpsc::{channel, Receiver, SendError, Sender};
use super::DrawCommand;
+use crate::channel_utils::*;
pub struct DrawCommandBatcher {
window_draw_command_sender: Sender,
window_draw_command_receiver: Receiver,
- batched_draw_command_sender: Sender>,
+ batched_draw_command_sender: LoggingSender>,
}
impl DrawCommandBatcher {
- pub fn new(batched_draw_command_sender: Sender>) -> DrawCommandBatcher {
+ pub fn new(batched_draw_command_sender: LoggingSender>) -> DrawCommandBatcher {
let (sender, receiver) = channel();
DrawCommandBatcher {
diff --git a/src/editor/grid.rs b/src/editor/grid.rs
index 8c7fef1..604c45b 100644
--- a/src/editor/grid.rs
+++ b/src/editor/grid.rs
@@ -2,7 +2,14 @@ use std::sync::Arc;
use super::style::Style;
-pub type GridCell = Option<(String, Option>)>;
+pub type GridCell = (String, Option>);
+
+#[macro_export]
+macro_rules! default_cell {
+ () => {
+ (" ".to_owned(), None)
+ };
+}
pub struct CharacterGrid {
pub width: u64,
@@ -16,7 +23,7 @@ impl CharacterGrid {
let (width, height) = size;
let cell_count = (width * height) as usize;
CharacterGrid {
- characters: vec![None; cell_count],
+ characters: vec![default_cell!(); cell_count],
width,
height,
}
@@ -24,8 +31,7 @@ impl CharacterGrid {
pub fn resize(&mut self, width: u64, height: u64) {
let new_cell_count = (width * height) as usize;
- let default_cell: GridCell = None;
- let mut new_characters = vec![default_cell; new_cell_count];
+ let mut new_characters = vec![default_cell!(); new_cell_count];
for x in 0..self.width.min(width) {
for y in 0..self.height.min(height) {
@@ -41,7 +47,7 @@ impl CharacterGrid {
}
pub fn clear(&mut self) {
- self.set_characters_all(None);
+ self.set_all_characters(default_cell!());
}
fn cell_index(&self, x: u64, y: u64) -> Option {
@@ -61,12 +67,10 @@ impl CharacterGrid {
.map(move |idx| &mut self.characters[idx])
}
- pub fn set_characters_all(&mut self, value: GridCell) {
+ pub fn set_all_characters(&mut self, value: GridCell) {
self.characters.clear();
self.characters
- .resize_with((self.width * self.height) as usize, || {
- value.as_ref().cloned()
- });
+ .resize_with((self.width * self.height) as usize, || value.clone());
}
pub fn row(&self, row_index: u64) -> Option<&[GridCell]> {
@@ -123,25 +127,28 @@ mod tests {
}
#[test]
- fn test_new() {
+ fn new_constructsGrid() {
let context = Context::new();
// RUN FUNCTION
let character_grid = CharacterGrid::new(context.size);
assert_eq!(character_grid.width, context.size.0);
assert_eq!(character_grid.height, context.size.1);
- assert_eq!(character_grid.characters, vec![None; context.area]);
+ assert_eq!(
+ character_grid.characters,
+ vec![default_cell!(); context.area]
+ );
}
#[test]
- fn test_get_cell() {
+ fn getCell_returnsExpectedCell() {
let context = Context::new();
let mut character_grid = CharacterGrid::new(context.size);
- character_grid.characters[context.index] = Some((
+ character_grid.characters[context.index] = (
"foo".to_string(),
Some(Arc::new(Style::new(context.none_colors.clone()))),
- ));
+ );
let result = (
"foo".to_string(),
Some(Arc::new(Style::new(context.none_colors.clone()))),
@@ -149,24 +156,20 @@ mod tests {
// RUN FUNCTION
assert_eq!(
- character_grid
- .get_cell(context.x, context.y)
- .unwrap()
- .as_ref()
- .unwrap(),
+ character_grid.get_cell(context.x, context.y).unwrap(),
&result
);
}
#[test]
- fn test_get_cell_mut() {
+ fn getCellMut_modifiersGridProperly() {
let context = Context::new();
let mut character_grid = CharacterGrid::new(context.size);
- character_grid.characters[context.index] = Some((
+ character_grid.characters[context.index] = (
"foo".to_string(),
Some(Arc::new(Style::new(context.none_colors.clone()))),
- ));
+ );
let result = (
"bar".to_string(),
Some(Arc::new(Style::new(context.none_colors.clone()))),
@@ -174,32 +177,28 @@ mod tests {
// RUN FUNCTION
let cell = character_grid.get_cell_mut(context.x, context.y).unwrap();
- *cell = Some((
+ *cell = (
"bar".to_string(),
Some(Arc::new(Style::new(context.none_colors.clone()))),
- ));
+ );
assert_eq!(
- character_grid
- .get_cell_mut(context.x, context.y)
- .unwrap()
- .as_ref()
- .unwrap(),
+ character_grid.get_cell_mut(context.x, context.y).unwrap(),
&result
);
}
#[test]
- fn test_set_characters_all() {
+ fn setAllCharacters_setsAllCellsToGivenCharacter() {
let context = Context::new();
- let grid_cell = Some((
+ let grid_cell = (
"foo".to_string(),
Some(Arc::new(Style::new(context.none_colors))),
- ));
+ );
let mut character_grid = CharacterGrid::new(context.size);
// RUN FUNCTION
- character_grid.set_characters_all(grid_cell.clone());
+ character_grid.set_all_characters(grid_cell.clone());
assert_eq!(
character_grid.characters,
vec![grid_cell.clone(); context.area]
@@ -207,14 +206,14 @@ mod tests {
}
#[test]
- fn test_clear() {
+ fn clear_emptiesBuffer() {
let context = Context::new();
let mut character_grid = CharacterGrid::new(context.size);
- let grid_cell = Some((
+ let grid_cell = (
"foo".to_string(),
Some(Arc::new(Style::new(context.none_colors))),
- ));
+ );
character_grid.characters = vec![grid_cell.clone(); context.area];
// RUN FUNCTION
@@ -222,11 +221,14 @@ mod tests {
assert_eq!(character_grid.width, context.size.0);
assert_eq!(character_grid.height, context.size.1);
- assert_eq!(character_grid.characters, vec![None; context.area]);
+ assert_eq!(
+ character_grid.characters,
+ vec![default_cell!(); context.area]
+ );
}
#[test]
- fn test_resize() {
+ fn resize_clearsAndResizesGrid() {
let context = Context::new();
let mut character_grid = CharacterGrid::new(context.size);
let (width, height) = (
@@ -234,10 +236,10 @@ mod tests {
(thread_rng().gen::() % 500) + 1,
);
- let grid_cell = Some((
+ let grid_cell = (
"foo".to_string(),
Some(Arc::new(Style::new(context.none_colors))),
- ));
+ );
character_grid.characters = vec![grid_cell.clone(); context.area];
// RUN FUNCTION
@@ -255,7 +257,7 @@ mod tests {
for x in original_width..width {
for y in original_height..height {
- assert_eq!(character_grid.get_cell(x, y).unwrap(), &None);
+ assert_eq!(character_grid.get_cell(x, y).unwrap(), &default_cell!());
}
}
}
diff --git a/src/editor/mod.rs b/src/editor/mod.rs
index 04738af..e35b0f4 100644
--- a/src/editor/mod.rs
+++ b/src/editor/mod.rs
@@ -6,14 +6,14 @@ mod window;
use std::collections::HashMap;
use std::fmt;
-use std::sync::mpsc::Sender;
use std::sync::Arc;
use std::thread;
use crossfire::mpsc::RxUnbounded;
-use log::{error, trace, warn};
+use log::{error, trace};
use crate::bridge::{EditorMode, GuiOption, RedrawEvent, WindowAnchor};
+use crate::channel_utils::*;
use crate::redraw_scheduler::REDRAW_SCHEDULER;
pub use cursor::{Cursor, CursorMode, CursorShape};
pub use draw_command_batcher::DrawCommandBatcher;
@@ -21,11 +21,13 @@ pub use grid::CharacterGrid;
pub use style::{Colors, Style};
pub use window::*;
+#[derive(Clone)]
pub struct AnchorInfo {
pub anchor_grid_id: u64,
pub anchor_type: WindowAnchor,
pub anchor_left: f64,
pub anchor_top: f64,
+ pub sort_order: u64,
}
impl WindowAnchor {
@@ -57,6 +59,7 @@ pub enum DrawCommand {
ModeChanged(EditorMode),
}
+#[derive(Debug)]
pub enum WindowCommand {
TitleChanged(String),
SetMouseEnabled(bool),
@@ -83,13 +86,13 @@ pub struct Editor {
pub defined_styles: HashMap>,
pub mode_list: Vec,
pub draw_command_batcher: Arc,
- pub window_command_sender: Sender,
+ pub window_command_sender: LoggingSender,
}
impl Editor {
pub fn new(
- batched_draw_command_sender: Sender>,
- window_command_sender: Sender,
+ batched_draw_command_sender: LoggingSender>,
+ window_command_sender: LoggingSender,
) -> Editor {
Editor {
windows: HashMap::new(),
@@ -208,8 +211,16 @@ impl Editor {
anchor_grid,
anchor_column: anchor_left,
anchor_row: anchor_top,
+ sort_order,
..
- } => self.set_window_float_position(grid, anchor_grid, anchor, anchor_left, anchor_top),
+ } => self.set_window_float_position(
+ grid,
+ anchor_grid,
+ anchor,
+ anchor_left,
+ anchor_top,
+ sort_order,
+ ),
RedrawEvent::WindowHide { grid } => {
let window = self.windows.get(&grid);
if let Some(window) = window {
@@ -240,7 +251,7 @@ impl Editor {
}
fn resize_window(&mut self, grid: u64, width: u64, height: u64) {
- warn!("editor resize {}", grid);
+ trace!("editor resize {}", grid);
if let Some(window) = self.windows.get_mut(&grid) {
window.resize(width, height);
} else {
@@ -265,7 +276,6 @@ impl Editor {
width: u64,
height: u64,
) {
- warn!("position {}", grid);
if let Some(window) = self.windows.get_mut(&grid) {
window.position(width, height, None, start_left as f64, start_top as f64);
window.show();
@@ -290,8 +300,8 @@ impl Editor {
anchor_type: WindowAnchor,
anchor_left: f64,
anchor_top: f64,
+ sort_order: Option,
) {
- warn!("floating position {}", grid);
let parent_position = self.get_window_top_left(anchor_grid);
if let Some(window) = self.windows.get_mut(&grid) {
let width = window.get_width();
@@ -312,6 +322,7 @@ impl Editor {
anchor_type,
anchor_left,
anchor_top,
+ sort_order: sort_order.unwrap_or(grid),
}),
modified_left,
modified_top,
@@ -323,7 +334,6 @@ impl Editor {
}
fn set_message_position(&mut self, grid: u64, grid_top: u64) {
- warn!("message position {}", grid);
let parent_width = self
.windows
.get(&1)
@@ -335,6 +345,7 @@ impl Editor {
anchor_type: WindowAnchor::NorthWest,
anchor_left: 0.0,
anchor_top: grid_top as f64,
+ sort_order: std::u64::MAX,
};
if let Some(window) = self.windows.get_mut(&grid) {
@@ -422,15 +433,15 @@ impl Editor {
if let Some(window) = self.windows.get_mut(&grid) {
window.update_viewport(top_line, bottom_line);
} else {
- warn!("viewport event received before window initialized");
+ trace!("viewport event received before window initialized");
}
}
}
pub fn start_editor(
redraw_event_receiver: RxUnbounded,
- batched_draw_command_sender: Sender>,
- window_command_sender: Sender,
+ batched_draw_command_sender: LoggingSender>,
+ window_command_sender: LoggingSender,
) {
thread::spawn(move || {
let mut editor = Editor::new(batched_draw_command_sender, window_command_sender);
diff --git a/src/editor/style.rs b/src/editor/style.rs
index cfe59d5..6870482 100644
--- a/src/editor/style.rs
+++ b/src/editor/style.rs
@@ -1,4 +1,4 @@
-use skulpin::skia_safe::Color4f;
+use skia_safe::Color4f;
#[derive(new, PartialEq, Debug, Clone)]
pub struct Colors {
@@ -31,13 +31,11 @@ impl Style {
if self.reverse {
self.colors
.background
- .clone()
- .unwrap_or_else(|| default_colors.background.clone().unwrap())
+ .unwrap_or_else(|| default_colors.background.unwrap())
} else {
self.colors
.foreground
- .clone()
- .unwrap_or_else(|| default_colors.foreground.clone().unwrap())
+ .unwrap_or_else(|| default_colors.foreground.unwrap())
}
}
@@ -45,21 +43,18 @@ impl Style {
if self.reverse {
self.colors
.foreground
- .clone()
- .unwrap_or_else(|| default_colors.foreground.clone().unwrap())
+ .unwrap_or_else(|| default_colors.foreground.unwrap())
} else {
self.colors
.background
- .clone()
- .unwrap_or_else(|| default_colors.background.clone().unwrap())
+ .unwrap_or_else(|| default_colors.background.unwrap())
}
}
pub fn special(&self, default_colors: &Colors) -> Color4f {
self.colors
.special
- .clone()
- .unwrap_or_else(|| default_colors.special.clone().unwrap())
+ .unwrap_or_else(|| default_colors.special.unwrap())
}
}
@@ -85,12 +80,12 @@ mod tests {
assert_eq!(
style.foreground(&DEFAULT_COLORS),
- COLORS.foreground.clone().unwrap()
+ COLORS.foreground.unwrap()
);
style.colors.foreground = None;
assert_eq!(
style.foreground(&DEFAULT_COLORS),
- DEFAULT_COLORS.foreground.clone().unwrap()
+ DEFAULT_COLORS.foreground.unwrap()
);
}
@@ -101,12 +96,12 @@ mod tests {
assert_eq!(
style.foreground(&DEFAULT_COLORS),
- COLORS.background.clone().unwrap()
+ COLORS.background.unwrap()
);
style.colors.background = None;
assert_eq!(
style.foreground(&DEFAULT_COLORS),
- DEFAULT_COLORS.background.clone().unwrap()
+ DEFAULT_COLORS.background.unwrap()
);
}
@@ -116,12 +111,12 @@ mod tests {
assert_eq!(
style.background(&DEFAULT_COLORS),
- COLORS.background.clone().unwrap()
+ COLORS.background.unwrap()
);
style.colors.background = None;
assert_eq!(
style.background(&DEFAULT_COLORS),
- DEFAULT_COLORS.background.clone().unwrap()
+ DEFAULT_COLORS.background.unwrap()
);
}
@@ -132,12 +127,12 @@ mod tests {
assert_eq!(
style.background(&DEFAULT_COLORS),
- COLORS.foreground.clone().unwrap()
+ COLORS.foreground.unwrap()
);
style.colors.foreground = None;
assert_eq!(
style.background(&DEFAULT_COLORS),
- DEFAULT_COLORS.foreground.clone().unwrap()
+ DEFAULT_COLORS.foreground.unwrap()
);
}
@@ -145,14 +140,11 @@ mod tests {
fn test_special() {
let mut style = Style::new(COLORS);
- assert_eq!(
- style.special(&DEFAULT_COLORS),
- COLORS.special.clone().unwrap()
- );
+ assert_eq!(style.special(&DEFAULT_COLORS), COLORS.special.unwrap());
style.colors.special = None;
assert_eq!(
style.special(&DEFAULT_COLORS),
- DEFAULT_COLORS.special.clone().unwrap()
+ DEFAULT_COLORS.special.unwrap()
);
}
}
diff --git a/src/editor/window.rs b/src/editor/window.rs
index c9eb181..9fd6476 100644
--- a/src/editor/window.rs
+++ b/src/editor/window.rs
@@ -1,5 +1,4 @@
use std::collections::HashMap;
-use std::fmt;
use std::sync::Arc;
use log::warn;
@@ -10,20 +9,20 @@ use super::style::Style;
use super::{AnchorInfo, DrawCommand, DrawCommandBatcher};
use crate::bridge::GridLineCell;
-#[derive(new, Clone)]
+#[derive(new, Clone, Debug)]
pub enum WindowDrawCommand {
Position {
grid_left: f64,
grid_top: f64,
width: u64,
height: u64,
- floating: bool,
+ floating_order: Option,
},
- Cell {
- text: String,
- cell_width: u64,
+ Cells {
+ cells: Vec,
window_left: u64,
window_top: u64,
+ width: u64,
style: Option>,
},
Scroll {
@@ -44,36 +43,6 @@ pub enum WindowDrawCommand {
},
}
-impl fmt::Debug for WindowDrawCommand {
- fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
- match self {
- WindowDrawCommand::Position {
- grid_left,
- grid_top,
- ..
- } => write!(
- formatter,
- "Position {{ left: {}, right: {} }}",
- grid_left, grid_top
- ),
- WindowDrawCommand::Cell { .. } => write!(formatter, "Cell"),
- WindowDrawCommand::Scroll { .. } => write!(formatter, "Scroll"),
- WindowDrawCommand::Clear => write!(formatter, "Clear"),
- WindowDrawCommand::Show => write!(formatter, "Show"),
- WindowDrawCommand::Hide => write!(formatter, "Hide"),
- WindowDrawCommand::Close => write!(formatter, "Close"),
- WindowDrawCommand::Viewport {
- top_line,
- bottom_line,
- } => write!(
- formatter,
- "Viewport {{ top: {}, bottom: {} }}",
- top_line, bottom_line
- ),
- }
- }
-}
-
pub struct Window {
grid_id: u64,
grid: CharacterGrid,
@@ -123,18 +92,18 @@ impl Window {
grid_top: self.grid_top,
width: self.grid.width,
height: self.grid.height,
- floating: self.anchor_info.is_some(),
+ floating_order: self.anchor_info.clone().map(|anchor| anchor.sort_order),
});
}
pub fn get_cursor_character(&self, window_left: u64, window_top: u64) -> (String, bool) {
let character = match self.grid.get_cell(window_left, window_top) {
- Some(Some((character, _))) => character.clone(),
+ Some((character, _)) => character.clone(),
_ => ' '.to_string(),
};
let double_width = match self.grid.get_cell(window_left + 1, window_top) {
- Some(Some((character, _))) => character.is_empty(),
+ Some((character, _)) => character.is_empty(),
_ => false,
};
@@ -199,80 +168,58 @@ impl Window {
// Insert the contents of the cell into the grid.
if text.is_empty() {
if let Some(cell) = self.grid.get_cell_mut(*column_pos, row_index) {
- *cell = Some((" ".to_string(), style.clone()));
+ *cell = (text, style.clone());
}
*column_pos += 1;
} else {
- for (i, character) in text.graphemes(true).enumerate() {
- if let Some(cell) = self.grid.get_cell_mut(i as u64 + *column_pos, row_index) {
- *cell = Some((character.to_string(), style.clone()));
+ for character in text.graphemes(true) {
+ if let Some(cell) = self.grid.get_cell_mut(*column_pos, row_index) {
+ *cell = (character.to_string(), style.clone());
}
+ *column_pos += 1;
}
- *column_pos += text.graphemes(true).count() as u64;
}
*previous_style = style;
}
// Send a draw command for the given row starting from current_start up until the next style
- // change. If the current_start is the same as line_start, this will also work backwards in the
- // line in order to ensure that ligatures before the beginning of the grid cell are also
- // updated.
- fn send_draw_command(
- &self,
- row_index: u64,
- line_start: u64,
- current_start: u64,
- ) -> Option {
+ // change or double width character.
+ fn send_draw_command(&self, row_index: u64, start: u64) -> Option {
let row = self.grid.row(row_index).unwrap();
- let (_, style) = &row[current_start as usize].as_ref()?;
-
- let mut draw_command_start_index = current_start;
- if current_start == line_start {
- // Locate contiguous same styled cells before the inserted cells.
- // This way any ligatures are correctly rerendered.
- // This could be sped up if we knew what characters were a part of a ligature, but in the
- // current system we do not.
- for possible_start_index in (0..current_start).rev() {
- if let Some((_, possible_start_style)) = &row[possible_start_index as usize] {
- if style == possible_start_style {
- draw_command_start_index = possible_start_index;
- continue;
- }
- }
+ let (_, style) = &row[start as usize];
+
+ let mut cells = Vec::new();
+ let mut width = 0;
+ for possible_end_index in start..self.grid.width {
+ let (character, possible_end_style) = &row[possible_end_index as usize];
+
+ // Style doesn't match. Draw what we've got
+ if style != possible_end_style {
break;
}
- }
- let mut draw_command_end_index = current_start;
- for possible_end_index in draw_command_start_index..self.grid.width {
- if let Some((_, possible_end_style)) = &row[possible_end_index as usize] {
- if style == possible_end_style {
- draw_command_end_index = possible_end_index;
- continue;
- }
+ width += 1;
+ // The previous character is double width, so send this as its own draw command
+ if character.is_empty() {
+ break;
}
- break;
- }
- // Build up the actual text to be rendered including the contiguously styled bits.
- let mut text = String::new();
- for x in draw_command_start_index..(draw_command_end_index + 1) {
- let (character, _) = row[x as usize].as_ref().unwrap();
- text.push_str(character);
+ // Add the grid cell to the cells to render
+ cells.push(character.clone());
}
// Send a window draw command to the current window.
- self.send_command(WindowDrawCommand::Cell {
- text,
- cell_width: draw_command_end_index - draw_command_start_index + 1,
- window_left: draw_command_start_index,
+ self.send_command(WindowDrawCommand::Cells {
+ cells,
+ window_left: start,
window_top: row_index,
+ width,
style: style.clone(),
});
- Some(draw_command_end_index + 1)
+ Some(start + width)
}
pub fn draw_grid_line(
@@ -295,9 +242,11 @@ impl Window {
);
}
- let mut current_start = column_start;
- while current_start < column_pos {
- if let Some(next_start) = self.send_draw_command(row, column_start, current_start) {
+ // Redraw the participating line by calling send_draw_command starting at 0
+ // until current_start is greater than the grid width
+ let mut current_start = 0;
+ while current_start < self.grid.width {
+ if let Some(next_start) = self.send_draw_command(row, current_start) {
current_start = next_start;
} else {
break;
@@ -369,7 +318,7 @@ impl Window {
for row in 0..self.grid.height {
let mut current_start = 0;
while current_start < self.grid.width {
- if let Some(next_start) = self.send_draw_command(row, 0, current_start) {
+ if let Some(next_start) = self.send_draw_command(row, current_start) {
current_start = next_start;
} else {
break;
@@ -397,3 +346,54 @@ impl Window {
});
}
}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::channel_utils::*;
+ use std::collections::HashMap;
+ use std::sync::mpsc::*;
+
+ fn build_test_channels() -> (Receiver>, Arc) {
+ let (batched_draw_command_sender, batched_draw_command_receiver) = channel();
+ let logging_batched_draw_command_sender = LoggingSender::attach(
+ batched_draw_command_sender,
+ "batched_draw_command".to_owned(),
+ );
+
+ let draw_command_batcher =
+ Arc::new(DrawCommandBatcher::new(logging_batched_draw_command_sender));
+
+ (batched_draw_command_receiver, draw_command_batcher)
+ }
+
+ #[test]
+ fn windowSeparator_modifiesGridAndSendsDrawCommand() {
+ let (batched_receiver, batched_sender) = build_test_channels();
+ let mut window = Window::new(1, 114, 64, None, 0.0, 0.0, batched_sender.clone());
+ batched_sender
+ .send_batch()
+ .expect("Could not send batch of commands");
+ batched_receiver.recv().expect("Could not receive commands");
+
+ window.draw_grid_line(
+ 1,
+ 70,
+ vec![GridLineCell {
+ text: "|".to_owned(),
+ highlight_id: None,
+ repeat: None,
+ }],
+ &HashMap::new(),
+ );
+
+ assert_eq!(window.grid.get_cell(70, 1), Some(&("|".to_owned(), None)));
+
+ batched_sender
+ .send_batch()
+ .expect("Could not send batch of commands");
+
+ let sent_commands = batched_receiver.recv().expect("Could not receive commands");
+ assert!(sent_commands.len() != 0);
+ }
+}
diff --git a/src/main.rs b/src/main.rs
index baed787..8c122d2 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,9 +1,20 @@
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
+#[cfg(not(test))]
+use flexi_logger::{Cleanup, Criterion, Duplicate, Logger, Naming};
+
+// Test naming occasionally uses camelCase with underscores to separate sections of
+// the test name.
+#[cfg_attr(test, allow(non_snake_case))]
#[macro_use]
extern crate neovide_derive;
+#[macro_use]
+extern crate clap;
+
mod bridge;
+mod channel_utils;
+mod cmd_line;
mod editor;
mod error_handling;
mod redraw_scheduler;
@@ -24,11 +35,15 @@ use std::sync::{atomic::AtomicBool, mpsc::channel, Arc};
use crossfire::mpsc::unbounded_future;
use bridge::start_bridge;
+#[cfg(not(test))]
+use cmd_line::CmdLineSettings;
use editor::start_editor;
use renderer::{cursor_renderer::CursorSettings, RendererSettings};
+#[cfg(not(test))]
+use settings::SETTINGS;
use window::{create_window, window_geometry, KeyboardSettings, WindowSettings};
-use windows_utils::attach_parent_console;
+pub use channel_utils::*;
pub const INITIAL_DIMENSIONS: (u64, u64) = (100, 50);
fn main() {
@@ -101,28 +116,21 @@ fn main() {
// Multiple other parts of the app "queue_next_frame" function to ensure animations continue
// properly or updates to the graphics are pushed to the screen.
- if std::env::args().any(|arg| arg == "--version" || arg == "-v") {
- attach_parent_console();
- println!("Neovide version: {}", env!("CARGO_PKG_VERSION"));
- return;
- }
-
- if std::env::args().any(|arg| arg == "--help" || arg == "-h") {
- attach_parent_console();
- println!("Neovide: {}", env!("CARGO_PKG_DESCRIPTION"));
- return;
- }
+ cmd_line::handle_command_line_arguments(); //Will exit if -h or -v
if let Err(err) = window_geometry() {
eprintln!("{}", err);
return;
}
+ #[cfg(not(test))]
+ init_logger();
+
#[cfg(target_os = "macos")]
{
// incase of app bundle, we can just pass --disowned option straight away to bypass this check
#[cfg(not(debug_assertions))]
- if !std::env::args().any(|f| f == "--disowned") {
+ if !SETTINGS.get::().disowned {
if let Ok(curr_exe) = std::env::current_exe() {
assert!(std::process::Command::new(curr_exe)
.args(std::env::args().skip(1))
@@ -156,33 +164,72 @@ fn main() {
KeyboardSettings::register();
WindowSettings::register();
- redraw_scheduler::RedrawSettings::register();
RendererSettings::register();
CursorSettings::register();
let running = Arc::new(AtomicBool::new(true));
let (redraw_event_sender, redraw_event_receiver) = unbounded_future();
+ let logging_redraw_event_sender =
+ LoggingTx::attach(redraw_event_sender, "redraw_event".to_owned());
+
let (batched_draw_command_sender, batched_draw_command_receiver) = channel();
+ let logging_batched_draw_command_sender = LoggingSender::attach(
+ batched_draw_command_sender,
+ "batched_draw_command".to_owned(),
+ );
+
let (ui_command_sender, ui_command_receiver) = unbounded_future();
+ let logging_ui_command_sender = LoggingTx::attach(ui_command_sender, "ui_command".to_owned());
+
let (window_command_sender, window_command_receiver) = channel();
+ let logging_window_command_sender =
+ LoggingSender::attach(window_command_sender, "window_command".to_owned());
// We need to keep the bridge reference around to prevent the tokio runtime from getting freed
let _bridge = start_bridge(
- ui_command_sender.clone(),
+ logging_ui_command_sender.clone(),
ui_command_receiver,
- redraw_event_sender,
+ logging_redraw_event_sender,
running.clone(),
);
start_editor(
redraw_event_receiver,
- batched_draw_command_sender,
- window_command_sender,
+ logging_batched_draw_command_sender,
+ logging_window_command_sender,
);
create_window(
batched_draw_command_receiver,
window_command_receiver,
- ui_command_sender,
+ logging_ui_command_sender,
running,
);
}
+
+#[cfg(not(test))]
+pub fn init_logger() {
+ let verbosity = match SETTINGS.get::().verbosity {
+ 0 => "warn",
+ 1 => "info",
+ 2 => "debug",
+ _ => "trace",
+ };
+ let log_to_file = SETTINGS.get::().log_to_file;
+
+ if log_to_file {
+ Logger::with_env_or_str("neovide")
+ .duplicate_to_stderr(Duplicate::Error)
+ .log_to_file()
+ .rotate(
+ Criterion::Size(10_000_000),
+ Naming::Timestamps,
+ Cleanup::KeepLogFiles(1),
+ )
+ .start()
+ .expect("Could not start logger");
+ } else {
+ Logger::with_env_or_str(format!("neovide = {}", verbosity))
+ .start()
+ .expect("Could not start logger");
+ }
+}
diff --git a/src/redraw_scheduler.rs b/src/redraw_scheduler.rs
index ec261d6..4784591 100644
--- a/src/redraw_scheduler.rs
+++ b/src/redraw_scheduler.rs
@@ -1,10 +1,10 @@
-use std::sync::atomic::{AtomicU16, Ordering};
+use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Mutex;
use std::time::Instant;
use log::trace;
-use crate::settings::*;
+use crate::{cmd_line::CmdLineSettings, settings::*};
lazy_static! {
pub static ref REDRAW_SCHEDULER: RedrawScheduler = RedrawScheduler::new();
@@ -19,7 +19,8 @@ impl Default for RedrawSettings {
fn default() -> Self {
Self {
extra_buffer_frames: if SETTINGS
- .neovim_arguments
+ .get::()
+ .neovim_args
.contains(&"--extraBufferFrames".to_string())
{
60
@@ -31,15 +32,15 @@ impl Default for RedrawSettings {
}
pub struct RedrawScheduler {
- frames_queued: AtomicU16,
scheduled_frame: Mutex