From 4e834cdb3ca510e40cc551f2affcf9f47df4ba93 Mon Sep 17 00:00:00 2001 From: Alex Yaroshuk Date: Sun, 1 Mar 2026 12:42:28 +0800 Subject: [PATCH] feat: windows folder context menu --- packages/desktop/src-tauri/src/lib.rs | 4 ++-- packages/desktop/src-tauri/tauri.conf.json | 3 ++- packages/desktop/src-tauri/windows/hooks.nsh | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 packages/desktop/src-tauri/windows/hooks.nsh diff --git a/packages/desktop/src-tauri/src/lib.rs b/packages/desktop/src-tauri/src/lib.rs index 137692cdf73..b32aefd0ffa 100644 --- a/packages/desktop/src-tauri/src/lib.rs +++ b/packages/desktop/src-tauri/src/lib.rs @@ -25,7 +25,7 @@ use std::{ time::Duration, }; use tauri::{AppHandle, Listener, Manager, RunEvent, State, ipc::Channel}; -#[cfg(any(target_os = "linux", all(debug_assertions, windows)))] +#[cfg(any(target_os = "linux", target_os = "windows"))] use tauri_plugin_deep_link::DeepLinkExt; use tauri_specta::Event; use tokio::{ @@ -596,7 +596,7 @@ async fn initialize(app: AppHandle) { } fn setup_app(app: &tauri::AppHandle, init_rx: watch::Receiver) { - #[cfg(any(target_os = "linux", all(debug_assertions, windows)))] + #[cfg(any(target_os = "linux", target_os = "windows"))] app.deep_link().register_all().ok(); app.manage(InitState { current: init_rx }); diff --git a/packages/desktop/src-tauri/tauri.conf.json b/packages/desktop/src-tauri/tauri.conf.json index d5ca15b8a71..d6dc1d7ac6f 100644 --- a/packages/desktop/src-tauri/tauri.conf.json +++ b/packages/desktop/src-tauri/tauri.conf.json @@ -48,7 +48,8 @@ "nsis": { "installerIcon": "icons/dev/icon.ico", "headerImage": "assets/nsis-header.bmp", - "sidebarImage": "assets/nsis-sidebar.bmp" + "sidebarImage": "assets/nsis-sidebar.bmp", + "installerHooks": "./windows/hooks.nsh" } } }, diff --git a/packages/desktop/src-tauri/windows/hooks.nsh b/packages/desktop/src-tauri/windows/hooks.nsh new file mode 100644 index 00000000000..00c9f008ef1 --- /dev/null +++ b/packages/desktop/src-tauri/windows/hooks.nsh @@ -0,0 +1,17 @@ +!macro NSIS_HOOK_POSTINSTALL + ; Register "Open with OpenCode" context menu for folders + WriteRegStr HKCU "Software\Classes\Directory\shell\OpenCode" "" "Open with OpenCode" + WriteRegStr HKCU "Software\Classes\Directory\shell\OpenCode" "Icon" "$INSTDIR\OpenCode.exe" + WriteRegStr HKCU "Software\Classes\Directory\shell\OpenCode\command" "" '"$INSTDIR\OpenCode.exe" "opencode://open-project?directory=%V"' + + ; Register for directory background (right-click in empty space inside folder) + WriteRegStr HKCU "Software\Classes\Directory\Background\shell\OpenCode" "" "Open with OpenCode" + WriteRegStr HKCU "Software\Classes\Directory\Background\shell\OpenCode" "Icon" "$INSTDIR\OpenCode.exe" + WriteRegStr HKCU "Software\Classes\Directory\Background\shell\OpenCode\command" "" '"$INSTDIR\OpenCode.exe" "opencode://open-project?directory=%V"' +!macroend + +!macro NSIS_HOOK_POSTUNINSTALL + ; Remove context menu entries + DeleteRegKey HKCU "Software\Classes\Directory\shell\OpenCode" + DeleteRegKey HKCU "Software\Classes\Directory\Background\shell\OpenCode" +!macroend