diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs
index 7bb8fe200..3d4433493 100644
--- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs
+++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs
@@ -31,6 +31,8 @@ namespace Flow.Launcher.Infrastructure.UserSettings
public string SelectPrevPageHotkey { get; set; } = $"PageDown";
public string OpenContextMenuHotkey { get; set; } = $"Ctrl+O";
public string SettingWindowHotkey { get; set; } = $"Ctrl+I";
+ public string CycleHistoryUpHotkey { get; set; } = $"{KeyConstant.Alt} + Up";
+ public string CycleHistoryDownHotkey { get; set; } = $"{KeyConstant.Alt} + Down";
public string Language
{
@@ -340,6 +342,10 @@ namespace Flow.Launcher.Infrastructure.UserSettings
list.Add(new(SelectNextPageHotkey, "SelectNextPageHotkey", () => SelectNextPageHotkey = ""));
if(!string.IsNullOrEmpty(SelectPrevPageHotkey))
list.Add(new(SelectPrevPageHotkey, "SelectPrevPageHotkey", () => SelectPrevPageHotkey = ""));
+ if (!string.IsNullOrEmpty(CycleHistoryUpHotkey))
+ list.Add(new(CycleHistoryUpHotkey, "CycleHistoryUpHotkey", () => CycleHistoryUpHotkey = ""));
+ if (!string.IsNullOrEmpty(CycleHistoryDownHotkey))
+ list.Add(new(CycleHistoryDownHotkey, "CycleHistoryDownHotkey", () => CycleHistoryDownHotkey = ""));
foreach (var customPluginHotkey in CustomPluginHotkeys)
{
diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml
index 2e6e973a7..da5ec63bf 100644
--- a/Flow.Launcher/MainWindow.xaml
+++ b/Flow.Launcher/MainWindow.xaml
@@ -197,6 +197,14 @@
Key="{Binding SelectPrevPageHotkey, Converter={StaticResource StringToKeyBindingConverter}, ConverterParameter='key'}"
Command="{Binding SelectPrevPageCommand}"
Modifiers="{Binding SelectPrevPageHotkey, Converter={StaticResource StringToKeyBindingConverter}, ConverterParameter='modifiers'}" />
+
+
diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml
index 119268d6b..4a563bc45 100644
--- a/Flow.Launcher/SettingWindow.xaml
+++ b/Flow.Launcher/SettingWindow.xaml
@@ -2810,6 +2810,26 @@
Type="Inside">
+
+
+
+
+
+
_userSelectedRecordStorage;
private readonly FlowLauncherJsonStorage _topMostRecordStorage;
private readonly History _history;
+ private int lasthistoryindex = 1;
private readonly UserSelectedRecord _userSelectedRecord;
private readonly TopMostRecord _topMostRecord;
@@ -83,6 +84,12 @@ namespace Flow.Launcher.ViewModel
case nameof(Settings.AutoCompleteHotkey):
OnPropertyChanged(nameof(AutoCompleteHotkey));
break;
+ case nameof(Settings.CycleHistoryUpHotkey):
+ OnPropertyChanged(nameof(CycleHistoryUpHotkey));
+ break;
+ case nameof(Settings.CycleHistoryDownHotkey):
+ OnPropertyChanged(nameof(CycleHistoryDownHotkey));
+ break;
case nameof(Settings.AutoCompleteHotkey2):
OnPropertyChanged(nameof(AutoCompleteHotkey2));
break;
@@ -256,6 +263,49 @@ namespace Flow.Launcher.ViewModel
}
}
+ [RelayCommand]
+ public void ReverseHistory()
+ {
+ if (_history.Items.Count > 0)
+ {
+ ChangeQueryText(_history.Items[_history.Items.Count - lasthistoryindex].Query.ToString());
+ if (lasthistoryindex < _history.Items.Count)
+ {
+ lasthistoryindex++;
+ }
+ }
+ }
+
+ [RelayCommand]
+ public void ForwardHistory()
+ {
+ if (_history.Items.Count > 0)
+ {
+ ChangeQueryText(_history.Items[_history.Items.Count - lasthistoryindex].Query.ToString());
+ if (lasthistoryindex > 1)
+ {
+ lasthistoryindex--;
+ }
+ }
+ }
+
+ [RelayCommand]
+ public void ReverseHistoryOnEmptyQuery()
+ {
+ var results = SelectedResults;
+ if (_history.Items.Count > 0
+ && _queryText == String.Empty
+ && !HistorySelected()
+ && !ContextMenuSelected())
+ {
+ ReverseHistory();
+ }
+ else
+ {
+ SelectedResults.SelectPrevResult();
+ }
+ }
+
[RelayCommand]
private void LoadContextMenu()
{
@@ -394,7 +444,20 @@ namespace Flow.Launcher.ViewModel
[RelayCommand]
private void SelectPrevItem()
{
- SelectedResults.SelectPrevResult();
+ var results = SelectedResults;
+ if (_history.Items.Count > 0
+ && _queryText == String.Empty
+ && !HistorySelected()
+ && !ContextMenuSelected())
+ {
+ lasthistoryindex = 1;
+ ReverseHistory();
+ }
+ else
+ {
+ SelectedResults.SelectPrevResult();
+ }
+
}
[RelayCommand]
@@ -690,6 +753,8 @@ namespace Flow.Launcher.ViewModel
public string SelectPrevPageHotkey => VerifyOrSetDefaultHotkey(Settings.SelectPrevPageHotkey, "");
public string OpenContextMenuHotkey => VerifyOrSetDefaultHotkey(Settings.OpenContextMenuHotkey, "Ctrl+O");
public string SettingWindowHotkey => VerifyOrSetDefaultHotkey(Settings.SettingWindowHotkey, "Ctrl+I");
+ public string CycleHistoryUpHotkey => VerifyOrSetDefaultHotkey(Settings.CycleHistoryUpHotkey, "Alt+Up");
+ public string CycleHistoryDownHotkey => VerifyOrSetDefaultHotkey(Settings.CycleHistoryDownHotkey, "Alt+Down");
public string Image => Constant.QueryTextBoxIconImagePath;
@@ -1116,6 +1181,7 @@ namespace Flow.Launcher.ViewModel
public async void Hide()
{
+ lasthistoryindex = 1;
// Trick for no delay
MainWindowOpacity = 0;
lastContextMenuResult = new Result();