on a5acfdb help sign in
.github/workflows/release.yml+5−5
since splitsnapshots
unifiedsplit
@@ -36,7 +36,7 @@ jobs:
36 - name: Bundle grammars
36 - name: Bundle grammars
37 run: tar cJf grammars.tar.xz -C runtime/grammars/sources .
37 run: tar cJf grammars.tar.xz -C runtime/grammars/sources .
38
38
39− - uses: actions/upload-artifact@v4
39+ - uses: actions/upload-artifact@v3
40 with:
40 with:
41 name: grammars
41 name: grammars
42 path: grammars.tar.xz
42 path: grammars.tar.xz
@@ -106,7 +106,7 @@ jobs:
106 uses: actions/checkout@v4
106 uses: actions/checkout@v4
107
107
108 - name: Download grammars
108 - name: Download grammars
109− uses: actions/download-artifact@v4
109+ uses: actions/download-artifact@v3
110
110
111 - name: Move grammars under runtime
111 - name: Move grammars under runtime
112 if: "!startsWith(matrix.os, 'windows')"
112 if: "!startsWith(matrix.os, 'windows')"
@@ -220,7 +220,7 @@ jobs:
220 fi
220 fi
221 cp -r runtime dist
221 cp -r runtime dist
222
222
223− - uses: actions/upload-artifact@v4
223+ - uses: actions/upload-artifact@v3
224 with:
224 with:
225 name: bins-${{ matrix.build }}
225 name: bins-${{ matrix.build }}
226 path: dist
226 path: dist
@@ -233,7 +233,7 @@ jobs:
233 - name: Checkout sources
233 - name: Checkout sources
234 uses: actions/checkout@v4
234 uses: actions/checkout@v4
235
235
236− - uses: actions/download-artifact@v4
236+ - uses: actions/download-artifact@v3
237
237
238 - name: Build archive
238 - name: Build archive
239 shell: bash
239 shell: bash
@@ -288,7 +288,7 @@ jobs:
288 overwrite: true
288 overwrite: true
289
289
290 - name: Upload binaries as artifact
290 - name: Upload binaries as artifact
291− uses: actions/upload-artifact@v4
291+ uses: actions/upload-artifact@v3
292 if: env.preview == 'true'
292 if: env.preview == 'true'
293 with:
293 with:
294 name: release
294 name: release
Cargo.lock+84−103
@@ -62,9 +62,9 @@ dependencies = [
62
62
63[[package]]
63[[package]]
64name = "anyhow"
64name = "anyhow"
65−version = "1.0.76"
65+version = "1.0.75"
66source = "registry+https://github.com/rust-lang/crates.io-index"
66source = "registry+https://github.com/rust-lang/crates.io-index"
67−checksum = "59d2a3357dde987206219e78ecfbbb6e8dad06cbb65292758d3270e6254f7355"
67+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
68
68
69[[package]]
69[[package]]
70name = "arc-swap"
70name = "arc-swap"
@@ -469,9 +469,9 @@ dependencies = [
469
469
470[[package]]
470[[package]]
471name = "futures-core"
471name = "futures-core"
472−version = "0.3.30"
472+version = "0.3.29"
473source = "registry+https://github.com/rust-lang/crates.io-index"
473source = "registry+https://github.com/rust-lang/crates.io-index"
474−checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
474+checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
475
475
476[[package]]
476[[package]]
477name = "futures-executor"
477name = "futures-executor"
@@ -486,15 +486,15 @@ dependencies = [
486
486
487[[package]]
487[[package]]
488name = "futures-task"
488name = "futures-task"
489−version = "0.3.30"
489+version = "0.3.29"
490source = "registry+https://github.com/rust-lang/crates.io-index"
490source = "registry+https://github.com/rust-lang/crates.io-index"
491−checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
491+checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
492
492
493[[package]]
493[[package]]
494name = "futures-util"
494name = "futures-util"
495−version = "0.3.30"
495+version = "0.3.29"
496source = "registry+https://github.com/rust-lang/crates.io-index"
496source = "registry+https://github.com/rust-lang/crates.io-index"
497−checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
497+checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
498dependencies = [
498dependencies = [
499 "futures-core",
499 "futures-core",
500 "futures-task",
500 "futures-task",
@@ -522,9 +522,9 @@ checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
522
522
523[[package]]
523[[package]]
524name = "gix"
524name = "gix"
525−version = "0.57.0"
525+version = "0.56.0"
526source = "registry+https://github.com/rust-lang/crates.io-index"
526source = "registry+https://github.com/rust-lang/crates.io-index"
527−checksum = "721c7497ab24b665ed5a1eb2b3526936aa60068e61ba260651f7e77c52feec69"
527+checksum = "5b0dcdc9c60d66535897fa40a7ea2a635e72f99456b1d9ae86b7e170e80618cb"
528dependencies = [
528dependencies = [
529 "gix-actor",
529 "gix-actor",
530 "gix-commitgraph",
530 "gix-commitgraph",
@@ -563,9 +563,9 @@ dependencies = [
563
563
564[[package]]
564[[package]]
565name = "gix-actor"
565name = "gix-actor"
566−version = "0.29.0"
566+version = "0.28.1"
567source = "registry+https://github.com/rust-lang/crates.io-index"
567source = "registry+https://github.com/rust-lang/crates.io-index"
568−checksum = "886014c4865b93ce268f1d3eddd4fd3261242c3f3ee61eb36009f913016a9059"
568+checksum = "2eadca029ef716b4378f7afb19f7ee101fde9e58ba1f1445971315ac866db417"
569dependencies = [
569dependencies = [
570 "bstr",
570 "bstr",
571 "btoi",
571 "btoi",
@@ -577,18 +577,18 @@ dependencies = [
577
577
578[[package]]
578[[package]]
579name = "gix-chunk"
579name = "gix-chunk"
580−version = "0.4.6"
580+version = "0.4.5"
581source = "registry+https://github.com/rust-lang/crates.io-index"
581source = "registry+https://github.com/rust-lang/crates.io-index"
582−checksum = "2ade37ef69870de0ed966b97c57a3a947a22ff3482a52c3b99b205f77bcb08fb"
582+checksum = "d411ecd9b558b0c20b3252b7e409eec48eabc41d18324954fe526bac6e2db55f"
583dependencies = [
583dependencies = [
584 "thiserror",
584 "thiserror",
585]
585]
586
586
587[[package]]
587[[package]]
588name = "gix-commitgraph"
588name = "gix-commitgraph"
589−version = "0.23.0"
589+version = "0.22.1"
590source = "registry+https://github.com/rust-lang/crates.io-index"
590source = "registry+https://github.com/rust-lang/crates.io-index"
591−checksum = "e7559ea9cefee188cd88b05afcc8e3ef7a3cb4a5c647bccf06b981e591b02b77"
591+checksum = "85a7007ba021f059803afaf6f8a48872422abc20550ac12ede6ddea2936cec36"
592dependencies = [
592dependencies = [
593 "bstr",
593 "bstr",
594 "gix-chunk",
594 "gix-chunk",
@@ -600,9 +600,9 @@ dependencies = [
600
600
601[[package]]
601[[package]]
602name = "gix-config"
602name = "gix-config"
603−version = "0.33.0"
603+version = "0.32.1"
604source = "registry+https://github.com/rust-lang/crates.io-index"
604source = "registry+https://github.com/rust-lang/crates.io-index"
605−checksum = "9c35dc7f9c00a42bbc9cfa1ca2ec0a78ad1b76ff0736d3d35dfd612962244467"
605+checksum = "0341471d55d8676e98b88e121d7065dfa4c9c5acea4b6d6ecdd2846e85cce0c3"
606dependencies = [
606dependencies = [
607 "bstr",
607 "bstr",
608 "gix-config-value",
608 "gix-config-value",
@@ -621,9 +621,9 @@ dependencies = [
621
621
622[[package]]
622[[package]]
623name = "gix-config-value"
623name = "gix-config-value"
624−version = "0.14.2"
624+version = "0.14.1"
625source = "registry+https://github.com/rust-lang/crates.io-index"
625source = "registry+https://github.com/rust-lang/crates.io-index"
626−checksum = "39f388cb2396aee82d6f460a2e7770659bdf8854e9e5478f7d2b1324a9698284"
626+checksum = "6419db582ea84dfb58c7e7b0af7fd62c808aa14954af2936a33f89b0f4ed018e"
627dependencies = [
627dependencies = [
628 "bitflags 2.4.1",
628 "bitflags 2.4.1",
629 "bstr",
629 "bstr",
@@ -634,9 +634,9 @@ dependencies = [
634
634
635[[package]]
635[[package]]
636name = "gix-date"
636name = "gix-date"
637−version = "0.8.2"
637+version = "0.8.1"
638source = "registry+https://github.com/rust-lang/crates.io-index"
638source = "registry+https://github.com/rust-lang/crates.io-index"
639−checksum = "9d85f4a01e0d05c3de585e28bae514d4baf01655e3fc3f14ce6f30bf62405345"
639+checksum = "468dfbe411f335f01525a1352271727f8e7772075a93fa747260f502086b30be"
640dependencies = [
640dependencies = [
641 "bstr",
641 "bstr",
642 "itoa",
642 "itoa",
@@ -646,9 +646,9 @@ dependencies = [
646
646
647[[package]]
647[[package]]
648name = "gix-diff"
648name = "gix-diff"
649−version = "0.39.0"
649+version = "0.38.0"
650source = "registry+https://github.com/rust-lang/crates.io-index"
650source = "registry+https://github.com/rust-lang/crates.io-index"
651−checksum = "ac0e75f5afd2f6c47c800b6b0a000a08045739d0450d20482e8faa42543f62d1"
651+checksum = "8119a985887cfe68f4bdf92e51bd64bc758a73882d82fcfc03ebcb164441c85d"
652dependencies = [
652dependencies = [
653 "bstr",
653 "bstr",
654 "gix-hash",
654 "gix-hash",
@@ -658,9 +658,9 @@ dependencies = [
658
658
659[[package]]
659[[package]]
660name = "gix-discover"
660name = "gix-discover"
661−version = "0.28.0"
661+version = "0.27.0"
662source = "registry+https://github.com/rust-lang/crates.io-index"
662source = "registry+https://github.com/rust-lang/crates.io-index"
663−checksum = "f0b63ce2ad81632ac1a84ac370f85a5e580c3261580bd85ea17ff35d3a0bba18"
663+checksum = "6fad89416ebe0b3b7df78464124e2a02417b6cd3743d48ad93df86f4d2929c07"
664dependencies = [
664dependencies = [
665 "bstr",
665 "bstr",
666 "dunce",
666 "dunce",
@@ -673,9 +673,9 @@ dependencies = [
673
673
674[[package]]
674[[package]]
675name = "gix-features"
675name = "gix-features"
676−version = "0.37.0"
676+version = "0.36.1"
677source = "registry+https://github.com/rust-lang/crates.io-index"
677source = "registry+https://github.com/rust-lang/crates.io-index"
678−checksum = "befe7edea299a824504b5acc96d7a3a538125b38c42f3a8379f6912a29c90c81"
678+checksum = "4d46a4a5c6bb5bebec9c0d18b65ada20e6517dbd7cf855b87dd4bbdce3a771b2"
679dependencies = [
679dependencies = [
680 "crc32fast",
680 "crc32fast",
681 "flate2",
681 "flate2",
@@ -691,18 +691,18 @@ dependencies = [
691
691
692[[package]]
692[[package]]
693name = "gix-fs"
693name = "gix-fs"
694−version = "0.9.0"
694+version = "0.8.1"
695source = "registry+https://github.com/rust-lang/crates.io-index"
695source = "registry+https://github.com/rust-lang/crates.io-index"
696−checksum = "007017ce93b819ea52c0ec68306f7d72212a2d307c3d70f1548c7141c015d0a1"
696+checksum = "20e86eb040f5776a5ade092282e51cdcad398adb77d948b88d17583c2ae4e107"
697dependencies = [
697dependencies = [
698 "gix-features",
698 "gix-features",
699]
699]
700
700
701[[package]]
701[[package]]
702name = "gix-glob"
702name = "gix-glob"
703−version = "0.15.0"
703+version = "0.14.1"
704source = "registry+https://github.com/rust-lang/crates.io-index"
704source = "registry+https://github.com/rust-lang/crates.io-index"
705−checksum = "61fb116c2516d3a1170e010118f639944a6389872c875a008960cdab2a44ac72"
705+checksum = "5db19298c5eeea2961e5b3bf190767a2d1f09b8802aeb5f258e42276350aff19"
706dependencies = [
706dependencies = [
707 "bitflags 2.4.1",
707 "bitflags 2.4.1",
708 "bstr",
708 "bstr",
@@ -712,9 +712,9 @@ dependencies = [
712
712
713[[package]]
713[[package]]
714name = "gix-hash"
714name = "gix-hash"
715−version = "0.14.0"
715+version = "0.13.3"
716source = "registry+https://github.com/rust-lang/crates.io-index"
716source = "registry+https://github.com/rust-lang/crates.io-index"
717−checksum = "c52c3170a17b6031833cd2eb4ad7bc23f2755d06e6e70f78dec21d42e8fe1b30"
717+checksum = "1f8cf8c2266f63e582b7eb206799b63aa5fa68ee510ad349f637dfe2d0653de0"
718dependencies = [
718dependencies = [
719 "faster-hex",
719 "faster-hex",
720 "thiserror",
720 "thiserror",
@@ -722,9 +722,9 @@ dependencies = [
722
722
723[[package]]
723[[package]]
724name = "gix-hashtable"
724name = "gix-hashtable"
725−version = "0.5.0"
725+version = "0.4.1"
726source = "registry+https://github.com/rust-lang/crates.io-index"
726source = "registry+https://github.com/rust-lang/crates.io-index"
727−checksum = "40a838e6366a5e5b84668b6997ce0981b833136468e8ba949f424c0ef2927eba"
727+checksum = "feb61880816d7ec4f0b20606b498147d480860ddd9133ba542628df2f548d3ca"
728dependencies = [
728dependencies = [
729 "gix-hash",
729 "gix-hash",
730 "hashbrown 0.14.3",
730 "hashbrown 0.14.3",
@@ -733,9 +733,9 @@ dependencies = [
733
733
734[[package]]
734[[package]]
735name = "gix-lock"
735name = "gix-lock"
736−version = "12.0.0"
736+version = "11.0.0"
737source = "registry+https://github.com/rust-lang/crates.io-index"
737source = "registry+https://github.com/rust-lang/crates.io-index"
738−checksum = "6cf112ddee94223c119a8534dad027740dc3aba3365ac5edeef8a7f6660c74db"
738+checksum = "f4feb1dcd304fe384ddc22edba9dd56a42b0800032de6537728cea2f033a4f37"
739dependencies = [
739dependencies = [
740 "gix-tempfile",
740 "gix-tempfile",
741 "gix-utils",
741 "gix-utils",
@@ -744,9 +744,9 @@ dependencies = [
744
744
745[[package]]
745[[package]]
746name = "gix-macros"
746name = "gix-macros"
747−version = "0.1.2"
747+version = "0.1.1"
748source = "registry+https://github.com/rust-lang/crates.io-index"
748source = "registry+https://github.com/rust-lang/crates.io-index"
749−checksum = "fc207b64189cf71bcb17fc841ab99a5d63d0845546b611e2703ce467f659323a"
749+checksum = "02a5bcaf6704d9354a3071cede7e77d366a5980c7352e102e2c2f9b645b1d3ae"
750dependencies = [
750dependencies = [
751 "proc-macro2",
751 "proc-macro2",
752 "quote",
752 "quote",
@@ -755,9 +755,9 @@ dependencies = [
755
755
756[[package]]
756[[package]]
757name = "gix-object"
757name = "gix-object"
758−version = "0.40.0"
758+version = "0.39.0"
759source = "registry+https://github.com/rust-lang/crates.io-index"
759source = "registry+https://github.com/rust-lang/crates.io-index"
760−checksum = "e4c77e47ffba92127faf632a841fce23d19547e269bd8b88e68961a70eab4e93"
760+checksum = "febf79c5825720c1c63fe974c7bbe695d0cb54aabad73f45671c60ce0e501e33"
761dependencies = [
761dependencies = [
762 "bstr",
762 "bstr",
763 "btoi",
763 "btoi",
@@ -774,9 +774,9 @@ dependencies = [
774
774
775[[package]]
775[[package]]
776name = "gix-odb"
776name = "gix-odb"
777−version = "0.56.0"
777+version = "0.55.0"
778source = "registry+https://github.com/rust-lang/crates.io-index"
778source = "registry+https://github.com/rust-lang/crates.io-index"
779−checksum = "a3254f2005cc7553ea78e85e816a09150c6f7a64e6b7627b8d1fdc56721bea73"
779+checksum = "1fae5f971540c99c6ecc8d4368ecc9d18a9dc8b9391025c68c4399747dc93bac"
780dependencies = [
780dependencies = [
781 "arc-swap",
781 "arc-swap",
782 "gix-date",
782 "gix-date",
@@ -793,9 +793,9 @@ dependencies = [
793
793
794[[package]]
794[[package]]
795name = "gix-pack"
795name = "gix-pack"
796−version = "0.46.0"
796+version = "0.45.0"
797source = "registry+https://github.com/rust-lang/crates.io-index"
797source = "registry+https://github.com/rust-lang/crates.io-index"
798−checksum = "02ebc8cd657eec207d82d8f876ca402361308ecd3c87a47935b0299506257b4f"
798+checksum = "4569491c92446fddf373456ff360aff9a9effd627b40a70f2d7914dcd75a3205"
799dependencies = [
799dependencies = [
800 "clru",
800 "clru",
801 "gix-chunk",
801 "gix-chunk",
@@ -813,9 +813,9 @@ dependencies = [
813
813
814[[package]]
814[[package]]
815name = "gix-path"
815name = "gix-path"
816−version = "0.10.2"
816+version = "0.10.1"
817source = "registry+https://github.com/rust-lang/crates.io-index"
817source = "registry+https://github.com/rust-lang/crates.io-index"
818−checksum = "10931652a3da126990ac93bce1b1c600cc99d7c268d712b6360ed52174ce1b68"
818+checksum = "d86d6fac2fabe07b67b7835f46d07571f68b11aa1aaecae94fe722ea4ef305e1"
819dependencies = [
819dependencies = [
820 "bstr",
820 "bstr",
821 "gix-trace",
821 "gix-trace",
@@ -826,9 +826,9 @@ dependencies = [
826
826
827[[package]]
827[[package]]
828name = "gix-quote"
828name = "gix-quote"
829−version = "0.4.9"
829+version = "0.4.8"
830source = "registry+https://github.com/rust-lang/crates.io-index"
830source = "registry+https://github.com/rust-lang/crates.io-index"
831−checksum = "6c43530cb94a7759807e6f8d180e17ac9c65673b891645c6c433831dc0cf4342"
831+checksum = "4f84845efa535468bc79c5a87b9d29219f1da0313c8ecf0365a5daa7e72786f2"
832dependencies = [
832dependencies = [
833 "bstr",
833 "bstr",
834 "btoi",
834 "btoi",
@@ -837,9 +837,9 @@ dependencies = [
837
837
838[[package]]
838[[package]]
839name = "gix-ref"
839name = "gix-ref"
840−version = "0.40.0"
840+version = "0.39.0"
841source = "registry+https://github.com/rust-lang/crates.io-index"
841source = "registry+https://github.com/rust-lang/crates.io-index"
842−checksum = "baa951b3b850d6d1be4f900768e49af20b76bf9505beac22af723d57249a2f1d"
842+checksum = "1ac23ed741583c792f573c028785db683496a6dfcd672ec701ee54ba6a77e1ff"
843dependencies = [
843dependencies = [
844 "gix-actor",
844 "gix-actor",
845 "gix-date",
845 "gix-date",
@@ -858,9 +858,9 @@ dependencies = [
858
858
859[[package]]
859[[package]]
860name = "gix-refspec"
860name = "gix-refspec"
861−version = "0.21.0"
861+version = "0.20.0"
862source = "registry+https://github.com/rust-lang/crates.io-index"
862source = "registry+https://github.com/rust-lang/crates.io-index"
863−checksum = "88c61f849d58c06e3068a0b601cf10127d2a07cdad00a725ed66cf303f76f6b3"
863+checksum = "76d9d3b82e1ee78fc0dc1c37ea5ea76c2dbc73f407db155f0dfcea285e583bee"
864dependencies = [
864dependencies = [
865 "bstr",
865 "bstr",
866 "gix-hash",
866 "gix-hash",
@@ -872,9 +872,9 @@ dependencies = [
872
872
873[[package]]
873[[package]]
874name = "gix-revision"
874name = "gix-revision"
875−version = "0.25.0"
875+version = "0.24.0"
876source = "registry+https://github.com/rust-lang/crates.io-index"
876source = "registry+https://github.com/rust-lang/crates.io-index"
877−checksum = "bcbbf91f4200c5c76802ef5f057b96f5a336827508881fe55a780be71a794d22"
877+checksum = "fe5dd51710ce5434bc315ea30394fab483c5377276494edd79222b321a5a9544"
878dependencies = [
878dependencies = [
879 "bstr",
879 "bstr",
880 "gix-date",
880 "gix-date",
@@ -888,9 +888,9 @@ dependencies = [
888
888
889[[package]]
889[[package]]
890name = "gix-revwalk"
890name = "gix-revwalk"
891−version = "0.11.0"
891+version = "0.10.0"
892source = "registry+https://github.com/rust-lang/crates.io-index"
892source = "registry+https://github.com/rust-lang/crates.io-index"
893−checksum = "33ab66354d83f70f2730391747d0c75f94ef3c3dd40ebde2e206db9faaf7a0a7"
893+checksum = "69d4ed2493ca94a475fdf147138e1ef8bab3b6ebb56abf3d9bda1c05372ec1dd"
894dependencies = [
894dependencies = [
895 "gix-commitgraph",
895 "gix-commitgraph",
896 "gix-date",
896 "gix-date",
@@ -903,21 +903,21 @@ dependencies = [
903
903
904[[package]]
904[[package]]
905name = "gix-sec"
905name = "gix-sec"
906−version = "0.10.2"
906+version = "0.10.1"
907source = "registry+https://github.com/rust-lang/crates.io-index"
907source = "registry+https://github.com/rust-lang/crates.io-index"
908−checksum = "a9963f38a42144253ed4d571882d7db5ef644c12e6726e4b75135597cc9d0e1a"
908+checksum = "a36ea2c5907d64a9b4b5d3cc9f430e6c30f0509646b5e38eb275ca57c5bf29e2"
909dependencies = [
909dependencies = [
910 "bitflags 2.4.1",
910 "bitflags 2.4.1",
911 "gix-path",
911 "gix-path",
912 "libc",
912 "libc",
913− "windows 0.52.0",
913+ "windows",
914]
914]
915
915
916[[package]]
916[[package]]
917name = "gix-tempfile"
917name = "gix-tempfile"
918−version = "12.0.0"
918+version = "11.0.0"
919source = "registry+https://github.com/rust-lang/crates.io-index"
919source = "registry+https://github.com/rust-lang/crates.io-index"
920−checksum = "e76a494bd530e1a1309188ff971825a24f159c76c2db0bf71fa5dfb469a2c915"
920+checksum = "05cc2205cf10d99f70b96e04e16c55d4c7cf33efc151df1f793e29fd12a931f8"
921dependencies = [
921dependencies = [
922 "gix-fs",
922 "gix-fs",
923 "libc",
923 "libc",
@@ -928,15 +928,15 @@ dependencies = [
928
928
929[[package]]
929[[package]]
930name = "gix-trace"
930name = "gix-trace"
931−version = "0.1.5"
931+version = "0.1.4"
932source = "registry+https://github.com/rust-lang/crates.io-index"
932source = "registry+https://github.com/rust-lang/crates.io-index"
933−checksum = "bda62acb44dd86a40c7c3762a5403cfc1ac789ea559df54085cedf79864f809e"
933+checksum = "b686a35799b53a9825575ca3f06481d0a053a409c4d97ffcf5ddd67a8760b497"
934
934
935[[package]]
935[[package]]
936name = "gix-traverse"
936name = "gix-traverse"
937−version = "0.36.0"
937+version = "0.35.0"
938source = "registry+https://github.com/rust-lang/crates.io-index"
938source = "registry+https://github.com/rust-lang/crates.io-index"
939−checksum = "8661fab39985c9214e56d81a63ceb5886ac948cec2fba76c39494d1e0e307ea8"
939+checksum = "df2112088122a0206592c84fbd42020db63b2ccaed66a0293779f2e5fbf80474"
940dependencies = [
940dependencies = [
941 "gix-commitgraph",
941 "gix-commitgraph",
942 "gix-date",
942 "gix-date",
@@ -950,9 +950,9 @@ dependencies = [
950
950
951[[package]]
951[[package]]
952name = "gix-url"
952name = "gix-url"
953−version = "0.26.0"
953+version = "0.25.2"
954source = "registry+https://github.com/rust-lang/crates.io-index"
954source = "registry+https://github.com/rust-lang/crates.io-index"
955−checksum = "10a0129c1e8b52736d7c5128300a4485dbc85863001371e2771ac1754bd89fd7"
955+checksum = "0c427a1a11ccfa53a4a2da47d9442c2241deee63a154bc15cc14b8312fbc4005"
956dependencies = [
956dependencies = [
957 "bstr",
957 "bstr",
958 "gix-features",
958 "gix-features",
@@ -964,18 +964,18 @@ dependencies = [
964
964
965[[package]]
965[[package]]
966name = "gix-utils"
966name = "gix-utils"
967−version = "0.1.7"
967+version = "0.1.6"
968source = "registry+https://github.com/rust-lang/crates.io-index"
968source = "registry+https://github.com/rust-lang/crates.io-index"
969−checksum = "ab9277a5e32e85d53f738096d872a4a9b76067ad471894ad31bd99c8fa2da1dc"
969+checksum = "9f82c41937f00e15a1f6cb0b55307f0ca1f77f4407ff2bf440be35aa688c6a3e"
970dependencies = [
970dependencies = [
971 "fastrand",
971 "fastrand",
972]
972]
973
973
974[[package]]
974[[package]]
975name = "gix-validate"
975name = "gix-validate"
976−version = "0.8.2"
976+version = "0.8.1"
977source = "registry+https://github.com/rust-lang/crates.io-index"
977source = "registry+https://github.com/rust-lang/crates.io-index"
978−checksum = "f805ebbdbaa4bfd98e2ee43e6d14099b8a4d9141f5d7b8202fea4d48e44263e7"
978+checksum = "75b7d8e4274be69f284bbc7e6bb2ccf7065dbcdeba22d8c549f2451ae426883f"
979dependencies = [
979dependencies = [
980 "bstr",
980 "bstr",
981 "thiserror",
981 "thiserror",
@@ -1286,7 +1286,7 @@ dependencies = [
1286 "iana-time-zone-haiku",
1286 "iana-time-zone-haiku",
1287 "js-sys",
1287 "js-sys",
1288 "wasm-bindgen",
1288 "wasm-bindgen",
1289− "windows 0.48.0",
1289+ "windows",
1290]
1290]
1291
1291
1292[[package]]
1292[[package]]
@@ -1434,9 +1434,9 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
1434
1434
1435[[package]]
1435[[package]]
1436name = "lsp-types"
1436name = "lsp-types"
1437−version = "0.95.0"
1437+version = "0.94.1"
1438source = "registry+https://github.com/rust-lang/crates.io-index"
1438source = "registry+https://github.com/rust-lang/crates.io-index"
1439−checksum = "158c1911354ef73e8fe42da6b10c0484cb65c7f1007f28022e847706c1ab6984"
1439+checksum = "c66bfd44a06ae10647fe3f8214762e9369fd4248df1350924b4ef9e770a85ea1"
1440dependencies = [
1440dependencies = [
1441 "bitflags 1.3.2",
1441 "bitflags 1.3.2",
1442 "serde",
1442 "serde",
@@ -1624,9 +1624,9 @@ dependencies = [
1624
1624
1625[[package]]
1625[[package]]
1626name = "prodash"
1626name = "prodash"
1627−version = "28.0.0"
1627+version = "26.2.2"
1628source = "registry+https://github.com/rust-lang/crates.io-index"
1628source = "registry+https://github.com/rust-lang/crates.io-index"
1629−checksum = "744a264d26b88a6a7e37cbad97953fa233b94d585236310bcbc88474b4092d79"
1629+checksum = "794b5bf8e2d19b53dcdcec3e4bba628e20f5b6062503ba89281fa7037dd7bbcf"
1630
1630
1631[[package]]
1631[[package]]
1632name = "pulldown-cmark"
1632name = "pulldown-cmark"
@@ -2028,18 +2028,18 @@ dependencies = [
2028
2028
2029[[package]]
2029[[package]]
2030name = "thiserror"
2030name = "thiserror"
2031−version = "1.0.52"
2031+version = "1.0.50"
2032source = "registry+https://github.com/rust-lang/crates.io-index"
2032source = "registry+https://github.com/rust-lang/crates.io-index"
2033−checksum = "83a48fd946b02c0a526b2e9481c8e2a17755e47039164a86c4070446e3a4614d"
2033+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
2034dependencies = [
2034dependencies = [
2035 "thiserror-impl",
2035 "thiserror-impl",
2036]
2036]
2037
2037
2038[[package]]
2038[[package]]
2039name = "thiserror-impl"
2039name = "thiserror-impl"
2040−version = "1.0.52"
2040+version = "1.0.50"
2041source = "registry+https://github.com/rust-lang/crates.io-index"
2041source = "registry+https://github.com/rust-lang/crates.io-index"
2042−checksum = "e7fbe9b594d6568a6a1443250a7e67d80b74e1e96f6d1715e1e21cc1888291d3"
2042+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
2043dependencies = [
2043dependencies = [
2044 "proc-macro2",
2044 "proc-macro2",
2045 "quote",
2045 "quote",
@@ -2101,9 +2101,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
2101
2101
2102[[package]]
2102[[package]]
2103name = "tokio"
2103name = "tokio"
2104−version = "1.35.1"
2104+version = "1.35.0"
2105source = "registry+https://github.com/rust-lang/crates.io-index"
2105source = "registry+https://github.com/rust-lang/crates.io-index"
2106−checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
2106+checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c"
2107dependencies = [
2107dependencies = [
2108 "backtrace",
2108 "backtrace",
2109 "bytes",
2109 "bytes",
@@ -2384,25 +2384,6 @@ dependencies = [
2384 "windows-targets 0.48.0",
2384 "windows-targets 0.48.0",
2385]
2385]
2386
2386
2387−[[package]]
2388−name = "windows"
2389−version = "0.52.0"
2390−source = "registry+https://github.com/rust-lang/crates.io-index"
2391−checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
2392−dependencies = [
2393− "windows-core",
2394− "windows-targets 0.52.0",
2395−]
2396−
2397−[[package]]
2398−name = "windows-core"
2399−version = "0.52.0"
2400−source = "registry+https://github.com/rust-lang/crates.io-index"
2401−checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
2402−dependencies = [
2403− "windows-targets 0.52.0",
2404−]
2405−
2406[[package]]
2387[[package]]
2407name = "windows-sys"
2388name = "windows-sys"
2408version = "0.45.0"
2389version = "0.45.0"
README.md+1−1
@@ -18,7 +18,7 @@
18
18
19![Screenshot](./screenshot.png)
19![Screenshot](./screenshot.png)
20
20
21−A [Kakoune](https://github.com/mawww/kakoune) / [Neovim](https://github.com/neovim/neovim) inspired editor, written in Rust.
21+A Kakoune / Neovim inspired editor, written in Rust.
22
22
23The editing model is very heavily based on Kakoune; during development I found
23The editing model is very heavily based on Kakoune; during development I found
24myself agreeing with most of Kakoune's design decisions.
24myself agreeing with most of Kakoune's design decisions.
book/src/configuration.md+1−17
@@ -65,8 +65,7 @@ Its settings will be merged with the configuration directory `config.toml` and t
65| `workspace-lsp-roots` | Directories relative to the workspace root that are treated as LSP roots. Should only be set in `.helix/config.toml` | `[]` |
65| `workspace-lsp-roots` | Directories relative to the workspace root that are treated as LSP roots. Should only be set in `.helix/config.toml` | `[]` |
66| `default-line-ending` | The line ending to use for new documents. Can be `native`, `lf`, `crlf`, `ff`, `cr` or `nel`. `native` uses the platform's native line ending (`crlf` on Windows, otherwise `lf`). | `native` |
66| `default-line-ending` | The line ending to use for new documents. Can be `native`, `lf`, `crlf`, `ff`, `cr` or `nel`. `native` uses the platform's native line ending (`crlf` on Windows, otherwise `lf`). | `native` |
67| `insert-final-newline` | Whether to automatically insert a trailing line-ending on write if missing | `true` |
67| `insert-final-newline` | Whether to automatically insert a trailing line-ending on write if missing | `true` |
68−| `popup-border` | Draw border around `popup`, `menu`, `all`, or `none` | `none` |
69−| `indent-heuristic` | How the indentation for a newly inserted line is computed: `simple` just copies the indentation level from the previous line, `tree-sitter` computes the indentation based on the syntax tree and `hybrid` combines both approaches. If the chosen heuristic is not available, a different one will be used as a fallback (the fallback order being `hybrid` -> `tree-sitter` -> `simple`). | `hybrid`
68+| `indent-heuristic` | How the indentation for a newly inserted line is computed: `simple` just copies the indentation level from the previous line, `tree-sitter` computes the indentation based on the syntax tree and `hybrid` combines both approaches | `hybrid`
70
69
71### `[editor.statusline]` Section
70### `[editor.statusline]` Section
72
71
@@ -178,21 +177,6 @@ All git related options are only enabled in a git repository.
178|`git-exclude` | Enables reading `.git/info/exclude` files | `true`
177|`git-exclude` | Enables reading `.git/info/exclude` files | `true`
179|`max-depth` | Set with an integer value for maximum depth to recurse | Defaults to `None`.
178|`max-depth` | Set with an integer value for maximum depth to recurse | Defaults to `None`.
180
179
181−Ignore files can be placed locally as `.ignore` or put in your home directory as `~/.ignore`. They support the usual ignore and negative ignore (unignore) rules used in `.gitignore` files.
182−
183−Additionally, you can use Helix-specific ignore files by creating a local `.helix/ignore` file in the current workspace or a global `ignore` file located in your Helix config directory:
184−- Linux and Mac: `~/.config/helix/ignore`
185−- Windows: `%AppData%\helix\ignore`
186−
187−Example:
188−
189−```ini
190−# unignore in file picker and global search
191−!.github/
192−!.gitignore
193−!.gitattributes
194−```
195−
196### `[editor.auto-pairs]` Section
180### `[editor.auto-pairs]` Section
197
181
198Enables automatic insertion of pairs to parentheses, brackets, etc. Can be a
182Enables automatic insertion of pairs to parentheses, brackets, etc. Can be a
book/src/generated/lang-support.md+1−3
@@ -1,6 +1,5 @@
1| Language | Syntax Highlighting | Treesitter Textobjects | Auto Indent | Default LSP |
1| Language | Syntax Highlighting | Treesitter Textobjects | Auto Indent | Default LSP |
2| --- | --- | --- | --- | --- |
2| --- | --- | --- | --- | --- |
3−| agda | ✓ | | | |
4| astro | ✓ | | | |
3| astro | ✓ | | | |
5| awk | ✓ | ✓ | | `awk-language-server` |
4| awk | ✓ | ✓ | | `awk-language-server` |
6| bash | ✓ | ✓ | ✓ | `bash-language-server` |
5| bash | ✓ | ✓ | ✓ | `bash-language-server` |
@@ -11,7 +10,7 @@
11| blueprint | ✓ | | | `blueprint-compiler` |
10| blueprint | ✓ | | | `blueprint-compiler` |
12| c | ✓ | ✓ | ✓ | `clangd` |
11| c | ✓ | ✓ | ✓ | `clangd` |
13| c-sharp | ✓ | ✓ | | `OmniSharp` |
12| c-sharp | ✓ | ✓ | | `OmniSharp` |
14−| cabal | | | | `haskell-language-server-wrapper` |
13+| cabal | | | | |
15| cairo | ✓ | ✓ | ✓ | `cairo-language-server` |
14| cairo | ✓ | ✓ | ✓ | `cairo-language-server` |
16| capnp | ✓ | | ✓ | |
15| capnp | ✓ | | ✓ | |
17| clojure | ✓ | | | `clojure-lsp` |
16| clojure | ✓ | | | `clojure-lsp` |
@@ -148,7 +147,6 @@
148| scheme | ✓ | | ✓ | |
147| scheme | ✓ | | ✓ | |
149| scss | ✓ | | | `vscode-css-language-server` |
148| scss | ✓ | | | `vscode-css-language-server` |
150| slint | ✓ | | ✓ | `slint-lsp` |
149| slint | ✓ | | ✓ | `slint-lsp` |
151−| smali | ✓ | | ✓ | |
152| smithy | ✓ | | | `cs` |
150| smithy | ✓ | | | `cs` |
153| sml | ✓ | | | |
151| sml | ✓ | | | |
154| solidity | ✓ | | | `solc` |
152| solidity | ✓ | | | `solc` |
book/src/generated/typable-cmd.md+1−1
@@ -17,7 +17,7 @@
17| `:write-buffer-close!`, `:wbc!` | Force write changes to disk creating necessary subdirectories and closes the buffer. Accepts an optional path (:write-buffer-close! some/path.txt) |
17| `:write-buffer-close!`, `:wbc!` | Force write changes to disk creating necessary subdirectories and closes the buffer. Accepts an optional path (:write-buffer-close! some/path.txt) |
18| `:new`, `:n` | Create a new scratch buffer. |
18| `:new`, `:n` | Create a new scratch buffer. |
19| `:format`, `:fmt` | Format the file using the LSP formatter. |
19| `:format`, `:fmt` | Format the file using the LSP formatter. |
20−| `:indent-style` | Set the indentation style for editing. ('t' for tabs or 1-16 for number of spaces.) |
20+| `:indent-style` | Set the indentation style for editing. ('t' for tabs or 1-8 for number of spaces.) |
21| `:line-ending` | Set the document's default line ending. Options: crlf, lf. |
21| `:line-ending` | Set the document's default line ending. Options: crlf, lf. |
22| `:earlier`, `:ear` | Jump back to an earlier point in edit history. Accepts a number of steps or a time span. |
22| `:earlier`, `:ear` | Jump back to an earlier point in edit history. Accepts a number of steps or a time span. |
23| `:later`, `:lat` | Jump to a later point in edit history. Accepts a number of steps or a time span. |
23| `:later`, `:lat` | Jump to a later point in edit history. Accepts a number of steps or a time span. |
book/src/guides/adding_languages.md−2
@@ -36,7 +36,6 @@ below.
363. Refer to the
363. Refer to the
37 [tree-sitter website](https://tree-sitter.github.io/tree-sitter/syntax-highlighting#queries)
37 [tree-sitter website](https://tree-sitter.github.io/tree-sitter/syntax-highlighting#queries)
38 for more information on writing queries.
38 for more information on writing queries.
39−4. A list of highlight captures can be found [on the themes page](https://docs.helix-editor.com/themes.html#scopes).
40
39
41> 💡 In Helix, the first matching query takes precedence when evaluating
40> 💡 In Helix, the first matching query takes precedence when evaluating
42> queries, which is different from other editors such as Neovim where the last
41> queries, which is different from other editors such as Neovim where the last
@@ -52,4 +51,3 @@ below.
52 grammars.
51 grammars.
53- If a parser is causing a segfault, or you want to remove it, make sure to
52- If a parser is causing a segfault, or you want to remove it, make sure to
54 remove the compiled parser located at `runtime/grammars/<name>.so`.
53 remove the compiled parser located at `runtime/grammars/<name>.so`.
55−- If you are attempting to add queries and Helix is unable to locate them, ensure that the environment variable `HELIX_RUNTIME` is set to the location of the `runtime` folder you're developing in.
book/src/languages.md−1
@@ -69,7 +69,6 @@ These configuration keys are available:
69| `soft-wrap` | [editor.softwrap](./configuration.md#editorsoft-wrap-section)
69| `soft-wrap` | [editor.softwrap](./configuration.md#editorsoft-wrap-section)
70| `text-width` | Maximum line length. Used for the `:reflow` command and soft-wrapping if `soft-wrap.wrap-at-text-width` is set, defaults to `editor.text-width` |
70| `text-width` | Maximum line length. Used for the `:reflow` command and soft-wrapping if `soft-wrap.wrap-at-text-width` is set, defaults to `editor.text-width` |
71| `workspace-lsp-roots` | Directories relative to the workspace root that are treated as LSP roots. Should only be set in `.helix/config.toml`. Overwrites the setting of the same name in `config.toml` if set. |
71| `workspace-lsp-roots` | Directories relative to the workspace root that are treated as LSP roots. Should only be set in `.helix/config.toml`. Overwrites the setting of the same name in `config.toml` if set. |
72−| `persistent-diagnostic-sources` | An array of LSP diagnostic sources assumed unchanged when the language server resends the same set of diagnostics. Helix can track the position for these diagnostics internally instead. Useful for diagnostics that are recomputed on save.
73
72
74### File-type detection and the `file-types` key
73### File-type detection and the `file-types` key
75
74
helix-core/src/diagnostic.rs−4
@@ -39,10 +39,6 @@ pub enum DiagnosticTag {
39#[derive(Debug, Clone)]
39#[derive(Debug, Clone)]
40pub struct Diagnostic {
40pub struct Diagnostic {
41 pub range: Range,
41 pub range: Range,
42− // whether this diagnostic ends at the end of(or inside) a word
43− pub ends_at_word: bool,
44− pub starts_at_word: bool,
45− pub zero_width: bool,
46 pub line: usize,
42 pub line: usize,
47 pub message: String,
43 pub message: String,
48 pub severity: Option<Severity>,
44 pub severity: Option<Severity>,
helix-core/src/indent.rs+23−20
@@ -8,7 +8,7 @@ use crate::{
8 graphemes::{grapheme_width, tab_width_at},
8 graphemes::{grapheme_width, tab_width_at},
9 syntax::{IndentationHeuristic, LanguageConfiguration, RopeProvider, Syntax},
9 syntax::{IndentationHeuristic, LanguageConfiguration, RopeProvider, Syntax},
10 tree_sitter::Node,
10 tree_sitter::Node,
11− Position, Rope, RopeGraphemes, RopeSlice,
11+ Rope, RopeGraphemes, RopeSlice,
12};
12};
13
13
14/// Enum representing indentation style.
14/// Enum representing indentation style.
@@ -22,7 +22,7 @@ pub enum IndentStyle {
22
22
23// 16 spaces
23// 16 spaces
24const INDENTS: &str = " ";
24const INDENTS: &str = " ";
25−pub const MAX_INDENT: u8 = 16;
25+const MAX_INDENT: u8 = 16;
26
26
27impl IndentStyle {
27impl IndentStyle {
28 /// Creates an `IndentStyle` from an indentation string.
28 /// Creates an `IndentStyle` from an indentation string.
@@ -225,24 +225,27 @@ fn add_indent_level(
225 // Since the width of a tab depends on its offset, we cannot simply iterate over
225 // Since the width of a tab depends on its offset, we cannot simply iterate over
226 // the chars of `base_indent` in reverse until we have the desired indent reduction,
226 // the chars of `base_indent` in reverse until we have the desired indent reduction,
227 // instead we iterate over them twice in forward direction.
227 // instead we iterate over them twice in forward direction.
228− let base_indent_rope = RopeSlice::from(base_indent.as_str());
228+ let mut base_indent_width: usize = 0;
229− #[allow(deprecated)]
229+ for c in base_indent.chars() {
230− let base_indent_width =
230+ base_indent_width += match c {
231− crate::visual_coords_at_pos(base_indent_rope, base_indent_rope.len_chars(), tab_width)
231+ '\t' => tab_width_at(base_indent_width, tab_width as u16),
232− .col;
232+ // This is only true since `base_indent` consists only of tabs and spaces
233+ _ => 1,
234+ };
235+ }
233 let target_indent_width = base_indent_width
236 let target_indent_width = base_indent_width
234 .saturating_sub((-added_indent_level) as usize * indent_style.indent_width(tab_width));
237 .saturating_sub((-added_indent_level) as usize * indent_style.indent_width(tab_width));
235− #[allow(deprecated)]
238+ let mut reduced_indent_width = 0;
236− let char_end_idx = crate::pos_at_visual_coords(
239+ for (i, c) in base_indent.char_indices() {
237− base_indent_rope,
238− Position {
239− row: 0,
240− col: target_indent_width,
240+ if reduced_indent_width >= target_indent_width {
241+ base_indent.truncate(i);
242+ return base_indent;
241− },
243+ }
242− tab_width,
244+ reduced_indent_width += match c {
243− );
245+ '\t' => tab_width_at(base_indent_width, tab_width as u16),
244− let byte_end_idx = base_indent_rope.char_to_byte(char_end_idx);
246+ _ => 1,
245− base_indent.truncate(byte_end_idx);
247+ };
248+ }
246 base_indent
249 base_indent
247 }
250 }
248}
251}
@@ -956,7 +959,7 @@ pub fn indent_for_newline(
956 line_before_end_pos,
959 line_before_end_pos,
957 true,
960 true,
958 ) {
961 ) {
959− if *indent_heuristic == IndentationHeuristic::Hybrid {
962+ if let IndentationHeuristic::Hybrid = indent_heuristic {
960 // We want to compute the indentation not only based on the
963 // We want to compute the indentation not only based on the
961 // syntax tree but also on the actual indentation of a previous
964 // syntax tree but also on the actual indentation of a previous
962 // line. This makes indentation computation more resilient to
965 // line. This makes indentation computation more resilient to
@@ -966,7 +969,7 @@ pub fn indent_for_newline(
966 // make sense, e.g. if it has a different alignment than the new line.
969 // make sense, e.g. if it has a different alignment than the new line.
967 // In order to prevent edge cases with long running times, we only try
970 // In order to prevent edge cases with long running times, we only try
968 // a constant number of (non-empty) lines.
971 // a constant number of (non-empty) lines.
969− const MAX_ATTEMPTS: usize = 4;
972+ const MAX_ATTEMPTS: usize = 2;
970 let mut num_attempts = 0;
973 let mut num_attempts = 0;
971 for line_idx in (0..=line_before).rev() {
974 for line_idx in (0..=line_before).rev() {
972 let line = text.line(line_idx);
975 let line = text.line(line_idx);
helix-core/src/syntax.rs−2
@@ -155,8 +155,6 @@ pub struct LanguageConfiguration {
155 /// Hardcoded LSP root directories relative to the workspace root, like `examples` or `tools/fuzz`.
155 /// Hardcoded LSP root directories relative to the workspace root, like `examples` or `tools/fuzz`.
156 /// Falling back to the current working directory if none are configured.
156 /// Falling back to the current working directory if none are configured.
157 pub workspace_lsp_roots: Option<Vec<PathBuf>>,
157 pub workspace_lsp_roots: Option<Vec<PathBuf>>,
158− #[serde(default)]
159− pub persistent_diagnostic_sources: Vec<String>,
160}
158}
161
159
162#[derive(Debug, PartialEq, Eq, Hash)]
160#[derive(Debug, PartialEq, Eq, Hash)]
helix-core/src/transaction.rs+14−73
@@ -1,7 +1,7 @@
1use ropey::RopeSlice;
1use ropey::RopeSlice;
2use smallvec::SmallVec;
2use smallvec::SmallVec;
3
3
4−use crate::{chars::char_is_word, Range, Rope, Selection, Tendril};
4+use crate::{Range, Rope, Selection, Tendril};
5use std::{borrow::Cow, iter::once};
5use std::{borrow::Cow, iter::once};
6
6
7/// (from, to, replacement)
7/// (from, to, replacement)
@@ -23,30 +23,6 @@ pub enum Operation {
23pub enum Assoc {
23pub enum Assoc {
24 Before,
24 Before,
25 After,
25 After,
26− /// Acts like `After` if a word character is inserted
27− /// after the position, otherwise acts like `Before`
28− AfterWord,
29− /// Acts like `Before` if a word character is inserted
30− /// before the position, otherwise acts like `After`
31− BeforeWord,
32−}
33−
34−impl Assoc {
35− /// Whether to stick to gaps
36− fn stay_at_gaps(self) -> bool {
37− !matches!(self, Self::BeforeWord | Self::AfterWord)
38− }
39−
40− fn insert_offset(self, s: &str) -> usize {
41− let chars = s.chars().count();
42− match self {
43− Assoc::After => chars,
44− Assoc::AfterWord => s.chars().take_while(|&c| char_is_word(c)).count(),
45− // return position before inserted text
46− Assoc::Before => 0,
47− Assoc::BeforeWord => chars - s.chars().rev().take_while(|&c| char_is_word(c)).count(),
48− }
49− }
50}
26}
51
27
52#[derive(Debug, Default, Clone, PartialEq, Eq)]
28#[derive(Debug, Default, Clone, PartialEq, Eq)]
@@ -439,6 +415,8 @@ impl ChangeSet {
439 map!(|pos, _| (old_end > pos).then_some(new_pos), i);
415 map!(|pos, _| (old_end > pos).then_some(new_pos), i);
440 }
416 }
441 Insert(s) => {
417 Insert(s) => {
418+ let ins = s.chars().count();
419+
442 // a subsequent delete means a replace, consume it
420 // a subsequent delete means a replace, consume it
443 if let Some((_, Delete(len))) = iter.peek() {
421 if let Some((_, Delete(len))) = iter.peek() {
444 iter.next();
422 iter.next();
@@ -446,13 +424,13 @@ impl ChangeSet {
446 old_end = old_pos + len;
424 old_end = old_pos + len;
447 // in range of replaced text
425 // in range of replaced text
448 map!(
426 map!(
449− |pos, assoc: Assoc| (old_end > pos).then(|| {
427+ |pos, assoc| (old_end > pos).then(|| {
450 // at point or tracking before
428 // at point or tracking before
451− if pos == old_pos && assoc.stay_at_gaps() {
429+ if pos == old_pos || assoc == Assoc::Before {
452 new_pos
430 new_pos
453 } else {
431 } else {
454 // place to end of insert
432 // place to end of insert
455− new_pos + assoc.insert_offset(s)
433+ new_pos + ins
456 }
434 }
457 }),
435 }),
458 i
436 i
@@ -460,15 +438,20 @@ impl ChangeSet {
460 } else {
438 } else {
461 // at insert point
439 // at insert point
462 map!(
440 map!(
463− |pos, assoc: Assoc| (old_pos == pos).then(|| {
441+ |pos, assoc| (old_pos == pos).then(|| {
464 // return position before inserted text
442 // return position before inserted text
465− new_pos + assoc.insert_offset(s)
443+ if assoc == Assoc::Before {
444+ new_pos
445+ } else {
446+ // after text
447+ new_pos + ins
448+ }
466 }),
449 }),
467 i
450 i
468 );
451 );
469 }
452 }
470
453
471− new_pos += s.chars().count();
454+ new_pos += ins;
472 }
455 }
473 }
456 }
474 old_pos = old_end;
457 old_pos = old_end;
@@ -901,48 +884,6 @@ mod test {
901 let mut positions = [4, 2];
884 let mut positions = [4, 2];
902 cs.update_positions(positions.iter_mut().map(|pos| (pos, Assoc::After)));
885 cs.update_positions(positions.iter_mut().map(|pos| (pos, Assoc::After)));
903 assert_eq!(positions, [4, 2]);
886 assert_eq!(positions, [4, 2]);
904− // stays at word boundary
905− let cs = ChangeSet {
906− changes: vec![
907− Retain(2), // <space><space>
908− Insert(" ab".into()),
909− Retain(2), // cd
910− Insert("de ".into()),
911− ],
912− len: 4,
913− len_after: 10,
914− };
915− assert_eq!(cs.map_pos(2, Assoc::BeforeWord), 3);
916− assert_eq!(cs.map_pos(4, Assoc::AfterWord), 9);
917− let cs = ChangeSet {
918− changes: vec![
919− Retain(1), // <space>
920− Insert(" b".into()),
921− Delete(1), // c
922− Retain(1), // d
923− Insert("e ".into()),
924− Delete(1), // <space>
925− ],
926− len: 5,
927− len_after: 7,
928− };
929− assert_eq!(cs.map_pos(1, Assoc::BeforeWord), 2);
930− assert_eq!(cs.map_pos(3, Assoc::AfterWord), 5);
931− let cs = ChangeSet {
932− changes: vec![
933− Retain(1), // <space>
934− Insert("a".into()),
935− Delete(2), // <space>b
936− Retain(1), // d
937− Insert("e".into()),
938− Delete(1), // f
939− Retain(1), // <space>
940− ],
941− len: 5,
942− len_after: 7,
943− };
944− assert_eq!(cs.map_pos(2, Assoc::BeforeWord), 1);
945− assert_eq!(cs.map_pos(4, Assoc::AfterWord), 4);
946 }
887 }
947
888
948 #[test]
889 #[test]
helix-lsp/Cargo.toml+1−1
@@ -22,7 +22,7 @@ futures-executor = "0.3"
22futures-util = { version = "0.3", features = ["std", "async-await"], default-features = false }
22futures-util = { version = "0.3", features = ["std", "async-await"], default-features = false }
23globset = "0.4.14"
23globset = "0.4.14"
24log = "0.4"
24log = "0.4"
25−lsp-types = { version = "0.95" }
25+lsp-types = { version = "0.94" }
26serde = { version = "1.0", features = ["derive"] }
26serde = { version = "1.0", features = ["derive"] }
27serde_json = "1.0"
27serde_json = "1.0"
28thiserror = "1.0"
28thiserror = "1.0"
helix-lsp/src/client.rs+8−8
@@ -667,7 +667,6 @@ impl Client {
667 version: Some(String::from(VERSION_AND_GIT_HASH)),
667 version: Some(String::from(VERSION_AND_GIT_HASH)),
668 }),
668 }),
669 locale: None, // TODO
669 locale: None, // TODO
670− work_done_progress_params: lsp::WorkDoneProgressParams::default(),
671 };
670 };
672
671
673 self.request::<lsp::request::Initialize>(params).await
672 self.request::<lsp::request::Initialize>(params).await
@@ -970,19 +969,20 @@ impl Client {
970 ) -> Option<impl Future<Output = Result<()>>> {
969 ) -> Option<impl Future<Output = Result<()>>> {
971 let capabilities = self.capabilities.get().unwrap();
970 let capabilities = self.capabilities.get().unwrap();
972
971
973− let include_text = match &capabilities.text_document_sync.as_ref()? {
972+ let include_text = match &capabilities.text_document_sync {
974− lsp::TextDocumentSyncCapability::Options(lsp::TextDocumentSyncOptions {
973+ Some(lsp::TextDocumentSyncCapability::Options(lsp::TextDocumentSyncOptions {
975− save: options,
974+ save: Some(options),
976 ..
975 ..
977− }) => match options.as_ref()? {
976+ })) => match options {
978 lsp::TextDocumentSyncSaveOptions::Supported(true) => false,
977 lsp::TextDocumentSyncSaveOptions::Supported(true) => false,
979 lsp::TextDocumentSyncSaveOptions::SaveOptions(lsp_types::SaveOptions {
978 lsp::TextDocumentSyncSaveOptions::SaveOptions(lsp_types::SaveOptions {
980 include_text,
979 include_text,
981 }) => include_text.unwrap_or(false),
980 }) => include_text.unwrap_or(false),
982− lsp::TextDocumentSyncSaveOptions::Supported(false) => return None,
981+ // Supported(false)
982+ _ => return None,
983 },
983 },
984− // see: https://github.com/microsoft/language-server-protocol/issues/288
984+ // unsupported
985− lsp::TextDocumentSyncCapability::Kind(..) => false,
985+ _ => return None,
986 };
986 };
987
987
988 Some(self.notify::<lsp::notification::DidSaveTextDocument>(
988 Some(self.notify::<lsp::notification::DidSaveTextDocument>(
helix-term/src/application.rs+38−80
@@ -1,7 +1,6 @@
1use arc_swap::{access::Map, ArcSwap};
1use arc_swap::{access::Map, ArcSwap};
2use futures_util::Stream;
2use futures_util::Stream;
3use helix_core::{
3use helix_core::{
4− chars::char_is_word,
5 diagnostic::{DiagnosticTag, NumberOrString},
4 diagnostic::{DiagnosticTag, NumberOrString},
6 path::get_relative_path,
5 path::get_relative_path,
7 pos_at_coords, syntax, Selection,
6 pos_at_coords, syntax, Selection,
@@ -718,7 +717,7 @@ impl Application {
718 ));
717 ));
719 }
718 }
720 }
719 }
721− Notification::PublishDiagnostics(mut params) => {
720+ Notification::PublishDiagnostics(params) => {
722 let path = match params.uri.to_file_path() {
721 let path = match params.uri.to_file_path() {
723 Ok(path) => path,
722 Ok(path) => path,
724 Err(_) => {
723 Err(_) => {
@@ -732,69 +731,31 @@ impl Application {
732 return;
731 return;
733 }
732 }
734 let offset_encoding = language_server.offset_encoding();
733 let offset_encoding = language_server.offset_encoding();
735− // have to inline the function because of borrow checking...
734+ let doc = self.editor.document_by_path_mut(&path).filter(|doc| {
736− let doc = self.editor.documents.values_mut()
737− .find(|doc| doc.path().map(|p| p == &path).unwrap_or(false))
738− .filter(|doc| {
739− if let Some(version) = params.version {
735+ if let Some(version) = params.version {
740− if version != doc.version() {
736+ if version != doc.version() {
741− log::info!("Version ({version}) is out of date for {path:?} (expected ({}), dropping PublishDiagnostic notification", doc.version());
737+ log::info!("Version ({version}) is out of date for {path:?} (expected ({}), dropping PublishDiagnostic notification", doc.version());
742− return false;
738+ return false;
743− }
744 }
739 }
740+ }
741+
745− true
742+ true
746− });
743+ });
747
744
748 if let Some(doc) = doc {
745 if let Some(doc) = doc {
749− let lang_conf = doc.language.clone();
746+ let lang_conf = doc.language_config();
750− let text = doc.text().clone();
747+ let text = doc.text();
751−
752− let mut unchaged_diag_sources_ = Vec::new();
753− if let Some(lang_conf) = &lang_conf {
754− if let Some(old_diagnostics) =
755− self.editor.diagnostics.get(&params.uri)
756− {
757− if !lang_conf.persistent_diagnostic_sources.is_empty() {
758− // Sort diagnostics first by severity and then by line numbers.
759− // Note: The `lsp::DiagnosticSeverity` enum is already defined in decreasing order
760− params
761− .diagnostics
762− .sort_unstable_by_key(|d| (d.severity, d.range.start));
763− }
764− for source in &lang_conf.persistent_diagnostic_sources {
765− let new_diagnostics = params
766− .diagnostics
767− .iter()
768− .filter(|d| d.source.as_ref() == Some(source));
769− let old_diagnostics = old_diagnostics
770− .iter()
771− .filter(|(d, d_server)| {
772− *d_server == server_id
773− && d.source.as_ref() == Some(source)
774− })
775− .map(|(d, _)| d);
776− if new_diagnostics.eq(old_diagnostics) {
777− unchaged_diag_sources_.push(source.clone())
778− }
779− }
780− }
781− }
782
748
783− let unchaged_diag_sources = &unchaged_diag_sources_;
749+ let diagnostics = params
784− let diagnostics =
750+ .diagnostics
751+ .iter()
785− params.diagnostics.iter().filter_map(move |diagnostic| {
752+ .filter_map(|diagnostic| {
786 use helix_core::diagnostic::{Diagnostic, Range, Severity::*};
753 use helix_core::diagnostic::{Diagnostic, Range, Severity::*};
787 use lsp::DiagnosticSeverity;
754 use lsp::DiagnosticSeverity;
788
755
789− if diagnostic.source.as_ref().map_or(false, |source| {
790− unchaged_diag_sources.contains(source)
791− }) {
792− return None;
793− }
794−
795 // TODO: convert inside server
756 // TODO: convert inside server
796 let start = if let Some(start) = lsp_pos_to_pos(
757 let start = if let Some(start) = lsp_pos_to_pos(
797− &text,
758+ text,
798 diagnostic.range.start,
759 diagnostic.range.start,
799 offset_encoding,
760 offset_encoding,
800 ) {
761 ) {
@@ -805,13 +766,14 @@ impl Application {
805 };
766 };
806
767
807 let end = if let Some(end) =
768 let end = if let Some(end) =
808− lsp_pos_to_pos(&text, diagnostic.range.end, offset_encoding)
769+ lsp_pos_to_pos(text, diagnostic.range.end, offset_encoding)
809 {
770 {
810 end
771 end
811 } else {
772 } else {
812 log::warn!("lsp position out of bounds - {:?}", diagnostic);
773 log::warn!("lsp position out of bounds - {:?}", diagnostic);
813 return None;
774 return None;
814 };
775 };
776+
815 let severity =
777 let severity =
816 diagnostic.severity.map(|severity| match severity {
778 diagnostic.severity.map(|severity| match severity {
817 DiagnosticSeverity::ERROR => Error,
779 DiagnosticSeverity::ERROR => Error,
@@ -824,7 +786,7 @@ impl Application {
824 ),
786 ),
825 });
787 });
826
788
827− if let Some(lang_conf) = &lang_conf {
789+ if let Some(lang_conf) = lang_conf {
828 if let Some(severity) = severity {
790 if let Some(severity) = severity {
829 if severity < lang_conf.diagnostic_severity {
791 if severity < lang_conf.diagnostic_severity {
830 return None;
792 return None;
@@ -863,17 +825,8 @@ impl Application {
863 Vec::new()
825 Vec::new()
864 };
826 };
865
827
866− let ends_at_word = start != end
867− && end != 0
868− && text.get_char(end - 1).map_or(false, char_is_word);
869− let starts_at_word = start != end
870− && text.get_char(start).map_or(false, char_is_word);
871−
872 Some(Diagnostic {
828 Some(Diagnostic {
873 range: Range { start, end },
829 range: Range { start, end },
874− ends_at_word,
875− starts_at_word,
876− zero_width: start == end,
877 line: diagnostic.range.start.line as usize,
830 line: diagnostic.range.start.line as usize,
878 message: diagnostic.message.clone(),
831 message: diagnostic.message.clone(),
879 severity,
832 severity,
@@ -883,33 +836,38 @@ impl Application {
883 data: diagnostic.data.clone(),
836 data: diagnostic.data.clone(),
884 language_server_id: server_id,
837 language_server_id: server_id,
885 })
838 })
886− });
839+ })
840+ .collect();
887
841
888− doc.replace_diagnostics(diagnostics, unchaged_diag_sources, server_id);
842+ doc.replace_diagnostics(diagnostics, server_id);
889 }
843 }
890
844
891− let diagnostics = params.diagnostics.into_iter().map(|d| (d, server_id));
845+ let mut diagnostics = params
846+ .diagnostics
847+ .into_iter()
848+ .map(|d| (d, server_id))
849+ .collect();
892
850
893 // Insert the original lsp::Diagnostics here because we may have no open document
851 // Insert the original lsp::Diagnostics here because we may have no open document
894 // for diagnosic message and so we can't calculate the exact position.
852 // for diagnosic message and so we can't calculate the exact position.
895 // When using them later in the diagnostics picker, we calculate them on-demand.
853 // When using them later in the diagnostics picker, we calculate them on-demand.
896− let diagnostics = match self.editor.diagnostics.entry(params.uri) {
854+ match self.editor.diagnostics.entry(params.uri) {
897 Entry::Occupied(o) => {
855 Entry::Occupied(o) => {
898 let current_diagnostics = o.into_mut();
856 let current_diagnostics = o.into_mut();
899 // there may entries of other language servers, which is why we can't overwrite the whole entry
857 // there may entries of other language servers, which is why we can't overwrite the whole entry
900 current_diagnostics.retain(|(_, lsp_id)| *lsp_id != server_id);
858 current_diagnostics.retain(|(_, lsp_id)| *lsp_id != server_id);
901− current_diagnostics.extend(diagnostics);
859+ current_diagnostics.append(&mut diagnostics);
902− current_diagnostics
903 // Sort diagnostics first by severity and then by line numbers.
860 // Sort diagnostics first by severity and then by line numbers.
861+ // Note: The `lsp::DiagnosticSeverity` enum is already defined in decreasing order
862+ current_diagnostics
863+ .sort_unstable_by_key(|(d, _)| (d.severity, d.range.start));
864+ }
865+ Entry::Vacant(v) => {
866+ diagnostics
867+ .sort_unstable_by_key(|(d, _)| (d.severity, d.range.start));
868+ v.insert(diagnostics);
904 }
869 }
905− Entry::Vacant(v) => v.insert(diagnostics.collect()),
906 };
870 };
907−
908− // Sort diagnostics first by severity and then by line numbers.
909− // Note: The `lsp::DiagnosticSeverity` enum is already defined in decreasing order
910− diagnostics.sort_unstable_by_key(|(d, server_id)| {
911− (d.severity, d.range.start, *server_id)
912− });
913 }
871 }
914 Notification::ShowMessage(params) => {
872 Notification::ShowMessage(params) => {
915 log::warn!("unhandled window/showMessage: {:?}", params);
873 log::warn!("unhandled window/showMessage: {:?}", params);
helix-term/src/commands/dap.rs+2−7
@@ -8,7 +8,7 @@ use dap::{StackFrame, Thread, ThreadStates};
8use helix_core::syntax::{DebugArgumentValue, DebugConfigCompletion, DebugTemplate};
8use helix_core::syntax::{DebugArgumentValue, DebugConfigCompletion, DebugTemplate};
9use helix_dap::{self as dap, Client};
9use helix_dap::{self as dap, Client};
10use helix_lsp::block_on;
10use helix_lsp::block_on;
11−use helix_view::{editor::Breakpoint, graphics::Margin};
11+use helix_view::editor::Breakpoint;
12
12
13use serde_json::{to_value, Value};
13use serde_json::{to_value, Value};
14use tokio_stream::wrappers::UnboundedReceiverStream;
14use tokio_stream::wrappers::UnboundedReceiverStream;
@@ -581,12 +581,7 @@ pub fn dap_variables(cx: &mut Context) {
581 }
581 }
582
582
583 let contents = Text::from(tui::text::Text::from(variables));
583 let contents = Text::from(tui::text::Text::from(variables));
584− let margin = if cx.editor.popup_border() {
585− Margin::all(1)
586− } else {
587− Margin::none()
588− };
589− let popup = Popup::new("dap-variables", contents).margin(margin);
584+ let popup = Popup::new("dap-variables", contents);
590 cx.replace_or_push_layer("dap-variables", popup);
585 cx.replace_or_push_layer("dap-variables", popup);
591}
586}
592
587
helix-term/src/commands/lsp.rs+1−11
@@ -23,7 +23,6 @@ use helix_core::{
23use helix_view::{
23use helix_view::{
24 document::{DocumentInlayHints, DocumentInlayHintsId, Mode},
24 document::{DocumentInlayHints, DocumentInlayHintsId, Mode},
25 editor::Action,
25 editor::Action,
26− graphics::Margin,
27 theme::Style,
26 theme::Style,
28 Document, View,
27 Document, View,
29};
28};
@@ -745,16 +744,7 @@ pub fn code_action(cx: &mut Context) {
745 });
744 });
746 picker.move_down(); // pre-select the first item
745 picker.move_down(); // pre-select the first item
747
746
748− let margin = if editor.menu_border() {
749− Margin::vertical(1)
750− } else {
751− Margin::none()
752− };
753−
754− let popup = Popup::new("code-action", picker)
747+ let popup = Popup::new("code-action", picker).with_scrollbar(false);
755− .with_scrollbar(false)
756− .margin(margin);
757−
758 compositor.replace_or_push("code-action", popup);
748 compositor.replace_or_push("code-action", popup);
759 };
749 };
760
750
helix-term/src/commands/typed.rs+5−4
@@ -6,7 +6,6 @@ use crate::job::Job;
6use super::*;
6use super::*;
7
7
8use helix_core::fuzzy::fuzzy_match;
8use helix_core::fuzzy::fuzzy_match;
9−use helix_core::indent::MAX_INDENT;
10use helix_core::{encoding, line_ending, path::get_canonicalized_path, shellwords::Shellwords};
9use helix_core::{encoding, line_ending, path::get_canonicalized_path, shellwords::Shellwords};
11use helix_lsp::{OffsetEncoding, Url};
10use helix_lsp::{OffsetEncoding, Url};
12use helix_view::document::DEFAULT_LANGUAGE_NAME;
11use helix_view::document::DEFAULT_LANGUAGE_NAME;
@@ -477,7 +476,8 @@ fn set_indent_style(
477 cx.editor.set_status(match style {
476 cx.editor.set_status(match style {
478 Tabs => "tabs".to_owned(),
477 Tabs => "tabs".to_owned(),
479 Spaces(1) => "1 space".to_owned(),
478 Spaces(1) => "1 space".to_owned(),
480− Spaces(n) => format!("{} spaces", n),
479+ Spaces(n) if (2..=8).contains(&n) => format!("{} spaces", n),
480+ _ => unreachable!(), // Shouldn't happen.
481 });
481 });
482 return Ok(());
482 return Ok(());
483 }
483 }
@@ -489,7 +489,7 @@ fn set_indent_style(
489 Some(arg) => arg
489 Some(arg) => arg
490 .parse::<u8>()
490 .parse::<u8>()
491 .ok()
491 .ok()
492− .filter(|n| (1..=MAX_INDENT).contains(n))
492+ .filter(|n| (1..=8).contains(n))
493 .map(Spaces),
493 .map(Spaces),
494 _ => None,
494 _ => None,
495 };
495 };
@@ -574,6 +574,7 @@ fn set_line_ending(
574
574
575 Ok(())
575 Ok(())
576}
576}
577+
577fn earlier(
578fn earlier(
578 cx: &mut compositor::Context,
579 cx: &mut compositor::Context,
579 args: &[Cow<str>],
580 args: &[Cow<str>],
@@ -2605,7 +2606,7 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
2605 TypableCommand {
2606 TypableCommand {
2606 name: "indent-style",
2607 name: "indent-style",
2607 aliases: &[],
2608 aliases: &[],
2608− doc: "Set the indentation style for editing. ('t' for tabs or 1-16 for number of spaces.)",
2609+ doc: "Set the indentation style for editing. ('t' for tabs or 1-8 for number of spaces.)",
2609 fun: set_indent_style,
2610 fun: set_indent_style,
2610 signature: CommandSignature::none(),
2611 signature: CommandSignature::none(),
2611 },
2612 },
helix-term/src/ui/completion.rs+1−17
@@ -2,7 +2,6 @@ use crate::compositor::{Component, Context, Event, EventResult};
2use helix_view::{
2use helix_view::{
3 document::SavePoint,
3 document::SavePoint,
4 editor::CompleteAction,
4 editor::CompleteAction,
5− graphics::Margin,
6 theme::{Modifier, Style},
5 theme::{Modifier, Style},
7 ViewId,
6 ViewId,
8};
7};
@@ -327,18 +326,9 @@ impl Completion {
327 }
326 }
328 };
327 };
329 });
328 });
330−
331− let margin = if editor.menu_border() {
332− Margin::vertical(1)
333− } else {
334− Margin::none()
335− };
336−
337 let popup = Popup::new(Self::ID, menu)
329 let popup = Popup::new(Self::ID, menu)
338 .with_scrollbar(false)
330 .with_scrollbar(false)
339− .ignore_escape_key(true)
331+ .ignore_escape_key(true);
340− .margin(margin);
341−
342 let mut completion = Self {
332 let mut completion = Self {
343 popup,
333 popup,
344 start_offset,
334 start_offset,
@@ -579,12 +569,6 @@ impl Component for Completion {
579 // clear area
569 // clear area
580 let background = cx.editor.theme.get("ui.popup");
570 let background = cx.editor.theme.get("ui.popup");
581 surface.clear_with(doc_area, background);
571 surface.clear_with(doc_area, background);
582−
583− if cx.editor.popup_border() {
584− use tui::widgets::{Block, Borders, Widget};
585− Widget::render(Block::default().borders(Borders::ALL), doc_area, surface);
586− }
587−
588 markdown_doc.render(doc_area, surface, cx);
572 markdown_doc.render(doc_area, surface, cx);
589 }
573 }
590}
574}
helix-term/src/ui/lsp.rs+1−3
@@ -92,9 +92,7 @@ impl Component for SignatureHelp {
92 Some(doc) => Markdown::new(doc.clone(), Arc::clone(&self.config_loader)),
92 Some(doc) => Markdown::new(doc.clone(), Arc::clone(&self.config_loader)),
93 };
93 };
94 let sig_doc = sig_doc.parse(Some(&cx.editor.theme));
94 let sig_doc = sig_doc.parse(Some(&cx.editor.theme));
95− let sig_doc_area = area
96− .clip_top(sig_text_area.height + 2)
95+ let sig_doc_area = area.clip_top(sig_text_area.height + 2);
97− .clip_bottom(u16::from(cx.editor.popup_border()));
98 let sig_doc_para = Paragraph::new(sig_doc)
96 let sig_doc_para = Paragraph::new(sig_doc)
99 .wrap(Wrap { trim: false })
97 .wrap(Wrap { trim: false })
100 .scroll((cx.scroll.unwrap_or_default() as u16, 0));
98 .scroll((cx.scroll.unwrap_or_default() as u16, 0));
helix-term/src/ui/menu.rs+13−34
@@ -7,18 +7,11 @@ use crate::{
7use helix_core::fuzzy::MATCHER;
7use helix_core::fuzzy::MATCHER;
8use nucleo::pattern::{Atom, AtomKind, CaseMatching};
8use nucleo::pattern::{Atom, AtomKind, CaseMatching};
9use nucleo::{Config, Utf32Str};
9use nucleo::{Config, Utf32Str};
10−use tui::{
11− buffer::Buffer as Surface,
10+use tui::{buffer::Buffer as Surface, widgets::Table};
12− widgets::{Block, Borders, Table, Widget},
13−};
14
11
15pub use tui::widgets::{Cell, Row};
12pub use tui::widgets::{Cell, Row};
16
13
17−use helix_view::{
18− editor::SmartTabConfig,
14+use helix_view::{editor::SmartTabConfig, graphics::Rect, Editor};
19− graphics::{Margin, Rect},
20− Editor,
21−};
22use tui::layout::Constraint;
15use tui::layout::Constraint;
23
16
24pub trait Item: Sync + Send + 'static {
17pub trait Item: Sync + Send + 'static {
@@ -329,15 +322,6 @@ impl<T: Item + 'static> Component for Menu<T> {
329 let selected = theme.get("ui.menu.selected");
322 let selected = theme.get("ui.menu.selected");
330 surface.clear_with(area, style);
323 surface.clear_with(area, style);
331
324
332− let render_borders = cx.editor.menu_border();
333−
334− let area = if render_borders {
335− Widget::render(Block::default().borders(Borders::ALL), area, surface);
336− area.inner(&Margin::vertical(1))
337− } else {
338− area
339− };
340−
341 let scroll = self.scroll;
325 let scroll = self.scroll;
342
326
343 let options: Vec<_> = self
327 let options: Vec<_> = self
@@ -378,19 +362,15 @@ impl<T: Item + 'static> Component for Menu<T> {
378 false,
362 false,
379 );
363 );
380
364
381− let render_borders = cx.editor.menu_border();
382−
383− if !render_borders {
384− if let Some(cursor) = self.cursor {
365+ if let Some(cursor) = self.cursor {
385− let offset_from_top = cursor - scroll;
366+ let offset_from_top = cursor - scroll;
386− let left = &mut surface[(area.left(), area.y + offset_from_top as u16)];
367+ let left = &mut surface[(area.left(), area.y + offset_from_top as u16)];
387− left.set_style(selected);
368+ left.set_style(selected);
388− let right = &mut surface[(
369+ let right = &mut surface[(
389− area.right().saturating_sub(1),
370+ area.right().saturating_sub(1),
390− area.y + offset_from_top as u16,
371+ area.y + offset_from_top as u16,
391− )];
372+ )];
392− right.set_style(selected);
373+ right.set_style(selected);
393− }
394 }
374 }
395
375
396 let fits = len <= win_height;
376 let fits = len <= win_height;
@@ -405,13 +385,12 @@ impl<T: Item + 'static> Component for Menu<T> {
405 for i in 0..win_height {
385 for i in 0..win_height {
406 cell = &mut surface[(area.right() - 1, area.top() + i as u16)];
386 cell = &mut surface[(area.right() - 1, area.top() + i as u16)];
407
387
408− let half_block = if render_borders { "▌" } else { "▐" };
388+ cell.set_symbol("▐"); // right half block
409
389
410 if scroll_line <= i && i < scroll_line + scroll_height {
390 if scroll_line <= i && i < scroll_line + scroll_height {
411 // Draw scroll thumb
391 // Draw scroll thumb
412− cell.set_symbol(half_block);
413 cell.set_fg(scroll_style.fg.unwrap_or(helix_view::theme::Color::Reset));
392 cell.set_fg(scroll_style.fg.unwrap_or(helix_view::theme::Color::Reset));
414− } else if !render_borders {
393+ } else {
415 // Draw scroll track
394 // Draw scroll track
416 cell.set_fg(scroll_style.bg.unwrap_or(helix_view::theme::Color::Reset));
395 cell.set_fg(scroll_style.bg.unwrap_or(helix_view::theme::Color::Reset));
417 }
396 }
helix-term/src/ui/popup.rs+7−27
@@ -3,10 +3,7 @@ use crate::{
3 compositor::{Callback, Component, Context, Event, EventResult},
3 compositor::{Callback, Component, Context, Event, EventResult},
4 ctrl, key,
4 ctrl, key,
5};
5};
6−use tui::{
7− buffer::Buffer as Surface,
6+use tui::buffer::Buffer as Surface;
8− widgets::{Block, Borders, Widget},
9−};
10
7
11use helix_core::Position;
8use helix_core::Position;
12use helix_view::{
9use helix_view::{
@@ -255,29 +252,13 @@ impl<T: Component> Component for Popup<T> {
255 let background = cx.editor.theme.get("ui.popup");
252 let background = cx.editor.theme.get("ui.popup");
256 surface.clear_with(area, background);
253 surface.clear_with(area, background);
257
254
258− let render_borders = cx.editor.popup_border();
259−
260− let inner = if self
261− .contents
262− .type_name()
263− .starts_with("helix_term::ui::menu::Menu")
264− {
265− area
266− } else {
267− area.inner(&self.margin)
255+ let inner = area.inner(&self.margin);
268− };
269−
270− let border = usize::from(render_borders);
271− if render_borders {
272− Widget::render(Block::default().borders(Borders::ALL), area, surface);
273− }
274−
275 self.contents.render(inner, surface, cx);
256 self.contents.render(inner, surface, cx);
276
257
277 // render scrollbar if contents do not fit
258 // render scrollbar if contents do not fit
278 if self.has_scrollbar {
259 if self.has_scrollbar {
279− let win_height = (inner.height as usize).saturating_sub(2 * border);
260+ let win_height = inner.height as usize;
280− let len = (self.child_size.1 as usize).saturating_sub(2 * border);
261+ let len = self.child_size.1 as usize;
281 let fits = len <= win_height;
262 let fits = len <= win_height;
282 let scroll = self.scroll;
263 let scroll = self.scroll;
283 let scroll_style = cx.editor.theme.get("ui.menu.scroll");
264 let scroll_style = cx.editor.theme.get("ui.menu.scroll");
@@ -293,15 +274,14 @@ impl<T: Component> Component for Popup<T> {
293
274
294 let mut cell;
275 let mut cell;
295 for i in 0..win_height {
276 for i in 0..win_height {
296− cell = &mut surface[(inner.right() - 1, inner.top() + (border + i) as u16)];
277+ cell = &mut surface[(inner.right() - 1, inner.top() + i as u16)];
297
278
298− let half_block = if render_borders { "▌" } else { "▐" };
279+ cell.set_symbol("▐"); // right half block
299
280
300 if scroll_line <= i && i < scroll_line + scroll_height {
281 if scroll_line <= i && i < scroll_line + scroll_height {
301 // Draw scroll thumb
282 // Draw scroll thumb
302− cell.set_symbol(half_block);
303 cell.set_fg(scroll_style.fg.unwrap_or(helix_view::theme::Color::Reset));
283 cell.set_fg(scroll_style.fg.unwrap_or(helix_view::theme::Color::Reset));
304− } else if !render_borders {
284+ } else {
305 // Draw scroll track
285 // Draw scroll track
306 cell.set_fg(scroll_style.bg.unwrap_or(helix_view::theme::Color::Reset));
286 cell.set_fg(scroll_style.bg.unwrap_or(helix_view::theme::Color::Reset));
307 }
287 }
helix-vcs/Cargo.toml+1−1
@@ -19,7 +19,7 @@ tokio = { version = "1", features = ["rt", "rt-multi-thread", "time", "sync", "p
19parking_lot = "0.12"
19parking_lot = "0.12"
20arc-swap = { version = "1.6.0" }
20arc-swap = { version = "1.6.0" }
21
21
22−gix = { version = "0.57.0", default-features = false , optional = true }
22+gix = { version = "0.56.0", default-features = false , optional = true }
23imara-diff = "0.1.5"
23imara-diff = "0.1.5"
24anyhow = "1"
24anyhow = "1"
25
25
helix-view/src/document.rs+20−57
@@ -1213,40 +1213,23 @@ impl Document {
1213
1213
1214 let changes = transaction.changes();
1214 let changes = transaction.changes();
1215
1215
1216+ changes.update_positions(
1217+ self.diagnostics
1218+ .iter_mut()
1219+ .map(|diagnostic| (&mut diagnostic.range.start, Assoc::After)),
1220+ );
1221+ changes.update_positions(
1222+ self.diagnostics
1223+ .iter_mut()
1224+ .map(|diagnostic| (&mut diagnostic.range.end, Assoc::After)),
1225+ );
1216− // map diagnostics over changes too
1226+ // map state.diagnostics over changes::map_pos too
1217− changes.update_positions(self.diagnostics.iter_mut().map(|diagnostic| {
1218− let assoc = if diagnostic.starts_at_word {
1219− Assoc::BeforeWord
1220− } else {
1221− Assoc::After
1222− };
1223− (&mut diagnostic.range.start, assoc)
1224− }));
1225− changes.update_positions(self.diagnostics.iter_mut().map(|diagnostic| {
1226− let assoc = if diagnostic.ends_at_word {
1227− Assoc::AfterWord
1228− } else {
1229− Assoc::Before
1230− };
1231− (&mut diagnostic.range.end, assoc)
1232− }));
1233− self.diagnostics.retain_mut(|diagnostic| {
1227+ for diagnostic in &mut self.diagnostics {
1234− if diagnostic.range.start > diagnostic.range.end
1235− || (!diagnostic.zero_width && diagnostic.range.start == diagnostic.range.end)
1236− {
1237− return false;
1238− }
1239 diagnostic.line = self.text.char_to_line(diagnostic.range.start);
1228 diagnostic.line = self.text.char_to_line(diagnostic.range.start);
1240− true
1241− });
1229+ }
1242
1230
1231+ self.diagnostics
1243− self.diagnostics.sort_unstable_by_key(|diagnostic| {
1232+ .sort_unstable_by_key(|diagnostic| diagnostic.range);
1244− (
1245− diagnostic.range,
1246− diagnostic.severity,
1247− diagnostic.language_server_id,
1248− )
1249− });
1250
1233
1251 // Update the inlay hint annotations' positions, helping ensure they are displayed in the proper place
1234 // Update the inlay hint annotations' positions, helping ensure they are displayed in the proper place
1252 let apply_inlay_hint_changes = |annotations: &mut Rc<[InlineAnnotation]>| {
1235 let apply_inlay_hint_changes = |annotations: &mut Rc<[InlineAnnotation]>| {
@@ -1723,33 +1706,13 @@ impl Document {
1723
1706
1724 pub fn replace_diagnostics(
1707 pub fn replace_diagnostics(
1725 &mut self,
1708 &mut self,
1726− diagnostics: impl IntoIterator<Item = Diagnostic>,
1709+ mut diagnostics: Vec<Diagnostic>,
1727− unchanged_sources: &[String],
1728 language_server_id: usize,
1710 language_server_id: usize,
1729 ) {
1711 ) {
1730− if unchanged_sources.is_empty() {
1731− self.clear_diagnostics(language_server_id);
1712+ self.clear_diagnostics(language_server_id);
1732− } else {
1733− self.diagnostics.retain(|d| {
1713+ self.diagnostics.append(&mut diagnostics);
1734− if d.language_server_id != language_server_id {
1735− return true;
1736− }
1737−
1738− if let Some(source) = &d.source {
1739− unchanged_sources.contains(source)
1740− } else {
1741− false
1742− }
1743− });
1744− }
1745− self.diagnostics.extend(diagnostics);
1714+ self.diagnostics
1746− self.diagnostics.sort_unstable_by_key(|diagnostic| {
1715+ .sort_unstable_by_key(|diagnostic| diagnostic.range);
1747− (
1748− diagnostic.range,
1749− diagnostic.severity,
1750− diagnostic.language_server_id,
1751− )
1752− });
1753 }
1716 }
1754
1717
1755 pub fn clear_diagnostics(&mut self, language_server_id: usize) {
1718 pub fn clear_diagnostics(&mut self, language_server_id: usize) {
helix-view/src/editor.rs+2−23
@@ -43,8 +43,9 @@ pub use helix_core::diagnostic::Severity;
43use helix_core::{
43use helix_core::{
44 auto_pairs::AutoPairs,
44 auto_pairs::AutoPairs,
45 syntax::{self, AutoPairConfig, IndentationHeuristic, SoftWrap},
45 syntax::{self, AutoPairConfig, IndentationHeuristic, SoftWrap},
46− Change, LineEnding, Position, Selection, NATIVE_LINE_ENDING,
46+ Change, LineEnding, NATIVE_LINE_ENDING,
47};
47};
48+use helix_core::{Position, Selection};
48use helix_dap as dap;
49use helix_dap as dap;
49use helix_lsp::lsp;
50use helix_lsp::lsp;
50
51
@@ -290,8 +291,6 @@ pub struct Config {
290 pub insert_final_newline: bool,
291 pub insert_final_newline: bool,
291 /// Enables smart tab
292 /// Enables smart tab
292 pub smart_tab: Option<SmartTabConfig>,
293 pub smart_tab: Option<SmartTabConfig>,
293− /// Draw border around popups.
294− pub popup_border: PopupBorderConfig,
295 /// Which indent heuristic to use when a new line is inserted
294 /// Which indent heuristic to use when a new line is inserted
296 #[serde(default)]
295 #[serde(default)]
297 pub indent_heuristic: IndentationHeuristic,
296 pub indent_heuristic: IndentationHeuristic,
@@ -798,15 +797,6 @@ impl From<LineEndingConfig> for LineEnding {
798 }
797 }
799}
798}
800
799
801−#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
802−#[serde(rename_all = "kebab-case")]
803−pub enum PopupBorderConfig {
804− None,
805− All,
806− Popup,
807− Menu,
808−}
809−
810impl Default for Config {
800impl Default for Config {
811 fn default() -> Self {
801 fn default() -> Self {
812 Self {
802 Self {
@@ -854,7 +844,6 @@ impl Default for Config {
854 default_line_ending: LineEndingConfig::default(),
844 default_line_ending: LineEndingConfig::default(),
855 insert_final_newline: true,
845 insert_final_newline: true,
856 smart_tab: Some(SmartTabConfig::default()),
846 smart_tab: Some(SmartTabConfig::default()),
857− popup_border: PopupBorderConfig::None,
858 indent_heuristic: IndentationHeuristic::default(),
847 indent_heuristic: IndentationHeuristic::default(),
859 }
848 }
860 }
849 }
@@ -1075,16 +1064,6 @@ impl Editor {
1075 }
1064 }
1076 }
1065 }
1077
1066
1078− pub fn popup_border(&self) -> bool {
1079− self.config().popup_border == PopupBorderConfig::All
1080− || self.config().popup_border == PopupBorderConfig::Popup
1081− }
1082−
1083− pub fn menu_border(&self) -> bool {
1084− self.config().popup_border == PopupBorderConfig::All
1085− || self.config().popup_border == PopupBorderConfig::Menu
1086− }
1087−
1088 pub fn apply_motion<F: Fn(&mut Self) + 'static>(&mut self, motion: F) {
1067 pub fn apply_motion<F: Fn(&mut Self) + 'static>(&mut self, motion: F) {
1089 motion(self);
1068 motion(self);
1090 self.last_motion = Some(Box::new(motion));
1069 self.last_motion = Some(Box::new(motion));
languages.toml+2−46
@@ -3,7 +3,6 @@
3
3
4[language-server]
4[language-server]
5
5
6−als = { command = "als" }
7awk-language-server = { command = "awk-language-server" }
6awk-language-server = { command = "awk-language-server" }
8bash-language-server = { command = "bash-language-server", args = ["start"] }
7bash-language-server = { command = "bash-language-server", args = ["start"] }
9bass = { command = "bass", args = ["--lsp"] }
8bass = { command = "bass", args = ["--lsp"] }
@@ -191,7 +190,6 @@ auto-format = true
191comment-token = "//"
190comment-token = "//"
192language-servers = [ "rust-analyzer" ]
191language-servers = [ "rust-analyzer" ]
193indent = { tab-width = 4, unit = " " }
192indent = { tab-width = 4, unit = " " }
194−persistent-diagnostic-sources = ["rustc", "clippy"]
195
193
196[language.auto-pairs]
194[language.auto-pairs]
197'(' = ')'
195'(' = ')'
@@ -347,8 +345,7 @@ file-types = [
347 "jsonld",
345 "jsonld",
348 ".vuerc",
346 ".vuerc",
349 "composer.lock",
347 "composer.lock",
350− ".watchmanconfig",
348+ ".watchmanconfig"
351− "avsc"
352]
349]
353language-servers = [ "vscode-json-language-server" ]
350language-servers = [ "vscode-json-language-server" ]
354auto-format = true
351auto-format = true
@@ -957,19 +954,6 @@ indent = { tab-width = 2, unit = " " }
957name = "java"
954name = "java"
958source = { git = "https://github.com/tree-sitter/tree-sitter-java", rev = "09d650def6cdf7f479f4b78f595e9ef5b58ce31e" }
955source = { git = "https://github.com/tree-sitter/tree-sitter-java", rev = "09d650def6cdf7f479f4b78f595e9ef5b58ce31e" }
959
956
960−[[language]]
961−name = "smali"
962−scope = "source.smali"
963−injection-regex = "smali"
964−file-types = ["smali"]
965−comment-token = "#"
966−roots = []
967−indent = { tab-width = 4, unit = " " }
968−
969−[[grammar]]
970−name = "smali"
971−source = { git = "https://github.com/amaanq/tree-sitter-smali", rev = "5ae51e15c4d1ac93cba6127caf3d1f0a072c140c" }
972−
973[[language]]
957[[language]]
974name = "ledger"
958name = "ledger"
975scope = "source.ledger"
959scope = "source.ledger"
@@ -2321,8 +2305,7 @@ file-types = [
2321 "xpdl",
2305 "xpdl",
2322 "xul",
2306 "xul",
2323 "xoml",
2307 "xoml",
2324− "musicxml",
2308+ "musicxml"
2325− "glif"
2326]
2309]
2327indent = { tab-width = 2, unit = " " }
2310indent = { tab-width = 2, unit = " " }
2328
2311
@@ -2714,7 +2697,6 @@ file-types = [ "cabal" ]
2714roots = ["cabal.project", "Setup.hs"]
2697roots = ["cabal.project", "Setup.hs"]
2715indent = { tab-width = 2, unit = " " }
2698indent = { tab-width = 2, unit = " " }
2716comment-token = "--"
2699comment-token = "--"
2717−language-servers = [ "haskell-language-server" ]
2718
2700
2719[[language]]
2701[[language]]
2720name = "hurl"
2702name = "hurl"
@@ -2938,32 +2920,6 @@ file-types = ["gmi"]
2938name = "gemini"
2920name = "gemini"
2939source = { git = "https://git.sr.ht/~nbsp/tree-sitter-gemini", rev = "3cc5e4bdf572d5df4277fc2e54d6299bd59a54b3" }
2921source = { git = "https://git.sr.ht/~nbsp/tree-sitter-gemini", rev = "3cc5e4bdf572d5df4277fc2e54d6299bd59a54b3" }
2940
2922
2941−[[language]]
2942−name = "agda"
2943−scope = "source.agda"
2944−injection-regex = "agda"
2945−file-types = ["agda"]
2946−roots = []
2947−comment-token = "--"
2948−# language-servers = [ "als" ]
2949−# the agda language server is of questionable functionality.
2950−auto-format = false
2951−indent = { tab-width = 2, unit = " " }
2952−
2953−[language.auto-pairs]
2954−'"' = '"'
2955−"'" = "'"
2956−'{' = '}'
2957−'(' = ')'
2958−'[' = ']'
2959−
2960−# [language.debugger]
2961−# ?? can this be used for proof assistant support? explore
2962−
2963−[[grammar]]
2964−name = "agda"
2965−source = { git = "https://github.com/tree-sitter/tree-sitter-agda", rev = "c21c3a0f996363ed17b8ac99d827fe5a4821f217" }
2966−
2967[[language]]
2923[[language]]
2968name = "templ"
2924name = "templ"
2969scope = "source.templ"
2925scope = "source.templ"
logo.svg+1−1
@@ -1 +1 @@
1−<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;" viewBox="663.38 37.57 575.35 903.75"><g transform="matrix(1,0,0,1,-31352.7,-1817.25)"><g transform="matrix(1,0,0,1,31062.7,-20.8972)"><g transform="matrix(1,0,0,1,-130.173,0.00185558)"><path style="fill:#706bc8;" d="M1083.58,1875.72L1635.06,2194.12C1649.8,2202.63 1658.88,2218.37 1658.88,2235.39C1658.88,2264.98 1658.88,2311.74 1658.88,2341.33C1658.88,2349.84 1656.61,2358.03 1652.5,2365.16C1652.5,2365.16 1214.7,2112.4 1107.2,2050.33C1092.58,2041.89 1083.58,2026.29 1083.58,2009.41C1083.58,1963.5 1083.58,1875.72 1083.58,1875.72Z"></path></g><g transform="matrix(1,0,0,1,-130.173,0.00185558)"><path style="fill:#55c5e4;" d="M1635.26,2604.84C1649.88,2613.28 1658.88,2628.87 1658.88,2645.75C1658.88,2691.67 1658.88,2779.44 1658.88,2779.44L1107.41,2461.05C1092.66,2452.53 1083.58,2436.8 1083.58,2419.78C1083.58,2390.19 1083.58,2343.42 1083.58,2313.84C1083.58,2305.32 1085.85,2297.13 1089.96,2290.01C1089.96,2290.01 1527.76,2542.77 1635.26,2604.84Z"></path></g><g transform="matrix(1,0,0,1,216.062,984.098)"><path style="fill:#84ddea;" d="M790.407,1432.56C785.214,1435.55 780.717,1439.9 777.509,1445.46C767.862,1462.16 773.473,1483.76 790.004,1493.59L789.998,1493.59L761.173,1476.95C746.427,1468.44 737.344,1452.71 737.344,1435.68C737.344,1406.09 737.344,1359.33 737.344,1329.74C737.344,1312.71 746.427,1296.98 761.173,1288.47L1259.59,1000.74L1259.83,1000.6C1264.92,997.617 1269.33,993.314 1272.48,987.844C1282.13,971.136 1276.52,949.544 1259.99,939.707L1260,939.707L1288.82,956.349C1303.57,964.862 1312.65,980.595 1312.65,997.622C1312.65,1027.21 1312.65,1073.97 1312.65,1103.56C1312.65,1120.59 1303.57,1136.32 1288.82,1144.83L1259.19,1161.94L1259.59,1161.68L790.407,1432.56Z"></path></g><g transform="matrix(1,0,0,1,216.062,984.098)"><path style="fill:#997bc8;" d="M790.407,1686.24C785.214,1689.23 780.717,1693.58 777.509,1699.13C767.862,1715.84 773.473,1737.43 790.004,1747.27L789.998,1747.27L761.173,1730.63C746.427,1722.12 737.344,1706.38 737.344,1689.36C737.344,1659.77 737.344,1613.01 737.344,1583.42C737.344,1566.39 746.427,1550.66 761.173,1542.15L1259.59,1254.42L1259.83,1254.28C1264.92,1251.29 1269.33,1246.99 1272.48,1241.52C1282.13,1224.81 1276.52,1203.22 1259.99,1193.38L1260,1193.38L1288.82,1210.03C1303.57,1218.54 1312.65,1234.27 1312.65,1251.3C1312.65,1280.89 1312.65,1327.65 1312.65,1357.24C1312.65,1374.26 1303.57,1390 1288.82,1398.51L1259.19,1415.61L1259.59,1415.36L790.407,1686.24Z"></path></g></g></g></svg>
1+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;" viewBox="663.38 37.57 575.35 903.75"> <g transform="matrix(1,0,0,1,-31352.7,-1817.25)"> <g transform="matrix(1,0,0,1,31062.7,-20.8972)"> <g transform="matrix(1,0,0,1,-130.173,0.00185558)"> <path d="M1083.58,1875.72L1635.06,2194.12C1649.8,2202.63 1658.88,2218.37 1658.88,2235.39C1658.88,2264.98 1658.88,2311.74 1658.88,2341.33C1658.88,2349.84 1656.61,2358.03 1652.5,2365.16C1652.5,2365.16 1214.7,2112.4 1107.2,2050.33C1092.58,2041.89 1083.58,2026.29 1083.58,2009.41C1083.58,1963.5 1083.58,1875.72 1083.58,1875.72Z" style="fill:#706bc8;"></path> </g> <g transform="matrix(1,0,0,1,-130.173,0.00185558)"> <path d="M1635.26,2604.84C1649.88,2613.28 1658.88,2628.87 1658.88,2645.75C1658.88,2691.67 1658.88,2779.44 1658.88,2779.44L1107.41,2461.05C1092.66,2452.53 1083.58,2436.8 1083.58,2419.78C1083.58,2390.19 1083.58,2343.42 1083.58,2313.84C1083.58,2305.32 1085.85,2297.13 1089.96,2290.01C1089.96,2290.01 1527.76,2542.77 1635.26,2604.84Z" style="fill:#55c5e4;"></path> </g> <g transform="matrix(1,0,0,1,216.062,984.098)"> <path d="M790.407,1432.56C785.214,1435.55 780.717,1439.9 777.509,1445.46C767.862,1462.16 773.473,1483.76 790.004,1493.59L789.998,1493.59L761.173,1476.95C746.427,1468.44 737.344,1452.71 737.344,1435.68C737.344,1406.09 737.344,1359.33 737.344,1329.74C737.344,1312.71 746.427,1296.98 761.173,1288.47L1259.59,1000.74L1259.83,1000.6C1264.92,997.617 1269.33,993.314 1272.48,987.844C1282.13,971.136 1276.52,949.544 1259.99,939.707L1260,939.707L1288.82,956.349C1303.57,964.862 1312.65,980.595 1312.65,997.622C1312.65,1027.21 1312.65,1073.97 1312.65,1103.56C1312.65,1120.59 1303.57,1136.32 1288.82,1144.83L1259.19,1161.94L1259.59,1161.68L790.407,1432.56Z" style="fill:#84ddea;"></path> </g> <g transform="matrix(1,0,0,1,216.062,984.098)"> <path d="M790.407,1686.24C785.214,1689.23 780.717,1693.58 777.509,1699.13C767.862,1715.84 773.473,1737.43 790.004,1747.27L789.998,1747.27L761.173,1730.63C746.427,1722.12 737.344,1706.38 737.344,1689.36C737.344,1659.77 737.344,1613.01 737.344,1583.42C737.344,1566.39 746.427,1550.66 761.173,1542.15L1259.59,1254.42L1259.83,1254.28C1264.92,1251.29 1269.33,1246.99 1272.48,1241.52C1282.13,1224.81 1276.52,1203.22 1259.99,1193.38L1260,1193.38L1288.82,1210.03C1303.57,1218.54 1312.65,1234.27 1312.65,1251.3C1312.65,1280.89 1312.65,1327.65 1312.65,1357.24C1312.65,1374.26 1303.57,1390 1288.82,1398.51L1259.19,1415.61L1259.59,1415.36L790.407,1686.24Z" style="fill:#997bc8;"></path></g></g></g> </svg>
runtime/queries/agda/highlights.scmdeleted−124
@@ -1,124 +0,0 @@
1−;; Punctuation
2−[ "." ";" ":"] @punctuation.delimiter
3−[ "(" ")" "{" "}" ] @punctuation.bracket
4−
5−;; Constants
6−(integer) @constant.numeric.integer
7−; (float) @constant.numeric.float
8−(literal) @string
9−
10−;; Pragmas and comments
11−(comment) @comment
12−(pragma) @attribute
13−(macro) @function.macro
14−
15−;; Imports
16−(module_name) @namespace
17−(import_directive (id) @namespace)
18−[(module) (import) (open)] @keyword.control.import
19−
20−;; Types
21−(typed_binding (expr) @type)
22−(record (expr) @type)
23−(data (expr) @type)
24−(signature (expr) @type)
25−(function (rhs (expr) @type))
26−; todo: these are too general. ideally, any nested (atom)
27−; https://github.com/tree-sitter/tree-sitter/issues/880
28−
29−;; Variables
30−(untyped_binding (atom) @variable)
31−(typed_binding (atom) @variable)
32−(field_name) @variable.other.member
33−
34−;; Functions
35−(function_name) @function
36−;(function (lhs
37−; . (atom) @function
38−; (atom) @variable.parameter))
39−; todo: currently fails to parse, upstream tree-sitter bug
40−
41−;; Data
42−[(data_name) (record_name)] @constructor
43−((atom) @constant.builtin.boolean
44− (#any-of? @constant.builtin.boolean "true" "false" "True" "False"))
45−
46−"Set" @type.builtin
47−
48−; postulate
49−; type_signature
50−; pattern
51−; id
52−; bid
53−; typed_binding
54−; primitive
55−; private
56−; record_signature
57−; record_assignments
58−; field_assignment
59−; module_assignment
60−; renaming
61−; import_directive
62−; lambda
63−; let
64−; instance
65−; generalize
66−; record
67−; fields
68−; syntax
69−; hole_name
70−; data_signature
71−
72−;; Keywords
73−[
74− "where"
75− "data"
76− "rewrite"
77− "postulate"
78− "public"
79− "private"
80− "tactic"
81− "Prop"
82− "quote"
83− "renaming"
84− "in"
85− "hiding"
86− "constructor"
87− "abstract"
88− "let"
89− "field"
90− "mutual"
91− "infix"
92− "infixl"
93− "infixr"
94− "record"
95− "overlap"
96− "instance"
97− "do"
98−] @keyword
99−
100−[
101− "="
102−] @operator
103−
104−; = | -> : ? \ .. ... λ ∀ →
105−; (_LAMBDA) (_FORALL) (_ARROW)
106−; "coinductive"
107−; "eta-equality"
108−; "field"
109−; "inductive"
110−; "interleaved"
111−; "macro"
112−; "no-eta-equality"
113−; "pattern"
114−; "primitive"
115−; "quoteTerm"
116−; "rewrite"
117−; "syntax"
118−; "unquote"
119−; "unquoteDecl"
120−; "unquoteDef"
121−; "using"
122−; "variable"
123−; "with"
124−
runtime/queries/c/indents.scm−13
@@ -36,16 +36,3 @@
36(parameter_list
36(parameter_list
37 . (parameter_declaration) @anchor
37 . (parameter_declaration) @anchor
38 (#set! "scope" "tail")) @align
38 (#set! "scope" "tail")) @align
39−(argument_list
40− . (_) @anchor
41− (#set! "scope" "tail")) @align
42−; These are a bit opinionated since some people just indent binary/ternary expressions spanning multiple lines.
43−; Since they are only triggered when a newline is inserted into an already complete binary/ternary expression,
44−; this should happen rarely, so it is not a big deal either way.
45−; Additionally, adding these queries has the advantage of preventing such continuation lines from being used
46−; as the baseline when the `hybrid` indent heuristic is used (which is desirable since their indentation is so inconsistent).
47−(binary_expression
48− (#set! "scope" "tail")) @anchor @align
49−(conditional_expression
50− "?" @anchor
51− (#set! "scope" "tail")) @align
runtime/queries/smali/folds.scmdeleted−12
@@ -1,12 +0,0 @@
1−[
2− (annotation_directive)
3− (array_data_directive)
4− (field_definition)
5− (method_definition)
6− (packed_switch_directive)
7− (param_directive)
8− (parameter_directive)
9− (sparse_switch_directive)
10− (subannotation_directive)
11− (list)
12−] @fold
runtime/queries/smali/highlights.scmdeleted−216
@@ -1,216 +0,0 @@
1−; Types
2−
3−(class_identifier
4− (identifier) @type)
5−
6−(primitive_type) @type.builtin
7−
8−((class_identifier
9− . (identifier) @_first @type.builtin
10− (identifier) @type.builtin)
11− (#match? @_first "^(android|dalvik|java|kotlinx)$"))
12−
13−((class_identifier
14− . (identifier) @_first @type.builtin
15− . (identifier) @_second @type.builtin
16− (identifier) @type.builtin)
17− (#eq? @_first "com")
18− (#match? @_second "^(android|google)$"))
19−
20−; Methods
21−
22−(method_definition
23− (method_signature (method_identifier) @function.method))
24−
25−(expression
26− (opcode) @_invoke
27− (body
28− (full_method_signature
29− (method_signature (method_identifier) @function.method)))
30− (#match? @_invoke "^invoke"))
31−
32−(expression
33− (opcode) @_field_access
34− (body
35− (field_identifier) @variable.other.member)
36− (#match? @_field_access "^[is](get|put)-"))
37−
38−(method_handle
39− (full_method_signature
40− (method_signature (method_identifier) @function.method)))
41−
42−(custom_invoke
43− . (identifier) @function.method
44− (method_signature (method_identifier) @function.method))
45−
46−(annotation_value
47− (body
48− (method_signature (method_identifier) @function.method)))
49−
50−(annotation_value
51− (body
52− (full_method_signature
53− (method_signature (method_identifier) @function.method))))
54−
55−(field_definition
56− (body
57− (method_signature (method_identifier) @function.method)))
58−
59−(field_definition
60− (body
61− (full_method_signature
62− (method_signature (method_identifier) @function.method))))
63−
64−((method_identifier) @constructor
65− (#match? @constructor "^(<init>|<clinit>)$"))
66−
67−"constructor" @constructor
68−
69−; Fields
70−
71−[
72− (field_identifier)
73− (annotation_key)
74−] @variable.other.member
75−
76−((field_identifier) @constant
77− (#match? @constant "^[%u_]*$"))
78−
79−; Variables
80−
81−(variable) @variable.builtin
82−
83−(local_directive
84− (identifier) @variable)
85−
86−; Parameters
87−
88−(parameter) @variable.parameter
89−(param_identifier) @variable.parameter
90−
91−; Labels
92−
93−[
94− (label)
95− (jmp_label)
96−] @label
97−
98−; Operators
99−
100−; (opcode) @keyword.operator
101−
102−((opcode) @keyword.control.return
103− (#match? @keyword.control.return "^return"))
104−
105−((opcode) @keyword.control.conditional
106− (#match? @keyword.control.conditional "^if"))
107−
108−((opcode) @keyword.control.conditional
109− (#match? @keyword.control.conditional "^cmp"))
110−
111−((opcode) @keyword.control.exception
112− (#match? @keyword.control.exception "^throw"))
113−
114−[
115− "="
116− ".."
117−] @operator
118−
119−; Keywords
120−
121−[
122− ".class"
123− ".super"
124− ".implements"
125− ".field"
126− ".end field"
127− ".annotation"
128− ".end annotation"
129− ".subannotation"
130− ".end subannotation"
131− ".param"
132− ".end param"
133− ".parameter"
134− ".end parameter"
135− ".local"
136− ".end local"
137− ".restart local"
138− ".registers"
139− ".packed-switch"
140− ".end packed-switch"
141− ".sparse-switch"
142− ".end sparse-switch"
143− ".array-data"
144− ".end array-data"
145− ".enum"
146− (prologue_directive)
147− (epilogue_directive)
148−] @keyword
149−
150−[
151− ".source"
152−] @keyword.directive
153−
154−[
155− ".method"
156− ".end method"
157−] @keyword.function
158−
159−[
160− ".catch"
161− ".catchall"
162−] @keyword.control.exception
163−
164−; Literals
165−
166−(string) @string
167−(source_directive (string "\"" _ @string.special.url "\""))
168−(escape_sequence) @constant.character.escape
169−
170−(character) @constant.character
171−
172−"L" @punctuation
173−
174−(line_directive (number) @comment) @comment
175−(".locals" (number) @comment) @comment
176−
177−(number) @constant.numeric.integer
178−
179−[
180− (float)
181− (NaN)
182− (Infinity)
183−] @constant.numeric.float
184−
185−(boolean) @constant.builtin.boolean
186−
187−(null) @constant.builtin
188−
189−; Misc
190−
191−(annotation_visibility) @keyword.storage.modifier
192−
193−(access_modifier) @keyword.storage.type
194−
195−(array_type
196− "[" @punctuation.special)
197−
198−["{" "}"] @punctuation.bracket
199−
200−["(" ")"] @punctuation.bracket
201−
202−[
203− "->"
204− ","
205− ":"
206− ";"
207− "@"
208− "/"
209−] @punctuation.delimiter
210−
211−; Comments
212−
213−(comment) @comment
214−
215−(class_definition
216− (comment) @comment.block.documentation)
runtime/queries/smali/indents.scmdeleted−31
@@ -1,31 +0,0 @@
1−[
2− (annotation_directive)
3− (array_data_directive)
4− (field_definition)
5− (method_definition)
6− (packed_switch_directive)
7− (param_directive)
8− (parameter_directive)
9− (sparse_switch_directive)
10− (subannotation_directive)
11− (list)
12− "\{"
13−] @indent
14−
15−[
16− ".end annotation"
17− ".end array-data"
18− ".end field"
19− ".end method"
20− ".end packed-switch"
21− ".end param"
22− ".end parameter"
23− ".end sparse-switch"
24− ".end subannotation"
25− "\}"
26−] @outdent
27−
28−[
29− (ERROR)
30− (comment)
31−] @indent.always
runtime/queries/smali/injections.scmdeleted−2
@@ -1,2 +0,0 @@
1−((comment) @injection.content
2− (#set! injection.language "comment"))
runtime/queries/smali/locals.scmdeleted−42
@@ -1,42 +0,0 @@
1−[
2− (class_directive)
3− (expression)
4− (annotation_directive)
5− (array_data_directive)
6− (method_definition)
7− (packed_switch_directive)
8− (sparse_switch_directive)
9− (subannotation_directive)
10−] @local.scope
11−
12−[
13− (identifier)
14− (class_identifier)
15− (label)
16− (jmp_label)
17−] @local.reference
18−
19−(enum_reference
20− (field_identifier) @local.definition)
21−
22−((field_definition
23− (access_modifiers) @_mod
24− (field_identifier) @local.definition)
25− (#eq? @_mod "enum"))
26−
27−(field_definition
28− (field_identifier) @local.definition
29− (field_type) @local.definition)
30−
31−(annotation_key) @local.definition
32−
33−(method_definition
34− (method_signature (method_identifier) @local.definition))
35−
36−(param_identifier) @local.definition
37−
38−(annotation_directive
39− (class_identifier) @local.definition)
40−
41−(class_directive
42− (class_identifier) @local.definition)
runtime/themes/horizon-dark.tomldeleted−80
@@ -1,80 +0,0 @@
1−# Syntax
2−string = "orange"
3−constant = "purple"
4−"constant.numeric" = "orange"
5−"constant.builtin" = "orange"
6−variable = "red"
7−comment = "light-gray"
8−special = "purple"
9−"punctuation.bracket" = "purple"
10−keyword = "purple"
11−function = "blue"
12−label = "orange"
13−type = "orange"
14−namespace = "orange"
15−
16−# User Interface
17−"ui.background" = { bg = "bg", fg = "gray" }
18−"ui.background.separator" = "light-gray"
19−"ui.text" = "white"
20−"ui.text.focus" = "green"
21−"ui.text.inactive" = "selection"
22−"ui.text.info" = "orange"
23−"ui.cursor" = { modifiers = ["reversed"] }
24−"ui.cursor.primary" = { modifiers = ["reversed"] }
25−"ui.cursor.match" = { bg = "selection" }
26−"ui.gutter" = "gray"
27−"ui.gutter.selected" = "light-gray"
28−"ui.selection" = { bg = "selection" }
29−"ui.virtual.indent-guide" = { fg = "gray"}
30−"ui.virtual.whitespace" = { fg = "light-gray"}
31−"ui.statusline" = { bg = "dark-bg", fg = "light-gray" }
32−"ui.popup" = { bg = "dark-bg", fg = "orange" }
33−"ui.help" = { bg = "dark-bg", fg = "orange" }
34−"ui.menu" = { bg = "dark-bg", fg = "light-gray" }
35−"ui.menu.selected" = { bg = "selection", fg = "orange" }
36−"ui.window" = "selection"
37−"ui.bufferline" = { bg = "dark-bg", fg = "light-gray" }
38−"ui.bufferline.active" = { bg = "dark-bg", fg = "orange" }
39−
40−# Diagnostics
41−"diagnostic" = { underline = { style = "curl" } }
42−"diagnostic.hint" = { underline = { color = "green", style = "curl" } }
43−"diagnostic.info" = { underline = { color = "blue", style = "curl" } }
44−"diagnostics.error" = { underline = { color = "red", style = "curl"} }
45−"diagnostics.warning" = { underline = { color = "orange", style = "curl"} }
46−
47−warning = { fg = "orange", modifiers = ["bold"] }
48−error = { fg = "red", modifiers = ["bold"] }
49−info = { fg = "blue", modifiers = ["bold"] }
50−hint = { fg = "green", modifiers = ["bold"] }
51−
52−# Markup
53−"markup.heading" = "pink"
54−"markup.list" = "light-gray"
55−"markup.list.checked" = "green"
56−"markup.list.unchecked" = "light-gray"
57−"markup.bold" = { modifiers = ["bold"] }
58−"markup.italic" = { modifiers = ["italic"] }
59−"markup.strikethrough" = { modifiers = ["crossed_out"] }
60−"markup.link" = "blue"
61−"markup.quote" = "orange"
62−"markup.raw" = "orange"
63−
64−"diff.plus" = "green"
65−"diff.minus" = "red"
66−"diff.delta" = "orange"
67−
68−[palette]
69−white = "#D5D8DA"
70−gray = "#2E303E"
71−light-gray = "#6C6F93"
72−bg = "#1C1E26"
73−dark-bg = "#16161C"
74−pink = "#EE64AE"
75−selection = "#353747"
76−green = "#27D796"
77−orange = "#FAB795"
78−purple = "#B877DB"
79−red = "#E95678"
80−blue = "#25B2BC"
runtime/themes/licenses/modus_vivendi.LICENSEdeleted−5
@@ -1,5 +0,0 @@
1−Copyright (C) 2020-2023 Free Software Foundation, Inc.
2−
3−Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover Texts being “A GNU Manual,” and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled “GNU Free Documentation License.”
4−
5−(a) The FSF’s Back-Cover Text is: “You have the freedom to copy and modify this GNU manual.”
runtime/themes/licenses/modus_vivendi_deuteranopia.LICENSEdeleted−5
@@ -1,5 +0,0 @@
1−Copyright (C) 2020-2023 Free Software Foundation, Inc.
2−
3−Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover Texts being “A GNU Manual,” and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled “GNU Free Documentation License.”
4−
5−(a) The FSF’s Back-Cover Text is: “You have the freedom to copy and modify this GNU manual.”
runtime/themes/licenses/modus_vivendi_tinted.LICENSEdeleted−5
@@ -1,5 +0,0 @@
1−Copyright (C) 2020-2023 Free Software Foundation, Inc.
2−
3−Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover Texts being “A GNU Manual,” and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled “GNU Free Documentation License.”
4−
5−(a) The FSF’s Back-Cover Text is: “You have the freedom to copy and modify this GNU manual.”
runtime/themes/licenses/modus_vivendi_tritanopia.LICENSEdeleted−5
@@ -1,5 +0,0 @@
1−Copyright (C) 2020-2023 Free Software Foundation, Inc.
2−
3−Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover Texts being “A GNU Manual,” and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled “GNU Free Documentation License.”
4−
5−(a) The FSF’s Back-Cover Text is: “You have the freedom to copy and modify this GNU manual.”
runtime/themes/modus_vivendi.tomldeleted−242
@@ -1,242 +0,0 @@
1−# Author: Matous Dzivjak <matousdzivjak@gmail.com>
2−# Adapted from https://protesilaos.com/emacs/modus-themes, by Protesilaos Stavrou
3−# Source: https://github.com/protesilaos/modus-themes/blob/main/modus-vivendi-theme.el
4−# Version 4.3.0
5−
6−# Syntax highlighting
7−# -------------------
8−"type" = "cyan-cooler"
9−"constructor" = "cyan-cooler"
10−
11−"constant" = "blue-cooler"
12−"constant.character.escape" = "magenta"
13−
14−"string" = "blue-warmer"
15−"string.regexp" = "magenta-faint"
16−"string.special" = "blue-faint" # used for colors in CSS
17−
18−"comment" = "fg-dim"
19−
20−"variable.parameter" = "cyan"
21−"variable.builtin" = "magenta-cooler"
22−"label" = "fg-dim" # used for language in markdown code blocks
23−"keyword" = "magenta-cooler"
24−"keyword.directive" = "red-cooler"
25−"function" = "magenta"
26−"function.macro" = "magenta-warmer"
27−
28−punctuation = "fg-dim"
29−"tag" = "magenta"
30−"attribute" = "cyan-cooler"
31−"namespace" = "blue-cooler"
32−"special" = "red-cooler"
33−
34−"markup.heading.marker" = "fg-dim"
35−"markup.heading.1" = { fg = "fg-main", modifiers = ["bold"] }
36−"markup.heading.2" = { fg = "yellow-faint", modifiers = ["bold"] }
37−"markup.heading.3" = { fg = "fg-alt", modifiers = ["bold"] }
38−"markup.heading.4" = { fg = "magenta", modifiers = ["bold"] }
39−"markup.heading.5" = { fg = "green-faint", modifiers = ["bold"] }
40−"markup.heading.6" = { fg = "red-faint", modifiers = ["bold"] }
41−"markup.list" = "fg-dim"
42−"markup.list.checked" = { fg = "yellow-warmer" }
43−"markup.list.unchecked" = { fg = "yellow-warmer" }
44−"markup.bold" = { modifiers = ["bold"] }
45−"markup.italic" = { modifiers = ["italic"] }
46−"markup.strikethrough" = { modifiers = ["crossed_out"] }
47−"markup.link.url" = { fg = "cyan" }
48−"markup.link.text" = { fg = "blue-warmer", modifiers = ["underlined"] }
49−"markup.raw.block" = { bg = "bg-dim" }
50−"markup.raw.inline" = { fg = "green-cooler" }
51−
52−"diff.plus" = { fg = "fg-added", bg = "bg-added" }
53−"diff.plus.gutter" = "green-intense"
54−"diff.minus" = { fg = "fg-removed", bg = "bg-removed" }
55−"diff.minus.gutter" = "red-intense"
56−"diff.delta" = { fg = "fg-changed", bg = "bg-changed" }
57−"diff.delta.gutter" = "yellow-intense"
58−
59−# User Interface
60−# --------------
61−
62−"ui.background" = { bg = "bg-main" }
63−
64−"ui.linenr" = { fg = "fg-dim", bg = "bg-dim" }
65−"ui.linenr.selected" = { fg = "fg-main", bg = "bg-active" }
66−
67−"ui.statusline" = { fg = "fg-mode-line-active", bg = "bg-mode-line-active" }
68−"ui.statusline.inactive" = { fg = "fg-mode-line-inactive", bg = "bg-mode-line-inactive" }
69−"ui.statusline.normal" = { fg = "blue-warmer" }
70−"ui.statusline.insert" = { fg = "green-warmer" }
71−"ui.statusline.select" = { fg = "magenta-warmer" }
72−
73−"ui.bufferline" = { bg = "bg-tab-bar" }
74−"ui.bufferline.active" = { bg = "bg-tab-current", fg = "fg-mode-line-active" }
75−
76−"ui.popup" = { fg = "fg-main", bg = "bg-dim" }
77−"ui.window" = { fg = "fg-dim" }
78−"ui.help" = { fg = "fg-main", bg = "bg-dim" }
79−"ui.gutter" = { bg = "bg-dim" }
80−"ui.text" = "fg-main"
81−"ui.text.focus" = { fg = "fg-main", bg = "bg-completion", modifiers = ["bold"] }
82−"ui.text.inactive" = { fg = "fg-dim" }
83−"ui.virtual" = "bg-active"
84−"ui.virtual.ruler" = { bg = "bg-dim" }
85−"ui.virtual.inlay-hint" = { fg = "fg-dim", modifiers = ["italic"] }
86−
87−"ui.selection" = { fg = "fg-main", bg = "bg-inactive" }
88−"ui.selection.primary" = { fg = "fg-main", bg = "bg-active" }
89−
90−"ui.cursor" = { fg = "bg-main", bg = "fg-main" }
91−"ui.cursor.primary" = { fg = "bg-main", bg = "fg-dim" }
92−"ui.cursor.match" = { bg = "bg-paren-match" }
93−"ui.cursorline.primary" = { bg = "bg-hl-line" }
94−
95−"ui.highlight" = { bg = "bg-hl-line" }
96−
97−"ui.menu" = { fg = "fg-main", bg = "bg-dim" }
98−"ui.menu.selected" = { fg = "fg-main", bg = "bg-completion", modifiers = ["bold"] }
99−"ui.menu.scroll" = { fg = "fg-dim", bg = "bg-cyan-intense" }
100−
101−"diagnostic.error" = { underline = { color = "red-intense", style = "curl" } }
102−"diagnostic.warning" = { underline = { color = "yellow-intense", style = "curl" } }
103−"diagnostic.info" = { underline = { color = "cyan-intense", style = "curl" } }
104−"diagnostic.hint" = { underline = { color = "blue-intense", style = "curl" } }
105−
106−error = "red"
107−warning = "yellow-warmer"
108−info = "cyan-cooler"
109−hint = "blue-cooler"
110−
111−[palette]
112−# Basic values
113−bg-main = "#000000"
114−bg-dim = "#1e1e1e"
115−fg-main = "#ffffff"
116−fg-dim = "#989898"
117−fg-alt = "#c6daff"
118−bg-active = "#535353"
119−bg-inactive = "#303030"
120−
121−# Common accent foregrounds
122−red = "#ff5f59"
123−red-warmer = "#ff6b55"
124−red-cooler = "#ff7f9f"
125−red-faint = "#ff9580"
126−red-intense = "#ff5f5f"
127−green = "#44bc44"
128−green-warmer = "#70b900"
129−green-cooler = "#00c06f"
130−green-faint = "#88ca9f"
131−green-intense = "#44df44"
132−yellow = "#d0bc00"
133−yellow-warmer = "#fec43f"
134−yellow-cooler = "#dfaf7a"
135−yellow-faint = "#d2b580"
136−yellow-intense = "#efef00"
137−blue = "#2fafff"
138−blue-warmer = "#79a8ff"
139−blue-cooler = "#00bcff"
140−blue-faint = "#82b0ec"
141−blue-intense = "#338fff"
142−magenta = "#feacd0"
143−magenta-warmer = "#f78fe7"
144−magenta-cooler = "#b6a0ff"
145−magenta-faint = "#caa6df"
146−magenta-intense = "#ff66ff"
147−cyan = "#00d3d0"
148−cyan-warmer = "#4ae2f0"
149−cyan-cooler = "#6ae4b9"
150−cyan-faint = "#9ac8e0"
151−cyan-intense = "#00eff0"
152−
153−# Uncommon accent foregrounds
154−rust = "#db7b5f"
155−gold = "#c0965b"
156−olive = "#9cbd6f"
157−slate = "#76afbf"
158−indigo = "#9099d9"
159−maroon = "#cf7fa7"
160−pink = "#d09dc0"
161−
162−# Common accent backgrounds
163−bg-red-intense = "#9d1f1f"
164−bg-green-intense = "#2f822f"
165−bg-yellow-intense = "#7a6100"
166−bg-blue-intense = "#1640b0"
167−bg-magenta-intense = "#7030af"
168−bg-cyan-intense = "#2266ae"
169−
170−bg-red-subtle = "#620f2a"
171−bg-green-subtle = "#00422a"
172−bg-yellow-subtle = "#4a4000"
173−bg-blue-subtle = "#242679"
174−bg-magenta-subtle = "#552f5f"
175−bg-cyan-subtle = "#004065"
176−
177−bg-red-nuanced = "#2c0614"
178−bg-green-nuanced = "#001904"
179−bg-yellow-nuanced = "#221000"
180−bg-blue-nuanced = "#0f0e39"
181−bg-magenta-nuanced = "#230631"
182−bg-cyan-nuanced = "#041529"
183−
184−# Uncommon accent backgrounds
185−bg-ochre = "#442c2f"
186−bg-lavender = "#38325c"
187−bg-sage = "#0f3d30"
188−
189−# Special purpose
190−bg-completion = "#2f447f"
191−bg-hover = "#45605e"
192−bg-hover-secondary = "#654a39"
193−bg-hl-line = "#2f3849"
194−bg-region = "#5a5a5a"
195−fg-region = "#ffffff"
196−
197−bg-char-0 = "#0050af"
198−bg-char-1 = "#7f1f7f"
199−bg-char-2 = "#625a00"
200−
201−bg-mode-line-active = "#505050"
202−fg-mode-line-active = "#ffffff"
203−border-mode-line-active = "#959595"
204−bg-mode-line-inactive = "#2d2d2d"
205−fg-mode-line-inactive = "#969696"
206−border-mode-line-inactive = "#606060"
207−
208−modeline-err = "#ffa9bf"
209−modeline-warning = "#dfcf43"
210−modeline-info = "#9fefff"
211−
212−bg-tab-bar = "#313131"
213−bg-tab-current = "#000000"
214−bg-tab-other = "#545454"
215−
216−# Diffs
217−bg-added = "#00381f"
218−bg-added-faint = "#002910"
219−bg-added-refine = "#034f2f"
220−bg-added-fringe = "#237f3f"
221−fg-added = "#a0e0a0"
222−fg-added-intense = "#80e080"
223−
224−bg-changed = "#363300"
225−bg-changed-faint = "#2a1f00"
226−bg-changed-refine = "#4a4a00"
227−bg-changed-fringe = "#8a7a00"
228−fg-changed = "#efef80"
229−fg-changed-intense = "#c0b05f"
230−
231−bg-removed = "#4f1119"
232−bg-removed-faint = "#380a0f"
233−bg-removed-refine = "#781a1f"
234−bg-removed-fringe = "#b81a1f"
235−fg-removed = "#ffbfbf"
236−fg-removed-intense = "#ff9095"
237−
238−bg-diff-context = "#1a1a1a"
239−
240−# Paren match
241−bg-paren-match = "#2f7f9f"
242−tg-paren-expression = "#453040"
runtime/themes/modus_vivendi_deuteranopia.tomldeleted−158
@@ -1,158 +0,0 @@
1−# Author: Matous Dzivjak <matousdzivjak@gmail.com>
2−# Adapted from https://protesilaos.com/emacs/modus-themes, by Protesilaos Stavrou
3−# Source: https://github.com/protesilaos/modus-themes/blob/main/modus-vivendi-deuteranopia-theme.el
4−# Version 4.3.0
5−
6−inherits = "modus_vivendi"
7−
8−"constant.character.escape" = "magenta"
9−"comment" = "yellow-cooler"
10−"function" = "magenta"
11−"tag" = "magenta"
12−
13−"ui.cursor" = { fg = "bg-main", bg = "blue-intense" }
14−"ui.cursor.primary.normal" = { fg = "bg-main", bg = "blue-intense" }
15−
16−"diagnostic.error" = { underline = { color = "yellow-intense", style = "curl" } }
17−"diagnostic.warning" = { underline = { color = "magenta-faint", style = "curl" } }
18−"diagnostic.info" = { underline = { color = "cyan", style = "curl" } }
19−"diagnostic.hint" = { underline = { color = "blue", style = "curl" } }
20−
21−error = "yellow-intense"
22−warning = "magenta-faint"
23−info = "cyan"
24−hint = "blue"
25−
26−[palette]
27−# Basic values
28−bg-main = "#000000"
29−bg-dim = "#1e1e1e"
30−fg-main = "#ffffff"
31−fg-dim = "#989898"
32−fg-alt = "#c6daff"
33−bg-active = "#535353"
34−bg-inactive = "#303030"
35−border = "#646464"
36−
37−# Common accent foregrounds
38−red = "#ff5f59"
39−red-warmer = "#ff6b55"
40−red-cooler = "#ff7f9f"
41−red-faint = "#ff9580"
42−red-intense = "#ff5f5f"
43−green = "#44bc44"
44−green-warmer = "#70b900"
45−green-cooler = "#00c06f"
46−green-faint = "#88ca9f"
47−green-intense = "#44df44"
48−yellow = "#cabf00"
49−yellow-warmer = "#ffa00f"
50−yellow-cooler = "#d8af7a"
51−yellow-faint = "#d2b580"
52−yellow-intense = "#efef00"
53−blue = "#2fafff"
54−blue-warmer = "#79a8ff"
55−blue-cooler = "#00bcff"
56−blue-faint = "#82b0ec"
57−blue-intense = "#338fff"
58−magenta = "#feacd0"
59−magenta-warmer = "#f78fe7"
60−magenta-cooler = "#b6a0ff"
61−magenta-faint = "#caa6df"
62−magenta-intense = "#ff66ff"
63−cyan = "#00d3d0"
64−cyan-warmer = "#4ae2f0"
65−cyan-cooler = "#6ae4b9"
66−cyan-faint = "#9ac8e0"
67−cyan-intense = "#00eff0"
68−
69−# Uncommon accent foregrounds
70−rust = "#db7b5f"
71−gold = "#c0965b"
72−olive = "#9cbd6f"
73−slate = "#76afbf"
74−indigo = "#9099d9"
75−maroon = "#cf7fa7"
76−pink = "#d09dc0"
77−
78−# Common accent backgrounds
79−bg-red-intense = "#9d1f1f"
80−bg-green-intense = "#2f822f"
81−bg-yellow-intense = "#7a6100"
82−bg-blue-intense = "#1640b0"
83−bg-magenta-intense = "#7030af"
84−bg-cyan-intense = "#2266ae"
85−
86−bg-red-subtle = "#620f2a"
87−bg-green-subtle = "#00422a"
88−bg-yellow-subtle = "#4a4000"
89−bg-blue-subtle = "#242679"
90−bg-magenta-subtle = "#552f5f"
91−bg-cyan-subtle = "#004065"
92−
93−bg-red-nuanced = "#2c0614"
94−bg-green-nuanced = "#001904"
95−bg-yellow-nuanced = "#221000"
96−bg-blue-nuanced = "#0f0e39"
97−bg-magenta-nuanced = "#230631"
98−bg-cyan-nuanced = "#041529"
99−
100−# Uncommon accent backgrounds
101−bg-ochre = "#442c2f"
102−bg-lavender = "#38325c"
103−bg-sage = "#0f3d30"
104−
105−# Special purpose
106−bg-completion = "#2f447f"
107−bg-hover = "#45605e"
108−bg-hover-secondary = "#654a39"
109−bg-hl-line = "#2f3849"
110−bg-region = "#5a5a5a"
111−fg-region = "#ffffff"
112−
113−bg-char-0 = "#0050af"
114−bg-char-1 = "#7f1f7f"
115−bg-char-2 = "#625a00"
116−
117−bg-mode-line-active = "#2a2a6a"
118−fg-mode-line-active = "#f0f0f0"
119−border-mode-line-active = "#8080a7"
120−bg-mode-line-inactive = "#2d2d2d"
121−fg-mode-line-inactive = "#969696"
122−border-mode-line-inactive = "#606060"
123−
124−modeline-err = "#e5bf00"
125−modeline-warning = "#c0cf35"
126−modeline-info = "#abeadf"
127−
128−bg-tab-bar = "#313131"
129−bg-tab-current = "#000000"
130−bg-tab-other = "#545454"
131−
132−# Diffs
133−bg-added = "#003066"
134−bg-added-faint = "#001a4f"
135−bg-added-refine = "#0f4a77"
136−bg-added-fringe = "#006fff"
137−fg-added = "#c4d5ff"
138−fg-added-intense = "#8080ff"
139−
140−bg-changed = "#2f123f"
141−bg-changed-faint = "#1f022f"
142−bg-changed-refine = "#3f325f"
143−bg-changed-fringe = "#7f55a0"
144−fg-changed = "#e3cfff"
145−fg-changed-intense = "#cf9fe2"
146−
147−bg-removed = "#3d3d00"
148−bg-removed-faint = "#281f00"
149−bg-removed-refine = "#555500"
150−bg-removed-fringe = "#d0c03f"
151−fg-removed = "#d4d48f"
152−fg-removed-intense = "#d0b05f"
153−
154−bg-diff-context = "#1a1a1a"
155−
156−# Paren match
157−bg-paren-match = "#2f7f9f"
158−bg-paren-expression = "#453040"
runtime/themes/modus_vivendi_tinted.tomldeleted−144
@@ -1,144 +0,0 @@
1−# Author: Matous Dzivjak <matousdzivjak@gmail.com>
2−# Adapted from: https://protesilaos.com/emacs/modus-themes, by Protesilaos Stavrou
3−# Source: https://github.com/protesilaos/modus-themes/blob/main/modus-vivendi-tinted-theme.el
4−# Version 4.3.0
5−
6−inherits = "modus_vivendi"
7−
8−"comment" = "red-faint"
9−
10−"ui.cursor.primary" = { fg = "bg-main", bg = "red" }
11−
12−[palette]
13−# Basic values
14−bg-main = "#0d0e1c"
15−bg-dim = "#1d2235"
16−fg-main = "#ffffff"
17−fg-dim = "#989898"
18−fg-alt = "#c6daff"
19−bg-active = "#4a4f69"
20−bg-inactive = "#2b3045"
21−border = "#61647a"
22−
23−# Common accent foregrounds
24−red = "#ff5f59"
25−red-warmer = "#ff6b55"
26−red-cooler = "#ff7f9f"
27−red-faint = "#ff9f80"
28−red-intense = "#ff5f5f"
29−green = "#44bc44"
30−green-warmer = "#70b900"
31−green-cooler = "#00c06f"
32−green-faint = "#88ca9f"
33−green-intense = "#44df44"
34−yellow = "#d0bc00"
35−yellow-warmer = "#fec43f"
36−yellow-cooler = "#dfaf7a"
37−yellow-faint = "#d2b580"
38−yellow-intense = "#efef00"
39−blue = "#2fafff"
40−blue-warmer = "#79a8ff"
41−blue-cooler = "#00bcff"
42−blue-faint = "#82b0ec"
43−blue-intense = "#338fff"
44−magenta = "#feacd0"
45−magenta-warmer = "#f78fe7"
46−magenta-cooler = "#b6a0ff"
47−magenta-faint = "#caa6df"
48−magenta-intense = "#ff66ff"
49−cyan = "#00d3d0"
50−cyan-warmer = "#4ae2f0"
51−cyan-cooler = "#6ae4b9"
52−cyan-faint = "#9ac8e0"
53−cyan-intense = "#00eff0"
54−
55−# Uncommon accent foregrounds
56−rust = "#db7b5f"
57−gold = "#c0965b"
58−olive = "#9cbd6f"
59−slate = "#76afbf"
60−indigo = "#9099d9"
61−maroon = "#cf7fa7"
62−pink = "#d09dc0"
63−
64−# Common accent backgrounds
65−bg-red-intense = "#9d1f1f"
66−bg-green-intense = "#2f822f"
67−bg-yellow-intense = "#7a6100"
68−bg-blue-intense = "#1640b0"
69−bg-magenta-intense = "#7030af"
70−bg-cyan-intense = "#2266ae"
71−
72−bg-red-subtle = "#620f2a"
73−bg-green-subtle = "#00422a"
74−bg-yellow-subtle = "#4a4000"
75−bg-blue-subtle = "#242679"
76−bg-magenta-subtle = "#552f5f"
77−bg-cyan-subtle = "#004065"
78−
79−bg-red-nuanced = "#350f14"
80−bg-green-nuanced = "#002718"
81−bg-yellow-nuanced = "#2c1f00"
82−bg-blue-nuanced = "#131c4d"
83−bg-magenta-nuanced = "#2f133f"
84−bg-cyan-nuanced = "#04253f"
85−
86−# Special purpose
87−bg-completion = "#483d8a"
88−bg-hover = "#45605e"
89−bg-hover-secondary = "#654a39"
90−bg-hl-line = "#303a6f"
91−bg-region = "#555a66"
92−fg-region = "#ffffff"
93−
94−bg-char-0 = "#0050af"
95−bg-char-1 = "#7f1f7f"
96−bg-char-2 = "#625a00"
97−
98−bg-mode-line-active = "#484d67"
99−fg-mode-line-active = "#ffffff"
100−border-mode-line-active = "#979797"
101−bg-mode-line-inactive = "#292d48"
102−fg-mode-line-inactive = "#969696"
103−border-mode-line-inactive = "#606270"
104−
105−modeline-err = "#ffa9bf"
106−modeline-warning = "#dfcf43"
107−modeline-info = "#9fefff"
108−
109−bg-tab-bar = "#2c3045"
110−bg-tab-current = "#0d0e1c"
111−bg-tab-other = "#4a4f6a"
112−
113−# Diffs
114−bg-added = "#003a2f"
115−bg-added-faint = "#002922"
116−bg-added-refine = "#035542"
117−bg-added-fringe = "#23884f"
118−fg-added = "#a0e0a0"
119−fg-added-intense = "#80e080"
120−
121−bg-changed = "#363300"
122−bg-changed-faint = "#2a1f00"
123−bg-changed-refine = "#4a4a00"
124−bg-changed-fringe = "#8f7a30"
125−fg-changed = "#efef80"
126−fg-changed-intense = "#c0b05f"
127−
128−bg-removed = "#4f1127"
129−bg-removed-faint = "#380a19"
130−bg-removed-refine = "#781a3a"
131−bg-removed-fringe = "#b81a26"
132−fg-removed = "#ffbfbf"
133−fg-removed-intense = "#ff9095"
134−
135−bg-diff-context = "#1a1f30"
136−
137−# Uncommon accent backgrounds
138−bg-ochre = "#442c2f"
139−bg-lavender = "#38325c"
140−bg-sage = "#0f3d30"
141−
142−# Paren match
143−bg-paren-match = "#2f7f9f"
144−bg-paren-expression = "#453040"
runtime/themes/modus_vivendi_tritanopia.tomldeleted−186
@@ -1,186 +0,0 @@
1−# Author: Matous Dzivjak <matousdzivjak@gmail.com>
2−# Adapted from https://protesilaos.com/emacs/modus-themes, by Protesilaos Stavrou
3−# Source: https://github.com/protesilaos/modus-themes/blob/main/modus-vivendi-tritanopia-theme.el
4−# Version 4.3.0
5−
6−inherits = "modus_vivendi"
7−
8−"type" = "blue-warmer"
9−"constructor" = "blue-warmer"
10−"constant" = "green-cooler"
11−"constant.character.escape" = "red-cooler"
12−"string" = "cyan"
13−"comment" = "red-faint"
14−"variable.parameter" = "cyan-cooler"
15−"keyword" = "red-cooler"
16−"keyword.directive" = "red-warmer"
17−"function" = "cyan-warmer"
18−"function.macro" = "magenta"
19−"tag" = "red-cooler"
20−
21−"markup.heading.2" = { fg = "red-faint", modifiers = ["bold"] }
22−"markup.heading.3" = { fg = "cyan-faint", modifiers = ["bold"] }
23−"markup.heading.6" = { fg = "magenta-faint", modifiers = ["bold"] }
24−"markup.link.url" = { fg = "cyan-cooler" }
25−"markup.link.text" = { fg = "cyan", modifiers = ["underlined"] }
26−
27−"ui.cursor" = { fg = "bg-main", bg = "red-intense" }
28−"ui.cursor.primary.normal" = { fg = "bg-main", bg = "red-intense" }
29−
30−"diagnostic.error" = { underline = { color = "red-warmer", style = "curl" } }
31−"diagnostic.warning" = { underline = { color = "magenta", style = "curl" } }
32−"diagnostic.info" = { underline = { color = "cyan", style = "curl" } }
33−"diagnostic.hint" = { underline = { color = "blue", style = "curl" } }
34−
35−error = "red-warmer"
36−warning = "magenta"
37−info = "cyan"
38−hint = "blue"
39−
40−[palette]
41−# Basic values
42−bg-main = "#000000"
43−bg-dim = "#1e1e1e"
44−fg-main = "#ffffff"
45−fg-dim = "#989898"
46−fg-alt = "#c6daff"
47−bg-active = "#535353"
48−bg-inactive = "#303030"
49−border = "#646464"
50−
51−# Common accent foregrounds
52−red = "#ff5f59"
53−red-warmer = "#ff6740"
54−red-cooler = "#ff6f9f"
55−red-faint = "#ff9070"
56−red-intense = "#ff5f5f"
57−green = "#44bc44"
58−green-warmer = "#70b900"
59−green-cooler = "#00c06f"
60−green-faint = "#88ca9f"
61−green-intense = "#44df44"
62−yellow = "#cabf00"
63−yellow-warmer = "#ffa00f"
64−yellow-cooler = "#d8af7a"
65−yellow-faint = "#d2b580"
66−yellow-intense = "#efef00"
67−blue = "#2fafff"
68−blue-warmer = "#79a8ff"
69−blue-cooler = "#00bcff"
70−blue-faint = "#82b0ec"
71−blue-intense = "#338fff"
72−magenta = "#feacd0"
73−magenta-warmer = "#f78fe7"
74−magenta-cooler = "#b6a0ff"
75−magenta-faint = "#caa6df"
76−magenta-intense = "#ef7fff"
77−cyan = "#00d3d0"
78−cyan-warmer = "#4ae2ff"
79−cyan-cooler = "#6ae4b9"
80−cyan-faint = "#7fdbdf"
81−cyan-intense = "#00eff0"
82−
83−# Uncommon accent foregrounds
84−rust = "#db7b5f"
85−gold = "#c0965b"
86−olive = "#9cbd6f"
87−slate = "#76afbf"
88−indigo = "#9099d9"
89−maroon = "#cf7fa7"
90−pink = "#d09dc0"
91−
92−# Common accent backgrounds
93−bg-red-intense = "#9d1f1f"
94−bg-green-intense = "#2f822f"
95−bg-yellow-intense = "#7a6100"
96−bg-blue-intense = "#1640b0"
97−bg-magenta-intense = "#7030af"
98−bg-cyan-intense = "#2266ae"
99−
100−bg-red-subtle = "#620f2a"
101−bg-green-subtle = "#00422a"
102−bg-yellow-subtle = "#4a4000"
103−bg-blue-subtle = "#242679"
104−bg-magenta-subtle = "#552f5f"
105−bg-cyan-subtle = "#004065"
106−
107−bg-red-nuanced = "#2c0614"
108−bg-green-nuanced = "#001904"
109−bg-yellow-nuanced = "#221000"
110−bg-blue-nuanced = "#0f0e39"
111−bg-magenta-nuanced = "#230631"
112−bg-cyan-nuanced = "#041529"
113−
114−# Uncommon accent backgrounds
115−bg-ochre = "#442c2f"
116−bg-lavender = "#38325c"
117−bg-sage = "#0f3d30"
118−
119−# Graphs
120−bg-graph-red-0 = "#b52c2c"
121−bg-graph-red-1 = "#702020"
122−bg-graph-green-0 = "#afd1c0"
123−bg-graph-green-1 = "#607a8f"
124−bg-graph-yellow-0 = "#facfd6"
125−bg-graph-yellow-1 = "#b57b85"
126−bg-graph-blue-0 = "#4f9fdf"
127−bg-graph-blue-1 = "#004559"
128−bg-graph-magenta-0 = "#b6427f"
129−bg-graph-magenta-1 = "#7f506f"
130−bg-graph-cyan-0 = "#57dfea"
131−bg-graph-cyan-1 = "#00808f"
132−
133−# Special purpose
134−bg-completion = "#004253"
135−bg-hover = "#8e3e3b"
136−bg-hover-secondary = "#00405f"
137−bg-hl-line = "#2f3849"
138−bg-region = "#5a5a5a"
139−fg-region = "#ffffff"
140−
141−bg-char-0 = "#922a00"
142−bg-char-1 = "#00709f"
143−bg-char-2 = "#5f3faf"
144−
145−bg-mode-line-active = "#003c52"
146−fg-mode-line-active = "#f0f0f0"
147−border-mode-line-active = "#5f8fb4"
148−bg-mode-line-inactive = "#2d2d2d"
149−fg-mode-line-inactive = "#969696"
150−border-mode-line-inactive = "#606060"
151−
152−modeline-err = "#ff7fbf"
153−modeline-warning = "#df9f93"
154−modeline-info = "#4fcfef"
155−
156−bg-tab-bar = "#313131"
157−bg-tab-current = "#000000"
158−bg-tab-other = "#545454"
159−
160−# Diffs
161−bg-added = "#004254"
162−bg-added-faint = "#003042"
163−bg-added-refine = "#004f7f"
164−bg-added-fringe = "#008fcf"
165−fg-added = "#9fdfdf"
166−fg-added-intense = "#50c0ef"
167−
168−bg-changed = "#2f123f"
169−bg-changed-faint = "#1f022f"
170−bg-changed-refine = "#3f325f"
171−bg-changed-fringe = "#7f55a0"
172−fg-changed = "#e3cfff"
173−fg-changed-intense = "#cf9fe2"
174−
175−bg-removed = "#4f1119"
176−bg-removed-faint = "#380a0f"
177−bg-removed-refine = "#781a1f"
178−bg-removed-fringe = "#b81a1f"
179−fg-removed = "#ffbfbf"
180−fg-removed-intense = "#ff9095"
181−
182−bg-diff-context = "#1a1a1a"
183−
184−# Paren match
185−bg-paren-match = "#2f7f9f"
186−bg-paren-expression = "#453040"
runtime/themes/noctis.toml+25−25
@@ -7,8 +7,8 @@
7
7
8'property' = { fg = "red" } # Regex group names.
8'property' = { fg = "red" } # Regex group names.
9"warning" = { fg ="yellow", modifiers = ["bold"] } # Editor warnings.
9"warning" = { fg ="yellow", modifiers = ["bold"] } # Editor warnings.
10−"error" = { fg = "red", modifiers = ["bold"] } # Editor errors, like mis-typing a command.
10+"error" = { bg = "mid-green", fg = "red", modifiers = ["bold"] } # Editor errors, like mis-typing a command.
11−"info" = { fg = "mid-blue" } # Code diagnostic info in gutter (LSP).
11+"info" = { fg = "mid-blue", bg = "mid-green" } # Code diagnostic info in gutter (LSP).
12# ? Difference between info and hint ?
12# ? Difference between info and hint ?
13"hint" = { fg = "light-green", modifiers = ["bold"] } # Code diagnostics hint in gutter (LSP).
13"hint" = { fg = "light-green", modifiers = ["bold"] } # Code diagnostics hint in gutter (LSP).
14
14
@@ -21,14 +21,14 @@
21# UI ==============================
21# UI ==============================
22# For styling helix itself.
22# For styling helix itself.
23
23
24−'ui.background' = { fg = "autocomp-green", bg = "dark-green" } # Default background color.
24+'ui.background' = { bg = "dark-green"} # Default background color.
25'ui.window' = { fg = "mid-green" } # Window border between splits.
25'ui.window' = { fg = "mid-green" } # Window border between splits.
26
26
27'ui.gutter' = { } # Left gutter for diagnostics and breakpoints.
27'ui.gutter' = { } # Left gutter for diagnostics and breakpoints.
28
28
29'ui.text' = { fg = "white" } # Default text color.
29'ui.text' = { fg = "white" } # Default text color.
30'ui.text.focus' = { fg = "white", bg = "mid-green", modifiers = ["bold"] } # Selection highlight in buffer-picker or file-picker.
30'ui.text.focus' = { fg = "white", bg = "mid-green", modifiers = ["bold"] } # Selection highlight in buffer-picker or file-picker.
31−'ui.text.info' = { fg = "white" } # Info popup contents (space mode menu).
31+'ui.text.info' = { } # Info popup contents (space mode menu).
32
32
33'ui.cursor' = { fg = "dark-green", bg = "white" } # Fallback cursor colour, non-primary cursors when there are multiple (shift-c).
33'ui.cursor' = { fg = "dark-green", bg = "white" } # Fallback cursor colour, non-primary cursors when there are multiple (shift-c).
34'ui.cursor.primary' = { fg = "dark-green", bg = "light-blue" } # The primary cursor when there are multiple (shift-c).
34'ui.cursor.primary' = { fg = "dark-green", bg = "light-blue" } # The primary cursor when there are multiple (shift-c).
@@ -40,8 +40,8 @@
40'ui.selection.primary' = { bg = "autocomp-green" } # The primary selection when there are multiple.
40'ui.selection.primary' = { bg = "autocomp-green" } # The primary selection when there are multiple.
41'ui.cursorline.primary' = { bg = 'mid-green' }
41'ui.cursorline.primary' = { bg = 'mid-green' }
42
42
43−'ui.linenr' = { fg = "gray" } # Line numbers.
43+'ui.linenr' = { bg = "dark-green", fg = "gray" } # Line numbers.
44−'ui.linenr.selected' = { fg = "light-green", modifiers = [ "bold" ] } # Current line number.
44+'ui.linenr.selected' = { bg = "mid-green", fg = "light-green", modifiers = [ "bold" ] } # Current line number.
45
45
46'ui.virtual' = { fg = "mid-green" } # Namespace for additions to the editing area.
46'ui.virtual' = { fg = "mid-green" } # Namespace for additions to the editing area.
47'ui.virtual.ruler' = { bg = "mid-green" } # Vertical rulers (colored columns in editing area).
47'ui.virtual.ruler' = { bg = "mid-green" } # Vertical rulers (colored columns in editing area).
@@ -75,9 +75,9 @@
75#'type.builtin' = { } # Primitive types of the language (string, int, float).
75#'type.builtin' = { } # Primitive types of the language (string, int, float).
76#'type.enum.variant' = { } # A variant of an enum.
76#'type.enum.variant' = { } # A variant of an enum.
77
77
78−'constructor' = { fg = "light-blue", modifiers = ["bold"]} # Constructor method for a class or struct. And in some cases applies to module names
78+'constructor' = { fg = "mid-blue", modifiers = ["bold"]} # Constructor method for a class or struct. And in some cases applies to module names
79
79
80−'constant' = { fg = "light-blue", modifiers = ["bold"] } # Constant value
80+'constant' = { fg = "light-blue" } # Constant value
81'constant.builtin' = { fg = "mid-blue", modifiers = ["bold"] } # Special constants like `true`, `false`, `none`, etc.
81'constant.builtin' = { fg = "mid-blue", modifiers = ["bold"] } # Special constants like `true`, `false`, `none`, etc.
82'constant.builtin.boolean' = { } # True or False.
82'constant.builtin.boolean' = { } # True or False.
83'constant.character' = { fg = "light-green"} # Constant of character type.
83'constant.character' = { fg = "light-green"} # Constant of character type.
@@ -88,20 +88,21 @@
88
88
89'string' = { fg = "light-green" } # String literal.
89'string' = { fg = "light-green" } # String literal.
90'string.regexp' = { } # Regular expression literal.
90'string.regexp' = { } # Regular expression literal.
91−'string.special' = { fg = "red" } # Strings containing a path, URL, etc.
91+'string.special' = { fg = "light-blue" } # Strings containing a path, URL, etc.
92−# 'string.special.path' = { } # String containing a file path.
92+'string.special.path' = { } # String containing a file path.
93−# 'string.special.url' = { } # String containing a web URL.
93+'string.special.url' = { } # String containing a web URL.
94−# 'string.special.symbol' = { } # Erlang/Elixir atoms, Ruby symbols, Clojure keywords.
94+'string.special.symbol' = { } # Erlang/Elixir atoms, Ruby symbols, Clojure keywords.
95
95
96'comment' = { fg = "gray", modifiers = ["italic"] } # This is a comment.
96'comment' = { fg = "gray", modifiers = ["italic"] } # This is a comment.
97'comment.line' = { } # Line comments, like this.
97'comment.line' = { } # Line comments, like this.
98'comment.block' = { } # Block comments, like /* this */ in some languages.
98'comment.block' = { } # Block comments, like /* this */ in some languages.
99'comment.block.documentation' = { } # Doc comments, e.g '///' in rust.
99'comment.block.documentation' = { } # Doc comments, e.g '///' in rust.
100
100
101−'variable' = { fg = "light-orange" } # Variable names.
101+'variable' = { fg = "white" } # Variable names.
102−# 'variable.builtin' = { } # Language reserved variables: `this`, `self`, `super`, etc.
102+'variable.builtin' = { } # Language reserved variables: `this`, `self`, `super`, etc.
103−# 'variable.parameter' = { } # Function parameters.
103+'variable.parameter' = { } # Function parameters.
104−'variable.other.member' = { fg = "orange" } # Fields of composite data types (e.g. structs, unions).
104+'variable.other.member' = { } # Fields of composite data types (e.g. structs, unions).
105+'variable.function' = { } # ?
105
106
106'label' = { fg = "purple" } # Loop labels in rust.
107'label' = { fg = "purple" } # Loop labels in rust.
107
108
@@ -112,17 +113,17 @@
112'keyword' = { fg = "pink", modifiers = ["bold"] } # Language reserved keywords.
113'keyword' = { fg = "pink", modifiers = ["bold"] } # Language reserved keywords.
113'keyword.control' = { fg = "pink", modifiers = ["bold"] } # Control keywords.
114'keyword.control' = { fg = "pink", modifiers = ["bold"] } # Control keywords.
114'keyword.control.conditional' = { fg = "pink", modifiers = ["bold"] } # 'if', 'else', 'elif'.
115'keyword.control.conditional' = { fg = "pink", modifiers = ["bold"] } # 'if', 'else', 'elif'.
115−# 'keyword.control.repeat' = { } # 'for', 'while', 'loop'.
116+'keyword.control.repeat' = { } # 'for', 'while', 'loop'.
116'keyword.control.import' = { fg = "pink", modifiers = ["italic"] } # 'import', 'export' ('use'?).
117'keyword.control.import' = { fg = "pink", modifiers = ["italic"] } # 'import', 'export' ('use'?).
117−# 'keyword.control.return' = { } # 'return' in most languages.
118+'keyword.control.return' = { } # 'return' in most languages.
118'keyword.control.exception' = {fg = "pink", modifiers = ["bold"] } # 'raise' in python.
119'keyword.control.exception' = {fg = "pink", modifiers = ["bold"] } # 'raise' in python.
119−'keyword.operator' = { fg = "pink" } # 'or', 'and', 'in'.
120+'keyword.operator' = { } # 'or', 'and', 'in'.
120'keyword.directive' = { fg = "purple" } # Preprocessor directives (#if in C).
121'keyword.directive' = { fg = "purple" } # Preprocessor directives (#if in C).
121−'keyword.function' = { fg= "red" } # The keyword to define a function: 'def', 'fun', 'fn'.
122+'keyword.function' = { } # The keyword to define a function: 'def', 'fun', 'fn'.
122
123
123'operator' = { fg = "pink", modifiers = ["bold"] } # Logical (&&, ||) and - I assume - Mathematical (+, %) operators
124'operator' = { fg = "pink", modifiers = ["bold"] } # Logical (&&, ||) and - I assume - Mathematical (+, %) operators
124
125
125−'function' = { fg = "mid-blue"}
126+'function' = { fg = "dark-blue"}
126'function.builtin' = { fg = "dark-blue" }
127'function.builtin' = { fg = "dark-blue" }
127'function.method' = { fg = "dark-blue" } # Class / Struct methods.
128'function.method' = { fg = "dark-blue" } # Class / Struct methods.
128'function.macro' = { fg = "purple" } # Like macros in rust.
129'function.macro' = { fg = "purple" } # Like macros in rust.
@@ -180,8 +181,8 @@
180# Version control changes.
181# Version control changes.
181
182
182'diff.plus' = "light-green" # { } # Additions.
183'diff.plus' = "light-green" # { } # Additions.
183−'diff.minus' = "red" # { } # Deletions.
184+'diff.minus' = "yellow" # { } # Deletions.
184−'diff.delta' = "yellow" # { } # Modifications.
185+'diff.delta' = "red" # { } # Modifications.
185# 'diff.delta.moved' = { } # Renamed or moved files / changes.
186# 'diff.delta.moved' = { } # Renamed or moved files / changes.
186
187
187
188
@@ -196,9 +197,8 @@ yellow = "#ffd800"
196purple = "#918cff"
197purple = "#918cff"
197white = "#b1cace"
198white = "#b1cace"
198orange = "#ffa864"
199orange = "#ffa864"
199−light-orange = "#fff2c5"
200gray = "#5b858b" # mainly for comments/background text
200gray = "#5b858b" # mainly for comments/background text
201−light-gray = "#2a3c41" # used when whitespace rendering is enabled and for indent-guides
201+light-gray = "#354e51" # used when whitespace rendering is enabled and for indent-guides
202red = "#e34e1b"
202red = "#e34e1b"
203
203
204dark-blue = "#19a2b7"
204dark-blue = "#19a2b7"
runtime/themes/nord.toml−9
@@ -134,15 +134,6 @@
134"ui.bufferline" = { fg = "nord5", bg = "nord1" }
134"ui.bufferline" = { fg = "nord5", bg = "nord1" }
135"ui.bufferline.active" = { fg = "nord6", bg = "nord2", underline = { color = "nord8", style = "line" }, modifiers = [ "italic" ] }
135"ui.bufferline.active" = { fg = "nord6", bg = "nord2", underline = { color = "nord8", style = "line" }, modifiers = [ "italic" ] }
136
136
137−# Markup
138−"markup.heading" = "nord8"
139−"markup.list" = "nord9"
140−"markup.bold" = { modifiers = ["bold"] }
141−"markup.italic" = { modifiers = ["italic"] }
142−"markup.strikethrough" = { modifiers = ["crossed_out"] }
143−"markup.link.text" = "nord8"
144−"markup.raw" = "nord7"
145−
146[palette]
137[palette]
147# Polar Night is made up of four darker colors that are commonly used for base elements like backgrounds or text color in bright ambiance designs.
138# Polar Night is made up of four darker colors that are commonly used for base elements like backgrounds or text color in bright ambiance designs.
148#
139#