adjusting how programs are displayed. (#2369)

* Removing description from title

* adjusting subtitle

* removing accidently paste

* removing desc for uwp apps
This commit is contained in:
Clint Rutkas
2020-04-23 18:25:57 -07:00
committed by GitHub
parent 92daf156f5
commit 845c6be95f
4 changed files with 361 additions and 391 deletions

View File

@@ -72,7 +72,8 @@ namespace Wox.Plugin.Program
UWP.Application[] uwps; UWP.Application[] uwps;
lock (IndexLock) lock (IndexLock)
{ // just take the reference inside the lock to eliminate query time issues. {
// just take the reference inside the lock to eliminate query time issues.
win32 = _win32s; win32 = _win32s;
uwps = _uwps; uwps = _uwps;
} }
@@ -118,7 +119,6 @@ namespace Wox.Plugin.Program
public static void IndexPrograms() public static void IndexPrograms()
{ {
var t1 = Task.Run(() => IndexWin32Programs()); var t1 = Task.Run(() => IndexWin32Programs());
var t2 = Task.Run(() => IndexUWPPrograms()); var t2 = Task.Run(() => IndexUWPPrograms());
Task.WaitAll(t1, t2); Task.WaitAll(t1, t2);
@@ -153,32 +153,8 @@ namespace Wox.Plugin.Program
return menuOptions; return menuOptions;
} }
private void DisableProgram(IProgram programToDelete)
{
if (_settings.DisabledProgramSources.Any(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier))
return;
if (_uwps.Any(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier))
_uwps.Where(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier).FirstOrDefault().Enabled = false;
if (_win32s.Any(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier))
_win32s.Where(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier).FirstOrDefault().Enabled = false;
_settings.DisabledProgramSources
.Add(
new Settings.DisabledProgramSource
{
Name = programToDelete.Name,
Location = programToDelete.Location,
UniqueIdentifier = programToDelete.UniqueIdentifier,
Enabled = false
}
);
}
public static void StartProcess(Func<ProcessStartInfo, Process> runProcess, ProcessStartInfo info) public static void StartProcess(Func<ProcessStartInfo, Process> runProcess, ProcessStartInfo info)
{ {
bool hide;
try try
{ {
runProcess(info); runProcess(info);

View File

@@ -282,7 +282,7 @@ namespace Wox.Plugin.Program.Programs
var result = new Result var result = new Result
{ {
SubTitle = Package.Location, SubTitle = "UWP Application",
Icon = Logo, Icon = Logo,
Score = score, Score = score,
ContextData = this, ContextData = this,
@@ -299,12 +299,6 @@ namespace Wox.Plugin.Program.Programs
result.Title = Description; result.Title = Description;
result.TitleHighlightData = StringMatcher.FuzzySearch(query, Description).MatchData; result.TitleHighlightData = StringMatcher.FuzzySearch(query, Description).MatchData;
} }
else if (!string.IsNullOrEmpty(Description))
{
var title = $"{DisplayName}: {Description}";
result.Title = title;
result.TitleHighlightData = StringMatcher.FuzzySearch(query, title).MatchData;
}
else else
{ {
result.Title = DisplayName; result.Title = DisplayName;

View File

@@ -11,7 +11,6 @@ using Microsoft.Win32;
using Shell; using Shell;
using Wox.Infrastructure; using Wox.Infrastructure;
using Wox.Plugin.Program.Logger; using Wox.Plugin.Program.Logger;
using Wox.Plugin.SharedCommands;
namespace Wox.Plugin.Program.Programs namespace Wox.Plugin.Program.Programs
{ {
@@ -22,6 +21,7 @@ namespace Wox.Plugin.Program.Programs
public string UniqueIdentifier { get; set; } public string UniqueIdentifier { get; set; }
public string IcoPath { get; set; } public string IcoPath { get; set; }
public string FullPath { get; set; } public string FullPath { get; set; }
public string LnkResolvedPath { get; set; }
public string ParentDirectory { get; set; } public string ParentDirectory { get; set; }
public string ExecutableName { get; set; } public string ExecutableName { get; set; }
public string Description { get; set; } public string Description { get; set; }
@@ -53,7 +53,7 @@ namespace Wox.Plugin.Program.Programs
var result = new Result var result = new Result
{ {
SubTitle = FullPath, SubTitle = "Win32 Application",
IcoPath = IcoPath, IcoPath = IcoPath,
Score = score, Score = score,
ContextData = this, ContextData = this,
@@ -78,12 +78,6 @@ namespace Wox.Plugin.Program.Programs
result.Title = Description; result.Title = Description;
result.TitleHighlightData = StringMatcher.FuzzySearch(query, Description).MatchData; result.TitleHighlightData = StringMatcher.FuzzySearch(query, Description).MatchData;
} }
else if (!string.IsNullOrEmpty(Description))
{
var title = $"{Name}: {Description}";
result.Title = title;
result.TitleHighlightData = StringMatcher.FuzzySearch(query, title).MatchData;
}
else else
{ {
result.Title = Name; result.Title = Name;
@@ -196,6 +190,9 @@ namespace Wox.Plugin.Program.Programs
var extension = Extension(target); var extension = Extension(target);
if (extension == ExeExtension && File.Exists(target)) if (extension == ExeExtension && File.Exists(target))
{ {
program.LnkResolvedPath = program.FullPath;
program.FullPath = target;
buffer = new StringBuilder(MAX_PATH); buffer = new StringBuilder(MAX_PATH);
link.GetDescription(buffer, MAX_PATH); link.GetDescription(buffer, MAX_PATH);
var description = buffer.ToString(); var description = buffer.ToString();
@@ -356,8 +353,11 @@ namespace Wox.Plugin.Program.Programs
var programs1 = paths.AsParallel().Where(p => Extension(p) == ShortcutExtension).Select(LnkProgram); var programs1 = paths.AsParallel().Where(p => Extension(p) == ShortcutExtension).Select(LnkProgram);
var programs2 = paths.AsParallel().Where(p => Extension(p) == ApplicationReferenceExtension).Select(Win32Program); var programs2 = paths.AsParallel().Where(p => Extension(p) == ApplicationReferenceExtension).Select(Win32Program);
var programs = programs1.Concat(programs2).Where(p => p.Valid); var allValidPrograms = programs1.Concat(programs2).Where(p => p.Valid);
return programs; //var programsWithLnk = allValidPrograms.Where(x => !string.IsNullOrEmpty(x.LnkResolvedPath));
return allValidPrograms;
} }
private static ParallelQuery<Win32> AppPathsPrograms(string[] suffixes) private static ParallelQuery<Win32> AppPathsPrograms(string[] suffixes)

View File

@@ -1,353 +1,353 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using WindowsInput; using WindowsInput;
using WindowsInput.Native; using WindowsInput.Native;
using Wox.Infrastructure.Hotkey; using Wox.Infrastructure.Hotkey;
using Wox.Infrastructure.Logger; using Wox.Infrastructure.Logger;
using Wox.Infrastructure.Storage; using Wox.Infrastructure.Storage;
using Wox.Plugin.SharedCommands; using Wox.Plugin.SharedCommands;
using Application = System.Windows.Application; using Application = System.Windows.Application;
using Control = System.Windows.Controls.Control; using Control = System.Windows.Controls.Control;
using Keys = System.Windows.Forms.Keys; using Keys = System.Windows.Forms.Keys;
namespace Wox.Plugin.Shell namespace Wox.Plugin.Shell
{ {
public class Main : IPlugin, ISettingProvider, IPluginI18n, IContextMenu, ISavable public class Main : IPlugin, ISettingProvider, IPluginI18n, IContextMenu, ISavable
{ {
private const string Image = "Images/shell.png"; private const string Image = "Images/shell.png";
private PluginInitContext _context; private PluginInitContext _context;
private bool _winRStroked; private bool _winRStroked;
private readonly KeyboardSimulator _keyboardSimulator = new KeyboardSimulator(new InputSimulator()); private readonly KeyboardSimulator _keyboardSimulator = new KeyboardSimulator(new InputSimulator());
private readonly Settings _settings; private readonly Settings _settings;
private readonly PluginJsonStorage<Settings> _storage; private readonly PluginJsonStorage<Settings> _storage;
public Main() public Main()
{ {
_storage = new PluginJsonStorage<Settings>(); _storage = new PluginJsonStorage<Settings>();
_settings = _storage.Load(); _settings = _storage.Load();
} }
public void Save() public void Save()
{ {
_storage.Save(); _storage.Save();
} }
public List<Result> Query(Query query) public List<Result> Query(Query query)
{ {
List<Result> results = new List<Result>(); List<Result> results = new List<Result>();
string cmd = query.Search; string cmd = query.Search;
if (string.IsNullOrEmpty(cmd)) if (string.IsNullOrEmpty(cmd))
{ {
return ResultsFromlHistory(); return ResultsFromlHistory();
} }
else else
{ {
var queryCmd = GetCurrentCmd(cmd); var queryCmd = GetCurrentCmd(cmd);
results.Add(queryCmd); results.Add(queryCmd);
var history = GetHistoryCmds(cmd, queryCmd); var history = GetHistoryCmds(cmd, queryCmd);
results.AddRange(history); results.AddRange(history);
try try
{ {
string basedir = null; string basedir = null;
string dir = null; string dir = null;
string excmd = Environment.ExpandEnvironmentVariables(cmd); string excmd = Environment.ExpandEnvironmentVariables(cmd);
if (Directory.Exists(excmd) && (cmd.EndsWith("/") || cmd.EndsWith(@"\"))) if (Directory.Exists(excmd) && (cmd.EndsWith("/") || cmd.EndsWith(@"\")))
{ {
basedir = excmd; basedir = excmd;
dir = cmd; dir = cmd;
} }
else if (Directory.Exists(Path.GetDirectoryName(excmd) ?? string.Empty)) else if (Directory.Exists(Path.GetDirectoryName(excmd) ?? string.Empty))
{ {
basedir = Path.GetDirectoryName(excmd); basedir = Path.GetDirectoryName(excmd);
var dirn = Path.GetDirectoryName(cmd); var dirn = Path.GetDirectoryName(cmd);
dir = (dirn.EndsWith("/") || dirn.EndsWith(@"\")) ? dirn : cmd.Substring(0, dirn.Length + 1); dir = (dirn.EndsWith("/") || dirn.EndsWith(@"\")) ? dirn : cmd.Substring(0, dirn.Length + 1);
} }
if (basedir != null) if (basedir != null)
{ {
var autocomplete = Directory.GetFileSystemEntries(basedir). var autocomplete = Directory.GetFileSystemEntries(basedir).
Select(o => dir + Path.GetFileName(o)). Select(o => dir + Path.GetFileName(o)).
Where(o => o.StartsWith(cmd, StringComparison.OrdinalIgnoreCase) && Where(o => o.StartsWith(cmd, StringComparison.OrdinalIgnoreCase) &&
!results.Any(p => o.Equals(p.Title, StringComparison.OrdinalIgnoreCase)) && !results.Any(p => o.Equals(p.Title, StringComparison.OrdinalIgnoreCase)) &&
!results.Any(p => o.Equals(p.Title, StringComparison.OrdinalIgnoreCase))).ToList(); !results.Any(p => o.Equals(p.Title, StringComparison.OrdinalIgnoreCase))).ToList();
autocomplete.Sort(); autocomplete.Sort();
results.AddRange(autocomplete.ConvertAll(m => new Result results.AddRange(autocomplete.ConvertAll(m => new Result
{ {
Title = m, Title = m,
IcoPath = Image, IcoPath = Image,
Action = c => Action = c =>
{ {
Execute(Process.Start, PrepareProcessStartInfo(m)); Execute(Process.Start, PrepareProcessStartInfo(m));
return true; return true;
} }
})); }));
} }
} }
catch (Exception e) catch (Exception e)
{ {
Log.Exception($"|Wox.Plugin.Shell.Main.Query|Exception when query for <{query}>", e); Log.Exception($"|Wox.Plugin.Shell.Main.Query|Exception when query for <{query}>", e);
} }
return results; return results;
} }
} }
private List<Result> GetHistoryCmds(string cmd, Result result) private List<Result> GetHistoryCmds(string cmd, Result result)
{ {
IEnumerable<Result> history = _settings.Count.Where(o => o.Key.Contains(cmd)) IEnumerable<Result> history = _settings.Count.Where(o => o.Key.Contains(cmd))
.OrderByDescending(o => o.Value) .OrderByDescending(o => o.Value)
.Select(m => .Select(m =>
{ {
if (m.Key == cmd) if (m.Key == cmd)
{ {
result.SubTitle = string.Format(_context.API.GetTranslation("wox_plugin_cmd_cmd_has_been_executed_times"), m.Value); result.SubTitle = string.Format(_context.API.GetTranslation("wox_plugin_cmd_cmd_has_been_executed_times"), m.Value);
return null; return null;
} }
var ret = new Result var ret = new Result
{ {
Title = m.Key, Title = m.Key,
SubTitle = string.Format(_context.API.GetTranslation("wox_plugin_cmd_cmd_has_been_executed_times"), m.Value), SubTitle = string.Format(_context.API.GetTranslation("wox_plugin_cmd_cmd_has_been_executed_times"), m.Value),
IcoPath = Image, IcoPath = Image,
Action = c => Action = c =>
{ {
Execute(Process.Start, PrepareProcessStartInfo(m.Key)); Execute(Process.Start, PrepareProcessStartInfo(m.Key));
return true; return true;
} }
}; };
return ret; return ret;
}).Where(o => o != null).Take(4); }).Where(o => o != null).Take(4);
return history.ToList(); return history.ToList();
} }
private Result GetCurrentCmd(string cmd) private Result GetCurrentCmd(string cmd)
{ {
Result result = new Result Result result = new Result
{ {
Title = cmd, Title = cmd,
Score = 5000, Score = 5000,
SubTitle = _context.API.GetTranslation("wox_plugin_cmd_execute_through_shell"), SubTitle = _context.API.GetTranslation("wox_plugin_cmd_execute_through_shell"),
IcoPath = Image, IcoPath = Image,
Action = c => Action = c =>
{ {
Execute(Process.Start, PrepareProcessStartInfo(cmd)); Execute(Process.Start, PrepareProcessStartInfo(cmd));
return true; return true;
} }
}; };
return result; return result;
} }
private List<Result> ResultsFromlHistory() private List<Result> ResultsFromlHistory()
{ {
IEnumerable<Result> history = _settings.Count.OrderByDescending(o => o.Value) IEnumerable<Result> history = _settings.Count.OrderByDescending(o => o.Value)
.Select(m => new Result .Select(m => new Result
{ {
Title = m.Key, Title = m.Key,
SubTitle = string.Format(_context.API.GetTranslation("wox_plugin_cmd_cmd_has_been_executed_times"), m.Value), SubTitle = string.Format(_context.API.GetTranslation("wox_plugin_cmd_cmd_has_been_executed_times"), m.Value),
IcoPath = Image, IcoPath = Image,
Action = c => Action = c =>
{ {
Execute(Process.Start, PrepareProcessStartInfo(m.Key)); Execute(Process.Start, PrepareProcessStartInfo(m.Key));
return true; return true;
} }
}).Take(5); }).Take(5);
return history.ToList(); return history.ToList();
} }
private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdministrator = false) private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdministrator = false)
{ {
command = command.Trim(); command = command.Trim();
command = Environment.ExpandEnvironmentVariables(command); command = Environment.ExpandEnvironmentVariables(command);
var workingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); var workingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
var runAsAdministratorArg = !runAsAdministrator && !_settings.RunAsAdministrator ? "" : "runas"; var runAsAdministratorArg = !runAsAdministrator && !_settings.RunAsAdministrator ? "" : "runas";
ProcessStartInfo info; ProcessStartInfo info;
if (_settings.Shell == Shell.Cmd) if (_settings.Shell == Shell.Cmd)
{ {
var arguments = _settings.LeaveShellOpen ? $"/k \"{command}\"" : $"/c \"{command}\" & pause"; var arguments = _settings.LeaveShellOpen ? $"/k \"{command}\"" : $"/c \"{command}\" & pause";
info = ShellCommand.SetProcessStartInfo("cmd.exe", workingDirectory, arguments, runAsAdministratorArg); info = ShellCommand.SetProcessStartInfo("cmd.exe", workingDirectory, arguments, runAsAdministratorArg);
} }
else if (_settings.Shell == Shell.Powershell) else if (_settings.Shell == Shell.Powershell)
{ {
string arguments; string arguments;
if (_settings.LeaveShellOpen) if (_settings.LeaveShellOpen)
{ {
arguments = $"-NoExit \"{command}\""; arguments = $"-NoExit \"{command}\"";
} }
else else
{ {
arguments = $"\"{command} ; Read-Host -Prompt \\\"Press Enter to continue\\\"\""; arguments = $"\"{command} ; Read-Host -Prompt \\\"Press Enter to continue\\\"\"";
} }
info = ShellCommand.SetProcessStartInfo("powershell.exe", workingDirectory, arguments, runAsAdministratorArg); info = ShellCommand.SetProcessStartInfo("powershell.exe", workingDirectory, arguments, runAsAdministratorArg);
} }
else if (_settings.Shell == Shell.RunCommand) else if (_settings.Shell == Shell.RunCommand)
{ {
//Open explorer if the path is a file or directory //Open explorer if the path is a file or directory
if(Directory.Exists(command) || File.Exists(command)) if(Directory.Exists(command) || File.Exists(command))
{ {
info = ShellCommand.SetProcessStartInfo("explorer.exe", arguments: command, verb: runAsAdministratorArg); info = ShellCommand.SetProcessStartInfo("explorer.exe", arguments: command, verb: runAsAdministratorArg);
} }
else else
{ {
var parts = command.Split(new[] { ' ' }, 2); var parts = command.Split(new[] { ' ' }, 2);
if (parts.Length == 2) if (parts.Length == 2)
{ {
var filename = parts[0]; var filename = parts[0];
if (ExistInPath(filename)) if (ExistInPath(filename))
{ {
var arguments = parts[1]; var arguments = parts[1];
info = ShellCommand.SetProcessStartInfo(filename, workingDirectory, arguments, runAsAdministratorArg); info = ShellCommand.SetProcessStartInfo(filename, workingDirectory, arguments, runAsAdministratorArg);
} }
else else
{ {
info = ShellCommand.SetProcessStartInfo(command, verb: runAsAdministratorArg); info = ShellCommand.SetProcessStartInfo(command, verb: runAsAdministratorArg);
} }
} }
else else
{ {
info = ShellCommand.SetProcessStartInfo(command, verb: runAsAdministratorArg); info = ShellCommand.SetProcessStartInfo(command, verb: runAsAdministratorArg);
} }
} }
} }
else else
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
info.UseShellExecute = true; info.UseShellExecute = true;
_settings.AddCmdHistory(command); _settings.AddCmdHistory(command);
return info; return info;
} }
private void Execute(Func<ProcessStartInfo, Process> startProcess,ProcessStartInfo info) private void Execute(Func<ProcessStartInfo, Process> startProcess,ProcessStartInfo info)
{ {
try try
{ {
startProcess(info); startProcess(info);
} }
catch (FileNotFoundException e) catch (FileNotFoundException e)
{ {
var name = "Plugin: Shell"; var name = "Plugin: Shell";
var message = $"Command not found: {e.Message}"; var message = $"Command not found: {e.Message}";
_context.API.ShowMsg(name, message); _context.API.ShowMsg(name, message);
} }
catch(Win32Exception e) catch(Win32Exception e)
{ {
var name = "Plugin: Shell"; var name = "Plugin: Shell";
var message = $"Error running the command: {e.Message}"; var message = $"Error running the command: {e.Message}";
_context.API.ShowMsg(name, message); _context.API.ShowMsg(name, message);
} }
} }
private bool ExistInPath(string filename) private bool ExistInPath(string filename)
{ {
if (File.Exists(filename)) if (File.Exists(filename))
{ {
return true; return true;
} }
else else
{ {
var values = Environment.GetEnvironmentVariable("PATH"); var values = Environment.GetEnvironmentVariable("PATH");
if (values != null) if (values != null)
{ {
foreach (var path in values.Split(';')) foreach (var path in values.Split(';'))
{ {
var path1 = Path.Combine(path, filename); var path1 = Path.Combine(path, filename);
var path2 = Path.Combine(path, filename + ".exe"); var path2 = Path.Combine(path, filename + ".exe");
if (File.Exists(path1) || File.Exists(path2)) if (File.Exists(path1) || File.Exists(path2))
{ {
return true; return true;
} }
} }
return false; return false;
} }
else else
{ {
return false; return false;
} }
} }
} }
public void Init(PluginInitContext context) public void Init(PluginInitContext context)
{ {
this._context = context; this._context = context;
context.API.GlobalKeyboardEvent += API_GlobalKeyboardEvent; context.API.GlobalKeyboardEvent += API_GlobalKeyboardEvent;
} }
bool API_GlobalKeyboardEvent(int keyevent, int vkcode, SpecialKeyState state) bool API_GlobalKeyboardEvent(int keyevent, int vkcode, SpecialKeyState state)
{ {
if (_settings.ReplaceWinR) if (_settings.ReplaceWinR)
{ {
if (keyevent == (int)KeyEvent.WM_KEYDOWN && vkcode == (int)Keys.R && state.WinPressed) if (keyevent == (int)KeyEvent.WM_KEYDOWN && vkcode == (int)Keys.R && state.WinPressed)
{ {
_winRStroked = true; _winRStroked = true;
OnWinRPressed(); OnWinRPressed();
return false; return false;
} }
if (keyevent == (int)KeyEvent.WM_KEYUP && _winRStroked && vkcode == (int)Keys.LWin) if (keyevent == (int)KeyEvent.WM_KEYUP && _winRStroked && vkcode == (int)Keys.LWin)
{ {
_winRStroked = false; _winRStroked = false;
_keyboardSimulator.ModifiedKeyStroke(VirtualKeyCode.LWIN, VirtualKeyCode.BACK); _keyboardSimulator.ModifiedKeyStroke(VirtualKeyCode.LWIN, VirtualKeyCode.BACK);
return false; return false;
} }
} }
return true; return true;
} }
private void OnWinRPressed() private void OnWinRPressed()
{ {
_context.API.ChangeQuery($"{_context.CurrentPluginMetadata.ActionKeywords[0]}{Plugin.Query.TermSeperater}"); _context.API.ChangeQuery($"{_context.CurrentPluginMetadata.ActionKeywords[0]}{Plugin.Query.TermSeperater}");
Application.Current.MainWindow.Visibility = Visibility.Visible; Application.Current.MainWindow.Visibility = Visibility.Visible;
} }
public Control CreateSettingPanel() public Control CreateSettingPanel()
{ {
return new CMDSetting(_settings); return new CMDSetting(_settings);
} }
public string GetTranslatedPluginTitle() public string GetTranslatedPluginTitle()
{ {
return _context.API.GetTranslation("wox_plugin_cmd_plugin_name"); return _context.API.GetTranslation("wox_plugin_cmd_plugin_name");
} }
public string GetTranslatedPluginDescription() public string GetTranslatedPluginDescription()
{ {
return _context.API.GetTranslation("wox_plugin_cmd_plugin_description"); return _context.API.GetTranslation("wox_plugin_cmd_plugin_description");
} }
public List<ContextMenuResult> LoadContextMenus(Result selectedResult) public List<ContextMenuResult> LoadContextMenus(Result selectedResult)
{ {
var resultlist = new List<ContextMenuResult> var resultlist = new List<ContextMenuResult>
{ {
new ContextMenuResult new ContextMenuResult
{ {
Title = _context.API.GetTranslation("wox_plugin_cmd_run_as_administrator"), Title = _context.API.GetTranslation("wox_plugin_cmd_run_as_administrator"),
Glyph = "\xE7EF", Glyph = "\xE7EF",
FontFamily = "Segoe MDL2 Assets", FontFamily = "Segoe MDL2 Assets",
AcceleratorKey = "Enter", AcceleratorKey = "Enter",
AcceleratorModifiers = "Control,Shift", AcceleratorModifiers = "Control,Shift",
Action = c => Action = c =>
{ {
Execute(Process.Start, PrepareProcessStartInfo(selectedResult.Title, true)); Execute(Process.Start, PrepareProcessStartInfo(selectedResult.Title, true));
return true; return true;
} }
} }
}; };
return resultlist; return resultlist;
} }
} }
} }