Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 31 May 2026 02:08:05 +0000
From:      Hiroki Tagato <tagattie@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 612a5fc40fbe - main - editors/vscode: Update to 1.122.1
Message-ID:  <6a1b9805.25ec5.6ef887d@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by tagattie:

URL: https://cgit.FreeBSD.org/ports/commit/?id=612a5fc40fbee34d7682e13a56d3a85a9c7161f6

commit 612a5fc40fbee34d7682e13a56d3a85a9c7161f6
Author:     Hiroki Tagato <tagattie@FreeBSD.org>
AuthorDate: 2026-05-31 02:06:03 +0000
Commit:     Hiroki Tagato <tagattie@FreeBSD.org>
CommitDate: 2026-05-31 02:07:50 +0000

    editors/vscode: Update to 1.122.1
    
    While here, update product.json for popular extensions. [1]
    
    Changelog: https://code.visualstudio.com/updates/v1_122
    
    Reported by:    GitHub (watch releases)
    Obtained from:  https://github.com/VSCodium/vscodium/blob/1.121.03429/product.json [1]
---
 editors/vscode/Makefile                            |  10 +-
 editors/vscode/Makefile.crates                     |  24 +-
 editors/vscode/Makefile.reh                        |   8 +-
 editors/vscode/Makefile.version                    |   4 +-
 editors/vscode/distinfo                            |  66 ++--
 .../files/patch-build_gulpfile.extensions.ts       |   6 +-
 editors/vscode/files/patch-build_gulpfile.reh.ts   |  10 +-
 .../vscode/files/patch-build_gulpfile.vscode.ts    |   4 +-
 editors/vscode/files/patch-build_lib_electron.ts   |   4 +-
 .../files/patch-node-clipboard-rs_Cargo.toml       |   6 +-
 .../files/patch-node-clipboard-rs_src_lib.rs       | 397 +++++++++++++++++++--
 editors/vscode/files/patch-package.json            |   4 +-
 .../files/patch-src_vs_code_electron-main_app.ts   |   4 +-
 .../files/patch-test_automation_src_electron.ts    |   6 +-
 editors/vscode/files/product.json.extensions       |   9 +-
 editors/vscode/pkg-plist                           | 195 ++++++----
 16 files changed, 604 insertions(+), 153 deletions(-)

diff --git a/editors/vscode/Makefile b/editors/vscode/Makefile
index 79e258305e0f..0d0fa5362ace 100644
--- a/editors/vscode/Makefile
+++ b/editors/vscode/Makefile
@@ -65,7 +65,7 @@ USES=		cargo desktop-file-utils display:test electron:39,build,test \
 USE_GITHUB=	yes
 GH_ACCOUNT=	microsoft
 # See ${WRKSRC}/node_modules/@github/copilot/clipboard/node_modules/@teddyzhu/clipboard/package.json for node-clipboard-rs version
-GH_TUPLE=	Teddy-Zhu:node-clipboard-rs:v0.0.5:node_clipboard_rs/node-clipboard-rs
+GH_TUPLE=	Teddy-Zhu:node-clipboard-rs:v0.0.10:node_clipboard_rs/node-clipboard-rs
 # See ${WRKSRC}/build/rspack/node_modules/@rspack/binding/package.json for rspack version
 GH_TUPLE+=	web-infra-dev:rspack:v1.7.10:rspack/rspack
 
@@ -228,10 +228,16 @@ pre-build:
 # copy rg binary file to @vscode/ripgrep node module directory
 	@${MKDIR} ${WRKSRC}/node_modules/@vscode/ripgrep/bin \
 		${WRKSRC}/build/node_modules/@vscode/ripgrep/bin \
-		${WRKSRC}/remote/node_modules/@vscode/ripgrep/bin
+		${WRKSRC}/remote/node_modules/@vscode/ripgrep/bin \
+		${WRKSRC}/node_modules/@vscode/ripgrep-universal/bin/freebsd-${ELECTRON_ARCH} \
+		${WRKSRC}/build/node_modules/@vscode/ripgrep-universal/bin/freebsd-${ELECTRON_ARCH} \
+		${WRKSRC}/remote/node_modules/@vscode/ripgrep-universal/bin/freebsd-${ELECTRON_ARCH}
 	${CP} ${LOCALBASE}/bin/rg ${WRKSRC}/node_modules/@vscode/ripgrep/bin
 	${CP} ${LOCALBASE}/bin/rg ${WRKSRC}/build/node_modules/@vscode/ripgrep/bin
 	${CP} ${LOCALBASE}/bin/rg ${WRKSRC}/remote/node_modules/@vscode/ripgrep/bin
+	${CP} ${LOCALBASE}/bin/rg ${WRKSRC}/node_modules/@vscode/ripgrep-universal/bin/freebsd-${ELECTRON_ARCH}
+	${CP} ${LOCALBASE}/bin/rg ${WRKSRC}/build/node_modules/@vscode/ripgrep-universal/bin/freebsd-${ELECTRON_ARCH}
+	${CP} ${LOCALBASE}/bin/rg ${WRKSRC}/remote/node_modules/@vscode/ripgrep-universal/bin/freebsd-${ELECTRON_ARCH}
 # copy rg binary file to @github/copilot node modules directory
 	@${MKDIR} ${WRKSRC}/node_modules/@github/copilot/ripgrep/bin/freebsd-${ELECTRON_ARCH} \
 		${WRKSRC}/node_modules/@github/copilot-sdk/node_modules/@github/copilot/ripgrep/bin/freebsd-${ELECTRON_ARCH} \
diff --git a/editors/vscode/Makefile.crates b/editors/vscode/Makefile.crates
index ea2fb55d20d4..ed2bf6af18f9 100644
--- a/editors/vscode/Makefile.crates
+++ b/editors/vscode/Makefile.crates
@@ -27,7 +27,7 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		atomic_refcell-0.1.13 \
 		auto_impl-1.2.0 \
 		autocfg-1.4.0 \
-		autocfg-1.5.0 \
+		autocfg-1.5.1 \
 		backtrace-0.3.75 \
 		backtrace-ext-0.2.1 \
 		base64-0.22.1 \
@@ -70,7 +70,7 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		castaway-0.2.3 \
 		cbor4ii-1.2.2 \
 		cc-1.2.46 \
-		cc-1.2.62 \
+		cc-1.2.63 \
 		cfg-if-1.0.4 \
 		chrono-0.4.42 \
 		ciborium-0.2.2 \
@@ -128,7 +128,7 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		cssparser-macros-0.6.1 \
 		ctor-0.1.26 \
 		ctor-0.4.1 \
-		ctor-1.0.6 \
+		ctor-1.0.7 \
 		ctor-proc-macro-0.0.5 \
 		darling-0.20.10 \
 		darling_core-0.20.10 \
@@ -165,6 +165,7 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		enum-tag-0.3.0 \
 		enum-tag-macro-0.3.0 \
 		equivalent-1.0.1 \
+		equivalent-1.0.2 \
 		errno-0.3.10 \
 		errno-0.3.14 \
 		error-code-3.3.2 \
@@ -221,7 +222,9 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		hashbrown-0.12.3 \
 		hashbrown-0.14.5 \
 		hashbrown-0.15.2 \
+		hashbrown-0.15.5 \
 		hashbrown-0.16.1 \
+		hashbrown-0.17.1 \
 		hashlink-0.10.0 \
 		heck-0.5.0 \
 		hermit-abi-0.3.9 \
@@ -252,6 +255,7 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		if_chain-1.0.2 \
 		image-0.25.10 \
 		indexmap-2.12.1 \
+		indexmap-2.14.0 \
 		indicatif-0.18.3 \
 		indoc-2.0.7 \
 		inotify-0.11.0 \
@@ -294,6 +298,7 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		litemap-0.8.1 \
 		lock_api-0.4.14 \
 		log-0.4.22 \
+		log-0.4.30 \
 		loom-0.7.2 \
 		lru-0.16.2 \
 		mach2-0.4.2 \
@@ -302,7 +307,7 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		maybe-owned-0.3.4 \
 		md4-0.10.2 \
 		memchr-2.7.6 \
-		memchr-2.8.0 \
+		memchr-2.8.1 \
 		memfd-0.6.4 \
 		micromegas-perfetto-0.9.0 \
 		miette-7.6.0 \
@@ -331,6 +336,7 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		nodejs-built-in-modules-1.0.0 \
 		nohash-hasher-0.2.0 \
 		nom-7.1.3 \
+		nom-8.0.0 \
 		normpath-0.2.0 \
 		notify-8.2.0 \
 		notify-types-2.0.0 \
@@ -380,6 +386,7 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		pathdiff-0.2.3 \
 		percent-encoding-2.3.2 \
 		petgraph-0.7.1 \
+		petgraph-0.8.3 \
 		phf-0.11.2 \
 		phf_codegen-0.11.2 \
 		phf_generator-0.11.2 \
@@ -476,6 +483,7 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		sha2-0.10.9 \
 		sharded-slab-0.1.7 \
 		shlex-1.3.0 \
+		shlex-2.0.1 \
 		signal-hook-0.3.18 \
 		signal-hook-registry-1.4.5 \
 		simd-abstraction-0.7.1 \
@@ -622,6 +630,7 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		tracing-subscriber-0.3.22 \
 		tracy-client-0.18.4 \
 		tracy-client-sys-0.26.0 \
+		tree_magic_mini-3.2.2 \
 		triomphe-0.1.14 \
 		trybuild-1.0.114 \
 		typenum-1.17.0 \
@@ -678,7 +687,7 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		wast-35.0.2 \
 		wayland-backend-0.3.15 \
 		wayland-client-0.31.14 \
-		wayland-clipboard-listener-0.3.1 \
+		wayland-clipboard-listener-0.6.1 \
 		wayland-protocols-0.32.12 \
 		wayland-protocols-wlr-0.3.12 \
 		wayland-scanner-0.31.10 \
@@ -746,6 +755,7 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		winx-0.36.4 \
 		wit-bindgen-rt-0.39.0 \
 		witx-0.9.1 \
+		wl-clipboard-rs-0.9.3 \
 		write16-1.0.0 \
 		writeable-0.5.5 \
 		writeable-0.6.2 \
@@ -760,10 +770,10 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		yoke-derive-0.8.1 \
 		zerocopy-0.7.35 \
 		zerocopy-0.8.25 \
-		zerocopy-0.8.48 \
+		zerocopy-0.8.50 \
 		zerocopy-derive-0.7.35 \
 		zerocopy-derive-0.8.25 \
-		zerocopy-derive-0.8.48 \
+		zerocopy-derive-0.8.50 \
 		zerofrom-0.1.5 \
 		zerofrom-derive-0.1.5 \
 		zerotrie-0.2.3 \
diff --git a/editors/vscode/Makefile.reh b/editors/vscode/Makefile.reh
index c254a644b1a7..7986bb8cda95 100644
--- a/editors/vscode/Makefile.reh
+++ b/editors/vscode/Makefile.reh
@@ -39,7 +39,7 @@ USES=		cargo electron:env gssapi:mit localbase:ldflags \
 USE_GITHUB=	yes
 GH_ACCOUNT=	microsoft
 # See ${WRKSRC}/node_modules/@github/copilot/clipboard/node_modules/@teddyzhu/clipboard/package.json for node-clipboard-rs version
-GH_TUPLE=	Teddy-Zhu:node-clipboard-rs:v0.0.5:node_clipboard_rs/node-clipboard-rs
+GH_TUPLE=	Teddy-Zhu:node-clipboard-rs:v0.0.10:node_clipboard_rs/node-clipboard-rs
 # See ${WRKSRC}/build/rspack/node_modules/@rspack/binding/package.json for rspack version
 GH_TUPLE+=	web-infra-dev:rspack:v1.7.10:rspack/rspack
 
@@ -138,9 +138,13 @@ pre-build:
 	#	${WRKSRC}/build/rspack/node_modules/@rspack/binding/rspack.freebsd-${ELECTRON_ARCH}.node
 # copy rg binary file to @vscode/ripgrep node module directory
 	@${MKDIR} ${WRKSRC}/build/node_modules/@vscode/ripgrep/bin \
-		${WRKSRC}/remote/node_modules/@vscode/ripgrep/bin
+		${WRKSRC}/remote/node_modules/@vscode/ripgrep/bin \
+		${WRKSRC}/build/node_modules/@vscode/ripgrep-universal/bin/freebsd-${ELECTRON_ARCH} \
+		${WRKSRC}/remote/node_modules/@vscode/ripgrep-universal/bin/freebsd-${ELECTRON_ARCH}
 	${CP} ${LOCALBASE}/bin/rg ${WRKSRC}/build/node_modules/@vscode/ripgrep/bin
 	${CP} ${LOCALBASE}/bin/rg ${WRKSRC}/remote/node_modules/@vscode/ripgrep/bin
+	${CP} ${LOCALBASE}/bin/rg ${WRKSRC}/build/node_modules/@vscode/ripgrep-universal/bin/freebsd-${ELECTRON_ARCH}
+	${CP} ${LOCALBASE}/bin/rg ${WRKSRC}/remote/node_modules/@vscode/ripgrep-universal/bin/freebsd-${ELECTRON_ARCH}
 # copy rg binary file to @github/copilot node modules directory
 	@${MKDIR} ${WRKSRC}/remote/node_modules/@github/copilot/ripgrep/bin/freebsd-${NODEJS_ARCH}
 	${CP} ${LOCALBASE}/bin/rg \
diff --git a/editors/vscode/Makefile.version b/editors/vscode/Makefile.version
index f74f17fadebb..d546231ae6d8 100644
--- a/editors/vscode/Makefile.version
+++ b/editors/vscode/Makefile.version
@@ -1,2 +1,2 @@
-VSCODE_VERSION=		1.121.0
-SOURCE_COMMIT_HASH=	987c9597516278c9fcf10d963a0592ce1384ab93
+VSCODE_VERSION=		1.122.1
+SOURCE_COMMIT_HASH=	8761a5560cfd65fdd19ce7e2bd18dab5c0a4d84e
diff --git a/editors/vscode/distinfo b/editors/vscode/distinfo
index 07108aefda5a..44a5bc3f844f 100644
--- a/editors/vscode/distinfo
+++ b/editors/vscode/distinfo
@@ -1,8 +1,8 @@
-TIMESTAMP = 1779435753
-SHA256 (vscode/vscode-node-modules-1.121.0.tar.gz) = be6b049e46305da1669147e4cb9f151063031d2ff8b5f4d01f0d16ac00ea4358
-SIZE (vscode/vscode-node-modules-1.121.0.tar.gz) = 848745096
-SHA256 (vscode/vscode-marketplace-exts-1.121.0.tar.gz) = 5a1e3df535d25822ff5d6e513c322eb84f4a77430e920a7c8d3379eea564aa90
-SIZE (vscode/vscode-marketplace-exts-1.121.0.tar.gz) = 1708423
+TIMESTAMP = 1780139184
+SHA256 (vscode/vscode-node-modules-1.122.1.tar.gz) = 808d60c65ae2c01ed2c5fdf7fb4917c6e106f67d519c16626c8061fbb99fe2d7
+SIZE (vscode/vscode-node-modules-1.122.1.tar.gz) = 1122690861
+SHA256 (vscode/vscode-marketplace-exts-1.122.1.tar.gz) = 01b6017ad2b9a07553a5165424b779590dee8f50bc4511ca706dbaae90fb301a
+SIZE (vscode/vscode-marketplace-exts-1.122.1.tar.gz) = 1708441
 SHA256 (vscode/rust/crates/Inflector-0.11.4.crate) = fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3
 SIZE (vscode/rust/crates/Inflector-0.11.4.crate) = 17438
 SHA256 (vscode/rust/crates/addr2line-0.24.2.crate) = dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1
@@ -61,8 +61,8 @@ SHA256 (vscode/rust/crates/auto_impl-1.2.0.crate) = 3c87f3f15e7794432337fc718554
 SIZE (vscode/rust/crates/auto_impl-1.2.0.crate) = 31013
 SHA256 (vscode/rust/crates/autocfg-1.4.0.crate) = ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26
 SIZE (vscode/rust/crates/autocfg-1.4.0.crate) = 17712
-SHA256 (vscode/rust/crates/autocfg-1.5.0.crate) = c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8
-SIZE (vscode/rust/crates/autocfg-1.5.0.crate) = 18729
+SHA256 (vscode/rust/crates/autocfg-1.5.1.crate) = f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53
+SIZE (vscode/rust/crates/autocfg-1.5.1.crate) = 18911
 SHA256 (vscode/rust/crates/backtrace-0.3.75.crate) = 6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002
 SIZE (vscode/rust/crates/backtrace-0.3.75.crate) = 92665
 SHA256 (vscode/rust/crates/backtrace-ext-0.2.1.crate) = 537beee3be4a18fb023b570f80e3ae28003db9167a751266b259926e25539d50
@@ -147,8 +147,8 @@ SHA256 (vscode/rust/crates/cbor4ii-1.2.2.crate) = faed1a83001dc2c9201451030cc317
 SIZE (vscode/rust/crates/cbor4ii-1.2.2.crate) = 34356
 SHA256 (vscode/rust/crates/cc-1.2.46.crate) = b97463e1064cb1b1c1384ad0a0b9c8abd0988e2a91f52606c80ef14aadb63e36
 SIZE (vscode/rust/crates/cc-1.2.46.crate) = 92306
-SHA256 (vscode/rust/crates/cc-1.2.62.crate) = a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98
-SIZE (vscode/rust/crates/cc-1.2.62.crate) = 97212
+SHA256 (vscode/rust/crates/cc-1.2.63.crate) = 556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f
+SIZE (vscode/rust/crates/cc-1.2.63.crate) = 97259
 SHA256 (vscode/rust/crates/cfg-if-1.0.4.crate) = 9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801
 SIZE (vscode/rust/crates/cfg-if-1.0.4.crate) = 9360
 SHA256 (vscode/rust/crates/chrono-0.4.42.crate) = 145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2
@@ -263,8 +263,8 @@ SHA256 (vscode/rust/crates/ctor-0.1.26.crate) = 6d2301688392eb071b0bf1a37be05c46
 SIZE (vscode/rust/crates/ctor-0.1.26.crate) = 10803
 SHA256 (vscode/rust/crates/ctor-0.4.1.crate) = 07e9666f4a9a948d4f1dff0c08a4512b0f7c86414b23960104c243c10d79f4c3
 SIZE (vscode/rust/crates/ctor-0.4.1.crate) = 13810
-SHA256 (vscode/rust/crates/ctor-1.0.6.crate) = 6d765eb1c0bda10d31e0ea185f5ee15da532d60b0912d2bd1441783439e749c5
-SIZE (vscode/rust/crates/ctor-1.0.6.crate) = 48620
+SHA256 (vscode/rust/crates/ctor-1.0.7.crate) = 01334b89b69ff726750c5ce5073fc8bd860e99aa9a8fc5ca11b04730e3aee97a
+SIZE (vscode/rust/crates/ctor-1.0.7.crate) = 48863
 SHA256 (vscode/rust/crates/ctor-proc-macro-0.0.5.crate) = 4f211af61d8efdd104f96e57adf5e426ba1bc3ed7a4ead616e15e5881fd79c4d
 SIZE (vscode/rust/crates/ctor-proc-macro-0.0.5.crate) = 2040
 SHA256 (vscode/rust/crates/darling-0.20.10.crate) = 6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989
@@ -337,6 +337,8 @@ SHA256 (vscode/rust/crates/enum-tag-macro-0.3.0.crate) = 1ccd72f8e71e242f7170586
 SIZE (vscode/rust/crates/enum-tag-macro-0.3.0.crate) = 3570
 SHA256 (vscode/rust/crates/equivalent-1.0.1.crate) = 5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5
 SIZE (vscode/rust/crates/equivalent-1.0.1.crate) = 6615
+SHA256 (vscode/rust/crates/equivalent-1.0.2.crate) = 877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f
+SIZE (vscode/rust/crates/equivalent-1.0.2.crate) = 7419
 SHA256 (vscode/rust/crates/errno-0.3.10.crate) = 33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d
 SIZE (vscode/rust/crates/errno-0.3.10.crate) = 11824
 SHA256 (vscode/rust/crates/errno-0.3.14.crate) = 39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb
@@ -449,8 +451,12 @@ SHA256 (vscode/rust/crates/hashbrown-0.14.5.crate) = e5274423e17b7c9fc20b6e7e208
 SIZE (vscode/rust/crates/hashbrown-0.14.5.crate) = 141498
 SHA256 (vscode/rust/crates/hashbrown-0.15.2.crate) = bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289
 SIZE (vscode/rust/crates/hashbrown-0.15.2.crate) = 138478
+SHA256 (vscode/rust/crates/hashbrown-0.15.5.crate) = 9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1
+SIZE (vscode/rust/crates/hashbrown-0.15.5.crate) = 140908
 SHA256 (vscode/rust/crates/hashbrown-0.16.1.crate) = 841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100
 SIZE (vscode/rust/crates/hashbrown-0.16.1.crate) = 147785
+SHA256 (vscode/rust/crates/hashbrown-0.17.1.crate) = ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a
+SIZE (vscode/rust/crates/hashbrown-0.17.1.crate) = 155512
 SHA256 (vscode/rust/crates/hashlink-0.10.0.crate) = 7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1
 SIZE (vscode/rust/crates/hashlink-0.10.0.crate) = 29402
 SHA256 (vscode/rust/crates/heck-0.5.0.crate) = 2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea
@@ -511,6 +517,8 @@ SHA256 (vscode/rust/crates/image-0.25.10.crate) = 85ab80394333c02fe689eaf900ab50
 SIZE (vscode/rust/crates/image-0.25.10.crate) = 303647
 SHA256 (vscode/rust/crates/indexmap-2.12.1.crate) = 0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2
 SIZE (vscode/rust/crates/indexmap-2.12.1.crate) = 100184
+SHA256 (vscode/rust/crates/indexmap-2.14.0.crate) = d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9
+SIZE (vscode/rust/crates/indexmap-2.14.0.crate) = 104085
 SHA256 (vscode/rust/crates/indicatif-0.18.3.crate) = 9375e112e4b463ec1b1c6c011953545c65a30164fbab5b581df32b3abf0dcb88
 SIZE (vscode/rust/crates/indicatif-0.18.3.crate) = 66504
 SHA256 (vscode/rust/crates/indoc-2.0.7.crate) = 79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706
@@ -595,6 +603,8 @@ SHA256 (vscode/rust/crates/lock_api-0.4.14.crate) = 224399e74b87b5f3557511d98dff
 SIZE (vscode/rust/crates/lock_api-0.4.14.crate) = 29249
 SHA256 (vscode/rust/crates/log-0.4.22.crate) = a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24
 SIZE (vscode/rust/crates/log-0.4.22.crate) = 44027
+SHA256 (vscode/rust/crates/log-0.4.30.crate) = 616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5
+SIZE (vscode/rust/crates/log-0.4.30.crate) = 52400
 SHA256 (vscode/rust/crates/loom-0.7.2.crate) = 419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca
 SIZE (vscode/rust/crates/loom-0.7.2.crate) = 73989
 SHA256 (vscode/rust/crates/lru-0.16.2.crate) = 96051b46fc183dc9cd4a223960ef37b9af631b55191852a8274bfef064cda20f
@@ -611,8 +621,8 @@ SHA256 (vscode/rust/crates/md4-0.10.2.crate) = 7da5ac363534dce5fabf69949225e174f
 SIZE (vscode/rust/crates/md4-0.10.2.crate) = 9199
 SHA256 (vscode/rust/crates/memchr-2.7.6.crate) = f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273
 SIZE (vscode/rust/crates/memchr-2.7.6.crate) = 97616
-SHA256 (vscode/rust/crates/memchr-2.8.0.crate) = f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79
-SIZE (vscode/rust/crates/memchr-2.8.0.crate) = 97780
+SHA256 (vscode/rust/crates/memchr-2.8.1.crate) = 6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8
+SIZE (vscode/rust/crates/memchr-2.8.1.crate) = 98743
 SHA256 (vscode/rust/crates/memfd-0.6.4.crate) = b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64
 SIZE (vscode/rust/crates/memfd-0.6.4.crate) = 12820
 SHA256 (vscode/rust/crates/micromegas-perfetto-0.9.0.crate) = cf00fa025e680c9ac4fef886b4448d3cd6eaa6afa09946ff8fcb67f15c73f73c
@@ -669,6 +679,8 @@ SHA256 (vscode/rust/crates/nohash-hasher-0.2.0.crate) = 2bf50223579dc7cdcfb3bfca
 SIZE (vscode/rust/crates/nohash-hasher-0.2.0.crate) = 8051
 SHA256 (vscode/rust/crates/nom-7.1.3.crate) = d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a
 SIZE (vscode/rust/crates/nom-7.1.3.crate) = 117570
+SHA256 (vscode/rust/crates/nom-8.0.0.crate) = df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405
+SIZE (vscode/rust/crates/nom-8.0.0.crate) = 135590
 SHA256 (vscode/rust/crates/normpath-0.2.0.crate) = 2a9da8c9922c35a1033d76f7272dfc2e7ee20392083d75aeea6ced23c6266578
 SIZE (vscode/rust/crates/normpath-0.2.0.crate) = 14828
 SHA256 (vscode/rust/crates/notify-8.2.0.crate) = 4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3
@@ -767,6 +779,8 @@ SHA256 (vscode/rust/crates/percent-encoding-2.3.2.crate) = 9b4f627cb1b25917193a2
 SIZE (vscode/rust/crates/percent-encoding-2.3.2.crate) = 11583
 SHA256 (vscode/rust/crates/petgraph-0.7.1.crate) = 3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772
 SIZE (vscode/rust/crates/petgraph-0.7.1.crate) = 736025
+SHA256 (vscode/rust/crates/petgraph-0.8.3.crate) = 8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455
+SIZE (vscode/rust/crates/petgraph-0.8.3.crate) = 807555
 SHA256 (vscode/rust/crates/phf-0.11.2.crate) = ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc
 SIZE (vscode/rust/crates/phf-0.11.2.crate) = 21569
 SHA256 (vscode/rust/crates/phf_codegen-0.11.2.crate) = e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a
@@ -959,6 +973,8 @@ SHA256 (vscode/rust/crates/sharded-slab-0.1.7.crate) = f40ca3c46823713e0d4209592
 SIZE (vscode/rust/crates/sharded-slab-0.1.7.crate) = 58227
 SHA256 (vscode/rust/crates/shlex-1.3.0.crate) = 0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64
 SIZE (vscode/rust/crates/shlex-1.3.0.crate) = 18713
+SHA256 (vscode/rust/crates/shlex-2.0.1.crate) = f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba
+SIZE (vscode/rust/crates/shlex-2.0.1.crate) = 19332
 SHA256 (vscode/rust/crates/signal-hook-0.3.18.crate) = d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2
 SIZE (vscode/rust/crates/signal-hook-0.3.18.crate) = 50862
 SHA256 (vscode/rust/crates/signal-hook-registry-1.4.5.crate) = 9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410
@@ -1249,6 +1265,8 @@ SHA256 (vscode/rust/crates/tracy-client-0.18.4.crate) = a4f6fc3baeac5d86ab90c772
 SIZE (vscode/rust/crates/tracy-client-0.18.4.crate) = 32303
 SHA256 (vscode/rust/crates/tracy-client-sys-0.26.0.crate) = 5f9612d9503675b07b244922ea6f6f3cdd88c43add1b3498084613fc88cdf69d
 SIZE (vscode/rust/crates/tracy-client-sys-0.26.0.crate) = 350285
+SHA256 (vscode/rust/crates/tree_magic_mini-3.2.2.crate) = b8765b90061cba6c22b5831f675da109ae5561588290f9fa2317adab2714d5a6
+SIZE (vscode/rust/crates/tree_magic_mini-3.2.2.crate) = 16074
 SHA256 (vscode/rust/crates/triomphe-0.1.14.crate) = ef8f7726da4807b58ea5c96fdc122f80702030edc33b35aff9190a51148ccc85
 SIZE (vscode/rust/crates/triomphe-0.1.14.crate) = 30292
 SHA256 (vscode/rust/crates/trybuild-1.0.114.crate) = 3e17e807bff86d2a06b52bca4276746584a78375055b6e45843925ce2802b335
@@ -1361,8 +1379,8 @@ SHA256 (vscode/rust/crates/wayland-backend-0.3.15.crate) = 2857dd20b54e916ec7253
 SIZE (vscode/rust/crates/wayland-backend-0.3.15.crate) = 79957
 SHA256 (vscode/rust/crates/wayland-client-0.31.14.crate) = 645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144
 SIZE (vscode/rust/crates/wayland-client-0.31.14.crate) = 68263
-SHA256 (vscode/rust/crates/wayland-clipboard-listener-0.3.1.crate) = 04e1ff259f1ed9022cb6a75cb436554d7da14f98c9e7c036a2e685d4b8730e81
-SIZE (vscode/rust/crates/wayland-clipboard-listener-0.3.1.crate) = 23024
+SHA256 (vscode/rust/crates/wayland-clipboard-listener-0.6.1.crate) = e60206d76740796d9242e7c8e1378badde3bf39b61caa7503609ffc7aa3a7d5c
+SIZE (vscode/rust/crates/wayland-clipboard-listener-0.6.1.crate) = 24791
 SHA256 (vscode/rust/crates/wayland-protocols-0.32.12.crate) = 563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f
 SIZE (vscode/rust/crates/wayland-protocols-0.32.12.crate) = 156132
 SHA256 (vscode/rust/crates/wayland-protocols-wlr-0.3.12.crate) = eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234
@@ -1497,6 +1515,8 @@ SHA256 (vscode/rust/crates/wit-bindgen-rt-0.39.0.crate) = 6f42320e61fe2cfd34354e
 SIZE (vscode/rust/crates/wit-bindgen-rt-0.39.0.crate) = 12241
 SHA256 (vscode/rust/crates/witx-0.9.1.crate) = e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b
 SIZE (vscode/rust/crates/witx-0.9.1.crate) = 45928
+SHA256 (vscode/rust/crates/wl-clipboard-rs-0.9.3.crate) = e9651471a32e87d96ef3a127715382b2d11cc7c8bb9822ded8a7cc94072eb0a3
+SIZE (vscode/rust/crates/wl-clipboard-rs-0.9.3.crate) = 39012
 SHA256 (vscode/rust/crates/write16-1.0.0.crate) = d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936
 SIZE (vscode/rust/crates/write16-1.0.0.crate) = 7218
 SHA256 (vscode/rust/crates/writeable-0.5.5.crate) = 1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51
@@ -1525,14 +1545,14 @@ SHA256 (vscode/rust/crates/zerocopy-0.7.35.crate) = 1b9b4fd18abc82b8136838da5d50
 SIZE (vscode/rust/crates/zerocopy-0.7.35.crate) = 152645
 SHA256 (vscode/rust/crates/zerocopy-0.8.25.crate) = a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb
 SIZE (vscode/rust/crates/zerocopy-0.8.25.crate) = 252714
-SHA256 (vscode/rust/crates/zerocopy-0.8.48.crate) = eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9
-SIZE (vscode/rust/crates/zerocopy-0.8.48.crate) = 287554
+SHA256 (vscode/rust/crates/zerocopy-0.8.50.crate) = 3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1
+SIZE (vscode/rust/crates/zerocopy-0.8.50.crate) = 287760
 SHA256 (vscode/rust/crates/zerocopy-derive-0.7.35.crate) = fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e
 SIZE (vscode/rust/crates/zerocopy-derive-0.7.35.crate) = 37829
 SHA256 (vscode/rust/crates/zerocopy-derive-0.8.25.crate) = 28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef
 SIZE (vscode/rust/crates/zerocopy-derive-0.8.25.crate) = 87671
-SHA256 (vscode/rust/crates/zerocopy-derive-0.8.48.crate) = 70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4
-SIZE (vscode/rust/crates/zerocopy-derive-0.8.48.crate) = 97646
+SHA256 (vscode/rust/crates/zerocopy-derive-0.8.50.crate) = 0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639
+SIZE (vscode/rust/crates/zerocopy-derive-0.8.50.crate) = 97640
 SHA256 (vscode/rust/crates/zerofrom-0.1.5.crate) = cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e
 SIZE (vscode/rust/crates/zerofrom-0.1.5.crate) = 5091
 SHA256 (vscode/rust/crates/zerofrom-derive-0.1.5.crate) = 595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808
@@ -1557,9 +1577,9 @@ SHA256 (vscode/rust/crates/zune-jpeg-0.5.15.crate) = 27bc9d5b815bc103f142aa054f5
 SIZE (vscode/rust/crates/zune-jpeg-0.5.15.crate) = 88879
 SHA256 (vscode/mcountryman-simd-adler32-b279034d9eb554c3e5e0af523db044f08d8297ba_GH0.tar.gz) = 164ce6fb0a7d70c6713de282972e88058ae716b4a61191e63f1b005169c09f74
 SIZE (vscode/mcountryman-simd-adler32-b279034d9eb554c3e5e0af523db044f08d8297ba_GH0.tar.gz) = 18095
-SHA256 (vscode/microsoft-vscode-1.121.0_GH0.tar.gz) = e35ec54af68148d70996bcb3bb7d29e7726dee3c01f1a9e4dbd03ab6154b15de
-SIZE (vscode/microsoft-vscode-1.121.0_GH0.tar.gz) = 42217839
-SHA256 (vscode/Teddy-Zhu-node-clipboard-rs-v0.0.5_GH0.tar.gz) = 998b7b7709c5d95aca27ba59ca464825a1e48ae9a19c4e52c4f525b6de404755
-SIZE (vscode/Teddy-Zhu-node-clipboard-rs-v0.0.5_GH0.tar.gz) = 1120191
+SHA256 (vscode/microsoft-vscode-1.122.1_GH0.tar.gz) = d7dc639c5c10aafa41b735c48d4b9347a19afb03ef6af3277a6d6af8b711aa7e
+SIZE (vscode/microsoft-vscode-1.122.1_GH0.tar.gz) = 42706904
+SHA256 (vscode/Teddy-Zhu-node-clipboard-rs-v0.0.10_GH0.tar.gz) = 11eb5ef78ef1e4f6d6bb85a989eb14050b9cb94166a298a5ce4b5d10b9d8b9d6
+SIZE (vscode/Teddy-Zhu-node-clipboard-rs-v0.0.10_GH0.tar.gz) = 1166414
 SHA256 (vscode/web-infra-dev-rspack-v1.7.10_GH0.tar.gz) = 8e9694ca114e58efd038db41c1d6176e5d353da4a6b31f23fd8f3fc683a643ec
 SIZE (vscode/web-infra-dev-rspack-v1.7.10_GH0.tar.gz) = 11095252
diff --git a/editors/vscode/files/patch-build_gulpfile.extensions.ts b/editors/vscode/files/patch-build_gulpfile.extensions.ts
index ae45ded067da..cc726580301b 100644
--- a/editors/vscode/files/patch-build_gulpfile.extensions.ts
+++ b/editors/vscode/files/patch-build_gulpfile.extensions.ts
@@ -1,6 +1,6 @@
---- build/gulpfile.extensions.ts.orig	2026-05-05 18:23:50 UTC
+--- build/gulpfile.extensions.ts.orig	2026-05-29 07:25:37 UTC
 +++ build/gulpfile.extensions.ts
-@@ -274,7 +274,7 @@ export const compileNonNativeExtensionsBuildTask = tas
+@@ -271,7 +271,7 @@ export const compileNonNativeExtensionsBuildTask = tas
   * @note this does not clean the directory ahead of it. See {@link cleanExtensionsBuildTask} for that.
   */
  export const compileNonNativeExtensionsBuildTask = task.define('compile-non-native-extensions-build', task.series(
@@ -8,4 +8,4 @@
 +	// bundleMarketplaceExtensionsBuildTask,
  	task.define('bundle-non-native-extensions-build', () => ext.packageNonNativeLocalExtensionsStream(false, false).pipe(gulp.dest('.build')))
  ));
- gulp.task(compileNonNativeExtensionsBuildTask);
+ task.task(compileNonNativeExtensionsBuildTask);
diff --git a/editors/vscode/files/patch-build_gulpfile.reh.ts b/editors/vscode/files/patch-build_gulpfile.reh.ts
index 694b51606948..caeb2a84bab6 100644
--- a/editors/vscode/files/patch-build_gulpfile.reh.ts
+++ b/editors/vscode/files/patch-build_gulpfile.reh.ts
@@ -1,6 +1,6 @@
---- build/gulpfile.reh.ts.orig	2026-04-29 14:36:44 UTC
+--- build/gulpfile.reh.ts.orig	2026-05-29 07:25:37 UTC
 +++ build/gulpfile.reh.ts
-@@ -27,7 +27,7 @@ import rceditCallback from 'rcedit';
+@@ -22,7 +22,7 @@ import rceditCallback from 'rcedit';
  import glob from 'glob';
  import { promisify } from 'util';
  import rceditCallback from 'rcedit';
@@ -9,7 +9,7 @@
  import { cleanExtensionsBuildTask, compileNonNativeExtensionsBuildTask, compileNativeExtensionsBuildTask, compileExtensionMediaBuildTask, compileCopilotExtensionBuildTask } from './gulpfile.extensions.ts';
  import { vscodeWebResourceIncludes, createVSCodeWebFileContentMapper } from './gulpfile.vscode.web.ts';
  import * as cp from 'child_process';
-@@ -327,7 +327,7 @@ function packageTask(type: string, platform: string, a
+@@ -321,7 +321,7 @@ function packageTask(type: string, platform: string, a
  
  		let productJsonContents = '';
  		const productJsonStream = gulp.src(['product.json'], { base: '.' })
@@ -18,8 +18,8 @@
  			.pipe(es.through(function (file) {
  				productJsonContents = file.contents.toString();
  				this.emit('data', file);
-@@ -533,7 +533,7 @@ function tweakProductForServerWeb(product: typeof impo
- 			gulp.task(serverTaskCI);
+@@ -564,7 +564,7 @@ function tweakProductForServerWeb(product: typeof impo
+ 			task.task(serverTaskCI);
  
  			const serverTask = task.define(`vscode-${type}${dashed(platform)}${dashed(arch)}${dashed(minified)}`, task.series(
 -				compileBuildWithManglingTask,
diff --git a/editors/vscode/files/patch-build_gulpfile.vscode.ts b/editors/vscode/files/patch-build_gulpfile.vscode.ts
index ca78ed6866fe..c53dce049e4a 100644
--- a/editors/vscode/files/patch-build_gulpfile.vscode.ts
+++ b/editors/vscode/files/patch-build_gulpfile.vscode.ts
@@ -1,6 +1,6 @@
---- build/gulpfile.vscode.ts.orig	2026-05-12 20:17:22 UTC
+--- build/gulpfile.vscode.ts.orig	2026-05-29 07:25:37 UTC
 +++ build/gulpfile.vscode.ts
-@@ -307,6 +307,7 @@ function packageTask(platform: string, arch: string, s
+@@ -304,6 +304,7 @@ function packageTask(platform: string, arch: string, s
  				json.date = readISODate(out);
  				json.checksums = checksums;
  				json.version = version;
diff --git a/editors/vscode/files/patch-build_lib_electron.ts b/editors/vscode/files/patch-build_lib_electron.ts
index e88a3b276274..dbc1e2670b64 100644
--- a/editors/vscode/files/patch-build_lib_electron.ts
+++ b/editors/vscode/files/patch-build_lib_electron.ts
@@ -1,6 +1,6 @@
---- build/lib/electron.ts.orig	2026-03-06 23:06:10 UTC
+--- build/lib/electron.ts.orig	2026-05-29 07:25:37 UTC
 +++ build/lib/electron.ts
-@@ -204,10 +204,11 @@ export const config = {
+@@ -203,10 +203,11 @@ export const config = {
  	winIcon: 'resources/win32/code.ico',
  	token: process.env['GITHUB_TOKEN'],
  	repo: product.electronRepository || undefined,
diff --git a/editors/vscode/files/patch-node-clipboard-rs_Cargo.toml b/editors/vscode/files/patch-node-clipboard-rs_Cargo.toml
index d505f2194503..c2e66cccce85 100644
--- a/editors/vscode/files/patch-node-clipboard-rs_Cargo.toml
+++ b/editors/vscode/files/patch-node-clipboard-rs_Cargo.toml
@@ -1,4 +1,4 @@
---- node-clipboard-rs/Cargo.toml.orig	2025-07-25 09:14:50 UTC
+--- node-clipboard-rs/Cargo.toml.orig	2026-03-04 05:28:38 UTC
 +++ node-clipboard-rs/Cargo.toml
 @@ -16,7 +16,7 @@ tokio        = { version = "1.0", features = ["rt", "r
  tokio        = { version = "1.0", features = ["rt", "rt-multi-thread"] }
@@ -6,6 +6,6 @@
  # 仅在 Linux 平台上引入 wayland-clipboard-listener
 -[target.'cfg(target_os = "linux")'.dependencies]
 +[target.'cfg(any(target_os = "linux", target_os = "freebsd"))'.dependencies]
- wayland-clipboard-listener = "0.3.1"
+ wayland-clipboard-listener = "0.6.0"
+ wl-clipboard-rs           = "0.9.3"
  
- [build-dependencies]
diff --git a/editors/vscode/files/patch-node-clipboard-rs_src_lib.rs b/editors/vscode/files/patch-node-clipboard-rs_src_lib.rs
index a70063eb591c..1311bdf21599 100644
--- a/editors/vscode/files/patch-node-clipboard-rs_src_lib.rs
+++ b/editors/vscode/files/patch-node-clipboard-rs_src_lib.rs
@@ -1,20 +1,22 @@
---- node-clipboard-rs/src/lib.rs.orig	2026-03-30 13:27:40 UTC
+--- node-clipboard-rs/src/lib.rs.orig	2026-03-04 05:28:38 UTC
 +++ node-clipboard-rs/src/lib.rs
-@@ -12,11 +12,11 @@ use std::thread;
+@@ -12,7 +12,7 @@ use std::thread;
+ use std::sync::OnceLock;
  use std::thread;
  
- // 仅在 Linux 下导入 Wayland 相关依赖
 -#[cfg(target_os = "linux")]
 +#[cfg(any(target_os = "linux", target_os = "freebsd"))]
- use wayland_clipboard_listener::{ClipBoardListenMessage, WlClipboardPasteStream, WlListenType};
+ mod wayland;
+ 
+ pub(crate) fn is_debug_logging_enabled() -> bool {
+@@ -39,13 +39,13 @@ macro_rules! listener_log {
+   }};
+ }
  
- /// 检测当前环境是否为 Wayland
 -#[cfg(target_os = "linux")]
 +#[cfg(any(target_os = "linux", target_os = "freebsd"))]
  fn is_wayland_environment() -> bool {
-   // 检查 WAYLAND_DISPLAY 环境变量
-   if std::env::var("WAYLAND_DISPLAY").is_ok() {
-@@ -34,7 +34,7 @@ fn is_wayland_environment() -> bool {
+   wayland::is_wayland_environment()
  }
  
  /// 非 Linux 平台的 Wayland 环境检测(总是返回 false)
@@ -23,17 +25,14 @@
  fn is_wayland_environment() -> bool {
    false
  }
-@@ -44,7 +44,7 @@ pub fn is_wayland_clipboard_available() -> bool {
+@@ -55,12 +55,12 @@ pub fn is_wayland_clipboard_available() -> bool {
  /// 返回 true 表示当前环境支持 Wayland 剪贴板监听
  #[napi]
  pub fn is_wayland_clipboard_available() -> bool {
 -  #[cfg(target_os = "linux")]
 +  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
    {
-     if !is_wayland_environment() {
-       return false;
-@@ -54,7 +54,7 @@ pub fn is_wayland_clipboard_available() -> bool {
-     WlClipboardPasteStream::init(WlListenType::ListenOnCopy).is_ok()
+     wayland::is_wayland_clipboard_available()
    }
  
 -  #[cfg(not(target_os = "linux"))]
@@ -41,16 +40,358 @@
    {
      false
    }
-@@ -820,7 +820,7 @@ pub fn clear_clipboard() -> Result<()> {
- }
+@@ -174,7 +174,7 @@ impl ClipboardManager {
+   /// 获取剪贴板中的纯文本内容
+   #[napi]
+   pub fn get_text(&self) -> Result<String> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return wayland::get_text()
+         .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to get text: {e}")));
+@@ -189,7 +189,7 @@ impl ClipboardManager {
+   /// 设置剪贴板中的纯文本内容
+   #[napi]
+   pub fn set_text(&self, text: String) -> Result<()> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return wayland::set_text(text)
+         .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to set text: {e}")));
+@@ -204,7 +204,7 @@ impl ClipboardManager {
+   /// 获取剪贴板中的 HTML 内容
+   #[napi]
+   pub fn get_html(&self) -> Result<String> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return wayland::get_html()
+         .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to get HTML: {e}")));
+@@ -219,7 +219,7 @@ impl ClipboardManager {
+   /// 设置剪贴板中的 HTML 内容
+   #[napi]
+   pub fn set_html(&self, html: String) -> Result<()> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return wayland::set_html(html)
+         .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to set HTML: {e}")));
+@@ -234,7 +234,7 @@ impl ClipboardManager {
+   /// 获取剪贴板中的富文本内容
+   #[napi]
+   pub fn get_rich_text(&self) -> Result<String> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return wayland::get_rich_text().map_err(|e| {
+         Error::new(
+@@ -256,7 +256,7 @@ impl ClipboardManager {
+   /// 设置剪贴板中的富文本内容
+   #[napi]
+   pub fn set_rich_text(&self, text: String) -> Result<()> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return wayland::set_rich_text(text).map_err(|e| {
+         Error::new(
+@@ -278,7 +278,7 @@ impl ClipboardManager {
+   /// 获取剪贴板中的图片数据(以 base64 编码返回)
+   #[napi]
+   pub fn get_image_base64(&self) -> Result<String> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       let image_data = wayland::get_image_raw()
+         .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to get image: {e}")))?;
+@@ -298,7 +298,7 @@ impl ClipboardManager {
+   /// 获取剪贴板中的图片详细信息(包含宽度、高度、大小和原始数据)
+   #[napi]
+   pub fn get_image_data(&self) -> Result<ImageData> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       let image_data = wayland::get_image_raw()
+         .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to get image: {e}")))?;
+@@ -334,7 +334,7 @@ impl ClipboardManager {
+       )
+     })?;
  
- /// 将 Wayland 剪贴板消息转换为我们的 ClipboardData 格式
--#[cfg(target_os = "linux")]
-+#[cfg(any(target_os = "linux", target_os = "freebsd"))]
- fn wayland_context_to_clipboard_data(message: ClipBoardListenMessage) -> ClipboardData {
-   let mut available_formats = Vec::new();
-   let mut text = None;
-@@ -942,7 +942,7 @@ enum ListenerType {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       let png_bytes = image_to_png_bytes(&rust_image, "Failed to set image")?;
+       return wayland::set_image_raw(png_bytes)
+@@ -357,7 +357,7 @@ impl ClipboardManager {
+       )
+     })?;
+ 
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       let png_bytes = image_to_png_bytes(&rust_image, "Failed to set image")?;
+       return wayland::set_image_raw(png_bytes)
+@@ -373,7 +373,7 @@ impl ClipboardManager {
+   /// 获取剪贴板中的图片原始数据(Buffer)
+   #[napi]
+   pub fn get_image_raw(&self) -> Result<Buffer> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       let image_data = wayland::get_image_raw()
+         .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to get image: {e}")))?;
+@@ -393,7 +393,7 @@ impl ClipboardManager {
+   /// 获取剪贴板中的文件列表
+   #[napi]
+   pub fn get_files(&self) -> Result<Vec<String>> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return wayland::get_files()
+         .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to get files: {e}")));
+@@ -408,7 +408,7 @@ impl ClipboardManager {
+   /// 设置剪贴板中的文件列表
+   #[napi]
+   pub fn set_files(&self, files: Vec<String>) -> Result<()> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return wayland::set_files(files)
+         .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to set files: {e}")));
+@@ -423,7 +423,7 @@ impl ClipboardManager {
+   /// 设置剪贴板中的自定义格式数据
+   #[napi]
+   pub fn set_buffer(&self, format: String, buffer: Buffer) -> Result<()> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return wayland::set_buffer(format, buffer.to_vec())
+         .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to set buffer: {e}")));
+@@ -438,7 +438,7 @@ impl ClipboardManager {
+   /// 获取剪贴板中的自定义格式数据
+   #[napi]
+   pub fn get_buffer(&self, format: String) -> Result<Buffer> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       let data = wayland::get_buffer(format)
+         .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to get buffer: {e}")))?;
+@@ -455,7 +455,7 @@ impl ClipboardManager {
+   /// 设置剪贴板中的复合内容(可同时设置多种格式)
+   #[napi]
+   pub fn set_contents(&self, contents: ClipboardData) -> Result<()> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return wayland::set_contents(contents).map_err(|e| {
+         Error::new(
+@@ -522,7 +522,7 @@ impl ClipboardManager {
+       }
+     };
+ 
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return wayland::has_format(normalized_format).map_err(|e| {
+         Error::new(
+@@ -548,7 +548,7 @@ impl ClipboardManager {
+   /// 获取剪贴板中所有可用的格式
+   #[napi]
+   pub fn get_available_formats(&self) -> Result<Vec<String>> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return wayland::get_available_formats().map_err(|e| {
+         Error::new(
+@@ -570,7 +570,7 @@ impl ClipboardManager {
+   /// 清空剪贴板
+   #[napi]
+   pub fn clear(&self) -> Result<()> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return wayland::clear().map_err(|e| {
+         Error::new(
+@@ -592,7 +592,7 @@ impl ClipboardManager {
+   /// 异步获取剪贴板文本内容
+   #[napi]
+   pub async fn get_text_async(&self) -> Result<String> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return tokio::task::spawn_blocking(move || {
+         wayland::get_text()
+@@ -621,7 +621,7 @@ impl ClipboardManager {
+   /// 异步设置剪贴板文本内容
+   #[napi]
+   pub async fn set_text_async(&self, text: String) -> Result<()> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return tokio::task::spawn_blocking(move || {
+         wayland::set_text(text)
+@@ -650,7 +650,7 @@ impl ClipboardManager {
+   /// 异步获取剪贴板图片数据(以 base64 编码返回)
+   #[napi]
+   pub async fn get_image_base64_async(&self) -> Result<String> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return tokio::task::spawn_blocking(move || {
+         let image_data = wayland::get_image_raw()
+@@ -683,7 +683,7 @@ impl ClipboardManager {
+   /// 异步获取剪贴板图片详细信息(包含宽度、高度、大小和原始数据)
+   #[napi]
+   pub async fn get_image_data_async(&self) -> Result<ImageData> {
+-    #[cfg(target_os = "linux")]
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     if is_wayland_environment() {
+       return tokio::task::spawn_blocking(move || {
+         let image_data = wayland::get_image_raw()
+@@ -725,7 +725,7 @@ pub fn get_clipboard_text() -> Result<String> {
+ /// 快速获取剪贴板文本内容
+ #[napi]
+ pub fn get_clipboard_text() -> Result<String> {
+-  #[cfg(target_os = "linux")]
++  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+   if is_wayland_environment() {
+     return wayland::get_text()
+       .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to get text: {e}")));
+@@ -746,7 +746,7 @@ pub fn set_clipboard_text(text: String) -> Result<()> 
+ /// 快速设置剪贴板文本内容
+ #[napi]
+ pub fn set_clipboard_text(text: String) -> Result<()> {
+-  #[cfg(target_os = "linux")]
++  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+   if is_wayland_environment() {
+     return wayland::set_text(text)
+       .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to set text: {e}")));
+@@ -767,7 +767,7 @@ pub fn get_clipboard_html() -> Result<String> {
+ /// 快速获取剪贴板 HTML 内容
+ #[napi]
+ pub fn get_clipboard_html() -> Result<String> {
+-  #[cfg(target_os = "linux")]
++  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+   if is_wayland_environment() {
+     return wayland::get_html()
+       .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to get HTML: {e}")));
+@@ -788,7 +788,7 @@ pub fn set_clipboard_html(html: String) -> Result<()> 
+ /// 快速设置剪贴板 HTML 内容
+ #[napi]
+ pub fn set_clipboard_html(html: String) -> Result<()> {
+-  #[cfg(target_os = "linux")]
++  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+   if is_wayland_environment() {
+     return wayland::set_html(html)
+       .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to set HTML: {e}")));
+@@ -809,7 +809,7 @@ pub fn get_clipboard_image() -> Result<String> {
+ /// 快速获取剪贴板图片(base64 编码)
+ #[napi]
+ pub fn get_clipboard_image() -> Result<String> {
+-  #[cfg(target_os = "linux")]
++  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+   if is_wayland_environment() {
+     let image_data = wayland::get_image_raw()
+       .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to get image: {e}")))?;
+@@ -835,7 +835,7 @@ pub fn get_clipboard_image_data() -> Result<ImageData>
+ /// 快速获取剪贴板图片详细信息(包含宽度、高度、大小和原始数据)
+ #[napi]
+ pub fn get_clipboard_image_data() -> Result<ImageData> {
+-  #[cfg(target_os = "linux")]
++  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+   if is_wayland_environment() {
+     let image_data = wayland::get_image_raw()
+       .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to get image: {e}")))?;
+@@ -877,7 +877,7 @@ pub fn set_clipboard_image(base64_data: String) -> Res
+     )
+   })?;
+ 
+-  #[cfg(target_os = "linux")]
++  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+   if is_wayland_environment() {
+     let png_bytes = image_to_png_bytes(&rust_image, "Failed to set image")?;
+     return wayland::set_image_raw(png_bytes)
+@@ -906,7 +906,7 @@ pub fn set_clipboard_image_raw(image_data: Buffer) -> 
+     )
+   })?;
+ 
+-  #[cfg(target_os = "linux")]
++  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+   if is_wayland_environment() {
+     let png_bytes = image_to_png_bytes(&rust_image, "Failed to set image")?;
+     return wayland::set_image_raw(png_bytes)
+@@ -928,7 +928,7 @@ pub fn get_clipboard_image_raw() -> Result<Buffer> {
+ /// 快速获取剪贴板图片原始数据(Buffer)
+ #[napi]
+ pub fn get_clipboard_image_raw() -> Result<Buffer> {
+-  #[cfg(target_os = "linux")]
++  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+   if is_wayland_environment() {
+     let image_data = wayland::get_image_raw()
+       .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to get image: {e}")))?;
+@@ -954,7 +954,7 @@ pub fn set_clipboard_buffer(format: String, buffer: Bu
+ /// 快速设置剪贴板自定义格式数据
+ #[napi]
+ pub fn set_clipboard_buffer(format: String, buffer: Buffer) -> Result<()> {
+-  #[cfg(target_os = "linux")]
++  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+   if is_wayland_environment() {
+     return wayland::set_buffer(format, buffer.to_vec())
+       .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to set buffer: {e}")));
+@@ -975,7 +975,7 @@ pub fn get_clipboard_buffer(format: String) -> Result<
+ /// 快速获取剪贴板自定义格式数据
+ #[napi]
+ pub fn get_clipboard_buffer(format: String) -> Result<Buffer> {
+-  #[cfg(target_os = "linux")]
++  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+   if is_wayland_environment() {
+     let data = wayland::get_buffer(format)
+       .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to get buffer: {e}")))?;
+@@ -998,7 +998,7 @@ pub fn set_clipboard_files(files: Vec<String>) -> Resu
+ /// 快速设置剪贴板文件列表
+ #[napi]
+ pub fn set_clipboard_files(files: Vec<String>) -> Result<()> {
+-  #[cfg(target_os = "linux")]
++  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+   if is_wayland_environment() {
+     return wayland::set_files(files)
+       .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to set files: {e}")));
+@@ -1019,7 +1019,7 @@ pub fn get_clipboard_files() -> Result<Vec<String>> {
+ /// 快速获取剪贴板文件列表
+ #[napi]
+ pub fn get_clipboard_files() -> Result<Vec<String>> {
+-  #[cfg(target_os = "linux")]
++  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+   if is_wayland_environment() {
+     return wayland::get_files()
+       .map_err(|e| Error::new(Status::GenericFailure, format!("Failed to get files: {e}")));
+@@ -1040,7 +1040,7 @@ pub fn set_clipboard_contents(contents: ClipboardData)
+ /// 快速设置剪贴板复合内容(可同时设置多种格式)
+ #[napi]
+ pub fn set_clipboard_contents(contents: ClipboardData) -> Result<()> {
+-  #[cfg(target_os = "linux")]
++  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+   if is_wayland_environment() {
+     return wayland::set_contents(contents).map_err(|e| {
+       Error::new(
+@@ -1099,7 +1099,7 @@ pub fn get_full_clipboard_data() -> Result<ClipboardDa
+ /// 快速获取完整的剪贴板数据
+ #[napi]
+ pub fn get_full_clipboard_data() -> Result<ClipboardData> {
+-  #[cfg(target_os = "linux")]
++  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+   if is_wayland_environment() {
+     return wayland::get_full_clipboard_data().map_err(|e| {
+       Error::new(
+@@ -1122,7 +1122,7 @@ pub fn clear_clipboard() -> Result<()> {
+ /// 快速清空剪贴板
+ #[napi]
+ pub fn clear_clipboard() -> Result<()> {
+-  #[cfg(target_os = "linux")]
++  #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+   if is_wayland_environment() {
+     return wayland::clear().map_err(|e| {
+       Error::new(
+@@ -1219,7 +1219,7 @@ enum ListenerType {
    /// 使用 clipboard_rs 监听器(X11/通用)
    ClipboardRs(clipboard_rs::WatcherShutdown),
    /// 使用 Wayland 专用监听器(仅 Linux)
@@ -59,7 +400,7 @@
    Wayland(std::sync::mpsc::Sender<()>),
  }
  
-@@ -1007,7 +1007,7 @@ impl ClipboardListener {
+@@ -1300,7 +1300,7 @@ impl ClipboardListener {
    }
  
    /// 使用 Wayland 专用监听器监听剪贴板变化
@@ -68,7 +409,7 @@
    fn watch_wayland(
      &mut self,
      tsfn: ThreadsafeFunction<ClipboardData, (), ClipboardData, napi::Status, false>,
-@@ -1053,7 +1053,7 @@ impl ClipboardListener {
+@@ -1316,7 +1316,7 @@ impl ClipboardListener {
    }
  
    /// 非 Linux 平台的 Wayland 监听器(空实现)
@@ -77,12 +418,12 @@
    fn watch_wayland(
      &mut self,
      _tsfn: ThreadsafeFunction<ClipboardData, (), ClipboardData, napi::Status, false>,
-@@ -1132,7 +1132,7 @@ impl ClipboardListener {
-         ListenerType::ClipboardRs(shutdown) => {
+@@ -1429,7 +1429,7 @@ impl ClipboardListener {
+           listener_log!("stop called for generic listener");
            shutdown.stop();
          }
 -        #[cfg(target_os = "linux")]
 +        #[cfg(any(target_os = "linux", target_os = "freebsd"))]
          ListenerType::Wayland(stop_tx) => {
-           let _ = stop_tx.send(());
-         }
+           listener_log!("stop called for wayland listener");
+           if let Err(e) = stop_tx.send(()) {
*** 567 LINES SKIPPED ***


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a1b9805.25ec5.6ef887d>