mirror of
https://github.com/sourcegit-scm/sourcegit
synced 2025-05-23 05:05:00 +00:00
feature: add powershell support for Windows
This commit is contained in:
parent
8f70778ec2
commit
4ac705f8ca
13 changed files with 88 additions and 46 deletions
|
@ -31,14 +31,14 @@ namespace SourceGit.Native
|
|||
return string.Empty;
|
||||
}
|
||||
|
||||
public List<Models.ExternalEditor> FindExternalEditors()
|
||||
public List<Models.ExternalTool> FindExternalTools()
|
||||
{
|
||||
var finder = new Models.ExternalEditorFinder();
|
||||
var finder = new Models.ExternalToolsFinder();
|
||||
finder.VSCode(() => "/usr/share/code/code");
|
||||
finder.VSCodeInsiders(() => "/usr/share/code-insiders/code-insiders");
|
||||
finder.Fleet(() => $"{Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)}/JetBrains/Toolbox/apps/fleet/bin/Fleet");
|
||||
finder.SublimeText(() => File.Exists("/usr/bin/subl") ? "/usr/bin/subl" : "/usr/local/bin/subl");
|
||||
return finder.Editors;
|
||||
return finder.Founded;
|
||||
}
|
||||
|
||||
public void OpenBrowser(string url)
|
||||
|
|
|
@ -28,14 +28,14 @@ namespace SourceGit.Native
|
|||
return string.Empty;
|
||||
}
|
||||
|
||||
public List<Models.ExternalEditor> FindExternalEditors()
|
||||
public List<Models.ExternalTool> FindExternalTools()
|
||||
{
|
||||
var finder = new Models.ExternalEditorFinder();
|
||||
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.Fleet(() => $"{Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)}/Applications/Fleet.app/Contents/MacOS/Fleet");
|
||||
finder.SublimeText(() => "/Applications/Sublime Text.app/Contents/SharedSupport/bin");
|
||||
return finder.Editors;
|
||||
return finder.Founded;
|
||||
}
|
||||
|
||||
public void OpenBrowser(string url)
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace SourceGit.Native
|
|||
void SetupApp(AppBuilder builder);
|
||||
|
||||
string FindGitExecutable();
|
||||
List<Models.ExternalEditor> FindExternalEditors();
|
||||
List<Models.ExternalTool> FindExternalTools();
|
||||
|
||||
void OpenTerminal(string workdir);
|
||||
void OpenInFileManager(string path, bool select);
|
||||
|
@ -21,7 +21,8 @@ namespace SourceGit.Native
|
|||
}
|
||||
|
||||
public static string GitExecutable { get; set; } = string.Empty;
|
||||
public static List<Models.ExternalEditor> ExternalEditors { get; set; } = new List<Models.ExternalEditor>();
|
||||
public static bool UsePowershellOnWindows { get; set; } = false;
|
||||
public static List<Models.ExternalTool> ExternalTools { get; set; } = new List<Models.ExternalTool>();
|
||||
|
||||
static OS()
|
||||
{
|
||||
|
@ -42,7 +43,7 @@ namespace SourceGit.Native
|
|||
throw new Exception("Platform unsupported!!!");
|
||||
}
|
||||
|
||||
ExternalEditors = _backend.FindExternalEditors();
|
||||
ExternalTools = _backend.FindExternalTools();
|
||||
}
|
||||
|
||||
public static void SetupApp(AppBuilder builder)
|
||||
|
|
|
@ -54,6 +54,16 @@ namespace SourceGit.Native
|
|||
[DllImport("shell32.dll", CharSet = CharSet.Unicode, SetLastError = false)]
|
||||
private static extern int SHOpenFolderAndSelectItems(IntPtr pidlFolder, int cild, IntPtr apidl, int dwFlags);
|
||||
|
||||
public Windows()
|
||||
{
|
||||
var localMachine = Microsoft.Win32.RegistryKey.OpenBaseKey(
|
||||
Microsoft.Win32.RegistryHive.LocalMachine,
|
||||
Microsoft.Win32.RegistryView.Registry64);
|
||||
|
||||
var pwsh = localMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\pwsh.exe");
|
||||
_powershellPath = pwsh != null ? pwsh.GetValue(null) as string : "powershell";
|
||||
}
|
||||
|
||||
public void SetupApp(AppBuilder builder)
|
||||
{
|
||||
builder.With(new FontManagerOptions()
|
||||
|
@ -114,14 +124,14 @@ namespace SourceGit.Native
|
|||
return null;
|
||||
}
|
||||
|
||||
public List<Models.ExternalEditor> FindExternalEditors()
|
||||
public List<Models.ExternalTool> FindExternalTools()
|
||||
{
|
||||
var finder = new Models.ExternalEditorFinder();
|
||||
var finder = new Models.ExternalToolsFinder();
|
||||
finder.VSCode(FindVSCode);
|
||||
finder.VSCodeInsiders(FindVSCodeInsiders);
|
||||
finder.Fleet(() => $"{Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)}\\Programs\\Fleet\\Fleet.exe");
|
||||
finder.SublimeText(FindSublimeText);
|
||||
return finder.Editors;
|
||||
return finder.Founded;
|
||||
}
|
||||
|
||||
public void OpenBrowser(string url)
|
||||
|
@ -133,19 +143,27 @@ namespace SourceGit.Native
|
|||
|
||||
public void OpenTerminal(string workdir)
|
||||
{
|
||||
var binDir = Path.GetDirectoryName(OS.GitExecutable);
|
||||
var bash = Path.Combine(binDir, "bash.exe");
|
||||
if (!File.Exists(bash))
|
||||
{
|
||||
App.RaiseException(string.IsNullOrEmpty(workdir) ? "" : workdir, $"Can NOT found bash.exe under '{binDir}'");
|
||||
return;
|
||||
}
|
||||
|
||||
var startInfo = new ProcessStartInfo();
|
||||
startInfo.UseShellExecute = true;
|
||||
startInfo.FileName = bash;
|
||||
var startInfo = new ProcessStartInfo() { UseShellExecute = true };
|
||||
if (!string.IsNullOrEmpty(workdir) && Path.Exists(workdir))
|
||||
startInfo.WorkingDirectory = workdir;
|
||||
|
||||
if (OS.UsePowershellOnWindows)
|
||||
{
|
||||
startInfo.FileName = _powershellPath;
|
||||
}
|
||||
else
|
||||
{
|
||||
var binDir = Path.GetDirectoryName(OS.GitExecutable);
|
||||
var bash = Path.Combine(binDir, "bash.exe");
|
||||
if (!File.Exists(bash))
|
||||
{
|
||||
App.RaiseException(string.IsNullOrEmpty(workdir) ? "" : workdir, $"Can NOT found bash.exe under '{binDir}'");
|
||||
return;
|
||||
}
|
||||
|
||||
startInfo.FileName = bash;
|
||||
}
|
||||
|
||||
Process.Start(startInfo);
|
||||
}
|
||||
|
||||
|
@ -281,5 +299,7 @@ namespace SourceGit.Native
|
|||
ILFree(pidl);
|
||||
}
|
||||
}
|
||||
|
||||
private string _powershellPath = string.Empty;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue