mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Merge branch 'dev' into last_history_show_result_icon
This commit is contained in:
commit
2e8bb357fc
113 changed files with 1147 additions and 755 deletions
2
.github/workflows/default_plugins.yml
vendored
2
.github/workflows/default_plugins.yml
vendored
|
|
@ -10,7 +10,7 @@ jobs:
|
|||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v5
|
||||
with:
|
||||
|
|
|
|||
12
.github/workflows/dotnet.yml
vendored
12
.github/workflows/dotnet.yml
vendored
|
|
@ -20,7 +20,7 @@ jobs:
|
|||
NUGET_CERT_REVOCATION_MODE: offline
|
||||
BUILD_NUMBER: ${{ github.run_number }}
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
- name: Set Flow.Launcher.csproj version
|
||||
id: update
|
||||
uses: vers-one/dotnet-project-version-updater@v1.7
|
||||
|
|
@ -54,28 +54,28 @@ jobs:
|
|||
shell: powershell
|
||||
run: .\Scripts\post_build.ps1
|
||||
- name: Upload Plugin Nupkg
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: Plugin nupkg
|
||||
path: |
|
||||
Output\Release\Flow.Launcher.Plugin.*.nupkg
|
||||
compression-level: 0
|
||||
- name: Upload Setup
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: Flow Installer
|
||||
path: |
|
||||
Output\Packages\Flow-Launcher-*.exe
|
||||
compression-level: 0
|
||||
- name: Upload Portable Version
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: Portable Version
|
||||
path: |
|
||||
Output\Packages\Flow-Launcher-Portable.zip
|
||||
compression-level: 0
|
||||
- name: Upload Full Nupkg
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: Full nupkg
|
||||
path: |
|
||||
|
|
@ -83,7 +83,7 @@ jobs:
|
|||
|
||||
compression-level: 0
|
||||
- name: Upload Release Information
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: RELEASES
|
||||
path: |
|
||||
|
|
|
|||
2
.github/workflows/pr_assignee.yml
vendored
2
.github/workflows/pr_assignee.yml
vendored
|
|
@ -14,4 +14,4 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Assign PR to creator
|
||||
uses: toshimaru/auto-author-assign@v2.1.1
|
||||
uses: toshimaru/auto-author-assign@v3.0.1
|
||||
|
|
|
|||
2
.github/workflows/release_pr.yml
vendored
2
.github/workflows/release_pr.yml
vendored
|
|
@ -11,7 +11,7 @@ jobs:
|
|||
update-pr:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- uses: actions/setup-python@v6
|
||||
with:
|
||||
|
|
|
|||
|
|
@ -26,9 +26,11 @@ namespace Flow.Launcher.Core.ExternalPlugins
|
|||
|
||||
public static async Task<bool> UpdateManifestAsync(bool usePrimaryUrlOnly = false, CancellationToken token = default)
|
||||
{
|
||||
bool lockAcquired = false;
|
||||
try
|
||||
{
|
||||
await manifestUpdateLock.WaitAsync(token).ConfigureAwait(false);
|
||||
lockAcquired = true;
|
||||
|
||||
if (UserPlugins == null || usePrimaryUrlOnly || DateTime.Now.Subtract(lastFetchedAt) >= fetchTimeout)
|
||||
{
|
||||
|
|
@ -54,13 +56,18 @@ namespace Flow.Launcher.Core.ExternalPlugins
|
|||
return true;
|
||||
}
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
// Ignored
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
PublicApi.Instance.LogException(ClassName, "Http request failed", e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
manifestUpdateLock.Release();
|
||||
// Only release the lock if it was acquired
|
||||
if (lockAcquired) manifestUpdateLock.Release();
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -100,11 +100,11 @@ namespace Flow.Launcher.Core.Plugin
|
|||
|
||||
RPC = new JsonRpc(handler, new JsonRPCPublicAPI(Context.API));
|
||||
|
||||
RPC.AddLocalRpcMethod("UpdateResults", new Action<string, JsonRPCQueryResponseModel>((rawQuery, response) =>
|
||||
RPC.AddLocalRpcMethod("UpdateResults", new Action<string, JsonRPCQueryResponseModel>((trimmedQuery, response) =>
|
||||
{
|
||||
var results = ParseResults(response);
|
||||
ResultsUpdated?.Invoke(this,
|
||||
new ResultUpdatedEventArgs { Query = new Query() { RawQuery = rawQuery }, Results = results });
|
||||
new ResultUpdatedEventArgs { Query = new Query() { TrimmedQuery = trimmedQuery }, Results = results });
|
||||
}));
|
||||
RPC.SynchronizationContext = null;
|
||||
RPC.StartListening();
|
||||
|
|
|
|||
|
|
@ -401,7 +401,7 @@ namespace Flow.Launcher.Core.Plugin
|
|||
{
|
||||
Title = Localize.pluginStillInitializing(metadata.Name),
|
||||
SubTitle = Localize.pluginStillInitializingSubtitle(),
|
||||
AutoCompleteText = query.RawQuery,
|
||||
AutoCompleteText = query.TrimmedQuery,
|
||||
IcoPath = metadata.IcoPath,
|
||||
PluginDirectory = metadata.PluginDirectory,
|
||||
ActionKeywordAssigned = query.ActionKeyword,
|
||||
|
|
@ -443,7 +443,7 @@ namespace Flow.Launcher.Core.Plugin
|
|||
{
|
||||
Title = Localize.pluginFailedToRespond(metadata.Name),
|
||||
SubTitle = Localize.pluginFailedToRespondSubtitle(),
|
||||
AutoCompleteText = query.RawQuery,
|
||||
AutoCompleteText = query.TrimmedQuery,
|
||||
IcoPath = Constant.ErrorIcon,
|
||||
PluginDirectory = metadata.PluginDirectory,
|
||||
ActionKeywordAssigned = query.ActionKeyword,
|
||||
|
|
@ -467,7 +467,7 @@ namespace Flow.Launcher.Core.Plugin
|
|||
{
|
||||
Title = Localize.pluginStillInitializing(metadata.Name),
|
||||
SubTitle = Localize.pluginStillInitializingSubtitle(),
|
||||
AutoCompleteText = query.RawQuery,
|
||||
AutoCompleteText = query.TrimmedQuery,
|
||||
IcoPath = metadata.IcoPath,
|
||||
PluginDirectory = metadata.PluginDirectory,
|
||||
ActionKeywordAssigned = query.ActionKeyword,
|
||||
|
|
|
|||
|
|
@ -6,15 +6,16 @@ namespace Flow.Launcher.Core.Plugin
|
|||
{
|
||||
public static class QueryBuilder
|
||||
{
|
||||
public static Query Build(string text, Dictionary<string, PluginPair> nonGlobalPlugins)
|
||||
public static Query Build(string originalQuery, string trimmedQuery, Dictionary<string, PluginPair> nonGlobalPlugins)
|
||||
{
|
||||
// home query
|
||||
if (string.IsNullOrEmpty(text))
|
||||
if (string.IsNullOrEmpty(trimmedQuery))
|
||||
{
|
||||
return new Query()
|
||||
{
|
||||
Search = string.Empty,
|
||||
RawQuery = string.Empty,
|
||||
OriginalQuery = string.Empty,
|
||||
TrimmedQuery = string.Empty,
|
||||
SearchTerms = Array.Empty<string>(),
|
||||
ActionKeyword = string.Empty,
|
||||
IsHomeQuery = true
|
||||
|
|
@ -22,14 +23,13 @@ namespace Flow.Launcher.Core.Plugin
|
|||
}
|
||||
|
||||
// replace multiple white spaces with one white space
|
||||
var terms = text.Split(Query.TermSeparator, StringSplitOptions.RemoveEmptyEntries);
|
||||
var terms = trimmedQuery.Split(Query.TermSeparator, StringSplitOptions.RemoveEmptyEntries);
|
||||
if (terms.Length == 0)
|
||||
{
|
||||
// nothing was typed
|
||||
return null;
|
||||
}
|
||||
|
||||
var rawQuery = text;
|
||||
string actionKeyword, search;
|
||||
string possibleActionKeyword = terms[0];
|
||||
string[] searchTerms;
|
||||
|
|
@ -38,21 +38,22 @@ namespace Flow.Launcher.Core.Plugin
|
|||
{
|
||||
// use non global plugin for query
|
||||
actionKeyword = possibleActionKeyword;
|
||||
search = terms.Length > 1 ? rawQuery[(actionKeyword.Length + 1)..].TrimStart() : string.Empty;
|
||||
search = terms.Length > 1 ? trimmedQuery[(actionKeyword.Length + 1)..].TrimStart() : string.Empty;
|
||||
searchTerms = terms[1..];
|
||||
}
|
||||
else
|
||||
{
|
||||
// non action keyword
|
||||
actionKeyword = string.Empty;
|
||||
search = rawQuery.TrimStart();
|
||||
search = trimmedQuery.TrimStart();
|
||||
searchTerms = terms;
|
||||
}
|
||||
|
||||
return new Query()
|
||||
{
|
||||
Search = search,
|
||||
RawQuery = rawQuery,
|
||||
OriginalQuery = originalQuery,
|
||||
TrimmedQuery = trimmedQuery,
|
||||
SearchTerms = searchTerms,
|
||||
ActionKeyword = actionKeyword,
|
||||
IsHomeQuery = false
|
||||
|
|
|
|||
|
|
@ -496,6 +496,8 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
uint dwmsEventTime
|
||||
)
|
||||
{
|
||||
if (hwnd.IsNull) return;
|
||||
|
||||
await _foregroundChangeLock.WaitAsync();
|
||||
try
|
||||
{
|
||||
|
|
@ -647,6 +649,8 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
uint dwmsEventTime
|
||||
)
|
||||
{
|
||||
if (hwnd.IsNull) return;
|
||||
|
||||
// If the dialog window is moved, update the Dialog Jump window position
|
||||
var dialogWindowExist = false;
|
||||
lock (_dialogWindowLock)
|
||||
|
|
@ -672,6 +676,8 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
uint dwmsEventTime
|
||||
)
|
||||
{
|
||||
if (hwnd.IsNull) return;
|
||||
|
||||
// If the dialog window is moved or resized, update the Dialog Jump window position
|
||||
if (_dragMoveTimer != null)
|
||||
{
|
||||
|
|
@ -697,6 +703,8 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
uint dwmsEventTime
|
||||
)
|
||||
{
|
||||
if (hwnd.IsNull) return;
|
||||
|
||||
// If the dialog window is destroyed, set _dialogWindowHandle to null
|
||||
var dialogWindowExist = false;
|
||||
lock (_dialogWindowLock)
|
||||
|
|
@ -728,6 +736,8 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
uint dwmsEventTime
|
||||
)
|
||||
{
|
||||
if (hwnd.IsNull) return;
|
||||
|
||||
// If the dialog window is hidden, set _dialogWindowHandle to null
|
||||
var dialogWindowExist = false;
|
||||
lock (_dialogWindowLock)
|
||||
|
|
@ -759,6 +769,8 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
uint dwmsEventTime
|
||||
)
|
||||
{
|
||||
if (hwnd.IsNull) return;
|
||||
|
||||
// If the dialog window is ended, set _dialogWindowHandle to null
|
||||
var dialogWindowExist = false;
|
||||
lock (_dialogWindowLock)
|
||||
|
|
|
|||
|
|
@ -91,4 +91,6 @@ PBT_APMRESUMEAUTOMATIC
|
|||
PBT_APMRESUMESUSPEND
|
||||
PowerRegisterSuspendResumeNotification
|
||||
PowerUnregisterSuspendResumeNotification
|
||||
DeviceNotifyCallbackRoutine
|
||||
DeviceNotifyCallbackRoutine
|
||||
|
||||
MonitorFromWindow
|
||||
|
|
@ -27,7 +27,7 @@ namespace Flow.Launcher.Infrastructure
|
|||
{
|
||||
switch (e.PropertyName)
|
||||
{
|
||||
case nameof (Settings.ShouldUsePinyin):
|
||||
case nameof(Settings.ShouldUsePinyin):
|
||||
if (_settings.ShouldUsePinyin)
|
||||
{
|
||||
Reload();
|
||||
|
|
@ -52,7 +52,7 @@ namespace Flow.Launcher.Infrastructure
|
|||
|
||||
private void CreateDoublePinyinTableFromStream(Stream jsonStream)
|
||||
{
|
||||
var table = JsonSerializer.Deserialize<Dictionary<string, Dictionary<string, string>>>(jsonStream) ??
|
||||
var table = JsonSerializer.Deserialize<Dictionary<string, Dictionary<string, string>>>(jsonStream) ??
|
||||
throw new InvalidOperationException("Failed to deserialize double pinyin table: result is null");
|
||||
|
||||
var schemaKey = _settings.DoublePinyinSchema.ToString();
|
||||
|
|
@ -128,12 +128,12 @@ namespace Flow.Launcher.Infrastructure
|
|||
if (IsChineseCharacter(content[i]))
|
||||
{
|
||||
var translated = _settings.UseDoublePinyin ? ToDoublePinyin(resultList[i]) : resultList[i];
|
||||
|
||||
if (i > 0)
|
||||
|
||||
if (i > 0 && content[i - 1] != ' ')
|
||||
{
|
||||
resultBuilder.Append(' ');
|
||||
}
|
||||
|
||||
|
||||
map.AddNewIndex(resultBuilder.Length, translated.Length);
|
||||
resultBuilder.Append(translated);
|
||||
previousIsChinese = true;
|
||||
|
|
@ -144,11 +144,14 @@ namespace Flow.Launcher.Infrastructure
|
|||
if (previousIsChinese)
|
||||
{
|
||||
previousIsChinese = false;
|
||||
resultBuilder.Append(' ');
|
||||
if (content[i] != ' ')
|
||||
{
|
||||
resultBuilder.Append(' ');
|
||||
}
|
||||
}
|
||||
|
||||
map.AddNewIndex(resultBuilder.Length, resultList[i].Length);
|
||||
resultBuilder.Append(resultList[i]);
|
||||
|
||||
map.AddNewIndex(resultBuilder.Length, 1);
|
||||
resultBuilder.Append(content[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -156,7 +159,7 @@ namespace Flow.Launcher.Infrastructure
|
|||
|
||||
var translation = resultBuilder.ToString();
|
||||
var result = (translation, map);
|
||||
|
||||
|
||||
return _pinyinCache[content] = result;
|
||||
}
|
||||
|
||||
|
|
@ -185,8 +188,8 @@ namespace Flow.Launcher.Infrastructure
|
|||
|
||||
private string ToDoublePinyin(string fullPinyin)
|
||||
{
|
||||
return currentDoublePinyinTable.TryGetValue(fullPinyin, out var doublePinyinValue)
|
||||
? doublePinyinValue
|
||||
return currentDoublePinyinTable.TryGetValue(fullPinyin, out var doublePinyinValue)
|
||||
? doublePinyinValue
|
||||
: fullPinyin;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ namespace Flow.Launcher.Infrastructure
|
|||
public int MapToOriginalIndex(int translatedIndex)
|
||||
{
|
||||
var searchResult = _originalToTranslated.BinarySearch(translatedIndex);
|
||||
return searchResult >= 0 ? searchResult : ~searchResult;
|
||||
return searchResult >= 0 ? searchResult + 1 : ~searchResult;
|
||||
}
|
||||
|
||||
public void EndConstruct()
|
||||
|
|
|
|||
|
|
@ -481,6 +481,7 @@ namespace Flow.Launcher.Infrastructure.UserSettings
|
|||
}
|
||||
public bool LeaveCmdOpen { get; set; }
|
||||
public bool HideWhenDeactivated { get; set; } = true;
|
||||
public bool ShowTaskbarWhenInvoked { get; set; } = false;
|
||||
|
||||
private bool _showAtTopmost = false;
|
||||
public bool ShowAtTopmost
|
||||
|
|
|
|||
|
|
@ -1016,5 +1016,32 @@ namespace Flow.Launcher.Infrastructure
|
|||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Taskbar
|
||||
|
||||
public static unsafe void ShowTaskbar()
|
||||
{
|
||||
// Find the taskbar window
|
||||
var taskbarHwnd = PInvoke.FindWindowEx(HWND.Null, HWND.Null, "Shell_TrayWnd", null);
|
||||
if (taskbarHwnd == HWND.Null) return;
|
||||
|
||||
// Magic from https://github.com/Oliviaophia/SmartTaskbar
|
||||
const uint TrayBarFlag = 0x05D1;
|
||||
var mon = PInvoke.MonitorFromWindow(taskbarHwnd, Windows.Win32.Graphics.Gdi.MONITOR_FROM_FLAGS.MONITOR_DEFAULTTONEAREST);
|
||||
PInvoke.PostMessage(taskbarHwnd, TrayBarFlag, new WPARAM(1), new LPARAM((nint)mon.Value));
|
||||
}
|
||||
|
||||
public static void HideTaskbar()
|
||||
{
|
||||
// Find the taskbar window
|
||||
var taskbarHwnd = PInvoke.FindWindowEx(HWND.Null, HWND.Null, "Shell_TrayWnd", null);
|
||||
if (taskbarHwnd == HWND.Null) return;
|
||||
|
||||
// Magic from https://github.com/Oliviaophia/SmartTaskbar
|
||||
const uint TrayBarFlag = 0x05D1;
|
||||
PInvoke.PostMessage(taskbarHwnd, TrayBarFlag, new WPARAM(0), IntPtr.Zero);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using System.Text.Json.Serialization;
|
||||
using System;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Flow.Launcher.Plugin
|
||||
{
|
||||
|
|
@ -8,11 +9,29 @@ namespace Flow.Launcher.Plugin
|
|||
public class Query
|
||||
{
|
||||
/// <summary>
|
||||
/// Raw query, this includes action keyword if it has.
|
||||
/// It has handled buildin custom query shortkeys and build-in shortcuts, and it trims the whitespace.
|
||||
/// We didn't recommend use this property directly. You should always use Search property.
|
||||
/// Original query, exactly how the user has typed into the search box.
|
||||
/// We don't recommend using this property directly. You should always use Search property.
|
||||
/// </summary>
|
||||
public string RawQuery { get; internal init; }
|
||||
public string OriginalQuery { get; internal init; }
|
||||
|
||||
/// <summary>
|
||||
/// Raw query, this includes action keyword if it has.
|
||||
/// It has handled built-in custom query hotkeys and built-in shortcuts, and it trims the whitespace.
|
||||
/// We don't recommend using this property directly. You should always use Search property.
|
||||
/// </summary>
|
||||
[Obsolete("RawQuery is renamed to TrimmedQuery. This property will be removed. Update the code to use TrimmedQuery instead.")]
|
||||
public string RawQuery {
|
||||
get => TrimmedQuery;
|
||||
internal init { TrimmedQuery = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Original query but with trimmed whitespace. Includes action keyword.
|
||||
/// It has handled built-in custom query hotkeys and build-in shortcuts.
|
||||
/// If you need the exact original query from the search box, use OriginalQuery property instead.
|
||||
/// We don't recommend using this property directly. You should always use Search property.
|
||||
/// </summary>
|
||||
public string TrimmedQuery { get; internal init; }
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the query was forced to execute again.
|
||||
|
|
@ -28,7 +47,7 @@ namespace Flow.Launcher.Plugin
|
|||
|
||||
/// <summary>
|
||||
/// Search part of a query.
|
||||
/// This will not include action keyword if exclusive plugin gets it, otherwise it should be same as RawQuery.
|
||||
/// This will not include action keyword if exclusive plugin gets it, otherwise it should be same as TrimmedQuery.
|
||||
/// Since we allow user to switch a exclusive plugin to generic plugin,
|
||||
/// so this property will always give you the "real" query part of the query
|
||||
/// </summary>
|
||||
|
|
@ -103,6 +122,6 @@ namespace Flow.Launcher.Plugin
|
|||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString() => RawQuery;
|
||||
public override string ToString() => TrimmedQuery;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,9 +16,9 @@ namespace Flow.Launcher.Test
|
|||
{">", new PluginPair {Metadata = new PluginMetadata {ActionKeywords = new List<string> {">"}}}}
|
||||
};
|
||||
|
||||
Query q = QueryBuilder.Build("> ping google.com -n 20 -6", nonGlobalPlugins);
|
||||
Query q = QueryBuilder.Build("> ping google.com -n 20 -6", "> ping google.com -n 20 -6", nonGlobalPlugins);
|
||||
|
||||
ClassicAssert.AreEqual("> ping google.com -n 20 -6", q.RawQuery);
|
||||
ClassicAssert.AreEqual("> ping google.com -n 20 -6", q.TrimmedQuery);
|
||||
ClassicAssert.AreEqual("ping google.com -n 20 -6", q.Search, "Search should not start with the ActionKeyword.");
|
||||
ClassicAssert.AreEqual(">", q.ActionKeyword);
|
||||
|
||||
|
|
@ -39,10 +39,10 @@ namespace Flow.Launcher.Test
|
|||
{">", new PluginPair {Metadata = new PluginMetadata {ActionKeywords = new List<string> {">"}, Disabled = true}}}
|
||||
};
|
||||
|
||||
Query q = QueryBuilder.Build("> ping google.com -n 20 -6", nonGlobalPlugins);
|
||||
Query q = QueryBuilder.Build("> ping google.com -n 20 -6", "> ping google.com -n 20 -6", nonGlobalPlugins);
|
||||
|
||||
ClassicAssert.AreEqual("> ping google.com -n 20 -6", q.Search);
|
||||
ClassicAssert.AreEqual(q.Search, q.RawQuery, "RawQuery should be equal to Search.");
|
||||
ClassicAssert.AreEqual(q.Search, q.TrimmedQuery, "TrimmedQuery should be equal to Search.");
|
||||
ClassicAssert.AreEqual(6, q.SearchTerms.Length, "The length of SearchTerms should match.");
|
||||
ClassicAssert.AreNotEqual(">", q.ActionKeyword, "ActionKeyword should not match that of a disabled plugin.");
|
||||
ClassicAssert.AreEqual("ping google.com -n 20 -6", q.SecondToEndSearch, "SecondToEndSearch should be trimmed of multiple whitespace characters");
|
||||
|
|
@ -51,7 +51,7 @@ namespace Flow.Launcher.Test
|
|||
[Test]
|
||||
public void GenericPluginQueryTest()
|
||||
{
|
||||
Query q = QueryBuilder.Build("file.txt file2 file3", new Dictionary<string, PluginPair>());
|
||||
Query q = QueryBuilder.Build("file.txt file2 file3", "file.txt file2 file3", new Dictionary<string, PluginPair>());
|
||||
|
||||
ClassicAssert.AreEqual("file.txt file2 file3", q.Search);
|
||||
ClassicAssert.AreEqual("", q.ActionKeyword);
|
||||
|
|
|
|||
|
|
@ -22,19 +22,33 @@ namespace Flow.Launcher.Test
|
|||
ClassicAssert.AreEqual(10, GetOriginalToTranslatedAt(mapping, 1));
|
||||
}
|
||||
|
||||
[TestCase(0, 0)]
|
||||
[TestCase(2, 1)]
|
||||
[TestCase(3, 1)]
|
||||
[TestCase(5, 2)]
|
||||
[TestCase(6, 2)]
|
||||
|
||||
[TestCase(0, 0)] // "F" -> "F"
|
||||
[TestCase(1, 1)] // "l" -> "l"
|
||||
[TestCase(2, 2)] // "o" -> "o"
|
||||
[TestCase(3, 3)] // "w" -> "w"
|
||||
[TestCase(4, 4)] // " " -> " "
|
||||
[TestCase(5, 5)] // "Y" (translated from "用") -> original index 5
|
||||
[TestCase(6, 5)] // "o" (translated from "用") -> original index 5
|
||||
[TestCase(7, 5)] // "n" (translated from "用") -> original index 5
|
||||
[TestCase(8, 5)] // "g" (translated from "用") -> original index 5
|
||||
[TestCase(10, 6)] // "H" (translated from "户") -> original index 6
|
||||
[TestCase(11, 6)] // "u" (translated from "户") -> original index 6
|
||||
public void MapToOriginalIndex_ShouldReturnExpectedIndex(int translatedIndex, int expectedOriginalIndex)
|
||||
{
|
||||
var mapping = new TranslationMapping();
|
||||
// a测试
|
||||
// a Ce Shi
|
||||
mapping.AddNewIndex(0, 1);
|
||||
mapping.AddNewIndex(2, 2);
|
||||
mapping.AddNewIndex(5, 3);
|
||||
// Test case :
|
||||
// 0123456
|
||||
// Flow 用户
|
||||
// 012345678901
|
||||
// Flow Yong Hu
|
||||
mapping.AddNewIndex(0, 1); // F
|
||||
mapping.AddNewIndex(1, 1); // l
|
||||
mapping.AddNewIndex(2, 1); // o
|
||||
mapping.AddNewIndex(3, 1); // w
|
||||
mapping.AddNewIndex(4, 1); // ' '
|
||||
mapping.AddNewIndex(5, 4); // 用 -> Yong
|
||||
mapping.AddNewIndex(10, 2); // 户 -> Hu
|
||||
|
||||
var result = mapping.MapToOriginalIndex(translatedIndex);
|
||||
ClassicAssert.AreEqual(expectedOriginalIndex, result);
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@
|
|||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="iNKORE.UI.WPF.Modern" Version="0.10.1" />
|
||||
<PackageReference Include="iNKORE.UI.WPF.Modern" Version="0.10.2.1" />
|
||||
<PackageReference Include="MdXaml" Version="1.27.0" />
|
||||
<PackageReference Include="MdXaml.AnimatedGif" Version="1.27.0" />
|
||||
<PackageReference Include="MdXaml.Html" Version="1.27.0" />
|
||||
|
|
|
|||
|
|
@ -16,6 +16,15 @@ public static class ErrorReporting
|
|||
var logger = LogManager.GetLogger(methodName);
|
||||
logger.Fatal(ExceptionFormatter.FormatExcpetion(e));
|
||||
if (silent) return;
|
||||
|
||||
// Workaround for issue https://github.com/Flow-Launcher/Flow.Launcher/issues/4016
|
||||
// The crash occurs in PresentationFramework.dll, not necessarily when the Runner UI is visible, originating from this line:
|
||||
// https://github.com/dotnet/wpf/blob/3439f20fb8c685af6d9247e8fd2978cac42e74ac/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Shell/WindowChromeWorker.cs#L1005
|
||||
// Many bug reports because users see the "Error report UI" after the crash with System.Runtime.InteropServices.COMException 0xD0000701 or 0x80263001.
|
||||
// However, displaying this "Error report UI" during WPF crashes, especially when DWM composition is changing, is not ideal; some users reported it hangs for up to a minute before the it appears.
|
||||
// This change modifies the behavior to log the exception instead of showing the "Error report UI".
|
||||
if (ExceptionHelper.IsRecoverableDwmCompositionException(e)) return;
|
||||
|
||||
var reportWindow = new ReportWindow(e);
|
||||
reportWindow.Show();
|
||||
}
|
||||
|
|
|
|||
42
Flow.Launcher/Helper/ExceptionHelper.cs
Normal file
42
Flow.Launcher/Helper/ExceptionHelper.cs
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
// This is a direct copy of the file at https://github.com/microsoft/PowerToys/blob/main/src/modules/launcher/PowerLauncher/Helper/ExceptionHelper.cs and adapted for flow.
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Flow.Launcher.Helper;
|
||||
|
||||
internal static class ExceptionHelper
|
||||
{
|
||||
private const string PresentationFrameworkExceptionSource = "PresentationFramework";
|
||||
|
||||
private const int DWM_E_COMPOSITIONDISABLED = unchecked((int)0x80263001);
|
||||
|
||||
// HRESULT for NT STATUS STATUS_MESSAGE_LOST (0xC0000701 | 0x10000000 == 0xD0000701)
|
||||
private const int STATUS_MESSAGE_LOST_HR = unchecked((int)0xD0000701);
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the exception is a recoverable DWM composition exception.
|
||||
/// </summary>
|
||||
internal static bool IsRecoverableDwmCompositionException(Exception exception)
|
||||
{
|
||||
if (exception is not COMException comException)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (comException.HResult is DWM_E_COMPOSITIONDISABLED)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (comException.HResult is STATUS_MESSAGE_LOST_HR && comException.Source == PresentationFrameworkExceptionSource)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check for common DWM composition changed patterns in the stack trace
|
||||
var stackTrace = comException.StackTrace;
|
||||
return !string.IsNullOrEmpty(stackTrace) &&
|
||||
stackTrace.Contains("DwmCompositionChanged", StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
}
|
||||
|
|
@ -143,6 +143,8 @@ internal static class HotKeyMapper
|
|||
return;
|
||||
|
||||
App.API.ShowMainWindow();
|
||||
// Make sure to go back to the query results page first since it can cause issues if current page is context menu
|
||||
App.API.BackToQueryResults();
|
||||
App.API.ChangeQuery(hotkey.ActionKeyword, true);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,11 +16,11 @@ public static class ResultHelper
|
|||
return await PopulateResultsAsync(item.PluginID, item.Query, item.Title, item.SubTitle, item.RecordKey);
|
||||
}
|
||||
|
||||
public static async Task<Result?> PopulateResultsAsync(string pluginId, string rawQuery, string title, string subTitle, string recordKey)
|
||||
public static async Task<Result?> PopulateResultsAsync(string pluginId, string trimmedQuery, string title, string subTitle, string recordKey)
|
||||
{
|
||||
var plugin = PluginManager.GetPluginForId(pluginId);
|
||||
if (plugin == null) return null;
|
||||
var query = QueryBuilder.Build(rawQuery, PluginManager.GetNonGlobalPlugins());
|
||||
var query = QueryBuilder.Build(trimmedQuery, trimmedQuery, PluginManager.GetNonGlobalPlugins());
|
||||
if (query == null) return null;
|
||||
try
|
||||
{
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">إعادة تعيين الموقع</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">الإعدادات</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">الأيقونات</system:String>
|
||||
<system:String x:Key="about_activate_times">لقد قمت بتفعيل Flow Launcher {0} مرات</system:String>
|
||||
<system:String x:Key="checkUpdates">التحقق من التحديثات</system:String>
|
||||
<system:String x:Key="BecomeASponsor">كن راعيا</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">الإصدار الجديد {0} متاح، هل ترغب في إعادة تشغيل Flow Launcher لاستخدام التحديث</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">فشل التحقق من التحديثات، يرجى التحقق من الاتصال وإعدادات البروكسي لـ api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Obnovit pozici</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Nastavení</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">Ikony</system:String>
|
||||
<system:String x:Key="about_activate_times">Flow Launcher byl aktivován {0} krát</system:String>
|
||||
<system:String x:Key="checkUpdates">Zkontrolovat Aktualizace</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Staňte se sponzorem</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Je k dispozici nová verze {0}, chcete Flow Launcher restartovat, aby se mohl aktualizovat?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Hledání aktualizací se nezdařilo, zkontrolujte prosím své internetové připojení a nastavení proxy serveru k api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Position Reset</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Indstillinger</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">Icons</system:String>
|
||||
<system:String x:Key="about_activate_times">Du har aktiveret Flow Launcher {0} gange</system:String>
|
||||
<system:String x:Key="checkUpdates">Tjek for opdateringer</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become A Sponsor</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Ny version {0} er tilgængelig, genstart venligst Flow Launcher</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Check updates failed, please check your connection and proxy settings to api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Zurücksetzen der Position</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Position des Suchfensters zurücksetzen</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Zum Suchen hier tippen</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Einstellungen</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Ergebnisse der Homepage zeigen, wenn Abfragetext leer ist.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Historie-Ergebnisse auf Homepage zeigen</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximal gezeigte Historie-Ergebnisse auf Homepage</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Dies kann nur bearbeitet werden, wenn das Plug-in das Home-Feature unterstützt und die Homepage aktiviert ist.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Suchfenster an vorderster zeigen</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Setzt die Einstellung 'Immer im Vordergrund' anderer Programme außer Kraft und zeigt Flow in der vordersten Position an.</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">Icons</system:String>
|
||||
<system:String x:Key="about_activate_times">Sie haben Flow Launcher {0} mal aktiviert</system:String>
|
||||
<system:String x:Key="checkUpdates">Nach Updates suchen</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Ein Sponsor werden</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Neue Version {0} ist verfügbar. Möchten Sie Flow Launcher neu starten, um das Update zu verwenden?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Überprüfung der Updates fehlgeschlagen. Bitte überprüfen Sie Ihre Verbindungs- und Proxy-Einstellungen zu api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -81,6 +81,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Hide Flow Launcher when focus is lost</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Do not show new version notifications</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String>
|
||||
|
|
@ -449,7 +451,7 @@
|
|||
<system:String x:Key="icons">Icons</system:String>
|
||||
<system:String x:Key="about_activate_times">You have activated Flow Launcher {0} times</system:String>
|
||||
<system:String x:Key="checkUpdates">Check for Updates</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become A Sponsor</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">New version {0} is available, would you like to restart Flow Launcher to use the update?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Check updates failed, please check your connection and proxy settings to api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Position Reset</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Ajustes</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">Icons</system:String>
|
||||
<system:String x:Key="about_activate_times">Has activado Flow Launcher {0} veces</system:String>
|
||||
<system:String x:Key="checkUpdates">Buscar actualizaciones</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become A Sponsor</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">La nueva versión {0} está disponible, ¿desea reiniciar Flow Launcher para usar la actualización?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Falló la comprobación de actualizaciones, compruebe su conexión y configuración de proxy a api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Restablecer posición</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Restablece la posición de la ventana de búsqueda</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Escribir aquí para buscar</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: Este complemento aún se está inicializando...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Seleccione este resultado para volver a realizar la consulta</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: ¡No se ha recibido respuesta!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Seleccione este resultado para más información</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Configuración</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Muestra los resultados de la página de inicio cuando el texto de la consulta está vacío.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Mostrar historial de resultados en la página de inicio</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Número máximo de resultados del historial en la página de inicio</system:String>
|
||||
<system:String x:Key="historyStyle">Estilo del historial</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Elija el tipo de historial que desea mostrar en el historial y la página de inicio</system:String>
|
||||
<system:String x:Key="queryHistory">Historial de consultas</system:String>
|
||||
<system:String x:Key="executedHistory">Historial de últimas aperturas</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Esto solo se puede editar si el complemento soporta la función de Inicio y la Página de Inicio está activada.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Mostrar ventana de búsqueda en primer plano</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Anula el ajuste «Siempre arriba» de otros programas y muestra Flow en primer plano.</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">Iconos</system:String>
|
||||
<system:String x:Key="about_activate_times">Ha activado Flow Launcher {0} veces</system:String>
|
||||
<system:String x:Key="checkUpdates">Buscar actualizaciones</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Hágase Patrocinador</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Conviértase en Patrocinador</system:String>
|
||||
<system:String x:Key="newVersionTips">La nueva versión {0} está disponible, ¿desea reiniciar Flow Launcher para actualizar?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Ha fallado la comprobación de las actualizaciones, por favor, compruebe la configuración de su proxy y conexión a api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Réinitialiser la position</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Réinitialiser la position de la fenêtre de recherche</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Tapez ici pour rechercher</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: Ce plugin est toujours en cours d'initialisation...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Sélectionner ce résultat pour la requête</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Ne répond pas !</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Sélectionnez ce résultat pour plus d'informations</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Paramètres</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Afficher les résultats de la page d'accueil lorsque le texte de la requête est vide.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Afficher les résultats de l'historique sur la page d'accueil</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum de résultats de l'historique affichés sur la page d'accueil</system:String>
|
||||
<system:String x:Key="historyStyle">Style d'historique</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choisissez le type d'historique à afficher dans l'historique et la page d'accueil</system:String>
|
||||
<system:String x:Key="queryHistory">Historique des requêtes</system:String>
|
||||
<system:String x:Key="executedHistory">Historique des dernières ouvertures</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Ceci ne peut être édité que si le plugin prend en charge la fonction Accueil et que la page d'accueil est activée.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Afficher la fenêtre de recherche en premier plan</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Outrepasse le paramètre 'toujours en premier plan' des autres programmes et affiche Flow Launcher en première position.</system:String>
|
||||
|
|
@ -399,24 +407,24 @@
|
|||
<system:String x:Key="showBadgesToolTip">Pour les plugins pris en charge, des badges sont affichés afin de les distinguer plus facilement.</system:String>
|
||||
<system:String x:Key="showBadgesGlobalOnly">Afficher les badges de résultats pour la requête globale uniquement</system:String>
|
||||
<system:String x:Key="showBadgesGlobalOnlyToolTip">Afficher les badges pour les résultats des requêtes globales uniquement</system:String>
|
||||
<system:String x:Key="dialogJumpHotkey">Dialog Jump</system:String>
|
||||
<system:String x:Key="dialogJumpHotkey">Saut de dialogue</system:String>
|
||||
<system:String x:Key="dialogJumpHotkeyToolTip">Entrez le raccourci pour naviguer rapidement dans la fenêtre de dialogue Ouvrir/Enregistrer sous, vers le chemin du gestionnaire de fichiers actuel.</system:String>
|
||||
<system:String x:Key="dialogJump">Dialog Jump</system:String>
|
||||
<system:String x:Key="dialogJump">Saut de dialogue</system:String>
|
||||
<system:String x:Key="dialogJumpToolTip">Lorsque la fenêtre de dialogue Ouvrir/Enregistrer sous s'ouvre, accédez rapidement au chemin d'accès actuel du gestionnaire de fichiers.</system:String>
|
||||
<system:String x:Key="autoDialogJump">Dialog Jump Automatically</system:String>
|
||||
<system:String x:Key="autoDialogJump">Saut de dialogue automatique</system:String>
|
||||
<system:String x:Key="autoDialogJumpToolTip">Lorsque la fenêtre de dialogue Ouvrir/Enregistrer sous est affichée, naviguez automatiquement vers le chemin du gestionnaire de fichiers actuel. (Expérimental)</system:String>
|
||||
<system:String x:Key="showDialogJumpWindow">Show Dialog Jump Window</system:String>
|
||||
<system:String x:Key="showDialogJumpWindowToolTip">Display Dialog Jump search window when the open/save dialog window is shown to quickly navigate to file/folder locations.</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPosition">Dialog Jump Window Position</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPositionToolTip">Select position for the Dialog Jump search window</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionUnderDialog">Fixed under the Open/Save As dialog window. Displayed on open and stays until the window is closed</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionFollowDefault">Default search window position. Displayed when triggered by search window hotkey</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviour">Dialog Jump Result Navigation Behaviour</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviourToolTip">Behaviour to navigate Open/Save As dialog window to the selected result path</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourLeftClick">Left click or Enter key</system:String>
|
||||
<system:String x:Key="showDialogJumpWindow">Afficher la fenêtre de saut de dialogue</system:String>
|
||||
<system:String x:Key="showDialogJumpWindowToolTip">Afficher la fenêtre de recherche de saut de dialogue lorsque la fenêtre de dialogue Ouvrir/Enregistrer sous est affichée pour naviguer rapidement vers les emplacements de fichier/dossier.</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPosition">Position de la fenêtre de saut de dialogue</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPositionToolTip">Sélectionnez la position pour la fenêtre de recherche de saut de dialogue</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionUnderDialog">Fixé sous la fenêtre de dialogue Ouvrir/Enregistrer sous. Affiché à l'ouverture et reste jusqu'à ce que la fenêtre soit fermée.</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionFollowDefault">Position de la fenêtre de recherche par défaut. Affiché lorsqu'il est déclenché par le raccourci clavier de la fenêtre de recherche</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviour">Comportement de navigation des résultats du saut de dialogue</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviourToolTip">Comportement pour naviguer dans la fenêtre de dialogue Ouvrir/Enregistrer sous vers le chemin de résultat sélectionné</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourLeftClick">Clic gauche ou touche Entrée</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourRightClick">Clique droit</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviour">Dialog Jump File Navigation Behaviour</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviourToolTip">Behaviour to navigate Open/Save As dialog window when the result is a file path</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviour">Comportement de navigation des résultats du saut de dialogue</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviourToolTip">Comportement pour naviguer dans la fenêtre de dialogue Ouvrir/Enregistrer sous lorsque le résultat est un chemin de fichier</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPath">Remplir le chemin complet dans la zone de nom de fichier</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPathOpen">Remplir le chemin complet dans la zone de nom de fichier et ouvrir</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourDirectory">Remplir le répertoire dans la zone de chemin</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">Icônes</system:String>
|
||||
<system:String x:Key="about_activate_times">Vous avez utilisé Flow Launcher {0} fois</system:String>
|
||||
<system:String x:Key="checkUpdates">Vérifier les mises à jour</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Devenir un Sponsor</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Devenez un sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Nouvelle version {0} disponible, souhaitez-vous redémarrer Flow Launcher pour l'installer ?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Échec de la vérification de la mise à jour, vérifiez votre connexion et vos paramètres de configuration proxy pour pouvoir acceder à api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">איפוס מיקום</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">אפס את מיקום חלון החיפוש</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">הקלד כאן כדי לחפש</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">הגדרות</system:String>
|
||||
|
|
@ -170,6 +174,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">ניתן לערוך זאת רק אם התוסף תומך בתכונת הבית ודף הבית מופעל.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">עוקף את הגדרת תמיד עליון של תוכנות אחרות, ומציג את Flow במיקום הגבוה ביותר.</system:String>
|
||||
|
|
@ -445,7 +453,7 @@
|
|||
<system:String x:Key="icons">סמלים</system:String>
|
||||
<system:String x:Key="about_activate_times">הפעלת את Flow Launcher {0} פעמים</system:String>
|
||||
<system:String x:Key="checkUpdates">בדוק עדכונים</system:String>
|
||||
<system:String x:Key="BecomeASponsor">תן חסות</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">גרסה חדשה {0} זמינה, האם ברצונך להפעיל מחדש את Flow Launcher כדי להשתמש בעדכון?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">בדיקת העדכונים נכשלה, אנא בדוק את הגדרות החיבור ואת הגדרות ה-Proxy שלך לכתובת api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Ripristina Posizione</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Impostazioni</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">Icone</system:String>
|
||||
<system:String x:Key="about_activate_times">Hai usato Flow Launcher {0} volte</system:String>
|
||||
<system:String x:Key="checkUpdates">Cerca aggiornamenti</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Diventa un sostenitore</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Una nuova versione {0} è disponibile, riavvia Flow Launcher per favore.</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Ricerca aggiornamenti fallita, per favore controlla la tua connessione e le eventuali impostazioni proxy per api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">位置のリセット</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">検索ウィンドウの位置をリセット</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">ここに入力して検索</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: このプラグインはまだ初期化中です…</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">この結果を選択して再検索する</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: 応答に失敗しました!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">詳細については、この結果を選択してください</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">設定</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">検索文字列が空の場合、ホームページの結果を表示します。</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">クエリの履歴をホームページに表示</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">ホームページに表示される最大の履歴の数</system:String>
|
||||
<system:String x:Key="historyStyle">履歴のスタイル</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">履歴とホームページに表示する履歴の種類を選択します</system:String>
|
||||
<system:String x:Key="queryHistory">クエリの履歴</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">これは、プラグインがホーム機能をサポートし、ホームページが有効な場合にのみ編集することができます。</system:String>
|
||||
<system:String x:Key="showAtTopmost">検索ウィンドウを最前面に表示</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">他のプログラムの 'Always on Top' (最前面に表示)設定を上書きし、常に最前面のウィンドウで Flow を表示します。</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">창 위치 초기화</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">검색창 위치 초기화</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">검색어 입력</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">설정</system:String>
|
||||
|
|
@ -162,6 +166,10 @@
|
|||
<system:String x:Key="homePageToolTip">쿼리 입력창이 비어있을때, 홈페이지의 결과를 표시합니다.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">히스토리를 홈페이지에 표시</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">홈페이지에 표시할 최대 히스토리 수</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -437,7 +445,7 @@
|
|||
<system:String x:Key="icons">아이콘</system:String>
|
||||
<system:String x:Key="about_activate_times">Flow Launcher를 {0}번 실행했습니다.</system:String>
|
||||
<system:String x:Key="checkUpdates">업데이트 확인</system:String>
|
||||
<system:String x:Key="BecomeASponsor">후원하기</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">새 버전({0})이 있습니다. Flow Launcher를 재시작하세요.</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">업데이트 확인을 실패했습니다. api.github.com로의 연결 또는 프록시 설정을 확인해주세요.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Tilbakestilling av posisjon</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Innstillinger</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">Ikoner</system:String>
|
||||
<system:String x:Key="about_activate_times">Du har aktivert Flow Launcher {0} ganger</system:String>
|
||||
<system:String x:Key="checkUpdates">Se etter oppdateringer</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Bli en sponsor</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Ny versjon {0} er tilgjengelig, vil du starte Flow Launcher på nytt for å bruke oppdateringen?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Sjekk oppdateringer mislyktes, vennligst sjekk tilkoblingen og proxy-innstillingene til api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Positie resetten</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type om te zoeken</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Instellingen</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">Pictogrammen</system:String>
|
||||
<system:String x:Key="about_activate_times">U heeft Flow Launcher {0} keer opgestart</system:String>
|
||||
<system:String x:Key="checkUpdates">Zoek naar Updates</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Sponsor worden</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Nieuwe versie {0} beschikbaar, start Flow Launcher opnieuw op</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Controleren op updates mislukt, controleer uw verbinding en proxy-instellingen voor api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
<system:String x:Key="PositionReset">Resetowanie pozycji</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Zresetuj pozycję okna wyszukiwania</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Wpisz tutaj, aby wyszukać</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Ustawienia</system:String>
|
||||
|
|
@ -170,6 +174,10 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
<system:String x:Key="homePageToolTip">Wyświetl wyniki strony głównej, gdy pole wyszukiwania jest puste.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Pokaż wyniki historii na stronie głównej</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maksymalna liczba wyników historii wyświetlanych na stronie głównej</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Można edytować tylko wtedy, gdy wtyczka obsługuje funkcję Strona główna i jest ona włączona.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Wyświetl okno wyszukiwania na wierzchu</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Wyświetl okno wyszukiwania ponad innymi oknami</system:String>
|
||||
|
|
@ -445,7 +453,7 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
<system:String x:Key="icons">Ikony</system:String>
|
||||
<system:String x:Key="about_activate_times">Uaktywniłeś Flow Launcher {0} razy</system:String>
|
||||
<system:String x:Key="checkUpdates">Szukaj aktualizacji</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Zostań sponsorem</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Nowa wersja {0} jest dostępna, uruchom ponownie Flow Launcher</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Sprawdzenie aktualizacji nie powiodło się. Sprawdź swoje połączenie i ustawienia proxy dla api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Redefinição de Posição</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Configurações</system:String>
|
||||
|
|
@ -90,7 +94,7 @@
|
|||
<system:String x:Key="SearchWindowAlignCustom">Posição Personalizada</system:String>
|
||||
<system:String x:Key="language">Idioma</system:String>
|
||||
<system:String x:Key="lastQueryMode">Estilo da Última Consulta</system:String>
|
||||
<system:String x:Key="lastQueryModeToolTip">Mostrar/ocultar resultados anteriores quando o Lançador de Fluxos é reativado.</system:String>
|
||||
<system:String x:Key="lastQueryModeToolTip">Mostrar/ocultar resultados anteriores quando o Flow Launcher for reativado.</system:String>
|
||||
<system:String x:Key="LastQueryPreserved">Preservar Última Consulta</system:String>
|
||||
<system:String x:Key="LastQuerySelected">Selecionar última consulta</system:String>
|
||||
<system:String x:Key="LastQueryEmpty">Limpar última consulta</system:String>
|
||||
|
|
@ -138,7 +142,7 @@
|
|||
<system:String x:Key="DoublePinyinSchemasXiaoLang">Xiao Lang</system:String>
|
||||
|
||||
<system:String x:Key="AlwaysPreview">Sempre Pré-visualizar</system:String>
|
||||
<system:String x:Key="AlwaysPreviewToolTip">Sempre abrir o painel de pré-visualização quando o Flow é ativado. Pressione {0} para ativar ou desativar a pré-visualização.</system:String>
|
||||
<system:String x:Key="AlwaysPreviewToolTip">Sempre abrir o painel de pré-visualização quando o Flow for ativado. Pressione {0} para alternar a pré-visualização.</system:String>
|
||||
<system:String x:Key="shadowEffectNotAllowed">O efeito de sombra não é permitido enquanto o tema atual tem o efeito de desfoque ativado</system:String>
|
||||
<system:String x:Key="searchDelay">Search Delay</system:String>
|
||||
<system:String x:Key="searchDelayToolTip">Adds a short delay while typing to reduce UI flicker and result load. Recommended if your typing speed is average.</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">Ícones</system:String>
|
||||
<system:String x:Key="about_activate_times">Você ativou o Flow Launcher {0} vezes</system:String>
|
||||
<system:String x:Key="checkUpdates">Procurar atualizações</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Torne-se um Sponsor</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">A nova versão {0} está disponível, por favor reinicie o Flow Launcher.</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Falha ao procurar atualizações, confira sua conexão e configuração de proxy para api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Repor posição</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Repor posição da janela de pesquisa</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Escreva aqui para pesquisar</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: Este plugin está a ser iniciado...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Selecione este resultado para pesquisar novamente</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Falha na resposta!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Selecione este resultado para mais informação</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Definições</system:String>
|
||||
|
|
@ -170,6 +174,10 @@
|
|||
<system:String x:Key="homePageToolTip">Mostrar resultados da página inicial se o termo de pesquisa estiver vazio.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Mostrar histórico na página inicial</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Máximo de resultados a mostrar na Página inicial</system:String>
|
||||
<system:String x:Key="historyStyle">Estilo do histórico</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Escolha o tipo de histórico a ser mostrado no Histórico e na Página inicial</system:String>
|
||||
<system:String x:Key="queryHistory">Histórico de pesquisas</system:String>
|
||||
<system:String x:Key="executedHistory">Último histórico aberto</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Esta opção apenas pode ser editada se o plugin tiver suporte a Página inicial e se estiver ativo.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Janela de pesquisa à frente</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Sobrepõe a definição 'Sempre na frente' das outras aplicações e mostra Flow Launcher à frente de qualquer janela.</system:String>
|
||||
|
|
@ -412,13 +420,13 @@
|
|||
<system:String x:Key="DialogJumpWindowPositionFollowDefault">Default search window position. Displayed when triggered by search window hotkey</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviour">Dialog Jump Result Navigation Behaviour</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviourToolTip">Behaviour to navigate Open/Save As dialog window to the selected result path</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourLeftClick">Left click or Enter key</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourRightClick">Right click</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourLeftClick">Clique esquerdo ou tecla Enter</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourRightClick">Clique direito</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviour">Dialog Jump File Navigation Behaviour</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviourToolTip">Behaviour to navigate Open/Save As dialog window when the result is a file path</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPath">Fill full path in file name box</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPathOpen">Fill full path in file name box and open</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourDirectory">Fill directory in path box</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPath">Preencher caminho total na caixa Nome do ficheiro</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPathOpen">Preencher caminho total na caixa Nome do ficheiro e abrir</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourDirectory">Preencher diretório na caixa Caminho</system:String>
|
||||
|
||||
<!-- Setting Proxy -->
|
||||
<system:String x:Key="proxy">Proxy HTTP</system:String>
|
||||
|
|
@ -445,7 +453,7 @@
|
|||
<system:String x:Key="icons">Ícones</system:String>
|
||||
<system:String x:Key="about_activate_times">Ativou o Flow Launcher {0} vezes</system:String>
|
||||
<system:String x:Key="checkUpdates">Procurar atualizações</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Tornar-se patrocinador</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Torne-se um Patrocinador</system:String>
|
||||
<system:String x:Key="newVersionTips">Está disponível a versão {0}. Gostaria de reiniciar Flow Launcher para atualizar a sua versão?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Erro ao procurar atualizações. Verifique a sua ligação e as definições do proxy estabelecidas para api.github.com</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Сброс положения</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Настройки</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">Значки</system:String>
|
||||
<system:String x:Key="about_activate_times">Вы воспользовались Flow Launcher уже {0} раз</system:String>
|
||||
<system:String x:Key="checkUpdates">Проверить наличие обновлений</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Стать спонсором</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Доступна новая версия {0}. Вы хотите перезапустить Flow Launcher, чтобы использовать обновление?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Проверка обновлений не удалась, пожалуйста, проверьте настройки подключения и прокси-сервера к api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -65,6 +65,10 @@ Nevykonali sa žiadne zmeny.</system:String>
|
|||
<system:String x:Key="PositionReset">Resetovať pozíciu</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Resetovať pozíciu vyhľadávacieho okna</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Zadajte text na vyhľadávanie</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: Tento plugin sa stále inicializuje…</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Vyberte tento výsledok na opätovné vyhľadávanie</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Nepodarilo sa odpovedať!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Vyberte tento výsledok pre viac informácií</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Nastavenia</system:String>
|
||||
|
|
@ -169,10 +173,14 @@ Nevykonali sa žiadne zmeny.</system:String>
|
|||
<system:String x:Key="KoreanImeSettingChangeFailTitle">Nepodarilo sa zmeniť nastavenie kórejského IME</system:String>
|
||||
<system:String x:Key="KoreanImeSettingChangeFailSubTitle">Skontrolujte prístup do systémového registra alebo kontaktujte podporu.</system:String>
|
||||
<system:String x:Key="homePage">Domovská stránka</system:String>
|
||||
<system:String x:Key="homePageToolTip">Zobraziť výsledky Domovskej stránky, keď je text dopytu prázdny.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Zobraziť výsledky histórie na Domovskej stránke</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximálny počet zobrazených výsledkov histórie na Domovskej stránke</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Úprava je možná len vtedy, ak plugin podporuje funkciu Domovská stránka a Domovská stránka je povolená.</system:String>
|
||||
<system:String x:Key="homePageToolTip">Zobraziť výsledky domovskej stránky, keď je text dopytu prázdny.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Zobraziť výsledky histórie na domovskej stránke</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximálny počet histórie výsledkov zobrazenej na domovskej stránke</system:String>
|
||||
<system:String x:Key="historyStyle">Štýl histórie</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Vyberte, ktorý typ histórie sa má zobraziť v histórii a na domovskej stránke</system:String>
|
||||
<system:String x:Key="queryHistory">História dopytov</system:String>
|
||||
<system:String x:Key="executedHistory">História naposledy otvorených</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Úprava je možná len vtedy, ak plugin podporuje funkciu domovská stránka a zároveň je povolená.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Zobraziť vyhľadávacie okno v popredí</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Prepíše nastavenie "Vždy na vrchu" ostatných programov a zobrazí navrchu Flow.</system:String>
|
||||
<system:String x:Key="autoRestartAfterChanging">Reštartovať po úprave pluginu cez Repozitár pluginov</system:String>
|
||||
|
|
@ -535,7 +543,7 @@ Nevykonali sa žiadne zmeny.</system:String>
|
|||
|
||||
<!-- Search Delay Settings Dialog -->
|
||||
<system:String x:Key="homeTitle">Domovská stránka</system:String>
|
||||
<system:String x:Key="homeTips">Ak chcete zobrazovať výsledky pluginu, keď je dopyt prázdny, povoľte funkciu Domovská stránka.</system:String>
|
||||
<system:String x:Key="homeTips">Ak chcete zobrazovať výsledky pluginu, keď je dopyt prázdny, povoľte funkciu domovská stránka.</system:String>
|
||||
|
||||
<!-- Custom Query Hotkey Dialog -->
|
||||
<system:String x:Key="customeQueryHotkeyTitle">Klávesová skratka vlastného vyhľadávania</system:String>
|
||||
|
|
@ -628,7 +636,7 @@ Ak pri zadávaní skratky pred ňu pridáte "@", bude sa zhodovať s
|
|||
|
||||
<!-- Plugin Update Window -->
|
||||
<system:String x:Key="restartAfterUpdating">Po aktualizácii pluginov reštartovať Flow Launcher</system:String>
|
||||
<system:String x:Key="updatePluginCheckboxContent">{0}: Aktualizované z v{1} na v{2}</system:String>
|
||||
<system:String x:Key="updatePluginCheckboxContent">{0}: Aktualizácia z v{1} na v{2}</system:String>
|
||||
<system:String x:Key="updatePluginNoSelected">Nie je vybraný žiaden plugin</system:String>
|
||||
|
||||
<!-- Welcome Window -->
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Position Reset</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Settings</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">Icons</system:String>
|
||||
<system:String x:Key="about_activate_times">You have activated Flow Launcher {0} times</system:String>
|
||||
<system:String x:Key="checkUpdates">Check for Updates</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become A Sponsor</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">New version {0} is available, would you like to restart Flow Launcher to use the update?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Check updates failed, please check your connection and proxy settings to api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Position Reset</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Podešavanja</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">Icons</system:String>
|
||||
<system:String x:Key="about_activate_times">Aktivirali ste Flow Launcher {0} puta</system:String>
|
||||
<system:String x:Key="checkUpdates">Proveri ažuriranja</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become A Sponsor</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Nove verzija {0} je dostupna, molim Vas ponovo pokrenite Flow Launcher.</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Neuspešna provera ažuriranja, molim Vas proverite vašu vezu i podešavanja za proksi prema api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Pencere Konumunu Sıfırla</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Arama penceresinin konumunu sıfırla</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Aramak için buraya yazın</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: Bu eklenti hala başlatılıyor...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Yeniden sorgulamak için bu sonucu seçin</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Yanıt veremedi!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Daha fazla bilgi için bu sonucu seçin</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Ayarlar</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Sorgu metni boş olduğunda ana sayfa sonuçlarını gösterin.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Geçmiş Sonuçlarını Ana Sayfada Göster</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Ana Sayfada Gösterilen Maksimum Geçmiş Sonuçları</system:String>
|
||||
<system:String x:Key="historyStyle">Geçmiş Stili</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Geçmiş ve Ana Sayfada gösterilecek geçmiş türünü seçin</system:String>
|
||||
<system:String x:Key="queryHistory">Sorgu geçmişi</system:String>
|
||||
<system:String x:Key="executedHistory">Son açılan geçmiş</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Bu sadece eklenti Ana Sayfa özelliğini destekliyorsa ve Ana Sayfa etkinleştirilmiş ise düzenlenebilir.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Arama Penceresini En Üstte Göster</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Diğer programların 'Her Zaman Üstte' ayarını geçersiz kılar ve Flow’u en önde gösterir.</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">Kullanılan Simgeler</system:String>
|
||||
<system:String x:Key="about_activate_times">Şu ana kadar Flow Launcher'ı {0} kez aktifleştirdiniz.</system:String>
|
||||
<system:String x:Key="checkUpdates">Güncellemeleri Kontrol Et</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Sponsor Olun</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Uygulamanın yeni sürümü ({0}) mevcut, Lütfen Flow Launcher'ı yeniden başlatın.</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Güncelleme kontrolü başarısız oldu. Lütfen bağlantınız ve vekil sunucu ayarlarınızın api.github.com adresine ulaşabilir olduğunu kontrol edin.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Скидання позиції</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Скинути положення вікна пошуку</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Напишіть тут, аби знайти</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: Цей плагін все ще ініціалізується...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Виберіть цей результат, щоб повторити запит</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Не вдалося відповісти!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Виберіть цей результат, щоб отримати додаткову інформацію</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Налаштування</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Показувати результати на головній сторінці, коли текст запиту порожній.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Показати результати історії на головній</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Максимальна кількість результатів історії, що показуються на головній</system:String>
|
||||
<system:String x:Key="historyStyle">Стиль історії</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Виберіть тип історії, який буде показуватися на сторінці «Історія» та «Головна».</system:String>
|
||||
<system:String x:Key="queryHistory">Історія запитів</system:String>
|
||||
<system:String x:Key="executedHistory">Остання відкрита історія</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Це можна редагувати тільки в тому випадку, якщо плагін підтримує функцію «Головна сторінка» і вона ввімкнена.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Показувати вікно пошуку на передньому плані</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Перекриває налаштування «Завжди зверху» інших програм і виводить Flow на передній план.</system:String>
|
||||
|
|
@ -214,8 +222,8 @@
|
|||
<system:String x:Key="plugin_query_version">Версія</system:String>
|
||||
<system:String x:Key="plugin_query_web">Сайт</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Видалити</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Час затримки пошуку: типово</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Час затримки пошуку: {0} мс</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Не вдалося видалити налаштування плагіну</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Плагіни: {0} — Не вдалося видалити файли налаштувань плагінів, видаліть їх вручну.</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Не вдалося видалити кеш плагіну</system:String>
|
||||
|
|
@ -597,9 +605,9 @@
|
|||
Вказаний файловий менеджер не знайдено. Перевірте налаштування вашого файлового менеджера в розділі Налаштування > Загальні.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Помилка</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="folderOpenError">Під час відкриття теки сталася помилка.</system:String>
|
||||
<system:String x:Key="browserOpenError">Під час відкриття URL-адреси в браузері сталася помилка. Перевірте налаштування типового веббраузера у розділі «Загальні» вікна налаштувань.</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundError">Файл або каталог не знайдено: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Будь ласка, зачекайте...</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Đặt lại vị trí</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Cài lại vị trí cửa sổ tìm kiếm</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Cài đặt</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">Biểu tượng</system:String>
|
||||
<system:String x:Key="about_activate_times">Bạn đã kích hoạt Flow Launcher {0} lần</system:String>
|
||||
<system:String x:Key="checkUpdates">Kiểm tra các bản cập nhật</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Trở thành nhà tài trợ</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Đã có phiên bản mới {0}, bạn có muốn khởi động lại Flow Launcher để sử dụng bản cập nhật không?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Kiểm tra cập nhật không thành công. Vui lòng kiểm tra kết nối và cài đặt proxy của bạn tới api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">重置位置</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">重置搜索窗口位置</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">在此处输入以搜索</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}:此插件仍在初始化...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">选择此结果以重试</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}:响应失败!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">选择此结果以获取更多信息</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">设置</system:String>
|
||||
|
|
@ -123,7 +127,7 @@
|
|||
<system:String x:Key="SearchPrecisionLow">低</system:String>
|
||||
<system:String x:Key="SearchPrecisionRegular">常规</system:String>
|
||||
<system:String x:Key="ShouldUsePinyin">使用拼音搜索</system:String>
|
||||
<system:String x:Key="ShouldUsePinyinToolTip">拼音是翻译中文的罗马化拼写的标准系统。请注意,启用此功能可以大大增加搜索时的内存使用量。</system:String>
|
||||
<system:String x:Key="ShouldUsePinyinToolTip">拼音是翻译中文的罗马化拼写的标准系统。请注意,启用此功能会大幅增加搜索时的内存使用量。</system:String>
|
||||
<system:String x:Key="ShouldUseDoublePinyin">使用双拼</system:String>
|
||||
<system:String x:Key="ShouldUseDoublePinyinToolTip">使用双拼而不是全拼进行搜索。</system:String>
|
||||
<system:String x:Key="DoublePinyinSchema">双拼方案</system:String>
|
||||
|
|
@ -141,7 +145,7 @@
|
|||
<system:String x:Key="AlwaysPreviewToolTip">Flow 启动时总是打开预览面板。按 {0} 以切换预览。</system:String>
|
||||
<system:String x:Key="shadowEffectNotAllowed">当前主题已启用模糊效果,不允许启用阴影效果</system:String>
|
||||
<system:String x:Key="searchDelay">延迟搜索</system:String>
|
||||
<system:String x:Key="searchDelayToolTip">在输入时添加一个短时间延迟以减少UI闪烁和加载结果的负载。建议您的输入速度是平均的。</system:String>
|
||||
<system:String x:Key="searchDelayToolTip">在输入时添加一个短时间延迟以减少UI闪烁和加载结果的负载。如果您的打字速度处于中等水平,建议启用此功能。</system:String>
|
||||
<system:String x:Key="searchDelayNumberBoxToolTip">输入等待时间(毫秒),直到输入被认为完成。这只能在启用搜索延迟时进行编辑。</system:String>
|
||||
<system:String x:Key="searchDelayTime">默认搜索延迟时间</system:String>
|
||||
<system:String x:Key="searchDelayTimeToolTip">在输入停止后显示结果之前等待时间。更高的数值等待更长时间(毫秒)</system:String>
|
||||
|
|
@ -171,6 +175,10 @@
|
|||
<system:String x:Key="homePageToolTip">当查询文本为空时显示主页结果。</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">在主页中显示历史记录</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">在主页显示的最大历史结果数</system:String>
|
||||
<system:String x:Key="historyStyle">历史样式</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">选择要在历史和主页中显示的历史类型</system:String>
|
||||
<system:String x:Key="queryHistory">查询历史</system:String>
|
||||
<system:String x:Key="executedHistory">最近打开历史</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">这只能在插件支持主页功能和主页启用时进行编辑。</system:String>
|
||||
<system:String x:Key="showAtTopmost">将搜索窗口置于顶层</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">覆盖其他“总是在顶部”的程序窗口并在最顶层的位置显示 Flow Launcher 搜索窗口。</system:String>
|
||||
|
|
@ -289,7 +297,7 @@
|
|||
<system:String x:Key="ItemHeight">项目高度</system:String>
|
||||
<system:String x:Key="queryBoxFont">查询框字体</system:String>
|
||||
<system:String x:Key="resultItemFont">结果标题字体</system:String>
|
||||
<system:String x:Key="resultSubItemFont">结果字幕字体</system:String>
|
||||
<system:String x:Key="resultSubItemFont">结果副标题字体</system:String>
|
||||
<system:String x:Key="resetCustomize">重置</system:String>
|
||||
<system:String x:Key="resetCustomizeToolTip">重置为推荐字体和大小设置。</system:String>
|
||||
<system:String x:Key="ImportThemeSize">导入主题尺寸</system:String>
|
||||
|
|
@ -606,7 +614,7 @@
|
|||
|
||||
<!-- Update -->
|
||||
<system:String x:Key="update_flowlauncher_update_check">检查新的更新</system:String>
|
||||
<system:String x:Key="update_flowlauncher_already_on_latest">您已经拥有最新的 Flow Launcher 版本</system:String>
|
||||
<system:String x:Key="update_flowlauncher_already_on_latest">您当前使用的 Flow Launcher 已是最新版本</system:String>
|
||||
<system:String x:Key="update_flowlauncher_update_found">检查到更新</system:String>
|
||||
<system:String x:Key="update_flowlauncher_updating">更新中...</system:String>
|
||||
<system:String x:Key="update_flowlauncher_fail_moving_portable_user_profile_data">
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">重設位置</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">設定</system:String>
|
||||
|
|
@ -171,11 +175,15 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
<system:String x:Key="autoRestartAfterChanging">Restart after modifying plugin via Plugin Store</system:String>
|
||||
<system:String x:Key="autoRestartAfterChangingToolTip">Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store</system:String>
|
||||
<system:String x:Key="autoRestartAfterChanging">在插件商店改動插件後重新啟動</system:String>
|
||||
<system:String x:Key="autoRestartAfterChangingToolTip">在插件商店安裝/移除/更新插件後自動重新啟動Flow Launcher</system:String>
|
||||
<system:String x:Key="showUnknownSourceWarning">Show unknown source warning</system:String>
|
||||
<system:String x:Key="showUnknownSourceWarningToolTip">Show warning when installing plugins from unknown sources</system:String>
|
||||
<system:String x:Key="autoUpdatePlugins">Auto update plugins</system:String>
|
||||
|
|
@ -446,7 +454,7 @@
|
|||
<system:String x:Key="icons">圖示</system:String>
|
||||
<system:String x:Key="about_activate_times">您已經啟動了 Flow Launcher {0} 次</system:String>
|
||||
<system:String x:Key="checkUpdates">檢查更新</system:String>
|
||||
<system:String x:Key="BecomeASponsor">成為贊助者</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">發現有新版本 {0}, 請重新啟動 Flow Launcher。</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">檢查更新失敗,請檢查你對 api.github.com 的連線和代理設定。</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
|
|||
|
|
@ -526,7 +526,7 @@
|
|||
<TextBlock
|
||||
x:Name="PreviewSubTitle"
|
||||
Style="{DynamicResource PreviewItemSubTitleStyle}"
|
||||
Text="{Binding Result.SubTitle}" />
|
||||
Text="{Binding PreviewDescription}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
|
|
|||
|
|
@ -477,7 +477,7 @@ namespace Flow.Launcher
|
|||
&& QueryTextBox.CaretIndex == QueryTextBox.Text.Length)
|
||||
{
|
||||
var queryWithoutActionKeyword =
|
||||
QueryBuilder.Build(QueryTextBox.Text.Trim(), PluginManager.GetNonGlobalPlugins())?.Search;
|
||||
QueryBuilder.Build(QueryTextBox.Text, QueryTextBox.Text.Trim(), PluginManager.GetNonGlobalPlugins())?.Search;
|
||||
|
||||
if (FilesFolders.IsLocationPathString(queryWithoutActionKeyword))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,253 +0,0 @@
|
|||
using iNKORE.UI.WPF.Modern.Controls;
|
||||
using iNKORE.UI.WPF.Modern.Controls.Helpers;
|
||||
using iNKORE.UI.WPF.Modern.Controls.Primitives;
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
|
||||
namespace Flow.Launcher.Resources.Controls
|
||||
{
|
||||
// TODO: Use IsScrollAnimationEnabled property in future: https://github.com/iNKORE-NET/UI.WPF.Modern/pull/347
|
||||
public class CustomScrollViewerEx : ScrollViewer
|
||||
{
|
||||
private double LastVerticalLocation = 0;
|
||||
private double LastHorizontalLocation = 0;
|
||||
|
||||
public CustomScrollViewerEx()
|
||||
{
|
||||
Loaded += OnLoaded;
|
||||
var valueSource = DependencyPropertyHelper.GetValueSource(this, AutoPanningMode.IsEnabledProperty).BaseValueSource;
|
||||
if (valueSource == BaseValueSource.Default)
|
||||
{
|
||||
AutoPanningMode.SetIsEnabled(this, true);
|
||||
}
|
||||
}
|
||||
|
||||
#region Orientation
|
||||
|
||||
public static readonly DependencyProperty OrientationProperty =
|
||||
DependencyProperty.Register(
|
||||
nameof(Orientation),
|
||||
typeof(Orientation),
|
||||
typeof(CustomScrollViewerEx),
|
||||
new PropertyMetadata(Orientation.Vertical));
|
||||
|
||||
public Orientation Orientation
|
||||
{
|
||||
get => (Orientation)GetValue(OrientationProperty);
|
||||
set => SetValue(OrientationProperty, value);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region AutoHideScrollBars
|
||||
|
||||
public static readonly DependencyProperty AutoHideScrollBarsProperty =
|
||||
ScrollViewerHelper.AutoHideScrollBarsProperty
|
||||
.AddOwner(
|
||||
typeof(CustomScrollViewerEx),
|
||||
new PropertyMetadata(true, OnAutoHideScrollBarsChanged));
|
||||
|
||||
public bool AutoHideScrollBars
|
||||
{
|
||||
get => (bool)GetValue(AutoHideScrollBarsProperty);
|
||||
set => SetValue(AutoHideScrollBarsProperty, value);
|
||||
}
|
||||
|
||||
private static void OnAutoHideScrollBarsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
if (d is CustomScrollViewerEx sv)
|
||||
{
|
||||
sv.UpdateVisualState();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void OnLoaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
LastVerticalLocation = VerticalOffset;
|
||||
LastHorizontalLocation = HorizontalOffset;
|
||||
UpdateVisualState(false);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override void OnInitialized(EventArgs e)
|
||||
{
|
||||
base.OnInitialized(e);
|
||||
|
||||
if (Style == null && ReadLocalValue(StyleProperty) == DependencyProperty.UnsetValue)
|
||||
{
|
||||
SetResourceReference(StyleProperty, typeof(ScrollViewer));
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override void OnMouseWheel(MouseWheelEventArgs e)
|
||||
{
|
||||
var Direction = GetDirection();
|
||||
ScrollViewerBehavior.SetIsAnimating(this, true);
|
||||
|
||||
if (Direction == Orientation.Vertical)
|
||||
{
|
||||
if (ScrollableHeight > 0)
|
||||
{
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
var WheelChange = e.Delta * (ViewportHeight / 1.5) / ActualHeight;
|
||||
var newOffset = LastVerticalLocation - WheelChange;
|
||||
|
||||
if (newOffset < 0)
|
||||
{
|
||||
newOffset = 0;
|
||||
}
|
||||
|
||||
if (newOffset > ScrollableHeight)
|
||||
{
|
||||
newOffset = ScrollableHeight;
|
||||
}
|
||||
|
||||
if (newOffset == LastVerticalLocation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ScrollToVerticalOffset(LastVerticalLocation);
|
||||
|
||||
ScrollToValue(newOffset, Direction);
|
||||
LastVerticalLocation = newOffset;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ScrollableWidth > 0)
|
||||
{
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
var WheelChange = e.Delta * (ViewportWidth / 1.5) / ActualWidth;
|
||||
var newOffset = LastHorizontalLocation - WheelChange;
|
||||
|
||||
if (newOffset < 0)
|
||||
{
|
||||
newOffset = 0;
|
||||
}
|
||||
|
||||
if (newOffset > ScrollableWidth)
|
||||
{
|
||||
newOffset = ScrollableWidth;
|
||||
}
|
||||
|
||||
if (newOffset == LastHorizontalLocation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ScrollToHorizontalOffset(LastHorizontalLocation);
|
||||
|
||||
ScrollToValue(newOffset, Direction);
|
||||
LastHorizontalLocation = newOffset;
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override void OnScrollChanged(ScrollChangedEventArgs e)
|
||||
{
|
||||
base.OnScrollChanged(e);
|
||||
if (!ScrollViewerBehavior.GetIsAnimating(this))
|
||||
{
|
||||
LastVerticalLocation = VerticalOffset;
|
||||
LastHorizontalLocation = HorizontalOffset;
|
||||
}
|
||||
}
|
||||
|
||||
private Orientation GetDirection()
|
||||
{
|
||||
var isShiftDown = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift);
|
||||
|
||||
if (Orientation == Orientation.Horizontal)
|
||||
{
|
||||
return isShiftDown ? Orientation.Vertical : Orientation.Horizontal;
|
||||
}
|
||||
else
|
||||
{
|
||||
return isShiftDown ? Orientation.Horizontal : Orientation.Vertical;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Causes the <see cref="ScrollViewerEx"/> to load a new view into the viewport using the specified offsets and zoom factor.
|
||||
/// </summary>
|
||||
/// <param name="horizontalOffset">A value between 0 and <see cref="ScrollViewer.ScrollableWidth"/> that specifies the distance the content should be scrolled horizontally.</param>
|
||||
/// <param name="verticalOffset">A value between 0 and <see cref="ScrollViewer.ScrollableHeight"/> that specifies the distance the content should be scrolled vertically.</param>
|
||||
/// <param name="zoomFactor">A value between MinZoomFactor and MaxZoomFactor that specifies the required target ZoomFactor.</param>
|
||||
/// <returns><see langword="true"/> if the view is changed; otherwise, <see langword="false"/>.</returns>
|
||||
public bool ChangeView(double? horizontalOffset, double? verticalOffset, float? zoomFactor)
|
||||
{
|
||||
return ChangeView(horizontalOffset, verticalOffset, zoomFactor, false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Causes the <see cref="ScrollViewerEx"/> to load a new view into the viewport using the specified offsets and zoom factor, and optionally disables scrolling animation.
|
||||
/// </summary>
|
||||
/// <param name="horizontalOffset">A value between 0 and <see cref="ScrollViewer.ScrollableWidth"/> that specifies the distance the content should be scrolled horizontally.</param>
|
||||
/// <param name="verticalOffset">A value between 0 and <see cref="ScrollViewer.ScrollableHeight"/> that specifies the distance the content should be scrolled vertically.</param>
|
||||
/// <param name="zoomFactor">A value between MinZoomFactor and MaxZoomFactor that specifies the required target ZoomFactor.</param>
|
||||
/// <param name="disableAnimation"><see langword="true"/> to disable zoom/pan animations while changing the view; otherwise, <see langword="false"/>. The default is false.</param>
|
||||
/// <returns><see langword="true"/> if the view is changed; otherwise, <see langword="false"/>.</returns>
|
||||
public bool ChangeView(double? horizontalOffset, double? verticalOffset, float? zoomFactor, bool disableAnimation)
|
||||
{
|
||||
if (disableAnimation)
|
||||
{
|
||||
if (horizontalOffset.HasValue)
|
||||
{
|
||||
ScrollToHorizontalOffset(horizontalOffset.Value);
|
||||
}
|
||||
|
||||
if (verticalOffset.HasValue)
|
||||
{
|
||||
ScrollToVerticalOffset(verticalOffset.Value);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (horizontalOffset.HasValue)
|
||||
{
|
||||
ScrollToHorizontalOffset(LastHorizontalLocation);
|
||||
ScrollToValue(Math.Min(ScrollableWidth, horizontalOffset.Value), Orientation.Horizontal);
|
||||
LastHorizontalLocation = horizontalOffset.Value;
|
||||
}
|
||||
|
||||
if (verticalOffset.HasValue)
|
||||
{
|
||||
ScrollToVerticalOffset(LastVerticalLocation);
|
||||
ScrollToValue(Math.Min(ScrollableHeight, verticalOffset.Value), Orientation.Vertical);
|
||||
LastVerticalLocation = verticalOffset.Value;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void ScrollToValue(double value, Orientation Direction)
|
||||
{
|
||||
if (Direction == Orientation.Vertical)
|
||||
{
|
||||
ScrollToVerticalOffset(value);
|
||||
}
|
||||
else
|
||||
{
|
||||
ScrollToHorizontalOffset(value);
|
||||
}
|
||||
|
||||
ScrollViewerBehavior.SetIsAnimating(this, false);
|
||||
}
|
||||
|
||||
private void UpdateVisualState(bool useTransitions = true)
|
||||
{
|
||||
var stateName = AutoHideScrollBars ? "NoIndicator" : "MouseIndicator";
|
||||
VisualStateManager.GoToState(this, stateName, useTransitions);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
|
|
@ -9,7 +10,7 @@ namespace Flow.Launcher
|
|||
{
|
||||
public partial class ResultListBox
|
||||
{
|
||||
protected object _lock = new object();
|
||||
protected Lock _lock = new();
|
||||
private Point _lastpos;
|
||||
private ListBoxItem curItem = null;
|
||||
public ResultListBox()
|
||||
|
|
@ -88,12 +89,11 @@ namespace Flow.Launcher
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
private Point start;
|
||||
private string path;
|
||||
private string query;
|
||||
private Point _start;
|
||||
private string _path;
|
||||
private string _trimmedQuery;
|
||||
// this method is called by the UI thread, which is single threaded, so we can be sloppy with locking
|
||||
private bool isDragging;
|
||||
private bool _isDragging;
|
||||
|
||||
private void ResultList_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
|
|
@ -104,53 +104,55 @@ namespace Flow.Launcher
|
|||
Result:
|
||||
{
|
||||
CopyText: { } copyText,
|
||||
OriginQuery.RawQuery: { } rawQuery
|
||||
OriginQuery.TrimmedQuery: { } trimmedQuery
|
||||
}
|
||||
}
|
||||
}) return;
|
||||
|
||||
path = copyText;
|
||||
query = rawQuery;
|
||||
start = e.GetPosition(null);
|
||||
isDragging = true;
|
||||
_path = copyText;
|
||||
_trimmedQuery = trimmedQuery;
|
||||
_start = e.GetPosition(null);
|
||||
_isDragging = true;
|
||||
}
|
||||
|
||||
private void ResultList_MouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.LeftButton != MouseButtonState.Pressed || !isDragging)
|
||||
if (e.LeftButton != MouseButtonState.Pressed || !_isDragging)
|
||||
{
|
||||
start = default;
|
||||
path = string.Empty;
|
||||
query = string.Empty;
|
||||
isDragging = false;
|
||||
_start = default;
|
||||
_path = string.Empty;
|
||||
_trimmedQuery = string.Empty;
|
||||
_isDragging = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!File.Exists(path) && !Directory.Exists(path))
|
||||
if (!File.Exists(_path) && !Directory.Exists(_path))
|
||||
return;
|
||||
|
||||
Point mousePosition = e.GetPosition(null);
|
||||
Vector diff = this.start - mousePosition;
|
||||
Vector diff = _start - mousePosition;
|
||||
|
||||
if (Math.Abs(diff.X) < SystemParameters.MinimumHorizontalDragDistance
|
||||
|| Math.Abs(diff.Y) < SystemParameters.MinimumVerticalDragDistance)
|
||||
return;
|
||||
|
||||
isDragging = false;
|
||||
_isDragging = false;
|
||||
|
||||
App.API.HideMainWindow();
|
||||
|
||||
var data = new DataObject(DataFormats.FileDrop, new[]
|
||||
{
|
||||
path
|
||||
_path
|
||||
});
|
||||
|
||||
// Reassigning query to a new variable because for some reason
|
||||
// after DragDrop.DoDragDrop call, 'query' loses its content, i.e. becomes empty string
|
||||
var rawQuery = query;
|
||||
var trimmedQuery = _trimmedQuery;
|
||||
var effect = DragDrop.DoDragDrop((DependencyObject)sender, data, DragDropEffects.Move | DragDropEffects.Copy);
|
||||
if (effect == DragDropEffects.Move)
|
||||
App.API.ChangeQuery(rawQuery, true);
|
||||
App.API.ChangeQuery(trimmedQuery, true);
|
||||
}
|
||||
|
||||
private void ResultListBox_OnPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
if (Mouse.DirectlyOver is not FrameworkElement { DataContext: ResultViewModel result })
|
||||
|
|
@ -158,6 +160,7 @@ namespace Flow.Launcher
|
|||
|
||||
RightClickResultCommand?.Execute(result.Result);
|
||||
}
|
||||
|
||||
private void ResultListBox_OnPreviewMouseUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
if (Mouse.DirectlyOver is not FrameworkElement { DataContext: ResultViewModel result })
|
||||
|
|
|
|||
|
|
@ -72,6 +72,16 @@
|
|||
OnContent="{DynamicResource enable}" />
|
||||
</ui:SettingsCard>
|
||||
|
||||
<ui:SettingsCard
|
||||
Margin="0 4 0 0"
|
||||
Description="{DynamicResource showTaskbarWhenOpenedToolTip}"
|
||||
Header="{DynamicResource showTaskbarWhenOpened}">
|
||||
<ui:ToggleSwitch
|
||||
IsOn="{Binding Settings.ShowTaskbarWhenInvoked}"
|
||||
OffContent="{DynamicResource disable}"
|
||||
OnContent="{DynamicResource enable}" />
|
||||
</ui:SettingsCard>
|
||||
|
||||
<ui:SettingsCard
|
||||
Margin="0 4 0 0"
|
||||
Description="{DynamicResource hideNotifyIconToolTip}"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.Json.Serialization;
|
||||
|
|
@ -47,7 +47,7 @@ namespace Flow.Launcher.Storage
|
|||
|
||||
public void Add(Result result)
|
||||
{
|
||||
if (string.IsNullOrEmpty(result.OriginQuery.RawQuery)) return;
|
||||
if (string.IsNullOrEmpty(result.OriginQuery.TrimmedQuery)) return;
|
||||
if (string.IsNullOrEmpty(result.PluginID)) return;
|
||||
|
||||
// Maintain the max history limit
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ namespace Flow.Launcher.Storage
|
|||
|
||||
internal bool IsTopMost(Result result)
|
||||
{
|
||||
if (records.IsEmpty || !records.TryGetValue(result.OriginQuery.RawQuery, out var value))
|
||||
if (records.IsEmpty || !records.TryGetValue(result.OriginQuery.TrimmedQuery, out var value))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -124,7 +124,7 @@ namespace Flow.Launcher.Storage
|
|||
|
||||
internal void Remove(Result result)
|
||||
{
|
||||
records.Remove(result.OriginQuery.RawQuery, out _);
|
||||
records.Remove(result.OriginQuery.TrimmedQuery, out _);
|
||||
}
|
||||
|
||||
internal void AddOrUpdate(Result result)
|
||||
|
|
@ -136,7 +136,7 @@ namespace Flow.Launcher.Storage
|
|||
SubTitle = result.SubTitle,
|
||||
RecordKey = result.RecordKey
|
||||
};
|
||||
records.AddOrUpdate(result.OriginQuery.RawQuery, record, (key, oldValue) => record);
|
||||
records.AddOrUpdate(result.OriginQuery.TrimmedQuery, record, (key, oldValue) => record);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -154,7 +154,7 @@ namespace Flow.Launcher.Storage
|
|||
// origin query is null when user select the context menu item directly of one item from query list
|
||||
// in this case, we do not need to check if the result is top most
|
||||
if (records.IsEmpty || result.OriginQuery == null ||
|
||||
!records.TryGetValue(result.OriginQuery.RawQuery, out var value))
|
||||
!records.TryGetValue(result.OriginQuery.TrimmedQuery, out var value))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -168,7 +168,7 @@ namespace Flow.Launcher.Storage
|
|||
// origin query is null when user select the context menu item directly of one item from query list
|
||||
// in this case, we do not need to check if the result is top most
|
||||
if (records.IsEmpty || result.OriginQuery == null ||
|
||||
!records.TryGetValue(result.OriginQuery.RawQuery, out var value))
|
||||
!records.TryGetValue(result.OriginQuery.TrimmedQuery, out var value))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -194,7 +194,7 @@ namespace Flow.Launcher.Storage
|
|||
// origin query is null when user select the context menu item directly of one item from query list
|
||||
// in this case, we do not need to remove the record
|
||||
if (result.OriginQuery == null ||
|
||||
!records.TryGetValue(result.OriginQuery.RawQuery, out var value))
|
||||
!records.TryGetValue(result.OriginQuery.TrimmedQuery, out var value))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -204,12 +204,12 @@ namespace Flow.Launcher.Storage
|
|||
if (queue.IsEmpty)
|
||||
{
|
||||
// if the queue is empty, remove the queue from the dictionary
|
||||
records.TryRemove(result.OriginQuery.RawQuery, out _);
|
||||
records.TryRemove(result.OriginQuery.TrimmedQuery, out _);
|
||||
}
|
||||
else
|
||||
{
|
||||
// change the queue in the dictionary
|
||||
records[result.OriginQuery.RawQuery] = queue;
|
||||
records[result.OriginQuery.TrimmedQuery] = queue;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -229,19 +229,19 @@ namespace Flow.Launcher.Storage
|
|||
SubTitle = result.SubTitle,
|
||||
RecordKey = result.RecordKey
|
||||
};
|
||||
if (!records.TryGetValue(result.OriginQuery.RawQuery, out var value))
|
||||
if (!records.TryGetValue(result.OriginQuery.TrimmedQuery, out var value))
|
||||
{
|
||||
// create a new queue if it does not exist
|
||||
value = new ConcurrentQueue<Record>();
|
||||
value.Enqueue(record);
|
||||
records.TryAdd(result.OriginQuery.RawQuery, value);
|
||||
records.TryAdd(result.OriginQuery.TrimmedQuery, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
// add or update the record in the queue
|
||||
var queue = new ConcurrentQueue<Record>(value.Where(r => !r.Equals(result))); // make sure we don't have duplicates
|
||||
queue.Enqueue(record);
|
||||
records[result.OriginQuery.RawQuery] = queue;
|
||||
records[result.OriginQuery.TrimmedQuery] = queue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -252,12 +252,14 @@
|
|||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="ListBox">
|
||||
<cc:CustomScrollViewerEx
|
||||
<ui:ScrollViewerEx
|
||||
x:Name="ListBoxScrollViewer"
|
||||
Focusable="False"
|
||||
IsScrollAnimationEnabled="False"
|
||||
RewriteWheelChange="True"
|
||||
Template="{DynamicResource ScrollViewerControlTemplate}">
|
||||
<cc:CustomScrollViewerEx.Style>
|
||||
<Style TargetType="cc:CustomScrollViewerEx">
|
||||
<ui:ScrollViewerEx.Style>
|
||||
<Style TargetType="ui:ScrollViewerEx">
|
||||
<Style.Triggers>
|
||||
<Trigger Property="ComputedVerticalScrollBarVisibility" Value="Visible">
|
||||
<Setter Property="Margin" Value="0 0 0 0" />
|
||||
|
|
@ -269,9 +271,9 @@
|
|||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</cc:CustomScrollViewerEx.Style>
|
||||
</ui:ScrollViewerEx.Style>
|
||||
<VirtualizingStackPanel IsItemsHost="True" />
|
||||
</cc:CustomScrollViewerEx>
|
||||
</ui:ScrollViewerEx>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
|
|
@ -36,9 +36,10 @@ namespace Flow.Launcher.ViewModel
|
|||
|
||||
private static readonly string ClassName = nameof(MainViewModel);
|
||||
|
||||
private bool _isQueryRunning;
|
||||
private Query _lastQuery;
|
||||
private bool _previousIsHomeQuery;
|
||||
private Query _progressQuery; // Used for QueryResultAsync
|
||||
private Query _updateQuery; // Used for ResultsUpdated
|
||||
private string _queryTextBeforeLeaveResults;
|
||||
private string _ignoredQueryText; // Used to ignore query text change when switching between context menu and query results
|
||||
|
||||
|
|
@ -64,6 +65,8 @@ namespace Flow.Launcher.ViewModel
|
|||
Priority = 0 // Priority is for calculating scores in UpdateResultView
|
||||
};
|
||||
|
||||
private bool _taskbarShownByFlow = false;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
|
@ -283,7 +286,7 @@ namespace Flow.Launcher.ViewModel
|
|||
|
||||
plugin.ResultsUpdated += (s, e) =>
|
||||
{
|
||||
if (e.Query.RawQuery != QueryText || e.Token.IsCancellationRequested)
|
||||
if (_updateQuery == null || e.Query.OriginalQuery != _updateQuery.OriginalQuery || e.Token.IsCancellationRequested)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -442,7 +445,7 @@ namespace Flow.Launcher.ViewModel
|
|||
[RelayCommand]
|
||||
private void Backspace(object index)
|
||||
{
|
||||
var query = QueryBuilder.Build(QueryText.Trim(), PluginManager.GetNonGlobalPlugins());
|
||||
var query = QueryBuilder.Build(QueryText, QueryText.Trim(), PluginManager.GetNonGlobalPlugins());
|
||||
|
||||
// GetPreviousExistingDirectory does not require trailing '\', otherwise will return empty string
|
||||
var path = FilesFolders.GetPreviousExistingDirectory((_) => true, query.Search.TrimEnd('\\'));
|
||||
|
|
@ -1382,7 +1385,7 @@ namespace Flow.Launcher.ViewModel
|
|||
return;
|
||||
}
|
||||
|
||||
App.API.LogDebug(ClassName, $"Start query with ActionKeyword <{query.ActionKeyword}> and RawQuery <{query.RawQuery}>");
|
||||
App.API.LogDebug(ClassName, $"Start query with ActionKeyword <{query.ActionKeyword}> and TrimmedQuery <{query.TrimmedQuery}>");
|
||||
|
||||
var currentIsHomeQuery = query.IsHomeQuery;
|
||||
var currentIsDialogJump = _isDialogJump;
|
||||
|
|
@ -1394,69 +1397,73 @@ namespace Flow.Launcher.ViewModel
|
|||
return;
|
||||
}
|
||||
|
||||
_updateSource?.Dispose();
|
||||
|
||||
var currentUpdateSource = new CancellationTokenSource();
|
||||
_updateSource = currentUpdateSource;
|
||||
var currentCancellationToken = _updateSource.Token;
|
||||
_updateToken = currentCancellationToken;
|
||||
|
||||
ProgressBarVisibility = Visibility.Hidden;
|
||||
_isQueryRunning = true;
|
||||
|
||||
// Switch to ThreadPool thread
|
||||
await TaskScheduler.Default;
|
||||
|
||||
if (currentCancellationToken.IsCancellationRequested) return;
|
||||
|
||||
// Update the query's IsReQuery property to true if this is a re-query
|
||||
query.IsReQuery = isReQuery;
|
||||
|
||||
ICollection<PluginPair> plugins = Array.Empty<PluginPair>();
|
||||
if (currentIsHomeQuery)
|
||||
try
|
||||
{
|
||||
if (Settings.ShowHomePage)
|
||||
{
|
||||
plugins = PluginManager.ValidPluginsForHomeQuery();
|
||||
}
|
||||
_updateSource?.Dispose();
|
||||
|
||||
PluginIconPath = null;
|
||||
PluginIconSource = null;
|
||||
SearchIconVisibility = Visibility.Visible;
|
||||
}
|
||||
else
|
||||
{
|
||||
plugins = PluginManager.ValidPluginsForQuery(query, currentIsDialogJump);
|
||||
var currentUpdateSource = new CancellationTokenSource();
|
||||
_updateSource = currentUpdateSource;
|
||||
var currentCancellationToken = _updateSource.Token;
|
||||
_updateToken = currentCancellationToken;
|
||||
|
||||
if (plugins.Count == 1)
|
||||
{
|
||||
PluginIconPath = plugins.Single().Metadata.IcoPath;
|
||||
PluginIconSource = await App.API.LoadImageAsync(PluginIconPath);
|
||||
SearchIconVisibility = Visibility.Hidden;
|
||||
}
|
||||
else
|
||||
ProgressBarVisibility = Visibility.Hidden;
|
||||
|
||||
_progressQuery = query;
|
||||
_updateQuery = query;
|
||||
|
||||
// Switch to ThreadPool thread
|
||||
await TaskScheduler.Default;
|
||||
|
||||
if (currentCancellationToken.IsCancellationRequested) return;
|
||||
|
||||
// Update the query's IsReQuery property to true if this is a re-query
|
||||
query.IsReQuery = isReQuery;
|
||||
|
||||
ICollection<PluginPair> plugins = Array.Empty<PluginPair>();
|
||||
if (currentIsHomeQuery)
|
||||
{
|
||||
if (Settings.ShowHomePage)
|
||||
{
|
||||
plugins = PluginManager.ValidPluginsForHomeQuery();
|
||||
}
|
||||
|
||||
PluginIconPath = null;
|
||||
PluginIconSource = null;
|
||||
SearchIconVisibility = Visibility.Visible;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
plugins = PluginManager.ValidPluginsForQuery(query, currentIsDialogJump);
|
||||
|
||||
App.API.LogDebug(ClassName, $"Valid <{plugins.Count}> plugins: {string.Join(" ", plugins.Select(x => $"<{x.Metadata.Name}>"))}");
|
||||
if (plugins.Count == 1)
|
||||
{
|
||||
PluginIconPath = plugins.Single().Metadata.IcoPath;
|
||||
PluginIconSource = await App.API.LoadImageAsync(PluginIconPath);
|
||||
SearchIconVisibility = Visibility.Hidden;
|
||||
}
|
||||
else
|
||||
{
|
||||
PluginIconPath = null;
|
||||
PluginIconSource = null;
|
||||
SearchIconVisibility = Visibility.Visible;
|
||||
}
|
||||
}
|
||||
|
||||
// Do not wait for performance improvement
|
||||
/*if (string.IsNullOrEmpty(query.ActionKeyword))
|
||||
{
|
||||
// Wait 15 millisecond for query change in global query
|
||||
// if query changes, return so that it won't be calculated
|
||||
await Task.Delay(15, currentCancellationToken);
|
||||
if (currentCancellationToken.IsCancellationRequested) return;
|
||||
}*/
|
||||
App.API.LogDebug(ClassName, $"Valid <{plugins.Count}> plugins: {string.Join(" ", plugins.Select(x => $"<{x.Metadata.Name}>"))}");
|
||||
|
||||
_ = Task.Delay(200, currentCancellationToken).ContinueWith(_ =>
|
||||
// Do not wait for performance improvement
|
||||
/*if (string.IsNullOrEmpty(query.ActionKeyword))
|
||||
{
|
||||
// Wait 15 millisecond for query change in global query
|
||||
// if query changes, return so that it won't be calculated
|
||||
await Task.Delay(15, currentCancellationToken);
|
||||
if (currentCancellationToken.IsCancellationRequested) return;
|
||||
}*/
|
||||
|
||||
_ = Task.Delay(200, currentCancellationToken).ContinueWith(_ =>
|
||||
{
|
||||
// start the progress bar if query takes more than 200 ms and this is the current running query and it didn't finish yet
|
||||
if (_isQueryRunning)
|
||||
if (_progressQuery != null && _progressQuery.OriginalQuery == query.OriginalQuery)
|
||||
{
|
||||
ProgressBarVisibility = Visibility.Visible;
|
||||
}
|
||||
|
|
@ -1465,58 +1472,65 @@ namespace Flow.Launcher.ViewModel
|
|||
TaskContinuationOptions.NotOnCanceled,
|
||||
TaskScheduler.Default);
|
||||
|
||||
// plugins are ICollection, meaning LINQ will get the Count and preallocate Array
|
||||
// plugins are ICollection, meaning LINQ will get the Count and preallocate Array
|
||||
|
||||
Task[] tasks;
|
||||
if (currentIsHomeQuery)
|
||||
{
|
||||
if (ShouldClearExistingResultsForNonQuery(plugins))
|
||||
Task[] tasks;
|
||||
if (currentIsHomeQuery)
|
||||
{
|
||||
Results.Clear();
|
||||
App.API.LogDebug(ClassName, $"Existing results are cleared for non-query");
|
||||
if (ShouldClearExistingResultsForNonQuery(plugins))
|
||||
{
|
||||
// there are no update tasks and so we can directly return
|
||||
ClearResults();
|
||||
return;
|
||||
}
|
||||
|
||||
tasks = plugins.Select(plugin => plugin.Metadata.HomeDisabled switch
|
||||
{
|
||||
false => QueryTaskAsync(plugin, currentCancellationToken),
|
||||
true => Task.CompletedTask
|
||||
}).ToArray();
|
||||
|
||||
// Query history results for home page firstly so it will be put on top of the results
|
||||
if (Settings.ShowHistoryResultsForHomePage)
|
||||
{
|
||||
QueryHistoryTask(currentCancellationToken);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
tasks = plugins.Select(plugin => plugin.Metadata.Disabled switch
|
||||
{
|
||||
false => QueryTaskAsync(plugin, currentCancellationToken),
|
||||
true => Task.CompletedTask
|
||||
}).ToArray();
|
||||
}
|
||||
|
||||
tasks = plugins.Select(plugin => plugin.Metadata.HomeDisabled switch
|
||||
try
|
||||
{
|
||||
false => QueryTaskAsync(plugin, currentCancellationToken),
|
||||
true => Task.CompletedTask
|
||||
}).ToArray();
|
||||
// Check the code, WhenAll will translate all type of IEnumerable or Collection to Array, so make an array at first
|
||||
await Task.WhenAll(tasks);
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
// nothing to do here
|
||||
}
|
||||
|
||||
// Query history results for home page firstly so it will be put on top of the results
|
||||
if (Settings.ShowHistoryResultsForHomePage)
|
||||
if (currentCancellationToken.IsCancellationRequested) return;
|
||||
|
||||
// this should happen once after all queries are done so progress bar should continue
|
||||
// until the end of all querying
|
||||
_progressQuery = null;
|
||||
|
||||
if (!currentCancellationToken.IsCancellationRequested)
|
||||
{
|
||||
QueryHistoryTask(currentCancellationToken);
|
||||
// update to hidden if this is still the current query
|
||||
ProgressBarVisibility = Visibility.Hidden;
|
||||
}
|
||||
}
|
||||
else
|
||||
finally
|
||||
{
|
||||
tasks = plugins.Select(plugin => plugin.Metadata.Disabled switch
|
||||
{
|
||||
false => QueryTaskAsync(plugin, currentCancellationToken),
|
||||
true => Task.CompletedTask
|
||||
}).ToArray();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// Check the code, WhenAll will translate all type of IEnumerable or Collection to Array, so make an array at first
|
||||
await Task.WhenAll(tasks);
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
// nothing to do here
|
||||
}
|
||||
|
||||
if (currentCancellationToken.IsCancellationRequested) return;
|
||||
|
||||
// this should happen once after all queries are done so progress bar should continue
|
||||
// until the end of all querying
|
||||
_isQueryRunning = false;
|
||||
|
||||
if (!currentCancellationToken.IsCancellationRequested)
|
||||
{
|
||||
// update to hidden if this is still the current query
|
||||
ProgressBarVisibility = Visibility.Hidden;
|
||||
// this make sures progress query is null when this query is canceled
|
||||
_progressQuery = null;
|
||||
}
|
||||
|
||||
// Local function
|
||||
|
|
@ -1616,7 +1630,7 @@ namespace Flow.Launcher.ViewModel
|
|||
{
|
||||
if (string.IsNullOrWhiteSpace(queryText))
|
||||
{
|
||||
return QueryBuilder.Build(string.Empty, PluginManager.GetNonGlobalPlugins());
|
||||
return QueryBuilder.Build(string.Empty, string.Empty, PluginManager.GetNonGlobalPlugins());
|
||||
}
|
||||
|
||||
var queryBuilder = new StringBuilder(queryText);
|
||||
|
|
@ -1636,7 +1650,7 @@ namespace Flow.Launcher.ViewModel
|
|||
// Applying builtin shortcuts
|
||||
await BuildQueryAsync(builtInShortcuts, queryBuilder, queryBuilderTmp);
|
||||
|
||||
return QueryBuilder.Build(queryBuilder.ToString().Trim(), PluginManager.GetNonGlobalPlugins());
|
||||
return QueryBuilder.Build(queryText, queryBuilder.ToString().Trim(), PluginManager.GetNonGlobalPlugins());
|
||||
}
|
||||
|
||||
private async Task BuildQueryAsync(IEnumerable<BaseBuiltinShortcutModel> builtInShortcuts,
|
||||
|
|
@ -2113,6 +2127,13 @@ namespace Flow.Launcher.ViewModel
|
|||
{
|
||||
Win32Helper.SwitchToEnglishKeyboardLayout(true);
|
||||
}
|
||||
|
||||
// Show the taskbar if the setting is enabled
|
||||
if (Settings.ShowTaskbarWhenInvoked && !_taskbarShownByFlow)
|
||||
{
|
||||
Win32Helper.ShowTaskbar();
|
||||
_taskbarShownByFlow = true;
|
||||
}
|
||||
}
|
||||
|
||||
public async void Hide(bool reset = true)
|
||||
|
|
@ -2181,6 +2202,13 @@ namespace Flow.Launcher.ViewModel
|
|||
Win32Helper.RestorePreviousKeyboardLayout();
|
||||
}
|
||||
|
||||
// Hide the taskbar if the setting is enabled
|
||||
if (_taskbarShownByFlow)
|
||||
{
|
||||
Win32Helper.HideTaskbar();
|
||||
_taskbarShownByFlow = false;
|
||||
}
|
||||
|
||||
// Delay for a while to make sure clock will not flicker
|
||||
await Task.Delay(50);
|
||||
|
||||
|
|
|
|||
|
|
@ -288,6 +288,8 @@ namespace Flow.Launcher.ViewModel
|
|||
}
|
||||
}
|
||||
|
||||
public string PreviewDescription => Result.Preview?.Description ?? Result.SubTitle;
|
||||
|
||||
public Result Result { get; }
|
||||
public int ResultProgress
|
||||
{
|
||||
|
|
|
|||
|
|
@ -28,9 +28,9 @@
|
|||
},
|
||||
"iNKORE.UI.WPF.Modern": {
|
||||
"type": "Direct",
|
||||
"requested": "[0.10.1, )",
|
||||
"resolved": "0.10.1",
|
||||
"contentHash": "nRYmBosiL+42eUpLbHeqP7qJqtp5EpzuIMZTpvq4mFV33VB/JjkFg1y82gk50pjkXlAQWDvRyrfSAmPR5AM+3g==",
|
||||
"requested": "[0.10.2.1, )",
|
||||
"resolved": "0.10.2.1",
|
||||
"contentHash": "nGwuuVul+TcLCTgPmaAZCc0fYFqUpCNZ8PiulVT3gZnsWt/AvxMZ0DSPpuyI/iRPc/NhFIg9lSIR7uaHWV0I/Q==",
|
||||
"dependencies": {
|
||||
"iNKORE.UI.WPF": "1.2.8"
|
||||
}
|
||||
|
|
@ -1619,7 +1619,7 @@
|
|||
"FSharp.Core": "[9.0.303, )",
|
||||
"Flow.Launcher.Infrastructure": "[1.0.0, )",
|
||||
"Flow.Launcher.Localization": "[0.0.6, )",
|
||||
"Flow.Launcher.Plugin": "[5.0.0, )",
|
||||
"Flow.Launcher.Plugin": "[5.1.0, )",
|
||||
"Meziantou.Framework.Win32.Jobs": "[3.4.5, )",
|
||||
"Microsoft.IO.RecyclableMemoryStream": "[3.0.1, )",
|
||||
"SemanticVersioning": "[3.0.0, )",
|
||||
|
|
@ -1634,7 +1634,7 @@
|
|||
"BitFaster.Caching": "[2.5.4, )",
|
||||
"CommunityToolkit.Mvvm": "[8.4.0, )",
|
||||
"Flow.Launcher.Localization": "[0.0.6, )",
|
||||
"Flow.Launcher.Plugin": "[5.0.0, )",
|
||||
"Flow.Launcher.Plugin": "[5.1.0, )",
|
||||
"InputSimulator": "[1.0.4, )",
|
||||
"MemoryPack": "[1.21.4, )",
|
||||
"Microsoft.VisualStudio.Threading": "[17.14.15, )",
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@
|
|||
<ItemGroup>
|
||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
|
||||
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.10" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="10.0.1" />
|
||||
<PackageReference Include="Svg.Skia" Version="3.2.1" />
|
||||
<PackageReference Include="SkiaSharp" Version="3.119.1" />
|
||||
</ItemGroup>
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@
|
|||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
|
||||
<PackageReference Include="Mages" Version="3.0.0" />
|
||||
<PackageReference Include="Mages" Version="3.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_plugin_name">计算器</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_plugin_description">进行数学计算,包括十六进制值和高级函数,如“最小(1,2,3)”、“sqrt(123)”和“cos123”等。</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_plugin_description">进行数学计算,包括十六进制值和高级函数,如“min(1,2,3)”、“sqrt(123)”和“cos(123)”等。</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_not_a_number">请输入数字</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_expression_not_complete">表达错误或不完整(您是否忘记了一些括号?)</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_copy_number_to_clipboard">将结果复制到剪贴板</system:String>
|
||||
|
|
|
|||
|
|
@ -2,16 +2,16 @@
|
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_plugin_name">計算機</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_plugin_description">Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'.</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_plugin_description">執行數學計算,包括十六進位數值以及進階函數,例如 'min(1,2,3)'、'sqrt(123)' 和 'cos(123)'。</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_not_a_number">不是一個數 (NaN)</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_expression_not_complete">Expression wrong or incomplete (Did you forget some parentheses?)</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_expression_not_complete">表示式錯誤或不完整(你是否忘記了某些括號?)</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_copy_number_to_clipboard">複製此數至剪貼簿</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_output_decimal_separator">小數點分隔符號</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_output_decimal_separator_help">The decimal separator to be used in the output.</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_output_decimal_separator_help">用於輸出的小數點分隔符。</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_use_system_locale">使用系統區域設定</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">逗號 (,)</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">點 (.)</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">小數點後最大位數</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">複製失敗,請稍後再試</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">計算失敗時顯示錯誤訊息</system:String>
|
||||
</ResourceDictionary>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">بحث في محتوى الملفات:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">بحث مفهرس:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">وصول سريع:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">الكلمة المفتاحية الحالية للإجراء</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">تم</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">مفعّل</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Vyhledávání obsahu souborů:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Vyhledávání v indexu:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Rychlý přístup:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Aktuální aktivační příkaz</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Hotovo</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Povoleno</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">File Content Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Index Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Quick Access:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Current Action Keyword</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Færdig</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Enabled</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Suche nach Dateiinhalten:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Index-Suche:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Schnellzugriff:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Aktuelles Aktions-Schlüsselwort</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Fertig</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Aktiviert</system:String>
|
||||
|
|
|
|||
|
|
@ -58,6 +58,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">File Content Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Index Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Quick Access:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Current Action Keyword</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Done</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Enabled</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">File Content Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Index Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Quick Access:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Current Action Keyword</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Hecho</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Enabled</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Búsqueda de contenido de archivo:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Buscar índice:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Acceso rápido:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Palabra clave de acción actual</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Aceptar</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Activado</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Recherche de contenu de fichier :</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Recherche dans l'index :</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Accès rapide :</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Recherche de dossier :</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">Recherche de fichier :</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Mot-clé de l'action en cours</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Terminer</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Activé</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">חיפוש תוכן קובץ:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">חיפוש אינדקס:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">גישה מהירה:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">מילת פעולה נוכחית</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">בוצע</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">מופעל</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Ricerca Contenuto File:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Ricerca in Indice:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Accesso Rapido:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Parola Chiave Corrente</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Conferma</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Abilitato</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">File Content Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Index Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Quick Access:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Current Action Keyword</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">完了</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Enabled</system:String>
|
||||
|
|
@ -70,9 +72,9 @@
|
|||
|
||||
<system:String x:Key="plugin_explorer_Content_Search_Engine">Content Search Engine</system:String>
|
||||
<system:String x:Key="plugin_explorer_Directory_Recursive_Search_Engine">Directory Recursive Search Engine</system:String>
|
||||
<system:String x:Key="plugin_explorer_Index_Search_Engine">Index Search Engine</system:String>
|
||||
<system:String x:Key="plugin_explorer_Index_Search_Engine">インデックス検索エンジン</system:String>
|
||||
<system:String x:Key="plugin_explorer_Open_Window_Index_Option">Windowsのインデックスオプションを開く</system:String>
|
||||
<system:String x:Key="plugin_explorer_Excluded_File_Types">Excluded File Types (comma seperated)</system:String>
|
||||
<system:String x:Key="plugin_explorer_Excluded_File_Types">除外されたファイルタイプ(カンマ区切りで入力)</system:String>
|
||||
<system:String x:Key="plugin_explorer_Excluded_File_Types_Tooltip">例: exe,jpg,png</system:String>
|
||||
<system:String x:Key="plugin_explorer_Maximum_Results">結果の最大表示件数</system:String>
|
||||
<system:String x:Key="plugin_explorer_Maximum_Results_Tooltip">The maximum number of results requested from active search engine</system:String>
|
||||
|
|
@ -163,8 +165,8 @@
|
|||
<system:String x:Key="flowlauncher_plugin_everything_sort_by_date_created_descending">作成日時 ↓</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_everything_sort_by_date_modified_ascending">更新日時 ↑</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_everything_sort_by_date_modified_descending">更新日時 ↓</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_everything_sort_by_attributes_ascending">Attributes ↑</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_everything_sort_by_attributes_descending">Attributes ↓</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_everything_sort_by_attributes_ascending">属性 ↑</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_everything_sort_by_attributes_descending">属性 ↓</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_everything_sort_by_file_list_filename_ascending">File List FileName ↑</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_everything_sort_by_file_list_filename_descending">File List FileName ↓</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_everything_sort_by_run_count_ascending">実行回数 ↑</system:String>
|
||||
|
|
@ -187,7 +189,7 @@
|
|||
<system:String x:Key="flowlauncher_plugin_everything_installing_subtitle">Everything サービスをインストールしています。お待ちください…</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_everything_installationsuccess_subtitle">Everything サービスを正常にインストールしました</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_everything_installationfailed_subtitle">Everything サービスを自動的にインストールできませんでした。https://www.voidtools.com から手動でインストールしてください</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_everything_run_service">Click here to start it</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_everything_run_service">ここをクリックして開始</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_everything_installing_select">Everythingのインストールが見つかりませんでした。手動で場所を指定しますか?{0}{0}「いいえ」をクリックすると、Everythingが自動的にインストールされます。</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_everything_enable_content_search">Everything でのコンテンツ検索を有効にしますか?</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_everything_enable_content_search_tips">インデックスなしでは非常に遅くなることがあります(Everything v1.5以降でのみサポートされています)</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">파일 내용 검색:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">색인 검색:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">빠른 접근:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">현재 액션 키워드</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">완료</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">켬</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Søk etter filinnhold:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Indekssøk:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Hurtigtilgang:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Nåværende nøkkelord for handling</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Utført</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Aktivert</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">File Content Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Index Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Quick Access:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Current Action Keyword</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Klaar</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Enabled</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Przeszukiwanie zawartości plików:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Wyszukiwanie indeksowe:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Szybki dostęp:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Bieżące słowo kluczowe akcji</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Zapisz</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Aktywny</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">File Content Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Index Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Quick Access:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Current Action Keyword</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Finalizado</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Enabled</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Pesquisa no conteúdo dos ficheiros:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Pesquisa no índice:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Acesso rápido:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Pesquisar pasta:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">Pesquisar ficheiro:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Palavra-chave atual</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">OK</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Ativo</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">File Content Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Index Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Quick Access:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Current Action Keyword</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Подтвердить</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Включено</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Vyhľadávanie obsahu súborov:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Vyhľadávanie v indexe:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Rýchly prístup:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Vyhľadávanie priečinkov:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">Vyhľadávanie súborov:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Aktuálny aktivačný príkaz</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Hotovo</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Povolené</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">File Content Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Index Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Quick Access:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Current Action Keyword</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Done</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Enabled</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">File Content Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Index Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Quick Access:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Current Action Keyword</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Gotovo</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Enabled</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Dosya İçeriğini Ara:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Dizin Araması:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Hızlı Erişim:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Geçerli Anahtar Kelime</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Tamam</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Etkin</system:String>
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
<system:String x:Key="plugin_explorer_directoryinfosearch_error">Виникла помилка під час пошуку: {0}</system:String>
|
||||
<system:String x:Key="plugin_explorer_opendir_error">Не вдалося відкрити папку</system:String>
|
||||
<system:String x:Key="plugin_explorer_openfile_error">Не вдалося відкрити файл</system:String>
|
||||
<system:String x:Key="plugin_explorer_new_action_keyword_assigned">This new action keyword is already assigned to another plugin, please choose a different one</system:String>
|
||||
<system:String x:Key="plugin_explorer_new_action_keyword_assigned">Нова команда активації вже призначена іншому плагіну, виберіть іншу</system:String>
|
||||
|
||||
<!-- Controls -->
|
||||
<system:String x:Key="plugin_explorer_delete">Видалити</system:String>
|
||||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Пошук вмісту файлу:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Індексний пошук:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Швидкий доступ:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Пошук теки:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">Пошук файлу:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Поточне ключове слово дії</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Готово</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Увімкнено</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Tìm kiếm nội dung tệp:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Tìm kiếm chỉ mục:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Truy cập nhanh</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Từ hành động hiện tại</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Xong</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Đã bật</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">文件内容搜索:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">索引搜索:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">快速访问:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">目录搜索:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">文件搜索:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">当前触发关键字</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">确认</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">已启用</system:String>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">File Content Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Index Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">快速存取:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Current Action Keyword</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_done">確</system:String>
|
||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">已啟用</system:String>
|
||||
|
|
|
|||
|
|
@ -48,11 +48,18 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything
|
|||
|
||||
public static async ValueTask<bool> IsEverythingRunningAsync(CancellationToken token = default)
|
||||
{
|
||||
await _semaphore.WaitAsync(token);
|
||||
try
|
||||
{
|
||||
await _semaphore.WaitAsync(token);
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
EverythingApiDllImport.Everything_GetMajorVersion();
|
||||
_ = EverythingApiDllImport.Everything_GetMajorVersion();
|
||||
var result = EverythingApiDllImport.Everything_GetLastError() != StateCode.IPCError;
|
||||
return result;
|
||||
}
|
||||
|
|
@ -77,8 +84,14 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything
|
|||
if (option.MaxCount < 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(option.MaxCount), option.MaxCount, "MaxCount must be greater than or equal to 0");
|
||||
|
||||
await _semaphore.WaitAsync(token);
|
||||
|
||||
try
|
||||
{
|
||||
await _semaphore.WaitAsync(token);
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
|
|
@ -120,8 +133,6 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything
|
|||
EverythingApiDllImport.Everything_SetRequestFlags(EVERYTHING_REQUEST_FULL_PATH_AND_FILE_NAME);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (token.IsCancellationRequested) yield break;
|
||||
|
||||
if (!EverythingApiDllImport.Everything_QueryW(true))
|
||||
|
|
|
|||
|
|
@ -1,13 +1,14 @@
|
|||
using Flow.Launcher.Plugin.Explorer.Search.DirectoryInfo;
|
||||
using Flow.Launcher.Plugin.Explorer.Search.Everything;
|
||||
using Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks;
|
||||
using Flow.Launcher.Plugin.SharedCommands;
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Flow.Launcher.Plugin.Explorer.Exceptions;
|
||||
using Flow.Launcher.Plugin.Explorer.Search.DirectoryInfo;
|
||||
using Flow.Launcher.Plugin.Explorer.Search.Everything;
|
||||
using Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks;
|
||||
using Flow.Launcher.Plugin.SharedCommands;
|
||||
using static Flow.Launcher.Plugin.Explorer.Settings;
|
||||
using Path = System.IO.Path;
|
||||
|
||||
namespace Flow.Launcher.Plugin.Explorer.Search
|
||||
|
|
@ -18,6 +19,14 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
|
||||
internal Settings Settings;
|
||||
|
||||
private readonly Dictionary<ActionKeyword, ResultType[]> _allowedTypesByActionKeyword = new()
|
||||
{
|
||||
{ ActionKeyword.FileSearchActionKeyword, [ResultType.File] },
|
||||
{ ActionKeyword.FolderSearchActionKeyword, [ResultType.Folder, ResultType.Volume] },
|
||||
{ ActionKeyword.SearchActionKeyword, [ResultType.File, ResultType.Folder, ResultType.Volume] },
|
||||
};
|
||||
|
||||
|
||||
public SearchManager(Settings settings, PluginInitContext context)
|
||||
{
|
||||
Context = context;
|
||||
|
|
@ -44,51 +53,71 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Results for the different types of searches as follows:
|
||||
/// 1. Search, only include results from:
|
||||
/// - Files
|
||||
/// - Folders
|
||||
/// - Quick Access Links
|
||||
/// - Path navigation
|
||||
/// 2. File Content Search, only include results from:
|
||||
/// - File contents from index search engines i.e. Windows Index, Everything (may not be available due its beta version)
|
||||
/// 3. Path Search, only include results from:
|
||||
/// - Path navigation
|
||||
/// 4. Quick Access Links, only include results from:
|
||||
/// - Full list of Quick Access Links if query is empty
|
||||
/// - Matched Quick Access Links if query is not empty
|
||||
/// - Quick Access Links that are matched on path, e.g. query "window" for results that contain 'window' in the path (even if not in the title),
|
||||
/// i.e. result with path c:\windows\system32
|
||||
/// 5. Folder Search, only include results from:
|
||||
/// - Folders
|
||||
/// - Quick Access Links
|
||||
/// 6. File Search, only include results from:
|
||||
/// - Files
|
||||
/// - Quick Access Links
|
||||
/// </summary>
|
||||
internal async Task<List<Result>> SearchAsync(Query query, CancellationToken token)
|
||||
{
|
||||
var results = new HashSet<Result>(PathEqualityComparator.Instance);
|
||||
|
||||
// This allows the user to type the below action keywords and see/search the list of quick folder links
|
||||
if (ActionKeywordMatch(query, Settings.ActionKeyword.SearchActionKeyword)
|
||||
|| ActionKeywordMatch(query, Settings.ActionKeyword.QuickAccessActionKeyword)
|
||||
|| ActionKeywordMatch(query, Settings.ActionKeyword.PathSearchActionKeyword)
|
||||
|| ActionKeywordMatch(query, Settings.ActionKeyword.IndexSearchActionKeyword)
|
||||
|| ActionKeywordMatch(query, Settings.ActionKeyword.FileContentSearchActionKeyword))
|
||||
{
|
||||
if (string.IsNullOrEmpty(query.Search) && ActionKeywordMatch(query, Settings.ActionKeyword.QuickAccessActionKeyword))
|
||||
return QuickAccess.AccessLinkListAll(query, Settings.QuickAccessLinks);
|
||||
var keyword = query.ActionKeyword.Length == 0 ? Query.GlobalPluginWildcardSign : query.ActionKeyword;
|
||||
|
||||
var quickAccessLinks = QuickAccess.AccessLinkListMatched(query, Settings.QuickAccessLinks);
|
||||
|
||||
results.UnionWith(quickAccessLinks);
|
||||
}
|
||||
else
|
||||
// No action keyword matched - plugin should not handle this query, return empty results.
|
||||
var activeActionKeywords = Settings.GetActiveActionKeywords(keyword);
|
||||
if (activeActionKeywords.Count == 0)
|
||||
{
|
||||
return new List<Result>();
|
||||
return [.. results];
|
||||
}
|
||||
|
||||
IAsyncEnumerable<SearchResult> searchResults;
|
||||
var queryIsEmpty = string.IsNullOrEmpty(query.Search);
|
||||
if (queryIsEmpty && activeActionKeywords.ContainsKey(ActionKeyword.QuickAccessActionKeyword))
|
||||
{
|
||||
return QuickAccess.AccessLinkListAll(query, Settings.QuickAccessLinks);
|
||||
}
|
||||
|
||||
bool isPathSearch = query.Search.IsLocationPathString()
|
||||
if (queryIsEmpty)
|
||||
{
|
||||
return [.. results];
|
||||
}
|
||||
|
||||
var isPathSearch = query.Search.IsLocationPathString()
|
||||
|| EnvironmentVariables.IsEnvironmentVariableSearch(query.Search)
|
||||
|| EnvironmentVariables.HasEnvironmentVar(query.Search);
|
||||
|
||||
IAsyncEnumerable<SearchResult> searchResults;
|
||||
|
||||
string engineName;
|
||||
|
||||
switch (isPathSearch)
|
||||
{
|
||||
case true
|
||||
when ActionKeywordMatch(query, Settings.ActionKeyword.PathSearchActionKeyword)
|
||||
|| ActionKeywordMatch(query, Settings.ActionKeyword.SearchActionKeyword):
|
||||
|
||||
when CanUsePathSearchByActionKeywords(activeActionKeywords):
|
||||
results.UnionWith(await PathSearchAsync(query, token).ConfigureAwait(false));
|
||||
|
||||
return results.ToList();
|
||||
return [.. results];
|
||||
|
||||
case false
|
||||
when ActionKeywordMatch(query, Settings.ActionKeyword.FileContentSearchActionKeyword):
|
||||
|
||||
// Intentionally require enabling of Everything's content search due to its slowness
|
||||
when activeActionKeywords.ContainsKey(ActionKeyword.FileContentSearchActionKeyword):
|
||||
if (Settings.ContentIndexProvider is EverythingSearchManager && !Settings.EnableEverythingContentSearch)
|
||||
return EverythingContentSearchResult(query);
|
||||
|
||||
|
|
@ -96,29 +125,41 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
engineName = Enum.GetName(Settings.ContentSearchEngine);
|
||||
break;
|
||||
|
||||
case false
|
||||
when ActionKeywordMatch(query, Settings.ActionKeyword.IndexSearchActionKeyword)
|
||||
|| ActionKeywordMatch(query, Settings.ActionKeyword.SearchActionKeyword):
|
||||
case true or false
|
||||
when activeActionKeywords.ContainsKey(ActionKeyword.QuickAccessActionKeyword):
|
||||
return QuickAccess.AccessLinkListMatched(query, Settings.QuickAccessLinks);
|
||||
|
||||
|
||||
case false
|
||||
when CanUseIndexSearchByActionKeywords(activeActionKeywords):
|
||||
searchResults = Settings.IndexProvider.SearchAsync(query.Search, token);
|
||||
engineName = Enum.GetName(Settings.IndexSearchEngine);
|
||||
break;
|
||||
default:
|
||||
return results.ToList();
|
||||
return [.. results];
|
||||
|
||||
}
|
||||
|
||||
|
||||
var actions = activeActionKeywords.Keys.ToList();
|
||||
//Merge Quick Access Link results for non-path searches.
|
||||
results.UnionWith(GetQuickAccessResultsFilteredByActionKeyword(query, actions));
|
||||
try
|
||||
{
|
||||
await foreach (var search in searchResults.WithCancellation(token).ConfigureAwait(false))
|
||||
if (search.Type == ResultType.File && IsExcludedFile(search)) {
|
||||
{
|
||||
if (search.Type == ResultType.File && IsExcludedFile(search))
|
||||
continue;
|
||||
} else {
|
||||
results.Add(ResultManager.CreateResult(query, search));
|
||||
}
|
||||
|
||||
if (IsResultTypeFilteredByActionKeyword(search.Type, actions))
|
||||
continue;
|
||||
|
||||
results.Add(ResultManager.CreateResult(query, search));
|
||||
}
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
return new List<Result>();
|
||||
return [.. results];
|
||||
}
|
||||
catch (EngineNotAvailableException)
|
||||
{
|
||||
|
|
@ -132,33 +173,13 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
results.RemoveWhere(r => Settings.IndexSearchExcludedSubdirectoryPaths.Any(
|
||||
excludedPath => FilesFolders.PathContains(excludedPath.Path, r.SubTitle, allowEqual: true)));
|
||||
|
||||
return results.ToList();
|
||||
}
|
||||
|
||||
private bool ActionKeywordMatch(Query query, Settings.ActionKeyword allowedActionKeyword)
|
||||
{
|
||||
var keyword = query.ActionKeyword.Length == 0 ? Query.GlobalPluginWildcardSign : query.ActionKeyword;
|
||||
|
||||
return allowedActionKeyword switch
|
||||
{
|
||||
Settings.ActionKeyword.SearchActionKeyword => Settings.SearchActionKeywordEnabled &&
|
||||
keyword == Settings.SearchActionKeyword,
|
||||
Settings.ActionKeyword.PathSearchActionKeyword => Settings.PathSearchKeywordEnabled &&
|
||||
keyword == Settings.PathSearchActionKeyword,
|
||||
Settings.ActionKeyword.FileContentSearchActionKeyword => Settings.FileContentSearchKeywordEnabled &&
|
||||
keyword == Settings.FileContentSearchActionKeyword,
|
||||
Settings.ActionKeyword.IndexSearchActionKeyword => Settings.IndexSearchKeywordEnabled &&
|
||||
keyword == Settings.IndexSearchActionKeyword,
|
||||
Settings.ActionKeyword.QuickAccessActionKeyword => Settings.QuickAccessKeywordEnabled &&
|
||||
keyword == Settings.QuickAccessActionKeyword,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(allowedActionKeyword), allowedActionKeyword, "actionKeyword out of range")
|
||||
};
|
||||
return [.. results];
|
||||
}
|
||||
|
||||
private List<Result> EverythingContentSearchResult(Query query)
|
||||
{
|
||||
return new List<Result>()
|
||||
{
|
||||
return
|
||||
[
|
||||
new()
|
||||
{
|
||||
Title = Localize.flowlauncher_plugin_everything_enable_content_search(),
|
||||
|
|
@ -167,11 +188,11 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
Action = c =>
|
||||
{
|
||||
Settings.EnableEverythingContentSearch = true;
|
||||
Context.API.ChangeQuery(query.RawQuery, true);
|
||||
Context.API.ChangeQuery(query.TrimmedQuery, true);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
];
|
||||
}
|
||||
|
||||
private async Task<List<Result>> PathSearchAsync(Query query, CancellationToken token = default)
|
||||
|
|
@ -192,7 +213,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
|
||||
// Check that actual location exists, otherwise directory search will throw directory not found exception
|
||||
if (!FilesFolders.ReturnPreviousDirectoryIfIncompleteString(path).LocationExists())
|
||||
return results.ToList();
|
||||
return [.. results];
|
||||
|
||||
var useIndexSearch = Settings.IndexSearchEngine is Settings.IndexSearchEngineOption.WindowsIndex
|
||||
&& UseWindowsIndexForDirectorySearch(path);
|
||||
|
|
@ -204,7 +225,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
: ResultManager.CreateOpenCurrentFolderResult(retrievedDirectoryPath, query.ActionKeyword, useIndexSearch));
|
||||
|
||||
if (token.IsCancellationRequested)
|
||||
return new List<Result>();
|
||||
return [.. results];
|
||||
|
||||
IAsyncEnumerable<SearchResult> directoryResult;
|
||||
|
||||
|
|
@ -226,7 +247,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
}
|
||||
|
||||
if (token.IsCancellationRequested)
|
||||
return new List<Result>();
|
||||
return [.. results];
|
||||
|
||||
try
|
||||
{
|
||||
|
|
@ -241,14 +262,14 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
}
|
||||
|
||||
|
||||
return results.ToList();
|
||||
return [.. results];
|
||||
}
|
||||
|
||||
public bool IsFileContentSearch(string actionKeyword) => actionKeyword == Settings.FileContentSearchActionKeyword;
|
||||
|
||||
public static bool UseIndexSearch(string path)
|
||||
{
|
||||
if (Main.Settings.IndexSearchEngine is not Settings.IndexSearchEngineOption.WindowsIndex)
|
||||
if (Main.Settings.IndexSearchEngine is not IndexSearchEngineOption.WindowsIndex)
|
||||
return false;
|
||||
|
||||
// Check if the path is using windows index search
|
||||
|
|
@ -270,10 +291,67 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
|
||||
private bool IsExcludedFile(SearchResult result)
|
||||
{
|
||||
string[] excludedFileTypes = Settings.ExcludedFileTypes.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
string[] excludedFileTypes = Settings.ExcludedFileTypes.Split([','], StringSplitOptions.RemoveEmptyEntries);
|
||||
string fileExtension = Path.GetExtension(result.FullPath).TrimStart('.');
|
||||
|
||||
return excludedFileTypes.Contains(fileExtension, StringComparer.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
private List<Result> GetQuickAccessResultsFilteredByActionKeyword(Query query, List<ActionKeyword> actions)
|
||||
{
|
||||
if (!Settings.QuickAccessKeywordEnabled)
|
||||
return [];
|
||||
|
||||
var results = QuickAccess.AccessLinkListMatched(query, Settings.QuickAccessLinks);
|
||||
if (results.Count == 0)
|
||||
return [];
|
||||
|
||||
return results
|
||||
.Where(r => r.ContextData is SearchResult result
|
||||
&& !IsResultTypeFilteredByActionKeyword(result.Type, actions))
|
||||
.ToList();
|
||||
}
|
||||
private bool IsResultTypeFilteredByActionKeyword(ResultType type, List<ActionKeyword> actions)
|
||||
{
|
||||
var actionsWithWhitelist = actions.Intersect(_allowedTypesByActionKeyword.Keys).ToList();
|
||||
if (actionsWithWhitelist.Count == 0) return false;
|
||||
|
||||
// Check if ANY active keyword allows this type (union behavior)
|
||||
foreach (var action in actionsWithWhitelist)
|
||||
{
|
||||
if (_allowedTypesByActionKeyword.TryGetValue(action, out var allowedTypes))
|
||||
{
|
||||
if (allowedTypes.Contains(type))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool CanUseIndexSearchByActionKeywords(Dictionary<ActionKeyword, string> actions)
|
||||
{
|
||||
var keysToUseIndexSearch = new[]
|
||||
{
|
||||
ActionKeyword.FileSearchActionKeyword, ActionKeyword.FolderSearchActionKeyword,
|
||||
ActionKeyword.IndexSearchActionKeyword, ActionKeyword.SearchActionKeyword
|
||||
};
|
||||
|
||||
return keysToUseIndexSearch.Any(actions.ContainsKey);
|
||||
}
|
||||
|
||||
// Action keywords that supports patch search in results.
|
||||
private bool CanUsePathSearchByActionKeywords(Dictionary<ActionKeyword, string> actions)
|
||||
{
|
||||
var keysThatSupportPathSearch = new[]
|
||||
{
|
||||
ActionKeyword.PathSearchActionKeyword,
|
||||
ActionKeyword.SearchActionKeyword,
|
||||
};
|
||||
|
||||
return keysThatSupportPathSearch.Any(actions.ContainsKey);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,13 @@
|
|||
using Flow.Launcher.Plugin.Explorer.Search;
|
||||
using Flow.Launcher.Plugin.Explorer.Search.Everything;
|
||||
using Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks;
|
||||
using Flow.Launcher.Plugin.Explorer.Search.WindowsIndex;
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.ComponentModel;
|
||||
using System.Text.Json.Serialization;
|
||||
using Flow.Launcher.Plugin.Explorer.Search;
|
||||
using Flow.Launcher.Plugin.Explorer.Search.Everything;
|
||||
using Flow.Launcher.Plugin.Explorer.Search.IProvider;
|
||||
using Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks;
|
||||
using Flow.Launcher.Plugin.Explorer.Search.WindowsIndex;
|
||||
|
||||
namespace Flow.Launcher.Plugin.Explorer
|
||||
{
|
||||
|
|
@ -58,6 +59,15 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
|
||||
public bool QuickAccessKeywordEnabled { get; set; }
|
||||
|
||||
|
||||
public string FolderSearchActionKeyword { get; set; } = Query.GlobalPluginWildcardSign;
|
||||
|
||||
public bool FolderSearchKeywordEnabled { get; set; }
|
||||
|
||||
public string FileSearchActionKeyword { get; set; } = Query.GlobalPluginWildcardSign;
|
||||
|
||||
public bool FileSearchKeywordEnabled { get; set; }
|
||||
|
||||
public bool WarnWindowsSearchServiceOff { get; set; } = true;
|
||||
|
||||
public bool ShowFileSizeInPreviewPanel { get; set; } = true;
|
||||
|
|
@ -160,7 +170,9 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
PathSearchActionKeyword,
|
||||
FileContentSearchActionKeyword,
|
||||
IndexSearchActionKeyword,
|
||||
QuickAccessActionKeyword
|
||||
QuickAccessActionKeyword,
|
||||
FolderSearchActionKeyword,
|
||||
FileSearchActionKeyword,
|
||||
}
|
||||
|
||||
internal string GetActionKeyword(ActionKeyword actionKeyword) => actionKeyword switch
|
||||
|
|
@ -170,6 +182,8 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
ActionKeyword.FileContentSearchActionKeyword => FileContentSearchActionKeyword,
|
||||
ActionKeyword.IndexSearchActionKeyword => IndexSearchActionKeyword,
|
||||
ActionKeyword.QuickAccessActionKeyword => QuickAccessActionKeyword,
|
||||
ActionKeyword.FolderSearchActionKeyword => FolderSearchActionKeyword,
|
||||
ActionKeyword.FileSearchActionKeyword => FileSearchActionKeyword,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(actionKeyword), actionKeyword, "ActionKeyWord property not found")
|
||||
};
|
||||
|
||||
|
|
@ -180,6 +194,8 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
ActionKeyword.FileContentSearchActionKeyword => FileContentSearchActionKeyword = keyword,
|
||||
ActionKeyword.IndexSearchActionKeyword => IndexSearchActionKeyword = keyword,
|
||||
ActionKeyword.QuickAccessActionKeyword => QuickAccessActionKeyword = keyword,
|
||||
ActionKeyword.FolderSearchActionKeyword => FolderSearchActionKeyword = keyword,
|
||||
ActionKeyword.FileSearchActionKeyword => FileSearchActionKeyword = keyword,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(actionKeyword), actionKeyword, "ActionKeyWord property not found")
|
||||
};
|
||||
|
||||
|
|
@ -190,6 +206,8 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
ActionKeyword.IndexSearchActionKeyword => IndexSearchKeywordEnabled,
|
||||
ActionKeyword.FileContentSearchActionKeyword => FileContentSearchKeywordEnabled,
|
||||
ActionKeyword.QuickAccessActionKeyword => QuickAccessKeywordEnabled,
|
||||
ActionKeyword.FolderSearchActionKeyword => FolderSearchKeywordEnabled,
|
||||
ActionKeyword.FileSearchActionKeyword => FileSearchKeywordEnabled,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(actionKeyword), actionKeyword, "ActionKeyword enabled status not defined")
|
||||
};
|
||||
|
||||
|
|
@ -200,7 +218,27 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
ActionKeyword.IndexSearchActionKeyword => IndexSearchKeywordEnabled = enable,
|
||||
ActionKeyword.FileContentSearchActionKeyword => FileContentSearchKeywordEnabled = enable,
|
||||
ActionKeyword.QuickAccessActionKeyword => QuickAccessKeywordEnabled = enable,
|
||||
ActionKeyword.FolderSearchActionKeyword => FolderSearchKeywordEnabled = enable,
|
||||
ActionKeyword.FileSearchActionKeyword => FileSearchKeywordEnabled = enable,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(actionKeyword), actionKeyword, "ActionKeyword enabled status not defined")
|
||||
};
|
||||
|
||||
// Returns a dictionary because some ActionKeywords may use wildcards (*),
|
||||
// which means multiple ActionKeywords can be considered active at the same time.
|
||||
// Using a dictionary ensures O(1) lookup time when checking which actions
|
||||
// are enabled.
|
||||
internal Dictionary<ActionKeyword, string> GetActiveActionKeywords(string actionKeywordStr)
|
||||
{
|
||||
var result = new Dictionary<ActionKeyword, string>();
|
||||
if (string.IsNullOrEmpty(actionKeywordStr)) return null;
|
||||
foreach (var action in Enum.GetValues<ActionKeyword>())
|
||||
{
|
||||
var keywordStr = GetActionKeyword(action);
|
||||
if (string.IsNullOrEmpty(keywordStr)) continue;
|
||||
var isEnabled = GetActionKeywordEnabled(action);
|
||||
if (keywordStr == actionKeywordStr && isEnabled) result.Add(action, keywordStr);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -279,7 +279,11 @@ namespace Flow.Launcher.Plugin.Explorer.ViewModels
|
|||
new(Settings.ActionKeyword.IndexSearchActionKeyword,
|
||||
"plugin_explorer_actionkeywordview_indexsearch"),
|
||||
new(Settings.ActionKeyword.QuickAccessActionKeyword,
|
||||
"plugin_explorer_actionkeywordview_quickaccess")
|
||||
"plugin_explorer_actionkeywordview_quickaccess"),
|
||||
new(Settings.ActionKeyword.FolderSearchActionKeyword,
|
||||
"plugin_explorer_actionkeywordview_foldersearch"),
|
||||
new(Settings.ActionKeyword.FileSearchActionKeyword,
|
||||
"plugin_explorer_actionkeywordview_filesearch")
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
<system:String x:Key="plugin_pluginsmanager_update_failed_subtitle">Please check if you can connect to github.com. This error means you may not be able to install or update plugins.</system:String>
|
||||
<system:String x:Key="plugin_pluginsmanager_update_all_title">Update all plugins</system:String>
|
||||
<system:String x:Key="plugin_pluginsmanager_update_all_subtitle">Would you like to update all plugins?</system:String>
|
||||
<system:String x:Key="plugin_pluginsmanager_update_all_prompt">Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins.</system:String>
|
||||
<system:String x:Key="plugin_pluginsmanager_update_all_prompt">你要更新{0}個插件?{1}Flow Launcher會在更新所有插件後重新啟動。</system:String>
|
||||
<system:String x:Key="plugin_pluginsmanager_update_all_prompt_no_restart">Would you like to update {0} plugins?</system:String>
|
||||
<system:String x:Key="plugin_pluginsmanager_update_all_success_restart">{0} plugins successfully updated. Restarting Flow, please wait...</system:String>
|
||||
<system:String x:Key="plugin_pluginsmanager_update_success_restart">Plugin {0} successfully updated. Restarting Flow, please wait...</system:String>
|
||||
|
|
@ -66,5 +66,5 @@
|
|||
|
||||
<!-- Settings menu items -->
|
||||
<system:String x:Key="plugin_pluginsmanager_plugin_settings_unknown_source">Install from unknown source warning</system:String>
|
||||
<system:String x:Key="plugin_pluginsmanager_plugin_settings_auto_restart">Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager</system:String>
|
||||
<system:String x:Key="plugin_pluginsmanager_plugin_settings_auto_restart">以插件管理員安裝/移除/更新插件後自動重新啟動Flow Launcher</system:String>
|
||||
</ResourceDictionary>
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@
|
|||
<system:String x:Key="flowlauncher_plugin_program_plugin_name">程式</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_program_plugin_description">在 Flow Launcher 中搜尋程式</system:String>
|
||||
|
||||
<system:String x:Key="flowlauncher_plugin_program_invalid_path">Invalid Path</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_program_invalid_path">無效的路徑</system:String>
|
||||
|
||||
<system:String x:Key="flowlauncher_plugin_program_customizedexplorer">Customized Explorer</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_program_args">Args</system:String>
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@ namespace Flow.Launcher.Plugin.Program
|
|||
|
||||
internal static PluginInitContext Context { get; private set; }
|
||||
|
||||
private static readonly Lock _lastIndexTimeLock = new();
|
||||
|
||||
private static readonly List<Result> emptyResults = [];
|
||||
|
||||
private static readonly MemoryCacheOptions cacheOptions = new() { SizeLimit = 1560 };
|
||||
|
|
@ -82,8 +84,45 @@ namespace Flow.Launcher.Plugin.Program
|
|||
{
|
||||
var resultList = await Task.Run(async () =>
|
||||
{
|
||||
await _win32sLock.WaitAsync(token);
|
||||
await _uwpsLock.WaitAsync(token);
|
||||
// Preparing win32 programs
|
||||
List<Win32> win32s;
|
||||
bool win32LockAcquired = false;
|
||||
try
|
||||
{
|
||||
await _win32sLock.WaitAsync(token);
|
||||
win32LockAcquired = true;
|
||||
win32s = [.. _win32s];
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
return emptyResults;
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Only release the lock if it was acquired
|
||||
if (win32LockAcquired) _win32sLock.Release();
|
||||
}
|
||||
|
||||
// Preparing UWP programs
|
||||
List<UWPApp> uwps;
|
||||
bool uwpsLockAcquired = false;
|
||||
try
|
||||
{
|
||||
await _uwpsLock.WaitAsync(token);
|
||||
uwpsLockAcquired = true;
|
||||
uwps = [.. _uwps];
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
return emptyResults;
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Only release the lock if it was acquired
|
||||
if (uwpsLockAcquired) _uwpsLock.Release();
|
||||
}
|
||||
|
||||
// Start querying programs
|
||||
try
|
||||
{
|
||||
// Collect all UWP Windows app directories
|
||||
|
|
@ -94,8 +133,8 @@ namespace Flow.Launcher.Plugin.Program
|
|||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.ToArray() : null;
|
||||
|
||||
return _win32s.Cast<IProgram>()
|
||||
.Concat(_uwps)
|
||||
return win32s.Cast<IProgram>()
|
||||
.Concat(uwps)
|
||||
.AsParallel()
|
||||
.WithCancellation(token)
|
||||
.Where(HideUninstallersFilter)
|
||||
|
|
@ -109,11 +148,6 @@ namespace Flow.Launcher.Plugin.Program
|
|||
{
|
||||
return emptyResults;
|
||||
}
|
||||
finally
|
||||
{
|
||||
_uwpsLock.Release();
|
||||
_win32sLock.Release();
|
||||
}
|
||||
}, token);
|
||||
|
||||
resultList = resultList.Count != 0 ? resultList : emptyResults;
|
||||
|
|
@ -275,7 +309,12 @@ namespace Flow.Launcher.Plugin.Program
|
|||
|
||||
var cacheEmpty = _win32sCount == 0 || _uwpsCount == 0;
|
||||
|
||||
if (cacheEmpty || _settings.LastIndexTime.AddHours(30) < DateTime.Now)
|
||||
bool needReindex;
|
||||
lock (_lastIndexTimeLock)
|
||||
{
|
||||
needReindex = _settings.LastIndexTime.AddHours(30) < DateTime.Now;
|
||||
}
|
||||
if (cacheEmpty || needReindex)
|
||||
{
|
||||
_ = Task.Run(async () =>
|
||||
{
|
||||
|
|
@ -295,7 +334,7 @@ namespace Flow.Launcher.Plugin.Program
|
|||
}
|
||||
}
|
||||
|
||||
public static async Task IndexWin32ProgramsAsync()
|
||||
public static async Task IndexWin32ProgramsAsync(bool resetCache)
|
||||
{
|
||||
await _win32sLock.WaitAsync();
|
||||
try
|
||||
|
|
@ -306,9 +345,15 @@ namespace Flow.Launcher.Plugin.Program
|
|||
{
|
||||
_win32s.Add(win32);
|
||||
}
|
||||
ResetCache();
|
||||
if (resetCache)
|
||||
{
|
||||
ResetCache();
|
||||
}
|
||||
await Context.API.SaveCacheBinaryStorageAsync<List<Win32>>(Win32CacheName, Context.CurrentPluginMetadata.PluginCacheDirectoryPath);
|
||||
_settings.LastIndexTime = DateTime.Now;
|
||||
lock (_lastIndexTimeLock)
|
||||
{
|
||||
_settings.LastIndexTime = DateTime.Now;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
@ -320,7 +365,7 @@ namespace Flow.Launcher.Plugin.Program
|
|||
}
|
||||
}
|
||||
|
||||
public static async Task IndexUwpProgramsAsync()
|
||||
public static async Task IndexUwpProgramsAsync(bool resetCache)
|
||||
{
|
||||
await _uwpsLock.WaitAsync();
|
||||
try
|
||||
|
|
@ -331,9 +376,15 @@ namespace Flow.Launcher.Plugin.Program
|
|||
{
|
||||
_uwps.Add(uwp);
|
||||
}
|
||||
ResetCache();
|
||||
if (resetCache)
|
||||
{
|
||||
ResetCache();
|
||||
}
|
||||
await Context.API.SaveCacheBinaryStorageAsync<List<UWPApp>>(UwpCacheName, Context.CurrentPluginMetadata.PluginCacheDirectoryPath);
|
||||
_settings.LastIndexTime = DateTime.Now;
|
||||
lock (_lastIndexTimeLock)
|
||||
{
|
||||
_settings.LastIndexTime = DateTime.Now;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
@ -349,12 +400,12 @@ namespace Flow.Launcher.Plugin.Program
|
|||
{
|
||||
var win32Task = Task.Run(async () =>
|
||||
{
|
||||
await Context.API.StopwatchLogInfoAsync(ClassName, "Win32Program index cost", IndexWin32ProgramsAsync);
|
||||
await Context.API.StopwatchLogInfoAsync(ClassName, "Win32Program index cost", () => IndexWin32ProgramsAsync(resetCache: true));
|
||||
});
|
||||
|
||||
var uwpTask = Task.Run(async () =>
|
||||
{
|
||||
await Context.API.StopwatchLogInfoAsync(ClassName, "UWPProgram index cost", IndexUwpProgramsAsync);
|
||||
await Context.API.StopwatchLogInfoAsync(ClassName, "UWPProgram index cost", () => IndexUwpProgramsAsync(resetCache: true));
|
||||
});
|
||||
|
||||
await Task.WhenAll(win32Task, uwpTask).ConfigureAwait(false);
|
||||
|
|
@ -362,9 +413,21 @@ namespace Flow.Launcher.Plugin.Program
|
|||
|
||||
internal static void ResetCache()
|
||||
{
|
||||
var oldCache = cache;
|
||||
cache = new MemoryCache(cacheOptions);
|
||||
oldCache.Dispose();
|
||||
var newCache = new MemoryCache(cacheOptions);
|
||||
|
||||
// Atomically swap and get the previous cache instance, avoids double-dispose/lost-assignment race
|
||||
// where each caller receives a distinct prior instance to dispose.
|
||||
var oldCache = Interlocked.Exchange(ref cache, newCache);
|
||||
|
||||
// Dispose the previous instance (if any)- each caller gets a unique prior instance from above
|
||||
try
|
||||
{
|
||||
oldCache?.Dispose();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Context.API.LogException(ClassName, "Failed to dispose old program cache", e);
|
||||
}
|
||||
}
|
||||
|
||||
public Control CreateSettingPanel()
|
||||
|
|
@ -397,12 +460,26 @@ namespace Flow.Launcher.Plugin.Program
|
|||
Title = Context.API.GetTranslation("flowlauncher_plugin_program_disable_program"),
|
||||
Action = c =>
|
||||
{
|
||||
_ = DisableProgramAsync(program);
|
||||
Context.API.ShowMsg(
|
||||
Context.API.GetTranslation("flowlauncher_plugin_program_disable_dlgtitle_success"),
|
||||
Context.API.GetTranslation(
|
||||
"flowlauncher_plugin_program_disable_dlgtitle_success_message"));
|
||||
Context.API.ReQuery();
|
||||
_ = Task.Run(async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
var disabled = await DisableProgramAsync(program);
|
||||
if (disabled)
|
||||
{
|
||||
ResetCache();
|
||||
Context.API.ShowMsg(
|
||||
Context.API.GetTranslation("flowlauncher_plugin_program_disable_dlgtitle_success"),
|
||||
Context.API.GetTranslation(
|
||||
"flowlauncher_plugin_program_disable_dlgtitle_success_message"));
|
||||
}
|
||||
Context.API.ReQuery();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Context.API.LogException(ClassName, "Failed to disable program", e);
|
||||
}
|
||||
});
|
||||
return false;
|
||||
},
|
||||
IcoPath = "Images/disable.png",
|
||||
|
|
@ -413,52 +490,50 @@ namespace Flow.Launcher.Plugin.Program
|
|||
return menuOptions;
|
||||
}
|
||||
|
||||
private static async Task DisableProgramAsync(IProgram programToDelete)
|
||||
private static async Task<bool> DisableProgramAsync(IProgram programToDelete)
|
||||
{
|
||||
if (_settings.DisabledProgramSources.Any(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier))
|
||||
return;
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
await _uwpsLock.WaitAsync();
|
||||
var reindexUwps = true;
|
||||
try
|
||||
{
|
||||
reindexUwps = _uwps.Any(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier);
|
||||
var program = _uwps.First(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier);
|
||||
program.Enabled = false;
|
||||
_settings.DisabledProgramSources.Add(new ProgramSource(program));
|
||||
var program = _uwps.FirstOrDefault(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier);
|
||||
if (program != null)
|
||||
{
|
||||
program.Enabled = false;
|
||||
_settings.DisabledProgramSources.Add(new ProgramSource(program));
|
||||
// Reindex UWP programs
|
||||
_ = Task.Run(() => IndexUwpProgramsAsync(resetCache: false));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
_uwpsLock.Release();
|
||||
}
|
||||
|
||||
// Reindex UWP programs
|
||||
if (reindexUwps)
|
||||
{
|
||||
_ = Task.Run(IndexUwpProgramsAsync);
|
||||
return;
|
||||
}
|
||||
|
||||
await _win32sLock.WaitAsync();
|
||||
var reindexWin32s = true;
|
||||
try
|
||||
{
|
||||
reindexWin32s = _win32s.Any(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier);
|
||||
var program = _win32s.First(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier);
|
||||
program.Enabled = false;
|
||||
_settings.DisabledProgramSources.Add(new ProgramSource(program));
|
||||
var program = _win32s.FirstOrDefault(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier);
|
||||
if (program != null)
|
||||
{
|
||||
program.Enabled = false;
|
||||
_settings.DisabledProgramSources.Add(new ProgramSource(program));
|
||||
// Reindex Win32 programs
|
||||
_ = Task.Run(() => IndexWin32ProgramsAsync(resetCache: false));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
_win32sLock.Release();
|
||||
}
|
||||
|
||||
// Reindex Win32 programs
|
||||
if (reindexWin32s)
|
||||
{
|
||||
_ = Task.Run(IndexWin32ProgramsAsync);
|
||||
return;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void StartProcess(Func<ProcessStartInfo, Process> runProcess, ProcessStartInfo info)
|
||||
|
|
|
|||
|
|
@ -290,7 +290,7 @@ namespace Flow.Launcher.Plugin.Program.Programs
|
|||
}
|
||||
|
||||
private static readonly Channel<byte> PackageChangeChannel = Channel.CreateBounded<byte>(1);
|
||||
private static PackageCatalog? catalog;
|
||||
private static PackageCatalog catalog;
|
||||
|
||||
public static async Task WatchPackageChangeAsync()
|
||||
{
|
||||
|
|
@ -317,7 +317,7 @@ namespace Flow.Launcher.Plugin.Program.Programs
|
|||
{
|
||||
await Task.Delay(3000).ConfigureAwait(false);
|
||||
PackageChangeChannel.Reader.TryRead(out _);
|
||||
await Task.Run(Main.IndexUwpProgramsAsync);
|
||||
await Main.IndexUwpProgramsAsync(resetCache: true).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -796,7 +796,7 @@ namespace Flow.Launcher.Plugin.Program.Programs
|
|||
{
|
||||
}
|
||||
|
||||
await Task.Run(Main.IndexWin32ProgramsAsync);
|
||||
await Main.IndexWin32ProgramsAsync(resetCache: true).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
<system:String x:Key="flowlauncher_plugin_cmd_cmd_has_been_executed_times">此指令已執行了 {0} 次</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_cmd_execute_through_shell">執行指令</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_cmd_run_as_administrator">以系統管理員身分執行</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_cmd_copy">Copy the command</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_cmd_copy">複製命令</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_cmd_history">Only show number of most used commands:</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_cmd_command_not_found">Command not found: {0}</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_cmd_error_running_command">Error running the command: {0}</system:String>
|
||||
|
|
|
|||
|
|
@ -77,8 +77,8 @@
|
|||
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Надає команди, пов'язані з системою, наприклад, вимкнення, блокування, налаштування тощо.</system:String>
|
||||
|
||||
<!-- Theme Selector -->
|
||||
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">This theme supports two (light/dark) modes and Blur Transparent Background</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">This theme supports two (light/dark) modes</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">This theme supports Blur Transparent Background</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">Ця тема підтримує два режими (світлий / темний) та розмитий прозорий фон</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">Ця тема підтримує два (світлий / темний) режими</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">Ця тема підтримує розмитий прозорий фон</system:String>
|
||||
|
||||
</ResourceDictionary>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue