8000 feature: supports to visit remote repository in web browser (#1265) · sourcegit-scm/sourcegit@93a5d7b · GitHub
[go: up one dir, main page]

Skip to content

Commit 93a5d7b

Browse files
committed
feature: supports to visit remote repository in web browser (#1265)
- combine `Open in File Manager`, `Open in Terminal` and `Open with external editor` into one dropdown menu - add `Visit $REMOTE in Browser` Signed-off-by: leo <longshuang@msn.cn>
1 parent e4e2f7b commit 93a5d7b

File tree

5 files changed

+72
-35
lines changed

5 files changed

+72
-35
lines changed

src/Resources/Locales/en_US.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -626,6 +626,7 @@
626626
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">Open in Terminal</x:String>
627627
<x:String x:Key="Text.Repository.UseRelativeTimeInHistories" xml:space="preserve">Use relative time in histories</x:String>
628628
<x:String x:Key="Text.Repository.ViewLogs" xml:space="preserve">View Logs</x:String>
629+
<x:String x:Key="Text.Repository.Visit" xml:space="preserve">Visit '{0}' in Browser</x:String>
629630
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">WORKTREES</x:String>
630631
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">ADD WORKTREE</x:String>
631632
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">PRUNE</x:String>

src/Resources/Locales/zh_CN.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,7 @@
630630
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">在终端中打开</x:String>
631631
<x:String x:Key="Text.Repository.UseRelativeTimeInHistories" xml:space="preserve">在提交列表中使用相对时间</x:String>
632632
<x:String x:Key="Text.Repository.ViewLogs" xml:space="preserve">查看命令日志</x:String>
633+
<x:String x:Key="Text.Repository.Visit" xml:space="preserve">访问远程仓库 '{0}'</x:String>
633634
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">工作树列表</x:String>
634635
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">新增工作树</x:String>
635636
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">清理</x:String>

src/Resources/Locales/zh_TW.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,7 @@
630630
<x:String x:Key="Text.Repository.Terminal" xml:space="preserve">在終端機中開啟</x:String>
631631
<x:String x:Key="Text.Repository.UseRelativeTimeInHistories" xml:space="preserve">在提交列表中使用相對時間</x:String>
632632
<x:String x:Key="Text.Repository.ViewLogs" xml:space="preserve">檢視 Git 指令記錄</x:String>
633+
<x:String x:Key="Text.Repository.Visit" xml:space="preserve">檢視遠端存放庫 '{0}'</x:String>
633634
<x:String x:Key="Text.Repository.Worktrees" xml:space="preserve">工作區列表</x:String>
634635
<x:String x:Key="Text.Repository.Worktrees.Add" xml:space="preserve">新增工作區</x:String>
635636
<x:String x:Key="Text.Repository.Worktrees.Prune" xml:space="preserve">清理</x:String>

src/ViewModels/Repository.cs

Lines changed: 68 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -583,44 +583,86 @@ public void RefreshAll()
583583
Task.Run(RefreshStashes);
584584
}
585585

586-
public void OpenInFileManager()
586+
public ContextMenu CreateContextMenuForExternalTools()
587587
{
588-
Native.OS.OpenInFileManager(_fullpath);
589-
}
588+
var menu = new ContextMenu();
589+
menu.Placement = PlacementMode.BottomEdgeAlignedLeft;
590590

591-
public void OpenInTerminal()
592-
{
593-
Native.OS.OpenTerminal(_fullpath);
594-
}
591+
RenderOptions.SetBitmapInterpolationMode(menu, BitmapInterpolationMode.HighQuality);
592+
RenderOptions.SetEdgeMode(menu, EdgeMode.Antialias);
593+
RenderOptions.SetTextRenderingMode(menu, TextRenderingMode.Antialias);
594+
595+
var explore = new MenuItem();
596+
explore.Header = App.Text("Repository.Explore");
597+
explore.Icon = App.CreateMenuIcon("Icons.Explore");
598+
explore.Click += (_, e) =>
599+
{
600+
Native.OS.OpenInFileManager(_fullpath);
601+
e.Handled = true;
602+
};
603+
604+
var terminal = new MenuItem();
605+
terminal.Header = App.Text("Repository.Terminal");
606+
terminal.Icon = App.CreateMenuIcon("Icons.Terminal");
607+
terminal.Click += (_, e) =>
608+
{
609+
Native.OS.OpenTerminal(_fullpath);
610+
e.Handled = true;
611+
};
612+
613+
menu.Items.Add(explore);
614+
menu.Items.Add(terminal);
595615

596-
public ContextMenu CreateContextMenuForExternalTools()
597-
{
598616
var tools = Native.OS.ExternalTools;
599-
if (tools.Count == 0)
617+
if (tools.Count > 0)
600618
{
601-
App.RaiseException(_fullpath, "No available external editors found!");
602-
return null;
619+
menu.Items.Add(new MenuItem() { Header = "-" });
620+
621+
foreach (var tool in Native.OS.ExternalTools)
622+
{
623+
var dupTool = tool;
624+
625+
var item = new MenuItem();
626+
item.Header = App.Text("Repository.OpenIn", dupTool.Name);
627+
item.Icon = new Image { Width = 16, Height = 16, Source = dupTool.IconImage };
628+
item.Click += (_, e) =>
629+
{
630+
dupTool.Open(_fullpath);
631+
e.Handled = true;
632+
};
633+
634+
menu.Items.Add(item);
635+
}
603636
}
604637

605-
var menu = new ContextMenu();
606-
menu.Placement = PlacementMode.BottomEdgeAlignedLeft;
607-
RenderOptions.SetBitmapInterpolationMode(menu, BitmapInterpolationMode.HighQuality);
638+
var urls = new Dictionary<string, string>();
639+
foreach (var r in _remotes)
640+
{
641+
if (r.TryGetVisitURL(out var visit))
642+
urls.Add(r.Name, visit);
643+
}
608644

609-
foreach (var tool in tools)
645+
if (urls.Count > 0)
610646
{
611-
var dupTool = tool;
647+
menu.Items.Add(new MenuItem() { Header = "-" });
612648

613-
var item = new MenuItem();
614-
item.Header = App.Text("Repository.OpenIn", dupTool.Name);
615-
item.Icon = new Image { Width = 16, Height = 16, Source = dupTool.IconImage };
616-
item.Click += (_, e) =>
649+
foreach (var url in urls)
617650
{
618-
dupTool.Open(_fullpath);
619-
e.Handled = true;
620-
};
651+
var name = url.Key;
652+
var addr = url.Value;
621653

622-
menu.Items.Add(item);
623-
}
654+
var item = new MenuItem();
655+
item.Header = App.Text("Repository.Visit", name);
656+
item.Icon = App.CreateMenuIcon("Icons.Remotes");
657+
item.Click += (_, e) =>
658+
{
659+
Native.OS.OpenBrowser(addr);
660+
e.Handled = true;
661+
};
662+
663+
menu.Items.Add(item);
664+
}
665+
}
624666

625667
return menu;
626668
}

src/Views/RepositoryToolbar.axaml

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
< AB40 button class="Button Button--iconOnly Button--invisible ExpandableHunkHeaderDiffLine-module__expand-button-line--rnQN5 ExpandableHunkHeaderDiffLine-module__expand-button-unified--j86KQ" aria-label="Expand file up from line 9" data-direction="up" aria-hidden="true" tabindex="-1">
@@ -9,16 +9,8 @@
99
x:DataType="vm:Repository">
1010
<Grid ColumnDefinitions="*,Auto,*">
1111
<StackPanel Grid.Column="0" Orientation="Horizontal" Margin="4,0,0,0">
12-
<Button Classes="icon_button" Width="32" Command="{Binding OpenInFileManager}" ToolTip.Tip="{DynamicResource Text.Repository.Explore}">
13-
<Path Width="14" Height="14" Data="{StaticResource Icons.Explore}" Margin="0,2,0,0"/>
14-
</Button>
15-
1612
<Button Classes="icon_button" Width="32" Click="OpenWithExternalTools" IsVisible="{Binding !IsBare}" ToolTip.Tip="{DynamicResource Text.Repository.OpenWithExternalTools}">
17-
<Path Width="13" Height="13" Data="{StaticResource Icons.OpenWith}"/>
18-
</Button>
19-
20-
<Button Classes="icon_button" Width="32" Command="{Binding OpenInTerminal}" ToolTip.Tip="{DynamicResource Text.Repository.Terminal}">
21-
<Path Width="13" Height="13" Data="{StaticResource Icons.Terminal}"/>
13+
<Path Width="14" Height="14" Data="{StaticResource Icons.Explore}" Margin="0,2,0,0"/>
2214
</Button>
2315

2416
<Button Classes="icon_button" Width="32" Click="OpenGitLogs" ToolTip.Tip="{DynamicResource Text.Repository.ViewLogs}">

0 commit comments

Comments
 (0)
0