Skip to content

Commit b83fffa

Browse files
committed
enhance: support tools installed via flatpak
1 parent 2b7bd2e commit b83fffa

File tree

4 files changed

+35
-11
lines changed

4 files changed

+35
-11
lines changed

src/Models/ExternalMerger.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ static ExternalMerger()
7070
new ExternalMerger(5, "meld", "Meld", "/usr/bin/meld", "\"$LOCAL\" \"$BASE\" \"$REMOTE\" --output \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""),
7171
new ExternalMerger(6, "codium", "VSCodium", "/usr/share/codium/bin/codium", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""),
7272
new ExternalMerger(7, "p4merge", "P4Merge", "/usr/local/bin/p4merge", "-tw 4 \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"", "-tw 4 \"$LOCAL\" \"$REMOTE\""),
73+
new ExternalMerger(8, "meld", "Meld (Flatpak)", "/usr/bin/flatpak", "run org.gnome.meld \"$LOCAL\" \"$BASE\" \"$REMOTE\" --output \"$MERGED\"", "run org.gnome.meld \"$LOCAL\" \"$REMOTE\""),
7374
};
7475
}
7576
else

src/Models/ExternalTool.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -124,34 +124,34 @@ public void TryAdd(string name, string icon, Func<string> finder, Func<string, s
124124
}
125125
}
126126

127-
public void VSCode(Func<string> platformFinder)
127+
public void VSCode(Func<string> platformFinder, Func<string, string> execArgsGenerator = null)
128128
{
129-
TryAdd("Visual Studio Code", "vscode", platformFinder);
129+
TryAdd("Visual Studio Code", "vscode", platformFinder, execArgsGenerator);
130130
}
131131

132-
public void VSCodeInsiders(Func<string> platformFinder)
132+
public void VSCodeInsiders(Func<string> platformFinder, Func<string, string> execArgsGenerator = null)
133133
{
134-
TryAdd("Visual Studio Code - Insiders", "vscode_insiders", platformFinder);
134+
TryAdd("Visual Studio Code - Insiders", "vscode_insiders", platformFinder, execArgsGenerator);
135135
}
136136

137-
public void VSCodium(Func<string> platformFinder)
137+
public void VSCodium(Func<string> platformFinder, Func<string, string> execArgsGenerator = null)
138138
{
139-
TryAdd("VSCodium", "codium", platformFinder);
139+
TryAdd("VSCodium", "codium", platformFinder, execArgsGenerator);
140140
}
141141

142142
public void Fleet(Func<string> platformFinder)
143143
{
144144
TryAdd("Fleet", "fleet", platformFinder);
145145
}
146146

147-
public void SublimeText(Func<string> platformFinder)
147+
public void SublimeText(Func<string> platformFinder, Func<string, string> execArgsGenerator = null)
148148
{
149-
TryAdd("Sublime Text", "sublime_text", platformFinder);
149+
TryAdd("Sublime Text", "sublime_text", platformFinder, execArgsGenerator);
150150
}
151151

152-
public void Zed(Func<string> platformFinder)
152+
public void Zed(Func<string> platformFinder, Func<string, string> execArgsGenerator = null)
153153
{
154-
TryAdd("Zed", "zed", platformFinder);
154+
TryAdd("Zed", "zed", platformFinder, execArgsGenerator);
155155
}
156156

157157
public void FindJetBrainsFromToolbox(Func<string> platformFinder)

src/Native/Linux.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ public string FindTerminal(Models.ShellOrTerminal shell)
5656
finder.FindJetBrainsFromToolbox(() => $"{Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)}/JetBrains/Toolbox");
5757
finder.SublimeText(() => FindExecutable("subl"));
5858
finder.Zed(() => FindExecutable("zeditor"));
59+
60+
var flatpakPath = FindExecutable("flatpak");
61+
TryAddFlatpakApp(finder.VSCode, flatpakPath,"com.visualstudio.code");
62+
TryAddFlatpakApp(finder.VSCodeInsiders, flatpakPath,"com.vscodium.codium-insiders");
63+
TryAddFlatpakApp(finder.VSCodium, flatpakPath,"com.vscodium.codium");
64+
TryAddFlatpakApp(finder.SublimeText, flatpakPath,"com.sublimetext.three");
65+
TryAddFlatpakApp(finder.Zed, flatpakPath,"dev.zed.Zed");
66+
5967
return finder.Founded;
6068
}
6169

@@ -136,5 +144,20 @@ private string FindJetBrainsFleet()
136144
var path = $"{Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)}/JetBrains/Toolbox/apps/fleet/bin/Fleet";
137145
return File.Exists(path) ? path : FindExecutable("fleet");
138146
}
147+
148+
private static void TryAddFlatpakApp(Action<Func<string>,Func<string,string>> adder, string flatpakPath, string appId)
149+
{
150+
if (flatpakPath != null && IsFlatpakAppInstalled(flatpakPath, appId))
151+
adder(() => flatpakPath, repo => $"run {appId} \"{repo}\"");
152+
}
153+
154+
private static bool IsFlatpakAppInstalled(string flatpakPath, string appId)
155+
{
156+
using var proc = Process.Start(flatpakPath, "info " + appId);
157+
if (proc == null)
158+
return false;
159+
proc.WaitForExit();
160+
return proc.ExitCode == 0;
161+
}
139162
}
140163
}

src/ViewModels/Repository.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -702,7 +702,7 @@ public ContextMenu CreateContextMenuForExternalTools()
702702
{
703703
menu.Items.Add(new MenuItem() { Header = "-" });
704704

705-
foreach (var tool in Native.OS.ExternalTools)
705+
foreach (var tool in tools)
706706
{
707707
var dupTool = tool;
708708

0 commit comments

Comments
 (0)