From c3b84566557936144ba578aada50781a98faea69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charlotte=20=F0=9F=A6=9D=20Delenk?= Date: Sat, 30 Sep 2023 14:14:13 +0100 Subject: [PATCH] update --- .gitignore | 3 +- ci/woodpecker/gomod2nix.toml | 48 +- ci/woodpecker/source.json | 10 +- ci/woodpecker/yarn.lock | 136 +-- ci/woodpecker/yarn.nix | 144 +-- default.nix | 1 + flake.lock | 6 +- flake.nix | 1 + matrix/matrix-media-repo/source.json | 10 +- matrix/mautrix-whatsapp/source.json | 10 +- matrix/sliding-sync/source.json | 10 +- overlay.nix | 1 + plover/plover-dotool-output.json | 12 + plover/plover-dotool-output.nix | 30 + plover/plover/default.nix | 17 +- plover/plover/source.json | 10 +- plover/plover/source.nix | 14 - plover/plover/wayland.patch | 1461 ------------------------- web/wordpress-plugins/webmention.json | 6 +- 19 files changed, 249 insertions(+), 1681 deletions(-) create mode 100644 plover/plover-dotool-output.json create mode 100644 plover/plover-dotool-output.nix delete mode 100644 plover/plover/source.nix delete mode 100644 plover/plover/wayland.patch diff --git a/.gitignore b/.gitignore index cced044..a4a2c61 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ .direnv -/result -/result-man +/result* diff --git a/ci/woodpecker/gomod2nix.toml b/ci/woodpecker/gomod2nix.toml index 9e58012..75e9d89 100644 --- a/ci/woodpecker/gomod2nix.toml +++ b/ci/woodpecker/gomod2nix.toml @@ -65,14 +65,14 @@ schema = 3 version = "v1.0.2" hash = "sha256-gfwm6i0ZGQhX2c0lDRe7qVXyHkhoHeemYpaj+O0aYyw=" [mod."github.com/docker/cli"] - version = "v20.10.25+incompatible" - hash = "sha256-0UY18siblX3VAXHeRwG38LSdirbRLENTmdgIkmnknYU=" + version = "v20.10.26+incompatible" + hash = "sha256-raz6w//bxBzWhTV4Ocmqkm7QyaWxF/NsKWUCcfa0T3c=" [mod."github.com/docker/distribution"] version = "v2.8.2+incompatible" hash = "sha256-ocVWMRt5ErWdVsj3rsNa/QhizG5b/PCu8LoOlUi24/c=" [mod."github.com/docker/docker"] - version = "v20.10.25+incompatible" - hash = "sha256-Nw4AAUE8RpmnSRyHckJP7EOtgLknAw/Q/yGzI0tkcUc=" + version = "v20.10.26+incompatible" + hash = "sha256-vECQfJ/AVSTLsXNC4r2VVK1SoIzAiqDlxIWM+lGXqYQ=" [mod."github.com/docker/docker-credential-helpers"] version = "v0.7.0" hash = "sha256-Np+esoutU1psMWB0G1ayKwaWVn/XemIXxlVlooXphzg=" @@ -185,8 +185,8 @@ schema = 3 version = "v1.2.0" hash = "sha256-XGIirpWp3lFLaBK5lHLVnNMwkVGCnnyt7Pqranb4amQ=" [mod."github.com/hashicorp/go-retryablehttp"] - version = "v0.7.2" - hash = "sha256-PcLyolWF7G409rs7j3tnwgQK6xhgWYk9/iK2bO13TGQ=" + version = "v0.7.4" + hash = "sha256-/Gz+M2TPdVW+9zL+Oh1oC8kLrla2Uvl1S16SMH4qYRw=" [mod."github.com/hashicorp/go-version"] version = "v1.5.0" hash = "sha256-nrV59GgQHrZ0i/pyighGahr0Or/x3jNeyS/TD67HCf4=" @@ -224,8 +224,8 @@ schema = 3 version = "v0.7.7" hash = "sha256-NVCz8MURpxgOjHXqxOZExqV4bnpHggpeAOyZDArjcy4=" [mod."github.com/mattn/go-colorable"] - version = "v0.1.12" - hash = "sha256-Y1vCt0ShrCz4wSmwsppCfeLPLKrWusc2zM2lUFwDMyI=" + version = "v0.1.13" + hash = "sha256-qb3Qbo0CELGRIzvw7NVM1g/aayaz4Tguppk9MD2/OI8=" [mod."github.com/mattn/go-isatty"] version = "v0.0.19" hash = "sha256-wYQqGxeqV3Elkmn26Md8mKZ/viw598R4Ych3vtt72YE=" @@ -245,8 +245,8 @@ schema = 3 version = "v1.1.55" hash = "sha256-Jbii9veDSpqF7yIkdrzb/bEUM3wZG41mNEAYV3VEAJo=" [mod."github.com/moby/moby"] - version = "v20.10.25+incompatible" - hash = "sha256-Nw4AAUE8RpmnSRyHckJP7EOtgLknAw/Q/yGzI0tkcUc=" + version = "v20.10.26+incompatible" + hash = "sha256-vECQfJ/AVSTLsXNC4r2VVK1SoIzAiqDlxIWM+lGXqYQ=" [mod."github.com/moby/term"] version = "v0.5.0" hash = "sha256-jy0kbkeUsr0KoiE33WLxNAgYXZIERKR2O5+saXBwdD8=" @@ -284,23 +284,23 @@ schema = 3 version = "v1.0.0" hash = "sha256-/FtmHnaGjdvEIKAJtrUfEhV7EVo5A/eYrtdnUkuxLDA=" [mod."github.com/prometheus/client_golang"] - version = "v1.16.0" - hash = "sha256-P/b4/8m1ztF0fCLSJ+eRXN74Bncx2vjOJx7nFl2QEg4=" + version = "v1.17.0" + hash = "sha256-FIIzCuNqHdVzpbyH7yAp7Tcu+1tPxEMS5g6KfsGQBGE=" [mod."github.com/prometheus/client_model"] - version = "v0.3.0" - hash = "sha256-vP+miJfsoK5UG9eug8z/bhAMj3bwg66T2vIh8WHoOKU=" + version = "v0.4.1-0.20230718164431-9a2bf3000d16" + hash = "sha256-t9LgImRW4h0XMSxfAazrGHqyDljDyl0YC5r9cYuXcKc=" [mod."github.com/prometheus/common"] - version = "v0.42.0" - hash = "sha256-dJqoPZKtY2umWFWwMeRYY9I2JaFlpcMX4atkEcN5+hs=" + version = "v0.44.0" + hash = "sha256-8n3gSWKDSJtGfOQgxsiCGyTnUjb5hvSxJi/hPcrE5Oo=" [mod."github.com/prometheus/procfs"] - version = "v0.10.1" - hash = "sha256-EJ8q8wux4964WE4X7UkHb+MXjLhX4TROJaoLIQvD/eQ=" + version = "v0.11.1" + hash = "sha256-yphZ7NZtYC/tb0HVag2T58SuN64Ial9sBo/TdCEQx6Q=" [mod."github.com/robfig/cron"] version = "v1.2.0" hash = "sha256-au+MD6DEjpVRAjXWmmJbZRB5IdFfcIqGm6kBkkYNY1s=" [mod."github.com/rs/zerolog"] - version = "v1.30.0" - hash = "sha256-fOJEpuiJmsp9ONqvmPGOyoBEDfJHBfUH8liiRCWDe1E=" + version = "v1.31.0" + hash = "sha256-OF4VM+Rv6M5EAaUVD2nOzcbZLQ4b7OAMteyyTqIoU0M=" [mod."github.com/russross/blackfriday/v2"] version = "v2.1.0" hash = "sha256-R+84l1si8az5yDqd5CYcFrTyNZ1eSYlpXKq6nFt4OTQ=" @@ -341,8 +341,8 @@ schema = 3 version = "v2.25.7" hash = "sha256-/OPbU0DE+xsY6Erz0a3kmzjJPRAXH75FuevmvsaQtw8=" [mod."github.com/xanzy/go-gitlab"] - version = "v0.91.1" - hash = "sha256-Af7n7/yL5D3XP+G+Z5bVtHoFDTHQLNHR6N35WGVF8iI=" + version = "v0.92.3" + hash = "sha256-egVSH5WCsGFJvq8SrqhzOoUDnMN0UGp3j5uIkp/RT/E=" [mod."github.com/xeipuuv/gojsonpointer"] version = "v0.0.0-20180127040702-4e3ac2762d5f" hash = "sha256-OEW9nOR3EeMzvqvqpdAgowpZlbXPLWM0JT+5bwWOxo8=" @@ -404,8 +404,8 @@ schema = 3 version = "v0.13.0" hash = "sha256-OCgLOwia8fNHxfdogXVApf0/qK6jE2ukegOx7lkOzfo=" [mod."google.golang.org/appengine"] - version = "v1.6.7" - hash = "sha256-zIxGRHiq4QBvRqkrhMGMGCaVL4iM4TtlYpAi/hrivS4=" + version = "v1.6.8" + hash = "sha256-decMa0MiWfW/Bzr8QPPzzpeya0YWGHhZAt4Cr/bD1wQ=" [mod."google.golang.org/genproto/googleapis/rpc"] version = "v0.0.0-20230711160842-782d3b101e98" hash = "sha256-VtrLmOh1SLOKKLRmKc/NKR6NR/9DSR4RSq+OXnwmgHY=" diff --git a/ci/woodpecker/source.json b/ci/woodpecker/source.json index b97f172..a0c92eb 100644 --- a/ci/woodpecker/source.json +++ b/ci/woodpecker/source.json @@ -1,10 +1,10 @@ { "url": "https://github.com/woodpecker-ci/woodpecker", - "rev": "936f1512d02cbae2e7e628cac1dcd8035ad0767b", - "date": "2023-09-26T00:03:37+02:00", - "path": "/nix/store/nkyrjj3ps78vq51w9piad5a8kkp6nf74-woodpecker", - "sha256": "1gn89yz788spkhdi6y8pskxncq25fh070375kp4ddp560x0mxpp9", - "hash": "sha256-6d5eQQem3NbIneUMcAB0RWBm+9QXeRMbnFcjdL5PyL4=", + "rev": "64951d6a9ec82805f686cbfe2b0e978965a67d26", + "date": "2023-09-30T09:23:11+02:00", + "path": "/nix/store/dj6jm69ilb4qn86h0mk14a8jh1r0zphs-woodpecker", + "sha256": "0ngcjj0va64638215n0n2hjhf17f58gblm4asg4qhwb3xmw61vim", + "hash": "sha256-Ne5geO1jcYjJ04pUuh4q7gQHJRQW2BIEGoYYtYGU7Fk=", "fetchLFS": false, "fetchSubmodules": false, "deepClone": false, diff --git a/ci/woodpecker/yarn.lock b/ci/woodpecker/yarn.lock index 6267709..29c366e 100644 --- a/ci/woodpecker/yarn.lock +++ b/ci/woodpecker/yarn.lock @@ -325,9 +325,9 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.8.2" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.2.tgz#26585b7c0ba36362893d3a3c206ee0c57c389616" - integrity sha512-0MGxAVt1m/ZK+LTJp/j0qF7Hz97D9O/FH9Ms3ltnyIdDD57cbb1ACIQTkbHvNXtWDv5TPq7w5Kq56+cNukbo7g== + version "4.9.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.9.0.tgz#7ccb5f58703fa61ffdcbf39e2c604a109e781162" + integrity sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ== "@eslint/eslintrc@^2.1.2": version "2.1.2" @@ -369,9 +369,9 @@ integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@iconify/json@^2.2.85": - version "2.2.120" - resolved "https://registry.yarnpkg.com/@iconify/json/-/json-2.2.120.tgz#fb2d2bb1b4267236d781cd00d81afcca91fdb0b2" - integrity sha512-vxE3fNGgQEEu2nvMuR/g4Cu/CxPpQWjc3cwsk/KY3iTN4hLKL0lnBsi1GmQL1ITSsyib2f72h329j+D9S9esbg== + version "2.2.122" + resolved "https://registry.yarnpkg.com/@iconify/json/-/json-2.2.122.tgz#223771de251ad7e8808fc69eaf0cae84d41955c2" + integrity sha512-hVMVyLska1jAhoNSLdL/WVuMPCOYafwIpsNYoyboCHEZ2TNu6qoWbV4wVY1LU6R7anwWJ7kn1gXNklxqS7eb6g== dependencies: "@iconify/types" "*" pathe "^1.1.0" @@ -382,9 +382,9 @@ integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg== "@iconify/utils@^2.1.9": - version "2.1.10" - resolved "https://registry.yarnpkg.com/@iconify/utils/-/utils-2.1.10.tgz#b6a565c61a03cf6c131bef745150046e08d4bac3" - integrity sha512-0/+5hxjzCZ9RoYpqxnOzbnpQyMdZRuHcMxPJeuX+x/aZkAAD/N4TajDjAPT7LpX+M0bfLExj/p0bbDkUfp0lrg== + version "2.1.11" + resolved "https://registry.yarnpkg.com/@iconify/utils/-/utils-2.1.11.tgz#15cf9e15dfeb8e6dd79181dc3994dc1115d042e5" + integrity sha512-M/w3PkN8zQYXi8N6qK/KhnYMfEbbb6Sk8RZVn8g+Pmmu5ybw177RpsaGwpziyHeUsu4etrexYSWq3rwnIqzYCg== dependencies: "@antfu/install-pkg" "^0.1.1" "@antfu/utils" "^0.7.5" @@ -393,10 +393,10 @@ kolorist "^1.8.0" local-pkg "^0.4.3" -"@intlify/bundle-utils@^7.3.0": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-7.3.0.tgz#11048e8aeede313f7492cefcf412359bd31eed76" - integrity sha512-lcnfsLA5Dyd3TbvfoLS0ejLr1vAJYyT6VRYtE4LGNexy1ZD/GEcbXrC33fI9oQp7t2hDlHbCn2o4BBVgXaJFqg== +"@intlify/bundle-utils@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-7.4.0.tgz#b4dc41026d2d98d2e8a2bd83851c1883a48f1254" + integrity sha512-AQfjBe2HUxzyN8ignIk3WhhSuVcSuirgzOzkd17nb337rCbI4Gv/t1R60UUyIqFoFdviLb/wLcDUzTD/xXjv9w== dependencies: "@intlify/message-compiler" "^9.4.0" "@intlify/shared" "^9.4.0" @@ -409,33 +409,33 @@ source-map-js "^1.0.1" yaml-eslint-parser "^1.2.2" -"@intlify/core-base@9.4.1": - version "9.4.1" - resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.4.1.tgz#5ab9b624a34af2299a9b45aa331b6516c169b8b5" - integrity sha512-WIwx+elsZbxSMxRG5+LC+utRohFvmZMoDevfKOfnYMLbpCjCSavqTfHJAtfsY6ruowzqXeKkeLhRHbYbjoJx5g== +"@intlify/core-base@9.5.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.5.0.tgz#cbb17a27029ccfd0a83a837931baee08b887af60" + integrity sha512-y3ufM1RJbI/DSmJf3lYs9ACq3S/iRvaSsE3rPIk0MGH7fp+JxU6rdryv/EYcwfcr3Y1aHFlCBir6S391hRZ57w== dependencies: - "@intlify/message-compiler" "9.4.1" - "@intlify/shared" "9.4.1" + "@intlify/message-compiler" "9.5.0" + "@intlify/shared" "9.5.0" -"@intlify/message-compiler@9.4.1", "@intlify/message-compiler@^9.4.0": - version "9.4.1" - resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.4.1.tgz#aa00629a455e23cece3464293834a02994b4fb04" - integrity sha512-aN2N+dUx320108QhH51Ycd2LEpZ+NKbzyQ2kjjhqMcxhHdxtOnkgdx+MDBhOy/CObwBmhC3Nygzc6hNlfKvPNw== +"@intlify/message-compiler@9.5.0", "@intlify/message-compiler@^9.4.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.5.0.tgz#1b4916bf11ca7024f9c15be0d6b4de7be5317808" + integrity sha512-CAhVNfEZcOVFg0/5MNyt+OFjvs4J/ARjCj2b+54/FvFP0EDJI5lIqMTSDBE7k0atMROSP0SvWCkwu/AZ5xkK1g== dependencies: - "@intlify/shared" "9.4.1" + "@intlify/shared" "9.5.0" source-map-js "^1.0.2" -"@intlify/shared@9.4.1", "@intlify/shared@^9.4.0": - version "9.4.1" - resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.4.1.tgz#bd0d221aaac476b6778a10ddcd0472f812c64e27" - integrity sha512-A51elBmZWf1FS80inf/32diO9DeXoqg9GR9aUDHFcfHoNDuT46Q+fpPOdj8jiJnSHSBh8E1E+6qWRhAZXdK3Ng== +"@intlify/shared@9.5.0", "@intlify/shared@^9.4.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.5.0.tgz#185d9ab9f6b4bb4f4d133cfdd51432e9b94c2c44" + integrity sha512-tAxV14LMXZDZbu32XzLMTsowNlgJNmLwWHYzvMUl6L8gvQeoYiZONjY7AUsqZW8TOZDX9lfvF6adPkk9FSRdDA== "@intlify/unplugin-vue-i18n@^1.0.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-1.2.0.tgz#ca4ac742140f1eaf4668c9530db5db23069eb604" - integrity sha512-AzjlMZKj9DG10ICDR2VWjfJudHJ1XK2GNSHxw+VmOUYpUm4S0L/a7OAdvgnuY7S4plk1VnPdT4YilpZk+uQcqg== + version "1.4.0" + resolved "https://registry.yarnpkg.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-1.4.0.tgz#581ac40567240209ed0851e27bfc7c9487cf55ec" + integrity sha512-RGDchCRBlDTyVVFgPA1C1XC1uD4xYN81Ma+3EnU6GQ8pBEreraX/PWdPXXzOB6k9GWCQHuqii3atYXhcH3rpSg== dependencies: - "@intlify/bundle-utils" "^7.3.0" + "@intlify/bundle-utils" "^7.4.0" "@intlify/shared" "^9.4.0" "@rollup/pluginutils" "^5.0.2" "@vue/compiler-sfc" "^3.2.47" @@ -573,9 +573,9 @@ integrity sha512-PfF1qL/9veo8BSHLV84C9ORNr3lHSlnWJ6yU8OdNufoftajeWHTLVbGHvp2B7e7DPDS9gMs6cfeSsqo5rqSitg== "@types/node@^18.16.19": - version "18.18.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.0.tgz#bd19d5133a6e5e2d0152ec079ac27c120e7f1763" - integrity sha512-3xA4X31gHT1F1l38ATDIL9GpRLdwVhnEFC8Uikv5ZLlXATwrCYyPq7ZWHxzxc3J/30SUiwiYT+bQe0/XvKlWbw== + version "18.18.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.1.tgz#80b22f3df719f15c9736207980e95f35d01ec1aa" + integrity sha512-3G42sxmm0fF2+Vtb9TJQpnjmP+uKlWvFa8KoEGquh4gqRmoUG/N0ufuhikw6HEsdG2G2oIKhog1GCTfz9v5NdQ== "@types/prismjs@^1.26.0": version "1.26.1" @@ -1063,12 +1063,12 @@ braces@^3.0.2, braces@~3.0.2: fill-range "^7.0.1" browserslist@^4.21.9: - version "4.21.11" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.11.tgz#35f74a3e51adc4d193dcd76ea13858de7b8fecb8" - integrity sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ== + version "4.22.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" + integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== dependencies: - caniuse-lite "^1.0.30001538" - electron-to-chromium "^1.4.526" + caniuse-lite "^1.0.30001541" + electron-to-chromium "^1.4.535" node-releases "^2.0.13" update-browserslist-db "^1.0.13" @@ -1092,10 +1092,10 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -caniuse-lite@^1.0.30001538: - version "1.0.30001539" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001539.tgz#325a387ab1ed236df2c12dc6cd43a4fff9903a44" - integrity sha512-hfS5tE8bnNiNvEOEkm8HElUHroYwlqMMENEzELymy77+tJ6m+gA2krtHl5hxJaj71OlpC2cHZbdSMX1/YEqEkA== +caniuse-lite@^1.0.30001541: + version "1.0.30001541" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001541.tgz#b1aef0fadd87fb72db4dcb55d220eae17b81cdb1" + integrity sha512-bLOsqxDgTqUBkzxbNlSBt8annkDpQB9NdzdTbO2ooJ+eC/IQcvDspDc058g84ejCelF7vHUx57KIOjEecOHXaw== chalk@^2.4.2: version "2.4.2" @@ -1371,10 +1371,10 @@ domutils@^3.0.1: domelementtype "^2.3.0" domhandler "^5.0.3" -electron-to-chromium@^1.4.526: - version "1.4.529" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.529.tgz#8c3377a05e5737f899770d14524dd8e2e4cb2351" - integrity sha512-6uyPyXTo8lkv8SWAmjKFbG42U073TXlzD4R8rW3EzuznhFS2olCIAfjjQtV2dV2ar/vRF55KUd3zQYnCB0dd3A== +electron-to-chromium@^1.4.535: + version "1.4.537" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.537.tgz#aac4101db53066be1e49baedd000a26bc754adc9" + integrity sha512-W1+g9qs9hviII0HAwOdehGYkr+zt7KKdmCcJcjH0mYg6oL8+ioT3Skjmt7BLoAQqXhjf40AXd+HlR4oAWMlXjA== emojilib@^2.4.0: version "2.4.0" @@ -2379,9 +2379,9 @@ lru-cache@^6.0.0: yallist "^4.0.0" magic-string@^0.30.0, magic-string@^0.30.1: - version "0.30.3" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.3.tgz#403755dfd9d6b398dfa40635d52e96c5ac095b85" - integrity sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw== + version "0.30.4" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.4.tgz#c2c683265fc18dda49b56fc7318d33ca0332c98c" + integrity sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg== dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" @@ -2707,9 +2707,9 @@ postcss-safe-parser@^6.0.0: integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== postcss-scss@^4.0.3: - version "4.0.8" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.8.tgz#12a4991a902a782d4e9b86b1f217d5181c6c4f32" - integrity sha512-Cr0X8Eu7xMhE96PJck6ses/uVVXDtE5ghUTKNUYgm8ozgP2TkgV3LWs3WgLV1xaSSLq8ZFiXaUrj0LVgG1fGEA== + version "4.0.9" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.9.tgz#a03c773cd4c9623cb04ce142a52afcec74806685" + integrity sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A== postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.9: version "6.0.13" @@ -2731,9 +2731,9 @@ postcss-styl@^0.12.0: stylus "^0.57.0" "postcss@^7.0.27 || ^8.0.0", postcss@^8.1.10, postcss@^8.4.27, postcss@^8.4.6: - version "8.4.30" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.30.tgz#0e0648d551a606ef2192a26da4cabafcc09c1aa7" - integrity sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g== + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" @@ -2819,9 +2819,9 @@ rimraf@^3.0.2: glob "^7.1.3" rollup@^3.27.1: - version "3.29.3" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.3.tgz#97769774ccaa6a3059083d4680fcabd8ead01289" - integrity sha512-T7du6Hum8jOkSWetjRgbwpM6Sy0nECYrYRSmZjayFcOddtKJWU4d17AC3HNUk7HRuqy4p+G7aEZclSHytqUmEg== + version "3.29.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" + integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== optionalDependencies: fsevents "~2.3.2" @@ -3159,9 +3159,9 @@ typescript@5.2.2: integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== ufo@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.0.tgz#c92f8ac209daff607c57bbd75029e190930a0019" - integrity sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw== + version "1.3.1" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.1.tgz#e085842f4627c41d4c1b60ebea1f75cdab4ce86b" + integrity sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw== unbox-primitive@^1.0.2: version "1.0.2" @@ -3298,12 +3298,12 @@ vue-eslint-parser@^9.3.1: semver "^7.3.6" vue-i18n@^9.2.2: - version "9.4.1" - resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.4.1.tgz#c7402662fe9b40b17798afffa9d8bfa4734dd7f5" - integrity sha512-vnQyYE9LBuNOqPpETIcCaGnAyLEqfeIvDcyZ9T+WBCWFTqWw1J8FuF1jfeDwpHBi5JKgAwgXyq1mt8jp/x/GPA== + version "9.5.0" + resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.5.0.tgz#361a820f591f6d9689435a42763fd1dae224833b" + integrity sha512-NiI3Ph1qMstNf7uhYh8trQBOBFLxeJgcOxBq51pCcZ28Vs18Y7BDS58r8HGDKCYgXdLUYqPDXdKatIF4bvBVZg== dependencies: - "@intlify/core-base" "9.4.1" - "@intlify/shared" "9.4.1" + "@intlify/core-base" "9.5.0" + "@intlify/shared" "9.5.0" "@vue/devtools-api" "^6.5.0" vue-router@^4.2.2: diff --git a/ci/woodpecker/yarn.nix b/ci/woodpecker/yarn.nix index 617721b..157e634 100644 --- a/ci/woodpecker/yarn.nix +++ b/ci/woodpecker/yarn.nix @@ -392,11 +392,11 @@ }; } { - name = "_eslint_community_regexpp___regexpp_4.8.2.tgz"; + name = "_eslint_community_regexpp___regexpp_4.9.0.tgz"; path = fetchurl { - name = "_eslint_community_regexpp___regexpp_4.8.2.tgz"; - url = "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.2.tgz"; - sha512 = "0MGxAVt1m/ZK+LTJp/j0qF7Hz97D9O/FH9Ms3ltnyIdDD57cbb1ACIQTkbHvNXtWDv5TPq7w5Kq56+cNukbo7g=="; + name = "_eslint_community_regexpp___regexpp_4.9.0.tgz"; + url = "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.9.0.tgz"; + sha512 = "zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ=="; }; } { @@ -440,11 +440,11 @@ }; } { - name = "_iconify_json___json_2.2.120.tgz"; + name = "_iconify_json___json_2.2.122.tgz"; path = fetchurl { - name = "_iconify_json___json_2.2.120.tgz"; - url = "https://registry.yarnpkg.com/@iconify/json/-/json-2.2.120.tgz"; - sha512 = "vxE3fNGgQEEu2nvMuR/g4Cu/CxPpQWjc3cwsk/KY3iTN4hLKL0lnBsi1GmQL1ITSsyib2f72h329j+D9S9esbg=="; + name = "_iconify_json___json_2.2.122.tgz"; + url = "https://registry.yarnpkg.com/@iconify/json/-/json-2.2.122.tgz"; + sha512 = "hVMVyLska1jAhoNSLdL/WVuMPCOYafwIpsNYoyboCHEZ2TNu6qoWbV4wVY1LU6R7anwWJ7kn1gXNklxqS7eb6g=="; }; } { @@ -456,51 +456,51 @@ }; } { - name = "_iconify_utils___utils_2.1.10.tgz"; + name = "_iconify_utils___utils_2.1.11.tgz"; path = fetchurl { - name = "_iconify_utils___utils_2.1.10.tgz"; - url = "https://registry.yarnpkg.com/@iconify/utils/-/utils-2.1.10.tgz"; - sha512 = "0/+5hxjzCZ9RoYpqxnOzbnpQyMdZRuHcMxPJeuX+x/aZkAAD/N4TajDjAPT7LpX+M0bfLExj/p0bbDkUfp0lrg=="; + name = "_iconify_utils___utils_2.1.11.tgz"; + url = "https://registry.yarnpkg.com/@iconify/utils/-/utils-2.1.11.tgz"; + sha512 = "M/w3PkN8zQYXi8N6qK/KhnYMfEbbb6Sk8RZVn8g+Pmmu5ybw177RpsaGwpziyHeUsu4etrexYSWq3rwnIqzYCg=="; }; } { - name = "_intlify_bundle_utils___bundle_utils_7.3.0.tgz"; + name = "_intlify_bundle_utils___bundle_utils_7.4.0.tgz"; path = fetchurl { - name = "_intlify_bundle_utils___bundle_utils_7.3.0.tgz"; - url = "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-7.3.0.tgz"; - sha512 = "lcnfsLA5Dyd3TbvfoLS0ejLr1vAJYyT6VRYtE4LGNexy1ZD/GEcbXrC33fI9oQp7t2hDlHbCn2o4BBVgXaJFqg=="; + name = "_intlify_bundle_utils___bundle_utils_7.4.0.tgz"; + url = "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-7.4.0.tgz"; + sha512 = "AQfjBe2HUxzyN8ignIk3WhhSuVcSuirgzOzkd17nb337rCbI4Gv/t1R60UUyIqFoFdviLb/wLcDUzTD/xXjv9w=="; }; } { - name = "_intlify_core_base___core_base_9.4.1.tgz"; + name = "_intlify_core_base___core_base_9.5.0.tgz"; path = fetchurl { - name = "_intlify_core_base___core_base_9.4.1.tgz"; - url = "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.4.1.tgz"; - sha512 = "WIwx+elsZbxSMxRG5+LC+utRohFvmZMoDevfKOfnYMLbpCjCSavqTfHJAtfsY6ruowzqXeKkeLhRHbYbjoJx5g=="; + name = "_intlify_core_base___core_base_9.5.0.tgz"; + url = "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.5.0.tgz"; + sha512 = "y3ufM1RJbI/DSmJf3lYs9ACq3S/iRvaSsE3rPIk0MGH7fp+JxU6rdryv/EYcwfcr3Y1aHFlCBir6S391hRZ57w=="; }; } { - name = "_intlify_message_compiler___message_compiler_9.4.1.tgz"; + name = "_intlify_message_compiler___message_compiler_9.5.0.tgz"; path = fetchurl { - name = "_intlify_message_compiler___message_compiler_9.4.1.tgz"; - url = "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.4.1.tgz"; - sha512 = "aN2N+dUx320108QhH51Ycd2LEpZ+NKbzyQ2kjjhqMcxhHdxtOnkgdx+MDBhOy/CObwBmhC3Nygzc6hNlfKvPNw=="; + name = "_intlify_message_compiler___message_compiler_9.5.0.tgz"; + url = "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.5.0.tgz"; + sha512 = "CAhVNfEZcOVFg0/5MNyt+OFjvs4J/ARjCj2b+54/FvFP0EDJI5lIqMTSDBE7k0atMROSP0SvWCkwu/AZ5xkK1g=="; }; } { - name = "_intlify_shared___shared_9.4.1.tgz"; + name = "_intlify_shared___shared_9.5.0.tgz"; path = fetchurl { - name = "_intlify_shared___shared_9.4.1.tgz"; - url = "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.4.1.tgz"; - sha512 = "A51elBmZWf1FS80inf/32diO9DeXoqg9GR9aUDHFcfHoNDuT46Q+fpPOdj8jiJnSHSBh8E1E+6qWRhAZXdK3Ng=="; + name = "_intlify_shared___shared_9.5.0.tgz"; + url = "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.5.0.tgz"; + sha512 = "tAxV14LMXZDZbu32XzLMTsowNlgJNmLwWHYzvMUl6L8gvQeoYiZONjY7AUsqZW8TOZDX9lfvF6adPkk9FSRdDA=="; }; } { - name = "_intlify_unplugin_vue_i18n___unplugin_vue_i18n_1.2.0.tgz"; + name = "_intlify_unplugin_vue_i18n___unplugin_vue_i18n_1.4.0.tgz"; path = fetchurl { - name = "_intlify_unplugin_vue_i18n___unplugin_vue_i18n_1.2.0.tgz"; - url = "https://registry.yarnpkg.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-1.2.0.tgz"; - sha512 = "AzjlMZKj9DG10ICDR2VWjfJudHJ1XK2GNSHxw+VmOUYpUm4S0L/a7OAdvgnuY7S4plk1VnPdT4YilpZk+uQcqg=="; + name = "_intlify_unplugin_vue_i18n___unplugin_vue_i18n_1.4.0.tgz"; + url = "https://registry.yarnpkg.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-1.4.0.tgz"; + sha512 = "RGDchCRBlDTyVVFgPA1C1XC1uD4xYN81Ma+3EnU6GQ8pBEreraX/PWdPXXzOB6k9GWCQHuqii3atYXhcH3rpSg=="; }; } { @@ -664,11 +664,11 @@ }; } { - name = "_types_node___node_18.18.0.tgz"; + name = "_types_node___node_18.18.1.tgz"; path = fetchurl { - name = "_types_node___node_18.18.0.tgz"; - url = "https://registry.yarnpkg.com/@types/node/-/node-18.18.0.tgz"; - sha512 = "3xA4X31gHT1F1l38ATDIL9GpRLdwVhnEFC8Uikv5ZLlXATwrCYyPq7ZWHxzxc3J/30SUiwiYT+bQe0/XvKlWbw=="; + name = "_types_node___node_18.18.1.tgz"; + url = "https://registry.yarnpkg.com/@types/node/-/node-18.18.1.tgz"; + sha512 = "3G42sxmm0fF2+Vtb9TJQpnjmP+uKlWvFa8KoEGquh4gqRmoUG/N0ufuhikw6HEsdG2G2oIKhog1GCTfz9v5NdQ=="; }; } { @@ -1160,11 +1160,11 @@ }; } { - name = "browserslist___browserslist_4.21.11.tgz"; + name = "browserslist___browserslist_4.22.1.tgz"; path = fetchurl { - name = "browserslist___browserslist_4.21.11.tgz"; - url = "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.11.tgz"; - sha512 = "xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ=="; + name = "browserslist___browserslist_4.22.1.tgz"; + url = "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz"; + sha512 = "FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ=="; }; } { @@ -1192,11 +1192,11 @@ }; } { - name = "caniuse_lite___caniuse_lite_1.0.30001539.tgz"; + name = "caniuse_lite___caniuse_lite_1.0.30001541.tgz"; path = fetchurl { - name = "caniuse_lite___caniuse_lite_1.0.30001539.tgz"; - url = "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001539.tgz"; - sha512 = "hfS5tE8bnNiNvEOEkm8HElUHroYwlqMMENEzELymy77+tJ6m+gA2krtHl5hxJaj71OlpC2cHZbdSMX1/YEqEkA=="; + name = "caniuse_lite___caniuse_lite_1.0.30001541.tgz"; + url = "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001541.tgz"; + sha512 = "bLOsqxDgTqUBkzxbNlSBt8annkDpQB9NdzdTbO2ooJ+eC/IQcvDspDc058g84ejCelF7vHUx57KIOjEecOHXaw=="; }; } { @@ -1512,11 +1512,11 @@ }; } { - name = "electron_to_chromium___electron_to_chromium_1.4.529.tgz"; + name = "electron_to_chromium___electron_to_chromium_1.4.537.tgz"; path = fetchurl { - name = "electron_to_chromium___electron_to_chromium_1.4.529.tgz"; - url = "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.529.tgz"; - sha512 = "6uyPyXTo8lkv8SWAmjKFbG42U073TXlzD4R8rW3EzuznhFS2olCIAfjjQtV2dV2ar/vRF55KUd3zQYnCB0dd3A=="; + name = "electron_to_chromium___electron_to_chromium_1.4.537.tgz"; + url = "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.537.tgz"; + sha512 = "W1+g9qs9hviII0HAwOdehGYkr+zt7KKdmCcJcjH0mYg6oL8+ioT3Skjmt7BLoAQqXhjf40AXd+HlR4oAWMlXjA=="; }; } { @@ -2592,11 +2592,11 @@ }; } { - name = "magic_string___magic_string_0.30.3.tgz"; + name = "magic_string___magic_string_0.30.4.tgz"; path = fetchurl { - name = "magic_string___magic_string_0.30.3.tgz"; - url = "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.3.tgz"; - sha512 = "B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw=="; + name = "magic_string___magic_string_0.30.4.tgz"; + url = "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.4.tgz"; + sha512 = "Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg=="; }; } { @@ -2992,11 +2992,11 @@ }; } { - name = "postcss_scss___postcss_scss_4.0.8.tgz"; + name = "postcss_scss___postcss_scss_4.0.9.tgz"; path = fetchurl { - name = "postcss_scss___postcss_scss_4.0.8.tgz"; - url = "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.8.tgz"; - sha512 = "Cr0X8Eu7xMhE96PJck6ses/uVVXDtE5ghUTKNUYgm8ozgP2TkgV3LWs3WgLV1xaSSLq8ZFiXaUrj0LVgG1fGEA=="; + name = "postcss_scss___postcss_scss_4.0.9.tgz"; + url = "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.9.tgz"; + sha512 = "AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A=="; }; } { @@ -3016,11 +3016,11 @@ }; } { - name = "postcss___postcss_8.4.30.tgz"; + name = "postcss___postcss_8.4.31.tgz"; path = fetchurl { - name = "postcss___postcss_8.4.30.tgz"; - url = "https://registry.yarnpkg.com/postcss/-/postcss-8.4.30.tgz"; - sha512 = "7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g=="; + name = "postcss___postcss_8.4.31.tgz"; + url = "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz"; + sha512 = "PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="; }; } { @@ -3128,11 +3128,11 @@ }; } { - name = "rollup___rollup_3.29.3.tgz"; + name = "rollup___rollup_3.29.4.tgz"; path = fetchurl { - name = "rollup___rollup_3.29.3.tgz"; - url = "https://registry.yarnpkg.com/rollup/-/rollup-3.29.3.tgz"; - sha512 = "T7du6Hum8jOkSWetjRgbwpM6Sy0nECYrYRSmZjayFcOddtKJWU4d17AC3HNUk7HRuqy4p+G7aEZclSHytqUmEg=="; + name = "rollup___rollup_3.29.4.tgz"; + url = "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz"; + sha512 = "oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw=="; }; } { @@ -3520,11 +3520,11 @@ }; } { - name = "ufo___ufo_1.3.0.tgz"; + name = "ufo___ufo_1.3.1.tgz"; path = fetchurl { - name = "ufo___ufo_1.3.0.tgz"; - url = "https://registry.yarnpkg.com/ufo/-/ufo-1.3.0.tgz"; - sha512 = "bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw=="; + name = "ufo___ufo_1.3.1.tgz"; + url = "https://registry.yarnpkg.com/ufo/-/ufo-1.3.1.tgz"; + sha512 = "uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw=="; }; } { @@ -3648,11 +3648,11 @@ }; } { - name = "vue_i18n___vue_i18n_9.4.1.tgz"; + name = "vue_i18n___vue_i18n_9.5.0.tgz"; path = fetchurl { - name = "vue_i18n___vue_i18n_9.4.1.tgz"; - url = "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.4.1.tgz"; - sha512 = "vnQyYE9LBuNOqPpETIcCaGnAyLEqfeIvDcyZ9T+WBCWFTqWw1J8FuF1jfeDwpHBi5JKgAwgXyq1mt8jp/x/GPA=="; + name = "vue_i18n___vue_i18n_9.5.0.tgz"; + url = "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.5.0.tgz"; + sha512 = "NiI3Ph1qMstNf7uhYh8trQBOBFLxeJgcOxBq51pCcZ28Vs18Y7BDS58r8HGDKCYgXdLUYqPDXdKatIF4bvBVZg=="; }; } { diff --git a/default.nix b/default.nix index fc89ccd..54e0730 100644 --- a/default.nix +++ b/default.nix @@ -75,6 +75,7 @@ in kubo plover-plugin-python-dictionary plover-plugin-stenotype-extended + plover-plugin-dotool-output asar-asm bsnes-plus sliding-sync diff --git a/flake.lock b/flake.lock index 2813c74..c99872f 100644 --- a/flake.lock +++ b/flake.lock @@ -171,11 +171,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1695727879, - "narHash": "sha256-xrB6RTMuO49Y5Xjr++3PAM3JFUToQwj2SK7K8PSyuok=", + "lastModified": 1696059936, + "narHash": "sha256-qKkEZMnX9QRfEnlg5T9+t0ovKtO0u9cKM+ljvuHMQus=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a30e43fd3290aabe57db78b097af386a07e88546", + "rev": "bf25d8782bc6b488e06636d22dcf2dda6b1d5e3e", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index ebfb740..d984c8a 100644 --- a/flake.nix +++ b/flake.nix @@ -96,6 +96,7 @@ plover-plugin-yaml-dictionary plover-plugin-machine-hid plover-plugin-rkb1-hid + plover-plugin-dotool-output plover-dict-didoesdigital miifox-net old-homepage diff --git a/matrix/matrix-media-repo/source.json b/matrix/matrix-media-repo/source.json index 729b2bd..ee1e15b 100644 --- a/matrix/matrix-media-repo/source.json +++ b/matrix/matrix-media-repo/source.json @@ -1,10 +1,10 @@ { "url": "https://github.com/turt2live/matrix-media-repo", - "rev": "fb52f294f75d8ad64053d1b5ae6ce6d74a8e6ab2", - "date": "2023-09-15T13:31:22-06:00", - "path": "/nix/store/cxbn7g9zrxc460gf554vwk8gfmbny1hg-matrix-media-repo", - "sha256": "0n046cq1drgzbjh57qcgv144jylskvchqs2gkvngykvb88pcj7c8", - "hash": "sha256-iB3JLkJrT//snk9oDNmemnpJSNiP4VOgXP/lFjAzBFg=", + "rev": "07183614a9e4f69af62420a4ee7ca9785f1fae67", + "date": "2023-09-29T16:22:39+00:00", + "path": "/nix/store/56phspagz29yw81sng6nk3v1m8vb60jq-matrix-media-repo", + "sha256": "051jzmkkli2mkw353p3jsajibizsmhynq09isbradmy1kx8l52dr", + "hash": "sha256-uYlCUZ/B16by0jEBbD2s+scVpdJy3FEGn1VEOmf9MhQ=", "fetchLFS": false, "fetchSubmodules": false, "deepClone": false, diff --git a/matrix/mautrix-whatsapp/source.json b/matrix/mautrix-whatsapp/source.json index fb0943e..505600c 100644 --- a/matrix/mautrix-whatsapp/source.json +++ b/matrix/mautrix-whatsapp/source.json @@ -1,10 +1,10 @@ { "url": "https://github.com/mautrix/whatsapp", - "rev": "77e30e85dd9bc9134ceb4d99fbc2c64bc9823769", - "date": "2023-09-19T12:04:27-04:00", - "path": "/nix/store/py1a4mkfscd4nibx7yhjz9ar66v5kr8i-whatsapp", - "sha256": "1mra0rcn9xg5icvmix2vb4vsd0ljmxqnpq9w2ya9d2m2yf5mqsqr", - "hash": "sha256-GWtci/OiipaUFzzha3GvkoKmN1lb9Fg3i+X1ZFkGKtc=", + "rev": "d2110f6ee715fc316e945533f7ee494177c6e90d", + "date": "2023-09-29T14:27:38+03:00", + "path": "/nix/store/jl98ir2kj33q57j7sxla0ygpsbs95pvj-whatsapp", + "sha256": "17yznvj14pylysd5k5glanv7vsrahmnmvv4rb65jmcx6m1z2ywrk", + "hash": "sha256-M3MvfqimsyqLWZnsXW2FKut9tlX0lVma9tRfEuS2358=", "fetchLFS": false, "fetchSubmodules": false, "deepClone": false, diff --git a/matrix/sliding-sync/source.json b/matrix/sliding-sync/source.json index 0cfaf1e..27e9304 100644 --- a/matrix/sliding-sync/source.json +++ b/matrix/sliding-sync/source.json @@ -1,10 +1,10 @@ { "url": "https://github.com/matrix-org/sliding-sync", - "rev": "6fe9b18f8c357ad4c92fdb5cdf234b21c8b93937", - "date": "2023-09-21T17:30:51+01:00", - "path": "/nix/store/rrq1ajanr2rvyai074kilwfr14ilf3w6-sliding-sync", - "sha256": "13qmgl50c3hq69pyk847qcdrbyzmwy27czxwyks6m0k8r0dxzw9w", - "hash": "sha256-PPHfG8hogmr09Lx/doTn9fuVG8OHoOlvMhgOBgp9FY8=", + "rev": "0d110275a440945706f11e9e580e2e157fe65a2b", + "date": "2023-09-28T12:50:08+01:00", + "path": "/nix/store/8954irnip3fs5lp1g9gdbk4pr841h83n-sliding-sync", + "sha256": "0m866l3wjmbgdgbnwsv3129fm5gsjiw9bjz0dj0p6d961an6vii1", + "hash": "sha256-IcZtrAomNXOBbODLlXiU+pXqkghja27Xa29VyQc1BlU=", "fetchLFS": false, "fetchSubmodules": false, "deepClone": false, diff --git a/overlay.nix b/overlay.nix index 7cb415a..000e4b9 100644 --- a/overlay.nix +++ b/overlay.nix @@ -98,6 +98,7 @@ system: self: super: let plover-plugin-stenotype-extended = self.python3Packages.callPackage ./plover/plover-stenotype-extended.nix {}; plover-plugin-machine-hid = self.python3Packages.callPackage ./plover/plover-machine-hid.nix {}; plover-plugin-rkb1-hid = self.python3Packages.callPackage ./plover/plover-rkb1-hid.nix {}; + plover-plugin-dotool-output = self.python3Packages.callPackage ./plover/plover-dotool-output.nix {}; plover-dict-didoesdigital = self.callPackage ./plover/didoesdigital-dictionary.nix {}; miifox-net = self.python3Packages.callPackage ./web/miifox-net.nix {}; old-homepage = self.callPackage ./web/old-homepage.nix {}; diff --git a/plover/plover-dotool-output.json b/plover/plover-dotool-output.json new file mode 100644 index 0000000..c9c6d2c --- /dev/null +++ b/plover/plover-dotool-output.json @@ -0,0 +1,12 @@ +{ + "url": "https://github.com/darkkirb/plover-dotool-output", + "rev": "cb617b9271968b95011af5697dafd216153798e5", + "date": "2023-09-30T13:31:02+01:00", + "path": "/nix/store/760a20pxkc0rj30cdc1mc9blvkk1b1g5-plover-dotool-output", + "sha256": "0az524h9cz6x8qzxx8ybwsaf580zqibdnn6hib863fk9z9kr8nck", + "hash": "sha256-k1mUZ/ppumHQitBY21bEH6DilObLo94/Rt18liAR5Ss=", + "fetchLFS": false, + "fetchSubmodules": false, + "deepClone": false, + "leaveDotGit": false +} diff --git a/plover/plover-dotool-output.nix b/plover/plover-dotool-output.nix new file mode 100644 index 0000000..6426347 --- /dev/null +++ b/plover/plover-dotool-output.nix @@ -0,0 +1,30 @@ +{ + callPackage, + buildPythonPackage, + fetchFromGitHub, + lib, + pythonOlder, +}: let + plover = callPackage ./plover {}; + source = builtins.fromJSON (builtins.readFile ./plover-dotool-output.json); +in + buildPythonPackage rec { + pname = "plover_dotool_output"; + version = source.date; + src = fetchFromGitHub { + owner = "darkkirb"; + repo = "plover-dotool-output"; + inherit (source) rev sha256; + }; + + doCheck = false; + + disabled = pythonOlder "3.6"; + propagatedBuildInputs = [plover]; + + meta = with lib; { + description = "Plover output plugin for dotool"; + license = licenses.mit; + }; + passthru.updateScript = [../scripts/update-git.sh "https://github.com/darkkirb/plover-dotool-output" "plover/plover-dotool-output.json"]; + } diff --git a/plover/plover/default.nix b/plover/plover/default.nix index 46afd38..0038d01 100644 --- a/plover/plover/default.nix +++ b/plover/plover/default.nix @@ -12,10 +12,9 @@ appdirs, wcwidth, setuptools, - pywayland, xkbcommon, - wayland, pkg-config, + fetchFromGitHub }: let source = builtins.fromJSON (builtins.readFile ./source.json); plover-stroke = callPackage ../plover-stroke.nix {}; @@ -24,21 +23,21 @@ in qt5.mkDerivationWith buildPythonPackage rec { pname = "plover"; version = source.date; - src = callPackage ./source.nix {}; + src = fetchFromGitHub { + owner = "openstenoproject"; + repo = "plover"; + inherit (source) rev sha256; + }; # I'm not sure why we don't find PyQt5 here but there's a similar # sed on many of the platforms Plover builds for postPatch = '' sed -i /PyQt5/d setup.cfg - sed -i 's/pywayland==0.4.11/pywayland>=0.4.11/' reqs/constraints.txt - substituteInPlace plover_build_utils/setup.py \ - --replace "/usr/share/wayland/wayland.xml" "${wayland}/share/wayland/wayland.xml" ''; checkInputs = [pytest mock]; - propagatedBuildInputs = [babel pyqt5 xlib pyserial appdirs wcwidth setuptools plover-stroke rtf-tokenize pywayland xkbcommon]; + propagatedBuildInputs = [babel pyqt5 xlib pyserial appdirs wcwidth setuptools plover-stroke rtf-tokenize xkbcommon]; nativeBuildInputs = [ - wayland pkg-config ]; @@ -52,7 +51,7 @@ in meta = { homepage = "http://www.openstenoproject.org/"; - description = "Open Source Stenography Software, patched with wayland support"; + description = "Open Source Stenography Software"; license = lib.licenses.gpl2Plus; }; passthru.updateScript = [ diff --git a/plover/plover/source.json b/plover/plover/source.json index 8065fff..5b8d37a 100644 --- a/plover/plover/source.json +++ b/plover/plover/source.json @@ -1,10 +1,10 @@ { "url": "https://github.com/openstenoproject/plover", - "rev": "0d75d422fade767e4f98aa2fa672f83383f726d0", - "date": "2023-09-26T01:48:02-07:00", - "path": "/nix/store/42f84pkbqp5b4g7lnyg27mh87p2ff5vv-plover", - "sha256": "0cv9d3yzmg1brcbi8k7v2di3i5x0q3aghxaxsqjjbryw4khlyv7h", - "hash": "sha256-8GxP4STc5yUl1l11+NTAoJc4YhP7TBQXyyu8+v1oaTM=", + "rev": "ef931650eb91afa13298c57fe926675968171cee", + "date": "2023-09-28T11:37:13-07:00", + "path": "/nix/store/gs1cz54ag8xnv9qpv35w1c1y3jzrakkh-plover", + "sha256": "0gias8qbbrxhabyg41vi6b7iwrmzrafrl4zgv9yy5g2vy1riwqxf", + "hash": "sha256-rmMec/BbvOJ92u8Tmp3Kv2YezzJxB/L8UrDntTDSKj4=", "fetchLFS": false, "fetchSubmodules": false, "deepClone": false, diff --git a/plover/plover/source.nix b/plover/plover/source.nix deleted file mode 100644 index 7d13a3d..0000000 --- a/plover/plover/source.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - fetchFromGitHub, - applyPatches, -}: let - source = builtins.fromJSON (builtins.readFile ./source.json); -in - applyPatches { - patches = [./wayland.patch]; - src = fetchFromGitHub { - owner = "openstenoproject"; - repo = "plover"; - inherit (source) rev sha256; - }; - } diff --git a/plover/plover/wayland.patch b/plover/plover/wayland.patch deleted file mode 100644 index 6426b74..0000000 --- a/plover/plover/wayland.patch +++ /dev/null @@ -1,1461 +0,0 @@ -diff --git a/MANIFEST.in b/MANIFEST.in -index e2095bb7..87539b99 100644 ---- a/MANIFEST.in -+++ b/MANIFEST.in -@@ -20,6 +20,7 @@ include plover/gui_qt/resources/*.qrc - include plover/gui_qt/resources/*.svg - include plover/messages/*/LC_MESSAGES/*.po - include plover/messages/plover.pot -+include plover/oslayer/wayland/*.xml - include plover_build_utils/*.sh - include pyproject.toml - include pytest.ini -@@ -34,4 +35,7 @@ exclude .gitignore - exclude plover/gui_qt/*_rc.py - exclude plover/gui_qt/*_ui.py - exclude plover/gui_qt/.gitignore -+exclude plover/oslayer/wayland/.gitignore -+prune plover/oslayer/wayland/input_method_unstable_v2 -+prune plover/oslayer/wayland/virtual_keyboard_unstable_v1 - prune .github -diff --git a/news.d/feature/1461.linux.md b/news.d/feature/1461.linux.md -new file mode 100644 -index 00000000..9c04de6b ---- /dev/null -+++ b/news.d/feature/1461.linux.md -@@ -0,0 +1 @@ -+Add support for wlroots-based Wayland compositors like Sway, and other compositors that implement the `virtual_keyboard_unstable_v1` and `input_method_unstable_v2` protocols. -diff --git a/plover/oslayer/linux/keyboardcontrol.py b/plover/oslayer/linux/keyboardcontrol.py -index bb135614..ee7abd91 100644 ---- a/plover/oslayer/linux/keyboardcontrol.py -+++ b/plover/oslayer/linux/keyboardcontrol.py -@@ -1 +1,6 @@ --from .keyboardcontrol_x11 import KeyboardCapture, KeyboardEmulation # pylint: disable=unused-import -+import os -+ -+if os.environ.get('WAYLAND_DISPLAY', None): -+ from plover.oslayer.wayland.keyboardcontrol import KeyboardCapture, KeyboardEmulation # pylint: disable=unused-import -+else: -+ from .keyboardcontrol_x11 import KeyboardCapture, KeyboardEmulation # pylint: disable=unused-import -diff --git a/plover/oslayer/wayland/.gitignore b/plover/oslayer/wayland/.gitignore -new file mode 100644 -index 00000000..3a543112 ---- /dev/null -+++ b/plover/oslayer/wayland/.gitignore -@@ -0,0 +1,2 @@ -+input_method_unstable_v2 -+virtual_keyboard_unstable_v1 -diff --git a/plover/oslayer/wayland/__init__.py b/plover/oslayer/wayland/__init__.py -new file mode 100644 -index 00000000..e69de29b -diff --git a/plover/oslayer/wayland/input-method-unstable-v2.xml b/plover/oslayer/wayland/input-method-unstable-v2.xml -new file mode 100644 -index 00000000..51bccf28 ---- /dev/null -+++ b/plover/oslayer/wayland/input-method-unstable-v2.xml -@@ -0,0 +1,494 @@ -+ -+ -+ -+ -+ Copyright © 2008-2011 Kristian Høgsberg -+ Copyright © 2010-2011 Intel Corporation -+ Copyright © 2012-2013 Collabora, Ltd. -+ Copyright © 2012, 2013 Intel Corporation -+ Copyright © 2015, 2016 Jan Arne Petersen -+ Copyright © 2017, 2018 Red Hat, Inc. -+ Copyright © 2018 Purism SPC -+ -+ Permission is hereby granted, free of charge, to any person obtaining a -+ copy of this software and associated documentation files (the "Software"), -+ to deal in the Software without restriction, including without limitation -+ the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ and/or sell copies of the Software, and to permit persons to whom the -+ Software is furnished to do so, subject to the following conditions: -+ -+ The above copyright notice and this permission notice (including the next -+ paragraph) shall be included in all copies or substantial portions of the -+ Software. -+ -+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -+ DEALINGS IN THE SOFTWARE. -+ -+ -+ -+ This protocol allows applications to act as input methods for compositors. -+ -+ An input method context is used to manage the state of the input method. -+ -+ Text strings are UTF-8 encoded, their indices and lengths are in bytes. -+ -+ This document adheres to the RFC 2119 when using words like "must", -+ "should", "may", etc. -+ -+ Warning! The protocol described in this file is experimental and -+ backward incompatible changes may be made. Backward compatible changes -+ may be added together with the corresponding interface version bump. -+ Backward incompatible changes are done by bumping the version number in -+ the protocol and interface names and resetting the interface version. -+ Once the protocol is to be declared stable, the 'z' prefix and the -+ version number in the protocol and interface names are removed and the -+ interface version number is reset. -+ -+ -+ -+ -+ An input method object allows for clients to compose text. -+ -+ The objects connects the client to a text input in an application, and -+ lets the client to serve as an input method for a seat. -+ -+ The zwp_input_method_v2 object can occupy two distinct states: active and -+ inactive. In the active state, the object is associated to and -+ communicates with a text input. In the inactive state, there is no -+ associated text input, and the only communication is with the compositor. -+ Initially, the input method is in the inactive state. -+ -+ Requests issued in the inactive state must be accepted by the compositor. -+ Because of the serial mechanism, and the state reset on activate event, -+ they will not have any effect on the state of the next text input. -+ -+ There must be no more than one input method object per seat. -+ -+ -+ -+ -+ -+ -+ -+ -+ Notification that a text input focused on this seat requested the input -+ method to be activated. -+ -+ This event serves the purpose of providing the compositor with an -+ active input method. -+ -+ This event resets all state associated with previous enable, disable, -+ surrounding_text, text_change_cause, and content_type events, as well -+ as the state associated with set_preedit_string, commit_string, and -+ delete_surrounding_text requests. In addition, it marks the -+ zwp_input_method_v2 object as active, and makes any existing -+ zwp_input_popup_surface_v2 objects visible. -+ -+ The surrounding_text, and content_type events must follow before the -+ next done event if the text input supports the respective -+ functionality. -+ -+ State set with this event is double-buffered. It will get applied on -+ the next zwp_input_method_v2.done event, and stay valid until changed. -+ -+ -+ -+ -+ -+ Notification that no focused text input currently needs an active -+ input method on this seat. -+ -+ This event marks the zwp_input_method_v2 object as inactive. The -+ compositor must make all existing zwp_input_popup_surface_v2 objects -+ invisible until the next activate event. -+ -+ State set with this event is double-buffered. It will get applied on -+ the next zwp_input_method_v2.done event, and stay valid until changed. -+ -+ -+ -+ -+ -+ Updates the surrounding plain text around the cursor, excluding the -+ preedit text. -+ -+ If any preedit text is present, it is replaced with the cursor for the -+ purpose of this event. -+ -+ The argument text is a buffer containing the preedit string, and must -+ include the cursor position, and the complete selection. It should -+ contain additional characters before and after these. There is a -+ maximum length of wayland messages, so text can not be longer than 4000 -+ bytes. -+ -+ cursor is the byte offset of the cursor within the text buffer. -+ -+ anchor is the byte offset of the selection anchor within the text -+ buffer. If there is no selected text, anchor must be the same as -+ cursor. -+ -+ If this event does not arrive before the first done event, the input -+ method may assume that the text input does not support this -+ functionality and ignore following surrounding_text events. -+ -+ Values set with this event are double-buffered. They will get applied -+ and set to initial values on the next zwp_input_method_v2.done -+ event. -+ -+ The initial state for affected fields is empty, meaning that the text -+ input does not support sending surrounding text. If the empty values -+ get applied, subsequent attempts to change them may have no effect. -+ -+ -+ -+ -+ -+ -+ -+ -+ Tells the input method why the text surrounding the cursor changed. -+ -+ Whenever the client detects an external change in text, cursor, or -+ anchor position, it must issue this request to the compositor. This -+ request is intended to give the input method a chance to update the -+ preedit text in an appropriate way, e.g. by removing it when the user -+ starts typing with a keyboard. -+ -+ cause describes the source of the change. -+ -+ The value set with this event is double-buffered. It will get applied -+ and set to its initial value on the next zwp_input_method_v2.done -+ event. -+ -+ The initial value of cause is input_method. -+ -+ -+ -+ -+ -+ -+ Indicates the content type and hint for the current -+ zwp_input_method_v2 instance. -+ -+ Values set with this event are double-buffered. They will get applied -+ on the next zwp_input_method_v2.done event. -+ -+ The initial value for hint is none, and the initial value for purpose -+ is normal. -+ -+ -+ -+ -+ -+ -+ -+ Atomically applies state changes recently sent to the client. -+ -+ The done event establishes and updates the state of the client, and -+ must be issued after any changes to apply them. -+ -+ Text input state (content purpose, content hint, surrounding text, and -+ change cause) is conceptually double-buffered within an input method -+ context. -+ -+ Events modify the pending state, as opposed to the current state in use -+ by the input method. A done event atomically applies all pending state, -+ replacing the current state. After done, the new pending state is as -+ documented for each related request. -+ -+ Events must be applied in the order of arrival. -+ -+ Neither current nor pending state are modified unless noted otherwise. -+ -+ -+ -+ -+ -+ Send the commit string text for insertion to the application. -+ -+ Inserts a string at current cursor position (see commit event -+ sequence). The string to commit could be either just a single character -+ after a key press or the result of some composing. -+ -+ The argument text is a buffer containing the string to insert. There is -+ a maximum length of wayland messages, so text can not be longer than -+ 4000 bytes. -+ -+ Values set with this event are double-buffered. They must be applied -+ and reset to initial on the next zwp_text_input_v3.commit request. -+ -+ The initial value of text is an empty string. -+ -+ -+ -+ -+ -+ -+ Send the pre-edit string text to the application text input. -+ -+ Place a new composing text (pre-edit) at the current cursor position. -+ Any previously set composing text must be removed. Any previously -+ existing selected text must be removed. The cursor is moved to a new -+ position within the preedit string. -+ -+ The argument text is a buffer containing the preedit string. There is -+ a maximum length of wayland messages, so text can not be longer than -+ 4000 bytes. -+ -+ The arguments cursor_begin and cursor_end are counted in bytes relative -+ to the beginning of the submitted string buffer. Cursor should be -+ hidden by the text input when both are equal to -1. -+ -+ cursor_begin indicates the beginning of the cursor. cursor_end -+ indicates the end of the cursor. It may be equal or different than -+ cursor_begin. -+ -+ Values set with this event are double-buffered. They must be applied on -+ the next zwp_input_method_v2.commit event. -+ -+ The initial value of text is an empty string. The initial value of -+ cursor_begin, and cursor_end are both 0. -+ -+ -+ -+ -+ -+ -+ -+ -+ Remove the surrounding text. -+ -+ before_length and after_length are the number of bytes before and after -+ the current cursor index (excluding the preedit text) to delete. -+ -+ If any preedit text is present, it is replaced with the cursor for the -+ purpose of this event. In effect before_length is counted from the -+ beginning of preedit text, and after_length from its end (see commit -+ event sequence). -+ -+ Values set with this event are double-buffered. They must be applied -+ and reset to initial on the next zwp_input_method_v2.commit request. -+ -+ The initial values of both before_length and after_length are 0. -+ -+ -+ -+ -+ -+ -+ -+ Apply state changes from commit_string, set_preedit_string and -+ delete_surrounding_text requests. -+ -+ The state relating to these events is double-buffered, and each one -+ modifies the pending state. This request replaces the current state -+ with the pending state. -+ -+ The connected text input is expected to proceed by evaluating the -+ changes in the following order: -+ -+ 1. Replace existing preedit string with the cursor. -+ 2. Delete requested surrounding text. -+ 3. Insert commit string with the cursor at its end. -+ 4. Calculate surrounding text to send. -+ 5. Insert new preedit text in cursor position. -+ 6. Place cursor inside preedit text. -+ -+ The serial number reflects the last state of the zwp_input_method_v2 -+ object known to the client. The value of the serial argument must be -+ equal to the number of done events already issued by that object. When -+ the compositor receives a commit request with a serial different than -+ the number of past done events, it must proceed as normal, except it -+ should not change the current state of the zwp_input_method_v2 object. -+ -+ -+ -+ -+ -+ -+ Creates a new zwp_input_popup_surface_v2 object wrapping a given -+ surface. -+ -+ The surface gets assigned the "input_popup" role. If the surface -+ already has an assigned role, the compositor must issue a protocol -+ error. -+ -+ -+ -+ -+ -+ -+ -+ Allow an input method to receive hardware keyboard input and process -+ key events to generate text events (with pre-edit) over the wire. This -+ allows input methods which compose multiple key events for inputting -+ text like it is done for CJK languages. -+ -+ The compositor should send all keyboard events on the seat to the grab -+ holder via the returned wl_keyboard object. Nevertheless, the -+ compositor may decide not to forward any particular event. The -+ compositor must not further process any event after it has been -+ forwarded to the grab holder. -+ -+ Releasing the resulting wl_keyboard object releases the grab. -+ -+ -+ -+ -+ -+ -+ The input method ceased to be available. -+ -+ The compositor must issue this event as the only event on the object if -+ there was another input_method object associated with the same seat at -+ the time of its creation. -+ -+ The compositor must issue this request when the object is no longer -+ usable, e.g. due to seat removal. -+ -+ The input method context becomes inert and should be destroyed after -+ deactivation is handled. Any further requests and events except for the -+ destroy request must be ignored. -+ -+ -+ -+ -+ -+ Destroys the zwp_text_input_v2 object and any associated child -+ objects, i.e. zwp_input_popup_surface_v2 and -+ zwp_input_method_keyboard_grab_v2. -+ -+ -+ -+ -+ -+ -+ This interface marks a surface as a popup for interacting with an input -+ method. -+ -+ The compositor should place it near the active text input area. It must -+ be visible if and only if the input method is in the active state. -+ -+ The client must not destroy the underlying wl_surface while the -+ zwp_input_popup_surface_v2 object exists. -+ -+ -+ -+ -+ Notify about the position of the area of the text input expressed as a -+ rectangle in surface local coordinates. -+ -+ This is a hint to the input method telling it the relative position of -+ the text being entered. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ The zwp_input_method_keyboard_grab_v2 interface represents an exclusive -+ grab of the wl_keyboard interface associated with the seat. -+ -+ -+ -+ -+ This event provides a file descriptor to the client which can be -+ memory-mapped to provide a keyboard mapping description. -+ -+ -+ -+ -+ -+ -+ -+ -+ A key was pressed or released. -+ The time argument is a timestamp with millisecond granularity, with an -+ undefined base. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Notifies clients that the modifier and/or group state has changed, and -+ it should update its local state. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Informs the client about the keyboard's repeat rate and delay. -+ -+ This event is sent as soon as the zwp_input_method_keyboard_grab_v2 -+ object has been created, and is guaranteed to be received by the -+ client before any key press event. -+ -+ Negative values for either rate or delay are illegal. A rate of zero -+ will disable any repeating (regardless of the value of delay). -+ -+ This event can be sent later on as well with a new value if necessary, -+ so clients should continue listening for the event past the creation -+ of zwp_input_method_keyboard_grab_v2. -+ -+ -+ -+ -+ -+ -+ -+ -+ The input method manager allows the client to become the input method on -+ a chosen seat. -+ -+ No more than one input method must be associated with any seat at any -+ given time. -+ -+ -+ -+ -+ Request a new input zwp_input_method_v2 object associated with a given -+ seat. -+ -+ -+ -+ -+ -+ -+ -+ Destroys the zwp_input_method_manager_v2 object. -+ -+ The zwp_input_method_v2 objects originating from it remain valid. -+ -+ -+ -+ -diff --git a/plover/oslayer/wayland/keyboardcontrol.py b/plover/oslayer/wayland/keyboardcontrol.py -new file mode 100644 -index 00000000..ec1057bb ---- /dev/null -+++ b/plover/oslayer/wayland/keyboardcontrol.py -@@ -0,0 +1,389 @@ -+"""Keyboard capture and control on Wayland. -+ -+This module provides an interface for capturing and emulating keyboard events -+on Wayland compositors that support the 'virtual_keyboard_unstable_v1' and -+'input_method_unstable_v2' protocols (that is, wlroots-based compositors -+like Sway, as of January 2022). -+""" -+ -+import os -+import select -+import threading -+import time -+ -+from pywayland.client.display import Display -+from pywayland.protocol.wayland.wl_seat import WlSeat -+ -+from plover.oslayer.linux.keyboardcontrol_x11 import KEYCODE_TO_KEY -+ -+from .keyboardlayout import PLOVER_TAG, KeyComboLayout, StringOutputLayout -+# Protocol modules generated from XML description files at build time. -+from .input_method_unstable_v2 import ZwpInputMethodManagerV2 -+from .virtual_keyboard_unstable_v1 import ZwpVirtualKeyboardManagerV1 -+ -+ -+class KeyboardHandler: -+ -+ _INTERFACES = { -+ interface.name: (nick, interface) -+ for nick, interface in ( -+ ('seat', WlSeat), -+ ('input_method', ZwpInputMethodManagerV2), -+ ('virtual_keyboard', ZwpVirtualKeyboardManagerV1), -+ )} -+ -+ def __init__(self): -+ super().__init__() -+ self._lock = threading.RLock() -+ self._loop_thread = None -+ self._pipe = None -+ # Common for capture and emulation. -+ self._display = None -+ self._interface = None -+ self._keyboard = None -+ self._keymap = None -+ self._replay_keyboard = None -+ self._replay_layout = None -+ # For capture only. -+ self._refcount_capture = 0 -+ self._grabbed_keyboard = None -+ self._input_method = None -+ self._event_listeners = { -+ 'grab_key': set(), -+ 'grab_modifiers': set(), -+ } -+ # For emulation only. -+ self._refcount_emulate = 0 -+ self._output_keyboard = None -+ self._output_layout = None -+ -+ def _event_loop(self): -+ with self._lock: -+ readfds = (self._pipe[0], self._display.get_fd()) -+ while True: -+ # Sleep until we get new data on the display connection, -+ # or on the pipe used to signal the end of the loop. -+ rlist, wlist, xlist = select.select(readfds, (), ()) -+ assert not wlist -+ assert not xlist -+ if self._pipe[0] in rlist: -+ break -+ # If we're here, rlist should contains -+ # the display fd, process pending events. -+ with self._lock: -+ self._display.dispatch(block=True) -+ self._display.flush() -+ -+ def __enter__(self): -+ self._lock.__enter__() -+ return self -+ -+ def __exit__(self, exc_type, exc_value, traceback): -+ if exc_type is None and self._display is not None: -+ self._display.flush() -+ self._lock.__exit__(exc_type, exc_value, traceback) -+ -+ def _on_registry_global(self, obj, name, interface_name, interface_version): -+ if interface_name not in self._INTERFACES: -+ return -+ nick, interface = self._INTERFACES[interface_name] -+ self._interface[nick] = obj.bind(name, interface, interface_version) -+ -+ def _on_keymap(self, __keyboard, fmt, fd, size): -+ try: -+ os.lseek(fd, 0, os.SEEK_SET) -+ keymap = os.read(fd, size) -+ is_generated = PLOVER_TAG in keymap -+ if is_generated or keymap == self._keymap: -+ return -+ self._replay_layout = KeyComboLayout(keymap) -+ self._replay_keyboard.keymap(fmt, fd, size) -+ self._keymap = keymap -+ finally: -+ os.close(fd) -+ -+ def _on_grab_key(self, __grabbed_keyboard, __serial, origtime, keycode, state): -+ suppressed = False -+ try: -+ for cb in self._event_listeners['grab_key']: -+ suppressed |= cb(origtime, keycode, state) -+ finally: -+ if not suppressed: -+ self._replay_keyboard.key(origtime, keycode, state) -+ -+ def _on_grab_modifiers(self, __grabbed_keyboard, __serial, depressed, latched, locked, layout): -+ suppressed = False -+ try: -+ for cb in self._event_listeners['grab_modifiers']: -+ suppressed |= cb(depressed, latched, locked, layout) -+ finally: -+ if not suppressed: -+ self._replay_keyboard.modifiers(depressed, latched, locked, layout) -+ -+ def _update_output_keymap(self): -+ xkb_keymap = self._output_layout.to_xkb_def() -+ fd = os.memfd_create('emulated_keymap.xkb') -+ try: -+ os.lseek(fd, 0, os.SEEK_SET) -+ os.write(fd, xkb_keymap) -+ self._output_keyboard.keymap(1, fd, len(xkb_keymap)) -+ finally: -+ os.close(fd) -+ -+ def _ensure_interfaces(self, mode, interface_list): -+ missing_interfaces = [ -+ interface_name -+ for interface_name in interface_list -+ if interface_name not in self._interface -+ ] -+ if missing_interfaces: -+ missing_interfaces = ', '.join(f'\'{name}\'' for name in missing_interfaces) -+ raise RuntimeError(f'Cannot {mode} keyboard events: your ' -+ f'Wayland compositor does not support ' -+ f'the following interfaces: ' -+ f'{missing_interfaces}') -+ -+ def _setup_base(self): -+ self._display = Display() -+ self._display.connect() -+ self._interface = {} -+ reg = self._display.get_registry() -+ reg.dispatcher['global'] = self._on_registry_global -+ self._display.roundtrip() -+ self._replay_keyboard = self._interface['virtual_keyboard'].create_virtual_keyboard(self._interface['seat']) -+ self._keyboard = self._interface['seat'].get_keyboard() -+ self._keyboard.dispatcher['keymap'] = self._on_keymap -+ self._display.roundtrip() -+ self._pipe = os.pipe() -+ self._loop_thread = threading.Thread(target=self._event_loop) -+ self._loop_thread.start() -+ -+ def _teardown_base(self): -+ if self._loop_thread is not None: -+ # Wake up the capture thread... -+ os.write(self._pipe[1], b'quit') -+ # ...and wait for it to terminate. -+ self._loop_thread.join() -+ self._loop_thread = None -+ for fd in self._pipe: -+ os.close(fd) -+ self._pipe = None -+ self._replay_keyboard = None -+ self._replay_layout = None -+ self._keymap = None -+ if self._keyboard is not None: -+ self._keyboard.release() -+ self._keyboard = None -+ while self._interface: -+ self._interface.popitem()[1].release() -+ self._interface = None -+ if self._display is not None: -+ self._display.disconnect() -+ self._display = None -+ -+ def _setup_capture(self): -+ self._ensure_interfaces('capture', ('seat', 'input_method', 'virtual_keyboard')) -+ self._input_method = self._interface['input_method'].get_input_method(self._interface['seat']) -+ self._grabbed_keyboard = self._input_method.grab_keyboard() -+ self._grabbed_keyboard.dispatcher['key'] = self._on_grab_key -+ self._grabbed_keyboard.dispatcher['modifiers'] = self._on_grab_modifiers -+ -+ def _teardown_capture(self): -+ self._event_listeners['grab_key'].clear() -+ self._event_listeners['grab_modifiers'].clear() -+ if self._grabbed_keyboard is not None: -+ self._grabbed_keyboard.destroy() -+ self._grabbed_keyboard = None -+ if self._input_method is not None: -+ self._input_method.destroy() -+ self._input_method = None -+ -+ def _setup_emulate(self): -+ self._ensure_interfaces('emulate', ('seat', 'virtual_keyboard')) -+ self._output_keyboard = self._interface['virtual_keyboard'].create_virtual_keyboard(self._interface['seat']) -+ self._output_layout = StringOutputLayout() -+ self._update_output_keymap() -+ -+ def _teardown_emulate(self): -+ self._output_keyboard = None -+ self._output_layout = None -+ -+ def incref(self, mode): -+ if mode not in ('capture', 'emulate'): -+ raise ValueError(mode) -+ refattr = '_refcount_' + mode -+ refcount = getattr(self, refattr) + 1 -+ assert refcount >= 1 -+ setattr(self, refattr, refcount) -+ try: -+ total_refcount = self._refcount_capture + self._refcount_emulate -+ if total_refcount == 1: -+ self._setup_base() -+ if refcount == 1: -+ getattr(self, '_setup_' + mode)() -+ except: -+ self.decref(mode) -+ raise -+ -+ def decref(self, mode): -+ if mode not in ('capture', 'emulate'): -+ raise ValueError(mode) -+ refattr = '_refcount_' + mode -+ refcount = getattr(self, refattr) - 1 -+ assert refcount >= 0 -+ setattr(self, refattr, refcount) -+ if refcount == 0: -+ getattr(self, '_teardown_' + mode)() -+ if self._refcount_capture + self._refcount_emulate == 0: -+ self._teardown_base() -+ -+ def add_event_listener(self, event, callback): -+ self._event_listeners[event].add(callback) -+ -+ def remove_event_listener(self, event, callback): -+ self._event_listeners[event].discard(callback) -+ -+ def send_string(self, string): -+ timestamp = time.thread_time_ns() // (10 ** 3) -+ keymap_updated, combo_list = self._output_layout.string_to_combos(string) -+ if keymap_updated: -+ self._update_output_keymap() -+ mods_state = 0 -+ for keycode, mods in combo_list: -+ if mods != mods_state: -+ self._output_keyboard.modifiers(mods_depressed=mods, -+ mods_latched=0, -+ mods_locked=0, -+ group=0) -+ mods_state = mods -+ self._output_keyboard.key(timestamp, keycode, 1) -+ self._output_keyboard.key(timestamp, keycode, 0) -+ if mods_state: -+ self._output_keyboard.modifiers(mods_depressed=0, -+ mods_latched=0, -+ mods_locked=0, -+ group=0) -+ -+ def send_backspaces(self, count): -+ timestamp = time.thread_time_ns() // (10 ** 3) -+ for __ in range(count): -+ self._output_keyboard.key(timestamp, 0, 1) -+ self._output_keyboard.key(timestamp, 0, 0) -+ -+ def send_key_combination(self, combo_string): -+ timestamp = time.thread_time_ns() // (10 ** 3) -+ mods_state = 0 -+ for (keycode, mods), pressed in self._replay_layout.parse_key_combo(combo_string): -+ self._replay_keyboard.key(timestamp, keycode, int(pressed)) -+ if mods: -+ if pressed: -+ mods_state |= mods -+ else: -+ mods_state &= ~mods -+ self._replay_keyboard.modifiers(mods_depressed=mods_state, -+ mods_latched=0, -+ mods_locked=0, -+ group=0) -+ assert not mods_state -+ -+ -+_keyboard = KeyboardHandler() -+ -+ -+class KeyboardCapture: -+ """Listen to keyboard press and release events. -+ -+ This uses the 'input_method_unstable_v2' protocol to grab the Wayland -+ keyboard. This grab is global and unconditional, therefore a virtual -+ keyboard input is also created (using the 'virtual_keyboard_unstable_v1' -+ protocol) to forward events that do not need to be captured by Plover. -+ Note that this grab will also capture events generated by the -+ KeyboardEmulation class, those events need to be actively filtered out -+ to avoid infinite feedback loops. -+ """ -+ def __init__(self): -+ self._started = False -+ self._mod_state = 0 -+ self._grabbed_keyboard = None -+ self._suppressed_keys = set() -+ # Callbacks that receive keypresses. -+ self.key_down = lambda key: None -+ self.key_up = lambda key: None -+ -+ def start(self): -+ """Connect to the Wayland compositor and start the event loop.""" -+ with _keyboard: -+ _keyboard.add_event_listener('grab_key', self._on_grab_key) -+ _keyboard.add_event_listener('grab_modifiers', self._on_grab_modifiers) -+ _keyboard.incref('capture') -+ self._started = True -+ -+ def cancel(self): -+ """Cancel grabbing the keyboard and free resources.""" -+ if not self._started: -+ return -+ with _keyboard: -+ _keyboard.decref('capture') -+ _keyboard.remove_event_listener('grab_key', self._on_grab_key) -+ _keyboard.remove_event_listener('grab_modifiers', self._on_grab_modifiers) -+ self._started = False -+ -+ def _on_grab_key(self, __origtime, keycode, state): -+ """Callback for when a new key event arrives.""" -+ key = KEYCODE_TO_KEY.get(keycode + 8) -+ if key is None: -+ # Unhandled, ignore and don't suppress. -+ return False -+ suppressed = key in self._suppressed_keys -+ if state == 1: -+ if self._mod_state: -+ # Modifier(s) pressed, ignore. -+ suppressed = False -+ else: -+ self.key_down(key) -+ else: -+ self.key_up(key) -+ return suppressed -+ -+ def _on_grab_modifiers(self, depressed, latched, locked, __layout): -+ """Callback for when the set of active modifiers changes.""" -+ # Note: ignore numlock state. -+ self._mod_state = (depressed | latched | locked) & ~0x10 -+ return False -+ -+ def suppress(self, keys=()): -+ """Change the set of keys to capture.""" -+ self._suppressed_keys = set(keys) -+ -+ -+class KeyboardEmulation: -+ """Emulate keyboard events to send strings on Wayland. -+ -+ This emulation layer uses the 'virtual_keyboard_unstable_v1' protocol. -+ Since the protocol allows using any XKB layout, a new layout is generated -+ each time a string needs to be sent, containing just the needed symbols. -+ This makes the emulation independent of the user’s current keyboard layout. -+ To signal emulated events to KeyboardCapture, a special tag is inserted in -+ generated XKB layouts. -+ """ -+ def __init__(self): -+ with _keyboard: -+ _keyboard.incref('emulate') -+ -+ @staticmethod -+ def send_string(string): -+ """Emulate a complete string.""" -+ with _keyboard: -+ _keyboard.send_string(string) -+ -+ @staticmethod -+ def send_backspaces(count): -+ """Emulate a sequence of backspaces.""" -+ with _keyboard: -+ _keyboard.send_backspaces(count) -+ -+ @staticmethod -+ def send_key_combination(combo_string): -+ """Emulate a key combo.""" -+ with _keyboard: -+ _keyboard.send_key_combination(combo_string) -diff --git a/plover/oslayer/wayland/keyboardlayout.py b/plover/oslayer/wayland/keyboardlayout.py -new file mode 100644 -index 00000000..f4006d67 ---- /dev/null -+++ b/plover/oslayer/wayland/keyboardlayout.py -@@ -0,0 +1,203 @@ -+from xkbcommon import xkb -+ -+from plover.key_combo import add_modifiers_aliases, parse_key_combo -+from plover.oslayer.linux.keyboardcontrol_x11 import uchr_to_keysym -+ -+ -+XKB_KEYCODE_OFFSET = 8 -+XKB_KEYCODE_MAX = 255 -+ -+PLOVER_TAG = b'' -+PLOVER_KEYMAP_TEMPLATE = ( -+b''' -+xkb_keymap { -+xkb_keycodes { -+minimum = %u; -+maximum = %u; -+%s -+}; -+xkb_types { include "complete" }; -+xkb_compatibility { include "complete" }; -+xkb_symbols { -+%s -+}; -+}; -+''' -+) -+ -+XKB_ALIASES = ( -+ ('apostrophe', 'quoteright'), -+ ('f11', 'l1'), -+ ('f12', 'l2'), -+ ('f13', 'l3'), -+ ('f14', 'l4'), -+ ('f15', 'l5'), -+ ('f16', 'l6'), -+ ('f17', 'l7'), -+ ('f18', 'l8'), -+ ('f19', 'l9'), -+ ('f20', 'l10'), -+ ('f21', 'r1'), -+ ('f22', 'r2'), -+ ('f23', 'r3'), -+ ('f24', 'r4'), -+ ('f25', 'r5'), -+ ('f26', 'r6'), -+ ('f27', 'r7'), -+ ('f28', 'r8'), -+ ('f29', 'r9'), -+ ('f30', 'r10'), -+ ('f31', 'r11'), -+ ('f32', 'r12'), -+ ('f33', 'r13'), -+ ('f34', 'r14'), -+ ('f35', 'r15'), -+ ('grave', 'quoteleft'), -+ ('henkan', 'henkan_mode'), -+ ('kp_next', 'kp_page_down'), -+ ('kp_page_up', 'kp_prior'), -+ ('mae_koho', 'previouscandidate'), -+ ('mode_switch', 'script_switch'), -+ ('multiplecandidate', 'zen_koho'), -+ ('next', 'page_down'), -+ ('page_up', 'prior'), -+) -+ -+ -+class KeyComboLayout: -+ -+ def __init__(self, xkb_def_bytestring): -+ '''Create a basic keyboard layout from a XKB keymap definition.''' -+ # Ignore terminating null character. -+ if xkb_def_bytestring.endswith(b'\x00'): -+ xkb_def_bytestring = xkb_def_bytestring[:-1] -+ keymap = xkb.Context().keymap_new_from_buffer(xkb_def_bytestring) -+ modifiers = { -+ keymap.mod_get_name(mod_index).lower(): 1 << mod_index -+ for mod_index in range(keymap.num_mods()) -+ } -+ for mod_name in ('alt', 'control', 'shift', 'super'): -+ mods = modifiers.get(mod_name) -+ if mods is not None: -+ modifiers[mod_name + '_l'] = mods -+ modifiers[mod_name + '_r'] = mods -+ combo_from_keyname = {} -+ keysym_level = {} -+ for keycode in keymap: -+ for level in range(keymap.num_levels_for_key(keycode, 0)): -+ keysym = keymap.key_get_syms_by_level(keycode, 0, level) -+ if len(keysym) != 1: -+ continue -+ keysym = keysym[0] -+ if not keysym: -+ # Ignore NoSymbol. -+ continue -+ try: -+ keysym_name = xkb.keysym_get_name(keysym) -+ except xkb.XKBInvalidKeysym: -+ continue -+ if keysym_name.startswith('XF86'): -+ alias = keysym_name[4:].lower() -+ keysym_name = 'xf86_' + alias -+ else: -+ alias = None -+ keysym_name = keysym_name.lower() -+ if keysym_name in combo_from_keyname and level >= keysym_level.get(keysym, 0): -+ # Ignore if already available at a lower level. -+ continue -+ assert keycode >= XKB_KEYCODE_OFFSET -+ combo = (keycode - XKB_KEYCODE_OFFSET, modifiers.get(keysym_name, 0)) -+ combo_from_keyname[keysym_name] = combo -+ if alias is not None: -+ combo_from_keyname[alias] = combo -+ keysym_level[keysym] = level -+ add_modifiers_aliases(combo_from_keyname) -+ # Ensure all aliases for the same keysim are available. -+ for alias_list in XKB_ALIASES: -+ combo = next(filter(None, map(combo_from_keyname.get, alias_list)), None) -+ if combo is not None: -+ for alias in alias_list: -+ if alias not in combo_from_keyname: -+ combo_from_keyname[alias] = combo -+ self._combo_from_keyname = combo_from_keyname -+ -+ def parse_key_combo(self, combo_string): -+ return parse_key_combo(combo_string, self._combo_from_keyname.__getitem__) -+ -+ -+class StringOutputLayout: -+ -+ def __init__(self): -+ '''Create a custom layout for output strings.''' -+ printable = { -+ c -+ for c in map(chr, range(XKB_KEYCODE_MAX)) -+ for c in (c.lower(), c.upper()) -+ if len(c) == 1 and c.isprintable() -+ } -+ # Note: we reserve the firt keycode for tagging the keymap -+ # with our key and mapping the BackSpace keysym. -+ max_mappings = XKB_KEYCODE_MAX - XKB_KEYCODE_OFFSET -+ levels = 2 -+ char_to_combo = {} -+ keymap = [[None] * levels for __ in range(max_mappings)] -+ free_mappings = iter([ -+ (keycode, mod_level) -+ for mod_level in range(levels) -+ for keycode in range(1, max_mappings) -+ ]) -+ for c in sorted(printable): -+ keycode, mod_level = next(free_mappings) -+ char_to_combo[c] = (keycode, 1 << mod_level >> 1) -+ keymap[keycode][mod_level] = uchr_to_keysym(c) -+ self._keymap = keymap -+ self._char_to_combo = char_to_combo -+ self._next_extra_mapping_index = 0 -+ self._extra_mappings = [[keycode, mod_level, None] -+ for keycode, mod_level in free_mappings] -+ -+ def string_to_combos(self, string): -+ '''Return a tuple pair: -+ - a boolean indicading if the keymap was updated -+ - a list of `(keycode, modifiers)` -+ ''' -+ combo_list = [] -+ updated = False -+ for char in string: -+ combo = self._char_to_combo.get(char) -+ if combo is not None: -+ combo_list.append(combo) -+ continue -+ extra_mapping = self._extra_mappings[self._next_extra_mapping_index] -+ self._next_extra_mapping_index += 1 -+ self._next_extra_mapping_index %= len(self._extra_mappings) -+ keycode, mod_level, old_char = extra_mapping -+ if old_char is not None: -+ del self._char_to_combo[old_char] -+ extra_mapping[-1] = char -+ self._keymap[keycode][mod_level] = uchr_to_keysym(char) -+ self._char_to_combo[char] = combo = (keycode, 1 << mod_level >> 1) -+ combo_list.append(combo) -+ updated = True -+ return updated, combo_list -+ -+ def to_xkb_def(self): -+ '''Generate an XKB keymap definition for the layout.''' -+ # Sway is more permissive than Xwayland on what an XKB keymap must -+ # or must not include. We need to take care if we want to ensure -+ # compatibility with both. See -+ keycodes_list = [b'%s = %u;' % (PLOVER_TAG, XKB_KEYCODE_OFFSET)] -+ symbols_list = [b'key %s {[BackSpace]};' % PLOVER_TAG] -+ for keycode, keysym_list in enumerate(self._keymap): -+ keysym_list = [b'%#x' % keysym -+ for keysym in keysym_list -+ if keysym is not None] -+ if not keysym_list: -+ continue -+ keycodes_list.append(b' = %u;' % (keycode, XKB_KEYCODE_OFFSET + keycode)) -+ symbols_list.append(b'key {[%s]};' % (keycode, b', '.join(keysym_list))) -+ return PLOVER_KEYMAP_TEMPLATE % ( -+ XKB_KEYCODE_OFFSET, XKB_KEYCODE_OFFSET + len(self._keymap), -+ b'\n'.join(keycodes_list), -+ b'\n'.join(symbols_list), -+ ) -diff --git a/plover/oslayer/wayland/virtual-keyboard-unstable-v1.xml b/plover/oslayer/wayland/virtual-keyboard-unstable-v1.xml -new file mode 100644 -index 00000000..5095c91b ---- /dev/null -+++ b/plover/oslayer/wayland/virtual-keyboard-unstable-v1.xml -@@ -0,0 +1,113 @@ -+ -+ -+ -+ Copyright © 2008-2011 Kristian Høgsberg -+ Copyright © 2010-2013 Intel Corporation -+ Copyright © 2012-2013 Collabora, Ltd. -+ Copyright © 2018 Purism SPC -+ -+ Permission is hereby granted, free of charge, to any person obtaining a -+ copy of this software and associated documentation files (the "Software"), -+ to deal in the Software without restriction, including without limitation -+ the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ and/or sell copies of the Software, and to permit persons to whom the -+ Software is furnished to do so, subject to the following conditions: -+ -+ The above copyright notice and this permission notice (including the next -+ paragraph) shall be included in all copies or substantial portions of the -+ Software. -+ -+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -+ DEALINGS IN THE SOFTWARE. -+ -+ -+ -+ -+ The virtual keyboard provides an application with requests which emulate -+ the behaviour of a physical keyboard. -+ -+ This interface can be used by clients on its own to provide raw input -+ events, or it can accompany the input method protocol. -+ -+ -+ -+ -+ Provide a file descriptor to the compositor which can be -+ memory-mapped to provide a keyboard mapping description. -+ -+ Format carries a value from the keymap_format enumeration. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ A key was pressed or released. -+ The time argument is a timestamp with millisecond granularity, with an -+ undefined base. All requests regarding a single object must share the -+ same clock. -+ -+ Keymap must be set before issuing this request. -+ -+ State carries a value from the key_state enumeration. -+ -+ -+ -+ -+ -+ -+ -+ -+ Notifies the compositor that the modifier and/or group state has -+ changed, and it should update state. -+ -+ The client should use wl_keyboard.modifiers event to synchronize its -+ internal state with seat state. -+ -+ Keymap must be set before issuing this request. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ A virtual keyboard manager allows an application to provide keyboard -+ input events as if they came from a physical keyboard. -+ -+ -+ -+ -+ -+ -+ -+ -+ Creates a new virtual keyboard associated to a seat. -+ -+ If the compositor enables a keyboard to perform arbitrary actions, it -+ should present an error when an untrusted client requests a new -+ keyboard. -+ -+ -+ -+ -+ -+ -diff --git a/plover_build_utils/setup.py b/plover_build_utils/setup.py -index 0be32e26..92e3f206 100644 ---- a/plover_build_utils/setup.py -+++ b/plover_build_utils/setup.py -@@ -1,14 +1,20 @@ -+from pathlib import Path - import contextlib -+import glob - import importlib - import os - import subprocess -+import shutil - import sys -+import logging - - from setuptools.command.build_py import build_py - from setuptools.command.develop import develop - import pkg_resources - import setuptools - -+logging.basicConfig() -+log = logging.getLogger("plover setup") - - class Command(setuptools.Command): - -@@ -150,6 +156,38 @@ class BuildUi(Command): - - # }}} - -+# Wayland protocols generation. {{{ -+ -+class BuildWayland(Command): -+ -+ description = 'build Wayland protocol modules' -+ -+ def initialize_options(self): -+ pass -+ -+ def finalize_options(self): -+ pass -+ -+ def run(self): -+ log.info('generating Wayland protocol modules') -+ base = 'plover/oslayer/wayland' -+ defs = glob.glob(base + '/*.xml') + ['/usr/share/wayland/wayland.xml'] -+ cmd = ( -+ sys.executable, '-m', 'pywayland.scanner', -+ '-i', *defs, '-o', base, -+ ) -+ subprocess.check_call(cmd) -+ shutil.rmtree('plover/oslayer/wayland/wayland') -+ for py in Path('plover/oslayer/wayland').glob('*/*.py'): -+ contents = py.read_text() -+ contents = contents.replace( -+ '\nfrom ..wayland import ', -+ '\nfrom pywayland.protocol.wayland import ', -+ ) -+ py.write_text(contents) -+ -+# }}} -+ - # Patched `build_py` command. {{{ - - class BuildPy(build_py): -diff --git a/pyproject.toml b/pyproject.toml -index b6c48999..0b0a8134 100644 ---- a/pyproject.toml -+++ b/pyproject.toml -@@ -2,6 +2,7 @@ - requires = [ - "Babel", - "PyQt5>=5.8.2", -+ "pywayland; ('linux' in sys_platform or 'bsd' in sys_platform)", - "setuptools>=38.2.4", - "wheel", - ] -diff --git a/reqs/constraints.txt b/reqs/constraints.txt -index 928d34af..1be0f8af 100644 ---- a/reqs/constraints.txt -+++ b/reqs/constraints.txt -@@ -52,6 +52,7 @@ pytest==6.2.5 - pytest-qt==4.0.2 - python-xlib==0.31 - pytz==2021.3 -+pywayland==0.4.11 - PyYAML==6.0 - readme-renderer==30.0 - requests==2.26.0 -@@ -73,6 +74,7 @@ urllib3==1.26.7 - wcwidth==0.2.5 - webencodings==0.5.1 - wheel==0.37.0 -+xkbcommon==0.4 - zipp==3.6.0 - - # vim: ft=cfg commentstring=#\ %s list -diff --git a/reqs/dist.txt b/reqs/dist.txt -index 43102086..ceddfefb 100644 ---- a/reqs/dist.txt -+++ b/reqs/dist.txt -@@ -7,8 +7,10 @@ pyobjc-framework-Quartz>=4.0; "darwin" in sys_platform - pyserial>=2.7 - python-xlib>=0.16; ("linux" in sys_platform or "bsd" in sys_platform) and python_version < "3.9" - python-xlib>=0.29; ("linux" in sys_platform or "bsd" in sys_platform) and python_version >= "3.9" -+pywayland; ("linux" in sys_platform or "bsd" in sys_platform) - rtf_tokenize - setuptools - wcwidth -+xkbcommon>=0.4; ("linux" in sys_platform or "bsd" in sys_platform) - - # vim: ft=cfg commentstring=#\ %s list -diff --git a/reqs/setup.txt b/reqs/setup.txt -index ec915a75..4af23620 100644 ---- a/reqs/setup.txt -+++ b/reqs/setup.txt -@@ -1,5 +1,6 @@ - Babel - PyQt5>=5.8.2 -+pywayland; ("linux" in sys_platform or "bsd" in sys_platform) - setuptools>=38.2.4 - wheel - -diff --git a/setup.cfg b/setup.cfg -index 8a1ef9c3..921c1ea0 100644 ---- a/setup.cfg -+++ b/setup.cfg -@@ -47,6 +47,7 @@ packages = - plover.oslayer - plover.oslayer.linux - plover.oslayer.osx -+ plover.oslayer.wayland - plover.oslayer.windows - plover.output - plover.scripts -@@ -107,6 +108,9 @@ plover.system = - [options.package_data] - plover = - messages/*/LC_MESSAGES/*.mo -+plover.oslayer.wayland = -+ input_method_unstable_v2/*.py -+ virtual_keyboard_unstable_v1/*.py - - [options.exclude_package_data] - plover = -@@ -117,5 +121,7 @@ plover = - plover.gui_qt = - *.ui - resources/* -+plover.oslayer = -+ wayland/*.xml - - # vim: commentstring=#\ %s list -diff --git a/setup.py b/setup.py -index beab2d75..17364dc9 100755 ---- a/setup.py -+++ b/setup.py -@@ -22,7 +22,7 @@ with open(os.path.join(__software_name__, '__init__.py')) as fp: - exec(fp.read()) - - from plover_build_utils.setup import ( -- BuildPy, BuildUi, Command, Develop, babel_options -+ BuildPy, BuildUi, BuildWayland, Command, Develop, babel_options - ) - - -@@ -35,6 +35,10 @@ cmdclass = { - } - options = {} - -+if sys.platform.startswith(('linux', 'freebsd', 'openbsd')): -+ BuildPy.build_dependencies.insert(0, 'build_wayland') -+ cmdclass['build_wayland'] = BuildWayland -+ - PACKAGE = '%s-%s' % ( - __software_name__, - __version__, -diff --git a/tox.ini b/tox.ini -index b608544f..634a27cd 100644 ---- a/tox.ini -+++ b/tox.ini -@@ -86,6 +86,7 @@ description = launch plover - passenv = - {[testenv]passenv} - DISPLAY -+ WAYLAND_DISPLAY - XDG_RUNTIME_DIR - commands = - {envpython} setup.py launch -- {posargs} diff --git a/web/wordpress-plugins/webmention.json b/web/wordpress-plugins/webmention.json index a248218..1fe72c9 100644 --- a/web/wordpress-plugins/webmention.json +++ b/web/wordpress-plugins/webmention.json @@ -1,7 +1,7 @@ { - "version": "5.1.3", + "version": "5.1.4", "pname": "webmention", "description": "Webmention", - "url": "https://downloads.wordpress.org/plugin/webmention.5.1.3.zip", - "sha256": "ebf2bb2c6848a42a4825fe719252a18ef6d1eb40ce086243d19dcaaf1e933981" + "url": "https://downloads.wordpress.org/plugin/webmention.5.1.4.zip", + "sha256": "a20d590896339946003b74e09270d0986154fd4688d3c8d4ac85d28686d4d076" } -- 2.46.0