Skip to content

Commit 4c772ca

Browse files
committed
feature: add hotkey Alt/⌥+Up to goto child of selected commit (#2104)
Signed-off-by: leo <longshuang@msn.cn>
1 parent 32fce4f commit 4c772ca

File tree

11 files changed

+70
-18
lines changed

11 files changed

+70
-18
lines changed

src/Resources/Locales/de_DE.axaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,6 @@ $1, $2, … Werte der Eingabe-Steuerelemente</x:String>
471471
<x:String x:Key="Text.GitLFS.Remote" xml:space="preserve">Remote:</x:String>
472472
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Verfolge alle ‚{0}‘ Dateien</x:String>
473473
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Verfolge alle *{0} Dateien</x:String>
474-
<x:String x:Key="Text.GotoParentSelector" xml:space="preserve">Vorgänger auswählen</x:String>
475474
<x:String x:Key="Text.Histories" xml:space="preserve">VERLAUF</x:String>
476475
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">AUTOR</x:String>
477476
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">AUTOR-ZEITPUNKT</x:String>

src/Resources/Locales/en_US.axaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,7 @@
468468
<x:String x:Key="Text.GitLFS.Remote" xml:space="preserve">Remote:</x:String>
469469
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Track files named '{0}'</x:String>
470470
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Track all *{0} files</x:String>
471-
<x:String x:Key="Text.GotoParentSelector" xml:space="preserve">Select Parent</x:String>
471+
<x:String x:Key="Text.GotoRevisionSelector" xml:space="preserve">Select Commit</x:String>
472472
<x:String x:Key="Text.Histories" xml:space="preserve">HISTORY</x:String>
473473
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">AUTHOR</x:String>
474474
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">AUTHOR TIME</x:String>
@@ -498,6 +498,7 @@
498498
<x:String x:Key="Text.Hotkeys.Repo.CommitWithAutoStage" xml:space="preserve">Stage all changes and commit</x:String>
499499
<x:String x:Key="Text.Hotkeys.Repo.Fetch" xml:space="preserve">Fetch, starts directly</x:String>
500500
<x:String x:Key="Text.Hotkeys.Repo.GoHome" xml:space="preserve">Dashboard mode (Default)</x:String>
501+
<x:String x:Key="Text.Hotkeys.Repo.GoToChild" xml:space="preserve">Goto child of selected commit</x:String>
501502
<x:String x:Key="Text.Hotkeys.Repo.GoToParent" xml:space="preserve">Goto parent of selected commit</x:String>
502503
<x:String x:Key="Text.Hotkeys.Repo.OpenCommandPalette" xml:space="preserve">Open command palette</x:String>
503504
<x:String x:Key="Text.Hotkeys.Repo.OpenSearchCommits" xml:space="preserve">Commit search mode</x:String>

src/Resources/Locales/es_ES.axaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,6 @@
472472
<x:String x:Key="Text.GitLFS.Remote" xml:space="preserve">Remoto:</x:String>
473473
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Seguir archivos llamados '{0}'</x:String>
474474
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Seguir todos los archivos *{0}</x:String>
475-
<x:String x:Key="Text.GotoParentSelector" xml:space="preserve">Seleccionar Padre</x:String>
476475
<x:String x:Key="Text.Histories" xml:space="preserve">Historias</x:String>
477476
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">AUTOR</x:String>
478477
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">HORA DEL AUTOR</x:String>

src/Resources/Locales/ru_RU.axaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,6 @@
472472
<x:String x:Key="Text.GitLFS.Remote" xml:space="preserve">Внешнее хранилище:</x:String>
473473
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">Отслеживать файлы с именем «{0}»</x:String>
474474
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">Отслеживать все файлы (*{0})</x:String>
475-
<x:String x:Key="Text.GotoParentSelector" xml:space="preserve">Выбрать родительский</x:String>
476475
<x:String x:Key="Text.Histories" xml:space="preserve">Истории</x:String>
477476
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">АВТОР</x:String>
478477
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">ВРЕМЯ АВТОРА</x:String>

src/Resources/Locales/zh_CN.axaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@
472472
<x:String x:Key="Text.GitLFS.Remote" xml:space="preserve">远程 :</x:String>
473473
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">跟踪名为'{0}'的文件</x:String>
474474
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">跟踪所有 *{0} 文件</x:String>
475-
<x:String x:Key="Text.GotoParentSelector" xml:space="preserve">选择前往的父提交</x:String>
475+
<x:String x:Key="Text.GotoRevisionSelector" xml:space="preserve">选择前往的提交</x:String>
476476
<x:String x:Key="Text.Histories" xml:space="preserve">历史记录</x:String>
477477
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">作者</x:String>
478478
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">修改时间</x:String>
@@ -502,6 +502,7 @@
502502
<x:String x:Key="Text.Hotkeys.Repo.CommitWithAutoStage" xml:space="preserve">自动暂存全部变更并提交</x:String>
503503
<x:String x:Key="Text.Hotkeys.Repo.Fetch" xml:space="preserve">拉取 (fetch) 远程变更</x:String>
504504
<x:String x:Key="Text.Hotkeys.Repo.GoHome" xml:space="preserve">切换左边栏为分支/标签等显示模式(默认)</x:String>
505+
<x:String x:Key="Text.Hotkeys.Repo.GoToChild" xml:space="preserve">前往选中提交的子提交</x:String>
505506
<x:String x:Key="Text.Hotkeys.Repo.GoToParent" xml:space="preserve">前往选中提交的父提交</x:String>
506507
<x:String x:Key="Text.Hotkeys.Repo.OpenCommandPalette" xml:space="preserve">打开快捷命令面板</x:String>
507508
<x:String x:Key="Text.Hotkeys.Repo.OpenSearchCommits" xml:space="preserve">切换左边栏为提交搜索模式</x:String>

src/Resources/Locales/zh_TW.axaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@
472472
<x:String x:Key="Text.GitLFS.Remote" xml:space="preserve">遠端存放庫:</x:String>
473473
<x:String x:Key="Text.GitLFS.Track" xml:space="preserve">追蹤名稱為「{0}」的檔案</x:String>
474474
<x:String x:Key="Text.GitLFS.TrackByExtension" xml:space="preserve">追蹤所有 *{0} 檔案</x:String>
475-
<x:String x:Key="Text.GotoParentSelector" xml:space="preserve">選取要前往的父提交</x:String>
475+
<x:String x:Key="Text.GotoRevisionSelector" xml:space="preserve">選取要前往的提交</x:String>
476476
<x:String x:Key="Text.Histories" xml:space="preserve">歷史記錄</x:String>
477477
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">作者</x:String>
478478
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">修改時間</x:String>
@@ -502,6 +502,7 @@
502502
<x:String x:Key="Text.Hotkeys.Repo.CommitWithAutoStage" xml:space="preserve">自動暫存全部變更並提交</x:String>
503503
<x:String x:Key="Text.Hotkeys.Repo.Fetch" xml:space="preserve">提取 (fetch) 遠端的變更</x:String>
504504
<x:String x:Key="Text.Hotkeys.Repo.GoHome" xml:space="preserve">切換左邊欄為分支/標籤等顯示模式 (預設)</x:String>
505+
<x:String x:Key="Text.Hotkeys.Repo.GoToChild" xml:space="preserve">前往所選提交的子提交</x:String>
505506
<x:String x:Key="Text.Hotkeys.Repo.GoToParent" xml:space="preserve">前往所選提交的父提交</x:String>
506507
<x:String x:Key="Text.Hotkeys.Repo.OpenCommandPalette" xml:space="preserve">開啟命令面板</x:String>
507508
<x:String x:Key="Text.Hotkeys.Repo.OpenSearchCommits" xml:space="preserve">切換左邊欄為歷史搜尋模式</x:String>
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
xmlns:v="using:SourceGit.Views"
77
xmlns:c="using:SourceGit.Converters"
88
mc:Ignorable="d" d:DesignWidth="520" d:DesignHeight="230"
9-
x:Class="SourceGit.Views.GotoParentSelector"
9+
x:Class="SourceGit.Views.GotoRevisionSelector"
1010
x:Name="ThisControl"
1111
Icon="/App.ico"
12-
Title="{DynamicResource Text.GotoParentSelector}"
12+
Title="{DynamicResource Text.GotoRevisionSelector}"
1313
Width="600" SizeToContent="Height"
1414
CanResize="False"
1515
WindowStartupLocation="CenterOwner">
@@ -27,7 +27,7 @@
2727
IsVisible="{OnPlatform True, macOS=False}"/>
2828

2929
<TextBlock Classes="bold"
30-
Text="{DynamicResource Text.GotoParentSelector}"
30+
Text="{DynamicResource Text.GotoRevisionSelector}"
3131
HorizontalAlignment="Center" VerticalAlignment="Center"
3232
IsHitTestVisible="False"/>
3333

@@ -37,7 +37,7 @@
3737
</Grid>
3838

3939
<ListBox Grid.Row="1"
40-
x:Name="ParentList"
40+
x:Name="RevisionList"
4141
Focusable="True"
4242
Margin="8" Padding="4"
4343
SelectionMode="AlwaysSelected"
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace SourceGit.Views
66
{
7-
public partial class GotoParentSelector : ChromelessWindow
7+
public partial class GotoRevisionSelector : ChromelessWindow
88
{
9-
public GotoParentSelector()
9+
public GotoRevisionSelector()
1010
{
1111
CloseOnESC = true;
1212
InitializeComponent();
@@ -15,7 +15,7 @@ public GotoParentSelector()
1515
protected override void OnLoaded(RoutedEventArgs e)
1616
{
1717
base.OnLoaded(e);
18-
ParentList.Focus();
18+
RevisionList.Focus();
1919
}
2020

2121
private void OnListKeyDown(object sender, KeyEventArgs e)

src/Views/Histories.axaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
Click="OnGotoParent"
3030
HotKey="Alt+Down"
3131
IsVisible="False"/>
32+
<Button Width="0" Height="0"
33+
Click="OnGotoChild"
34+
HotKey="Alt+Up"
35+
IsVisible="False"/>
3236

3337
<DataGrid x:Name="CommitListContainer"
3438
Classes="static_scrollbar"

src/Views/Histories.axaml.cs

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,53 @@ private async void OnGotoParent(object sender, RoutedEventArgs e)
194194
}
195195
else if (parents.Count > 1 && TopLevel.GetTopLevel(this) is Window owner)
196196
{
197-
var dialog = new GotoParentSelector();
198-
dialog.ParentList.ItemsSource = parents;
197+
var dialog = new GotoRevisionSelector();
198+
dialog.RevisionList.ItemsSource = parents;
199+
200+
var c = await dialog.ShowDialog<Models.Commit>(owner);
201+
if (c != null)
202+
vm.NavigateTo(c.SHA);
203+
}
204+
205+
e.Handled = true;
206+
}
207+
208+
private async void OnGotoChild(object sender, RoutedEventArgs e)
209+
{
210+
if (DataContext is not ViewModels.Histories vm)
211+
return;
212+
213+
if (!CommitListContainer.IsKeyboardFocusWithin)
214+
return;
215+
216+
if (CommitListContainer.SelectedItems is not { Count: 1 } selected)
217+
return;
218+
219+
if (selected[0] is not Models.Commit { Parents.Count: > 0 } commit)
220+
return;
221+
222+
var children = new List<Models.Commit>();
223+
var sha = commit.SHA;
224+
foreach (var c in vm.Commits)
225+
{
226+
foreach (var p in c.Parents)
227+
{
228+
if (sha.StartsWith(p, StringComparison.Ordinal))
229+
children.Add(c);
230+
}
231+
232+
if (sha.Equals(c.SHA, StringComparison.Ordinal))
233+
break;
234+
}
235+
236+
if (children.Count == 1)
237+
{
238+
vm.NavigateTo(children[0].SHA);
239+
}
240+
else if (children.Count > 1 && TopLevel.GetTopLevel(this) is Window owner)
241+
{
242+
var dialog = new GotoRevisionSelector();
243+
dialog.RevisionList.ItemsSource = children;
199244

200245
var c = await dialog.ShowDialog<Models.Commit>(owner);
201246
if (c != null)

0 commit comments

Comments
 (0)