mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-16 11:48:06 +01:00
[PT Run] Open folder using shell instead of explorer.exe (#7292)
* pt run not using explorer.exe for opening path (#4622) * updated explorer action name (#4622)
This commit is contained in:
committed by
GitHub
parent
36dd29c056
commit
b80578b1b9
@@ -6,7 +6,7 @@ using Wox.Plugin;
|
|||||||
|
|
||||||
namespace Microsoft.Plugin.Folder.Sources
|
namespace Microsoft.Plugin.Folder.Sources
|
||||||
{
|
{
|
||||||
public interface IExplorerAction
|
public interface IShellAction
|
||||||
{
|
{
|
||||||
bool Execute(string sanitizedPath, IPublicAPI contextApi);
|
bool Execute(string sanitizedPath, IPublicAPI contextApi);
|
||||||
|
|
||||||
@@ -2,26 +2,25 @@
|
|||||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
// See the LICENSE file in the project root for more information.
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
using System.Globalization;
|
|
||||||
using Wox.Plugin;
|
using Wox.Plugin;
|
||||||
|
|
||||||
namespace Microsoft.Plugin.Folder.Sources.Result
|
namespace Microsoft.Plugin.Folder.Sources.Result
|
||||||
{
|
{
|
||||||
public class CreateOpenCurrentFolderResult : IItemResult
|
public class CreateOpenCurrentFolderResult : IItemResult
|
||||||
{
|
{
|
||||||
private readonly IExplorerAction _explorerAction;
|
private readonly IShellAction _shellAction;
|
||||||
|
|
||||||
public string Search { get; set; }
|
public string Search { get; set; }
|
||||||
|
|
||||||
public CreateOpenCurrentFolderResult(string search)
|
public CreateOpenCurrentFolderResult(string search)
|
||||||
: this(search, new ExplorerAction())
|
: this(search, new ShellAction())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public CreateOpenCurrentFolderResult(string search, IExplorerAction explorerAction)
|
public CreateOpenCurrentFolderResult(string search, IShellAction shellAction)
|
||||||
{
|
{
|
||||||
Search = search;
|
Search = search;
|
||||||
_explorerAction = explorerAction;
|
_shellAction = shellAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Wox.Plugin.Result Create(IPublicAPI contextApi)
|
public Wox.Plugin.Result Create(IPublicAPI contextApi)
|
||||||
@@ -33,7 +32,7 @@ namespace Microsoft.Plugin.Folder.Sources.Result
|
|||||||
SubTitle = Properties.Resources.wox_plugin_folder_select_folder_first_result_subtitle,
|
SubTitle = Properties.Resources.wox_plugin_folder_select_folder_first_result_subtitle,
|
||||||
IcoPath = Search,
|
IcoPath = Search,
|
||||||
Score = 500,
|
Score = 500,
|
||||||
Action = c => _explorerAction.ExecuteSanitized(Search, contextApi),
|
Action = c => _shellAction.ExecuteSanitized(Search, contextApi),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ namespace Microsoft.Plugin.Folder.Sources.Result
|
|||||||
{
|
{
|
||||||
public class FileItemResult : IItemResult
|
public class FileItemResult : IItemResult
|
||||||
{
|
{
|
||||||
private static readonly IExplorerAction ExplorerAction = new ExplorerAction();
|
private static readonly IShellAction ShellAction = new ShellAction();
|
||||||
|
|
||||||
public string FilePath { get; set; }
|
public string FilePath { get; set; }
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ namespace Microsoft.Plugin.Folder.Sources.Result
|
|||||||
SubTitle = string.Format(CultureInfo.CurrentCulture, Properties.Resources.wox_plugin_folder_select_file_result_subtitle, FilePath),
|
SubTitle = string.Format(CultureInfo.CurrentCulture, Properties.Resources.wox_plugin_folder_select_file_result_subtitle, FilePath),
|
||||||
IcoPath = FilePath,
|
IcoPath = FilePath,
|
||||||
TitleHighlightData = StringMatcher.FuzzySearch(Search, Path.GetFileName(FilePath)).MatchData,
|
TitleHighlightData = StringMatcher.FuzzySearch(Search, Path.GetFileName(FilePath)).MatchData,
|
||||||
Action = c => ExplorerAction.Execute(FilePath, contextApi),
|
Action = c => ShellAction.Execute(FilePath, contextApi),
|
||||||
ContextData = new SearchResult { Type = ResultType.File, FullPath = FilePath },
|
ContextData = new SearchResult { Type = ResultType.File, FullPath = FilePath },
|
||||||
};
|
};
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ namespace Microsoft.Plugin.Folder.Sources.Result
|
|||||||
{
|
{
|
||||||
public class FolderItemResult : IItemResult
|
public class FolderItemResult : IItemResult
|
||||||
{
|
{
|
||||||
private static readonly IExplorerAction ExplorerAction = new ExplorerAction();
|
private static readonly IShellAction ShellAction = new ShellAction();
|
||||||
|
|
||||||
public FolderItemResult()
|
public FolderItemResult()
|
||||||
{
|
{
|
||||||
@@ -41,7 +41,7 @@ namespace Microsoft.Plugin.Folder.Sources.Result
|
|||||||
QueryTextDisplay = Path,
|
QueryTextDisplay = Path,
|
||||||
TitleHighlightData = StringMatcher.FuzzySearch(Search, Title).MatchData,
|
TitleHighlightData = StringMatcher.FuzzySearch(Search, Title).MatchData,
|
||||||
ContextData = new SearchResult { Type = ResultType.Folder, FullPath = Path },
|
ContextData = new SearchResult { Type = ResultType.Folder, FullPath = Path },
|
||||||
Action = c => ExplorerAction.Execute(Path, contextApi),
|
Action = c => ShellAction.Execute(Path, contextApi),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,16 +7,13 @@ using System.Diagnostics;
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Windows;
|
|
||||||
using Wox.Infrastructure.Logger;
|
using Wox.Infrastructure.Logger;
|
||||||
using Wox.Plugin;
|
using Wox.Plugin;
|
||||||
|
|
||||||
namespace Microsoft.Plugin.Folder.Sources
|
namespace Microsoft.Plugin.Folder.Sources
|
||||||
{
|
{
|
||||||
public class ExplorerAction : IExplorerAction
|
public class ShellAction : IShellAction
|
||||||
{
|
{
|
||||||
private const string FileExplorerProgramName = "explorer";
|
|
||||||
|
|
||||||
public bool Execute(string path, IPublicAPI contextApi)
|
public bool Execute(string path, IPublicAPI contextApi)
|
||||||
{
|
{
|
||||||
if (contextApi == null)
|
if (contextApi == null)
|
||||||
@@ -24,7 +21,7 @@ namespace Microsoft.Plugin.Folder.Sources
|
|||||||
throw new ArgumentNullException(nameof(contextApi));
|
throw new ArgumentNullException(nameof(contextApi));
|
||||||
}
|
}
|
||||||
|
|
||||||
return OpenFileOrFolder(FileExplorerProgramName, path, contextApi);
|
return OpenFileOrFolder(path, contextApi);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool ExecuteSanitized(string search, IPublicAPI contextApi)
|
public bool ExecuteSanitized(string search, IPublicAPI contextApi)
|
||||||
@@ -51,16 +48,21 @@ namespace Microsoft.Plugin.Folder.Sources
|
|||||||
}
|
}
|
||||||
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "We want to keep the process alive and instead inform the user of the error")]
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "We want to keep the process alive and instead inform the user of the error")]
|
||||||
private static bool OpenFileOrFolder(string program, string path, IPublicAPI contextApi)
|
private static bool OpenFileOrFolder(string path, IPublicAPI contextApi)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Process.Start(program, path);
|
using (var process = new Process())
|
||||||
|
{
|
||||||
|
process.StartInfo.FileName = path;
|
||||||
|
process.StartInfo.UseShellExecute = true;
|
||||||
|
process.Start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
string messageBoxTitle = string.Format(CultureInfo.InvariantCulture, "{0} {1}", Properties.Resources.wox_plugin_folder_select_folder_OpenFileOrFolder_error_message, path);
|
string messageBoxTitle = string.Format(CultureInfo.InvariantCulture, "{0} {1}", Properties.Resources.wox_plugin_folder_select_folder_OpenFileOrFolder_error_message, path);
|
||||||
Log.Exception($"Failed to open {path} in {FileExplorerProgramName}, {e.Message}", e, MethodBase.GetCurrentMethod().DeclaringType);
|
Log.Exception($"Failed to open {path}, {e.Message}", e, MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
contextApi.ShowMsg(messageBoxTitle, e.Message);
|
contextApi.ShowMsg(messageBoxTitle, e.Message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -12,7 +12,7 @@ namespace Microsoft.Plugin.Folder
|
|||||||
{
|
{
|
||||||
public class UserFolderResult : IItemResult
|
public class UserFolderResult : IItemResult
|
||||||
{
|
{
|
||||||
private readonly IExplorerAction _explorerAction = new ExplorerAction();
|
private readonly IShellAction _shellAction = new ShellAction();
|
||||||
|
|
||||||
public string Search { get; set; }
|
public string Search { get; set; }
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ namespace Microsoft.Plugin.Folder
|
|||||||
QueryTextDisplay = Path,
|
QueryTextDisplay = Path,
|
||||||
TitleHighlightData = StringMatcher.FuzzySearch(Search, Title).MatchData,
|
TitleHighlightData = StringMatcher.FuzzySearch(Search, Title).MatchData,
|
||||||
ContextData = new SearchResult { Type = ResultType.Folder, FullPath = Path },
|
ContextData = new SearchResult { Type = ResultType.Folder, FullPath = Path },
|
||||||
Action = c => _explorerAction.Execute(Path, contextApi),
|
Action = c => _shellAction.Execute(Path, contextApi),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user