Skip to content

Commit cf819b8

Browse files
committed
enhance: support tools installed via flatpak
1 parent aec5cab commit cf819b8

File tree

1 file changed

+45
-6
lines changed

1 file changed

+45
-6
lines changed

src/Native/Linux.cs

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,14 @@ public string FindTerminal(Models.ShellOrTerminal shell)
4949
public List<Models.ExternalTool> FindExternalTools()
5050
{
5151
var finder = new Models.ExternalToolsFinder();
52-
finder.VSCode(() => FindExecutable("code"));
53-
finder.VSCodeInsiders(() => FindExecutable("code-insiders"));
54-
finder.VSCodium(() => FindExecutable("codium"));
52+
finder.VSCode(() => FindExecutable("code", "com.visualstudio.code"));
53+
finder.VSCodeInsiders(() => FindExecutable("code-insiders", "com.vscodium.codium-insiders"));
54+
finder.VSCodium(() => FindExecutable("codium", "com.vscodium.codium"));
5555
finder.Fleet(FindJetBrainsFleet);
5656
finder.FindJetBrainsFromToolbox(() => $"{Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)}/JetBrains/Toolbox");
57-
finder.SublimeText(() => FindExecutable("subl"));
58-
finder.Zed(() => FindExecutable("zeditor"));
57+
FindJetBrainsFromFlatpak(finder);
58+
finder.SublimeText(() => FindExecutable("subl", "com.sublimetext.three"));
59+
finder.Zed(() => FindExecutable("zeditor", "dev.zed.Zed"));
5960
return finder.Founded;
6061
}
6162

@@ -117,7 +118,7 @@ public void OpenWithDefaultEditor(string file)
117118
}
118119
}
119120

120-
private string FindExecutable(string filename)
121+
private string FindExecutable(string filename, string flatpakAppId = null)
121122
{
122123
var pathVariable = Environment.GetEnvironmentVariable("PATH") ?? string.Empty;
123124
var paths = pathVariable.Split(Path.PathSeparator, StringSplitOptions.RemoveEmptyEntries);
@@ -128,6 +129,16 @@ private string FindExecutable(string filename)
128129
return test;
129130
}
130131

132+
if (flatpakAppId != null)
133+
{
134+
foreach (var path in new[] { "/var/lib", Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) })
135+
{
136+
var test = Path.Combine(path, "flatpak/exports/bin", flatpakAppId);
137+
if (File.Exists(test))
138+
return test;
139+
}
140+
}
141+
131142
return string.Empty;
132143
}
133144

@@ -136,5 +147,33 @@ private string FindJetBrainsFleet()
136147
var path = $"{Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)}/JetBrains/Toolbox/apps/fleet/bin/Fleet";
137148
return File.Exists(path) ? path : FindExecutable("fleet");
138149
}
150+
151+
private static void FindJetBrainsFromFlatpak(Models.ExternalToolsFinder finder)
152+
{
153+
foreach (var basePath in new[] { "/var/lib", Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) })
154+
{
155+
var binPath = Path.Combine(basePath, "flatpak/exports/bin");
156+
if (Directory.Exists(binPath))
157+
{
158+
foreach (var file in Directory.GetFiles(binPath, "com.jetbrains.*"))
159+
{
160+
var fileName = Path.GetFileName(file);
161+
var appName = fileName[14..].Replace("-", " ");
162+
var icon = new string(Array.FindAll(fileName.ToCharArray(), char.IsUpper));
163+
if (icon.Length > 2)
164+
icon = icon[..2];
165+
icon = icon switch
166+
{
167+
"DG" => "DB", // DataGrip
168+
"GL" => "GO", // GoLand
169+
"IJ" => "JB", // IntelliJ
170+
"R" => "RD", // Rider
171+
_ => icon
172+
};
173+
finder.Founded.Add(new Models.ExternalTool(appName, "JetBrains/" + icon, file));
174+
}
175+
}
176+
}
177+
}
139178
}
140179
}

0 commit comments

Comments
 (0)