From c9ce41aef32e57b68de59ff5e7a91e1bce5aa15c Mon Sep 17 00:00:00 2001 From: leo Date: Fri, 3 May 2024 21:54:10 +0800 Subject: [PATCH] feature: supports open in/diff with VSCodium (#102) --- src/Models/ExternalMerger.cs | 3 +++ src/Models/ExternalTool.cs | 5 ++++ src/Native/Linux.cs | 1 + src/Native/MacOS.cs | 1 + src/Native/Windows.cs | 28 +++++++++++++++++++++ src/Resources/ExternalToolIcons/codium.png | Bin 0 -> 2867 bytes 6 files changed, 38 insertions(+) create mode 100644 src/Resources/ExternalToolIcons/codium.png diff --git a/src/Models/ExternalMerger.cs b/src/Models/ExternalMerger.cs index 773a7f94..d61ce055 100644 --- a/src/Models/ExternalMerger.cs +++ b/src/Models/ExternalMerger.cs @@ -40,6 +40,7 @@ namespace SourceGit.Models new ExternalMerger(5, "kdiff3", "KDiff3", "kdiff3.exe", "\"$REMOTE\" -b \"$BASE\" \"$LOCAL\" -o \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), new ExternalMerger(6, "beyond_compare", "Beyond Compare", "BComp.exe", "\"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), new ExternalMerger(7, "win_merge", "WinMerge", "WinMergeU.exe", "-u -e \"$REMOTE\" \"$LOCAL\" \"$MERGED\"", "-u -e \"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(8, "codium", "VSCodium", "VSCodium.exe", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), }; } else if (OperatingSystem.IsMacOS()) @@ -51,6 +52,7 @@ namespace SourceGit.Models new ExternalMerger(3, "vscode_insiders", "Visual Studio Code - Insiders", "/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/bin/code", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), new ExternalMerger(4, "kdiff3", "KDiff3", "/Applications/kdiff3.app/Contents/MacOS/kdiff3", "\"$REMOTE\" -b \"$BASE\" \"$LOCAL\" -o \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), new ExternalMerger(5, "beyond_compare", "Beyond Compare", "/Applications/Beyond Compare.app/Contents/MacOS/bcomp", "\"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(6, "codium", "VSCodium", "/Applications/VSCodium.app/Contents/Resources/app/bin/codium", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), }; } else if (OperatingSystem.IsLinux()) @@ -62,6 +64,7 @@ namespace SourceGit.Models new ExternalMerger(3, "kdiff3", "KDiff3", "/usr/bin/kdiff3", "\"$REMOTE\" -b \"$BASE\" \"$LOCAL\" -o \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), new ExternalMerger(4, "beyond_compare", "Beyond Compare", "/usr/bin/bcomp", "\"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), new ExternalMerger(5, "meld", "Meld", "/usr/bin/meld", "\"$LOCAL\" \"$BASE\" \"$REMOTE\" -output \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), + new ExternalMerger(6, "codium", "VSCodium", "/usr/share/codium/bin/codium", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), }; } else diff --git a/src/Models/ExternalTool.cs b/src/Models/ExternalTool.cs index c130fbcf..1489e1cf 100644 --- a/src/Models/ExternalTool.cs +++ b/src/Models/ExternalTool.cs @@ -126,6 +126,11 @@ namespace SourceGit.Models TryAdd("Visual Studio Code - Insiders", "vscode_insiders", "\"{0}\"", "VSCODE_INSIDERS_PATH", platformFinder); } + public void VSCodium(Func platformFinder) + { + TryAdd("VSCodium", "codium", "\"{0}\"", "VSCODIUM_PATH", platformFinder); + } + public void Fleet(Func platformFinder) { TryAdd("Fleet", "fleet", "\"{0}\"", "FLEET_PATH", platformFinder); diff --git a/src/Native/Linux.cs b/src/Native/Linux.cs index 338f91d4..b34943a4 100644 --- a/src/Native/Linux.cs +++ b/src/Native/Linux.cs @@ -57,6 +57,7 @@ namespace SourceGit.Native var finder = new Models.ExternalToolsFinder(); finder.VSCode(() => FindExecutable("code")); finder.VSCodeInsiders(() => FindExecutable("code-insiders")); + finder.VSCodium(() => FindExecutable("codium")); finder.Fleet(FindJetBrainsFleet); finder.FindJetBrainsFromToolbox(() => $"{Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)}/JetBrains/Toolbox"); finder.SublimeText(() => FindExecutable("subl")); diff --git a/src/Native/MacOS.cs b/src/Native/MacOS.cs index 450b87ba..2e1de844 100644 --- a/src/Native/MacOS.cs +++ b/src/Native/MacOS.cs @@ -32,6 +32,7 @@ namespace SourceGit.Native var finder = new Models.ExternalToolsFinder(); finder.VSCode(() => "/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code"); finder.VSCodeInsiders(() => "/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/bin/code"); + finder.VSCodium(() => "/Applications/VSCodium.app/Contents/Resources/app/bin/codium"); finder.Fleet(() => $"{Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)}/Applications/Fleet.app/Contents/MacOS/Fleet"); finder.FindJetBrainsFromToolbox(() => $"{Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)}/Library/Application Support/JetBrains/Toolbox"); finder.SublimeText(() => "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl"); diff --git a/src/Native/Windows.cs b/src/Native/Windows.cs index 8c4ab022..b0649189 100644 --- a/src/Native/Windows.cs +++ b/src/Native/Windows.cs @@ -110,6 +110,7 @@ namespace SourceGit.Native var finder = new Models.ExternalToolsFinder(); finder.VSCode(FindVSCode); finder.VSCodeInsiders(FindVSCodeInsiders); + finder.VSCodium(FindVSCodium); finder.Fleet(() => $"{Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)}\\Programs\\Fleet\\Fleet.exe"); finder.FindJetBrainsFromToolbox(() => $"{Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)}\\JetBrains\\Toolbox"); finder.SublimeText(FindSublimeText); @@ -323,6 +324,33 @@ namespace SourceGit.Native return string.Empty; } + private string FindVSCodium() + { + var localMachine = Microsoft.Win32.RegistryKey.OpenBaseKey( + Microsoft.Win32.RegistryHive.LocalMachine, + Microsoft.Win32.RegistryView.Registry64); + + // VSCodium (system) + var systemVScodium = localMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{88DA3577-054F-4CA1-8122-7D820494CFFB}_is1"); + if (systemVScodium != null) + { + return systemVScodium.GetValue("DisplayIcon") as string; + } + + var currentUser = Microsoft.Win32.RegistryKey.OpenBaseKey( + Microsoft.Win32.RegistryHive.CurrentUser, + Microsoft.Win32.RegistryView.Registry64); + + // VSCodium (user) + var vscodium = currentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{2E1F05D1-C245-4562-81EE-28188DB6FD17}_is1"); + if (vscodium != null) + { + return vscodium.GetValue("DisplayIcon") as string; + } + + return string.Empty; + } + private string FindSublimeText() { var localMachine = Microsoft.Win32.RegistryKey.OpenBaseKey( diff --git a/src/Resources/ExternalToolIcons/codium.png b/src/Resources/ExternalToolIcons/codium.png new file mode 100644 index 0000000000000000000000000000000000000000..10abb719f90f5bf2e3ab0c1ed26b8c1ebe097fb2 GIT binary patch literal 2867 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 RS@8e>002ovPDHLkV1h2by9fXP literal 0 HcmV?d00001