mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 02:36:19 +02:00
[Run][New Plugin] VSCode Workspaces/Remote machines (#9050)
* vscode workspaces plugin for Powertoys Run
* reduce score
* make vscode workspaces dynamic instead of string to prevent exceptions
* change icons again
* remove unused images and PreserveNewest during build
* code refactoring
* show vscode ssh remote machines
* update score workspaces
* vscode workspaces plugin for Powertoys Run
* remove unused images and PreserveNewest during build
* code refactoring
* remove unused packages
* get ExecutablePath from AppData and use shell to vscode process
* ' instead of \"
* try using ((char)34) instead of '
* add comments
* translate windows paths
* remove unused code
* add vscodeworkspace to installer
* use the new naming convention for plugins
* sign VSCodeWorkspaces.dll
* reimplement ssh-config parser
* update spell-check
* use the new naming convention for community plugins
* minor adjustments
* add actionKeyword {
* prevent copyright
* add localization
* add github link
* bug fix after localization
* --new-window --enable-proposed-api ms-vscode-remote.remote-ssh
* change order by
* Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator/Properties/Resources.Designer.cs
* Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator/Properties/Resources.Designer.cs
* Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator/Properties/Resources.Designer.cs
* Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator/Properties/Resources.Designer.cs
* Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator/Properties/Resources.Designer.cs
* Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator/Properties/Resources.Designer.cs
* Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator/Properties/Resources.Designer.cs
* Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator/Properties/Resources.Designer.cs
* Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator/Properties/Resources.Designer.cs
* Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator/Properties/Resources.Designer.cs
* Update src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator/Properties/Resources.Designer.cs
* Update src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/Properties/Resources.resx
* Update src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/Properties/Resources.resx
* Update src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/Properties/Resources.resx
* Update src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/Properties/Resources.resx
* Update src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/Properties/Resources.resx
* fix powertoys run settings not working
* update plugin description
Co-authored-by: ricar <ricar@ASUS>
Co-authored-by: Enrico Giordani <enricogior@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
f648ac44b2
commit
7e5fb876bb
@@ -0,0 +1,176 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Windows.Controls;
|
||||
using Community.PowerToys.Run.Plugin.VSCodeWorkspaces.Properties;
|
||||
using Community.PowerToys.Run.Plugin.VSCodeWorkspaces.RemoteMachinesHelper;
|
||||
using Community.PowerToys.Run.Plugin.VSCodeWorkspaces.VSCodeHelper;
|
||||
using Community.PowerToys.Run.Plugin.VSCodeWorkspaces.WorkspacesHelper;
|
||||
using Microsoft.PowerToys.Settings.UI.Library;
|
||||
using Wox.Plugin;
|
||||
|
||||
namespace Community.PowerToys.Run.Plugin.VSCodeWorkspaces
|
||||
{
|
||||
public class Main : IPlugin, IPluginI18n
|
||||
{
|
||||
public PluginInitContext _context { get; private set; }
|
||||
|
||||
public string Name => GetTranslatedPluginTitle();
|
||||
|
||||
public string Description => GetTranslatedPluginDescription();
|
||||
|
||||
public Main()
|
||||
{
|
||||
VSCodeInstances.LoadVSCodeInstances();
|
||||
}
|
||||
|
||||
public readonly VSCodeWorkspacesApi _workspacesApi = new VSCodeWorkspacesApi();
|
||||
|
||||
public readonly VSCodeRemoteMachinesApi _machinesApi = new VSCodeRemoteMachinesApi();
|
||||
|
||||
public List<Result> Query(Query query)
|
||||
{
|
||||
var results = new List<Result>();
|
||||
|
||||
if (query != null)
|
||||
{
|
||||
// Search opened workspaces
|
||||
_workspacesApi.Workspaces.ForEach(a =>
|
||||
{
|
||||
var title = $"{a.FolderName}";
|
||||
|
||||
var typeWorkspace = a.WorkspaceTypeToString();
|
||||
if (a.TypeWorkspace == TypeWorkspace.Codespaces)
|
||||
{
|
||||
title += $" - {typeWorkspace}";
|
||||
}
|
||||
else if (a.TypeWorkspace != TypeWorkspace.Local)
|
||||
{
|
||||
title += $" - {(a.ExtraInfo != null ? $"{a.ExtraInfo} ({typeWorkspace})" : typeWorkspace)}";
|
||||
}
|
||||
|
||||
results.Add(new Result
|
||||
{
|
||||
Title = title,
|
||||
SubTitle = $"{Resources.Workspace}{(a.TypeWorkspace != TypeWorkspace.Local ? $" {Resources.In} {typeWorkspace}" : "")}: {SystemPath.RealPath(a.RelativePath)}",
|
||||
Icon = a.VSCodeInstance.WorkspaceIcon,
|
||||
Action = c =>
|
||||
{
|
||||
bool hide;
|
||||
try
|
||||
{
|
||||
var process = new ProcessStartInfo
|
||||
{
|
||||
FileName = a.VSCodeInstance.ExecutablePath,
|
||||
UseShellExecute = true,
|
||||
Arguments = $"--folder-uri {a.Path}",
|
||||
WindowStyle = ProcessWindowStyle.Hidden
|
||||
};
|
||||
Process.Start(process);
|
||||
|
||||
hide = true;
|
||||
}
|
||||
catch (Win32Exception)
|
||||
{
|
||||
var name = $"Plugin: {_context.CurrentPluginMetadata.Name}";
|
||||
var msg = "Can't Open this file";
|
||||
_context.API.ShowMsg(name, msg, string.Empty);
|
||||
hide = false;
|
||||
}
|
||||
return hide;
|
||||
},
|
||||
ContextData = a,
|
||||
});
|
||||
});
|
||||
|
||||
// Search opened remote machines
|
||||
_machinesApi.Machines.ForEach(a =>
|
||||
{
|
||||
var title = $"{a.Host}";
|
||||
|
||||
if (a.User != null && a.User != String.Empty && a.HostName != null && a.HostName != String.Empty)
|
||||
{
|
||||
title += $" [{a.User}@{a.HostName}]";
|
||||
}
|
||||
|
||||
results.Add(new Result
|
||||
{
|
||||
Title = title,
|
||||
SubTitle = Resources.SSHRemoteMachine,
|
||||
Icon = a.VSCodeInstance.RemoteIcon,
|
||||
Action = c =>
|
||||
{
|
||||
bool hide;
|
||||
try
|
||||
{
|
||||
var process = new ProcessStartInfo()
|
||||
{
|
||||
FileName = a.VSCodeInstance.ExecutablePath,
|
||||
UseShellExecute = true,
|
||||
Arguments = $"--new-window --enable-proposed-api ms-vscode-remote.remote-ssh --remote ssh-remote+{((char)34) + a.Host + ((char)34)}",
|
||||
WindowStyle = ProcessWindowStyle.Hidden,
|
||||
};
|
||||
Process.Start(process);
|
||||
|
||||
hide = true;
|
||||
}
|
||||
catch (Win32Exception)
|
||||
{
|
||||
var name = $"Plugin: {_context.CurrentPluginMetadata.Name}";
|
||||
var msg = "Can't Open this file";
|
||||
_context.API.ShowMsg(name, msg, string.Empty);
|
||||
hide = false;
|
||||
}
|
||||
return hide;
|
||||
},
|
||||
ContextData = a,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
results.ForEach(x =>
|
||||
{
|
||||
if (x.Score == 0)
|
||||
{
|
||||
x.Score = 100;
|
||||
}
|
||||
|
||||
//if is a remote machine give it 12 extra points
|
||||
if (x.ContextData is VSCodeRemoteMachine)
|
||||
{
|
||||
x.Score = x.Score + (query.Search.Count() * 5);
|
||||
}
|
||||
|
||||
//intersect the title with the query
|
||||
var intersection = x.Title.ToLower().Intersect(query.Search.ToLower()).Count();
|
||||
x.Score = x.Score - (Convert.ToInt32(((x.Title.Count() - intersection) *2.5)));
|
||||
});
|
||||
|
||||
results = results.OrderBy(x => x.Title).ToList();
|
||||
|
||||
if (query.ActionKeyword == String.Empty || (query.ActionKeyword != String.Empty && query.Search != String.Empty))
|
||||
{
|
||||
results = results.Where(a => a.Title.ToLower().Contains(query.Search.ToLower())).ToList();
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
public void Init(PluginInitContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public string GetTranslatedPluginTitle()
|
||||
{
|
||||
return Resources.PluginTitle;
|
||||
}
|
||||
|
||||
public string GetTranslatedPluginDescription()
|
||||
{
|
||||
return Resources.PluginDescription;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user