Skip to content

Commit acb9596

Browse files
authored
Use Windows Terminal as initial default if present (#6623)
1 parent d1f2cf1 commit acb9596

File tree

2 files changed

+45
-35
lines changed

2 files changed

+45
-35
lines changed

Files/Controllers/TerminalController.cs

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
using Files.DataModels;
22
using Files.Enums;
3+
using Files.Extensions;
34
using Files.Filesystem;
45
using Files.Helpers;
56
using Newtonsoft.Json;
67
using System;
7-
using System.Diagnostics;
8+
using System.Collections.Generic;
89
using System.IO;
10+
using System.Linq;
911
using System.Threading.Tasks;
1012
using Windows.ApplicationModel.Core;
1113
using Windows.Storage;
@@ -138,64 +140,64 @@ private async Task<TerminalFileModel> GetDefaultTerminalFileModel()
138140
{
139141
StorageFile defaultFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri(defaultTerminalPath));
140142
var defaultContent = await FileIO.ReadTextAsync(defaultFile);
141-
return JsonConvert.DeserializeObject<TerminalFileModel>(defaultContent);
143+
var model = JsonConvert.DeserializeObject<TerminalFileModel>(defaultContent);
144+
await GetInstalledTerminalsAsync(model);
145+
model.ResetToDefaultTerminal();
146+
return model;
142147
}
143148
catch
144149
{
145150
var model = new TerminalFileModel();
146-
model.Terminals.Add(new Terminal()
147-
{
148-
Name = "CMD",
149-
Path = "cmd.exe",
150-
Arguments = "",
151-
Icon = ""
152-
});
151+
await GetInstalledTerminalsAsync(model);
153152
model.ResetToDefaultTerminal();
154153
return model;
155154
}
156155
}
157156

158-
public async Task GetInstalledTerminalsAsync()
157+
private async Task GetInstalledTerminalsAsync()
158+
{
159+
await GetInstalledTerminalsAsync(Model);
160+
SaveModel();
161+
}
162+
163+
private async Task GetInstalledTerminalsAsync(TerminalFileModel model)
159164
{
160-
var windowsTerminal = new Terminal()
165+
var terminalDefs = new Dictionary<Terminal, bool>();
166+
167+
terminalDefs.Add(new Terminal()
161168
{
162169
Name = "Windows Terminal",
163170
Path = "wt.exe",
164171
Arguments = "-d .",
165172
Icon = ""
166-
};
173+
}, await IsWindowsTerminalBuildInstalled());
167174

168-
var fluentTerminal = new Terminal()
175+
terminalDefs.Add(new Terminal()
169176
{
170177
Name = "Fluent Terminal",
171178
Path = "flute.exe",
172179
Arguments = "",
173180
Icon = ""
174-
};
181+
}, await PackageHelper.IsAppInstalledAsync("53621FSApps.FluentTerminal_87x1pks76srcp"));
175182

176-
bool isWindowsTerminalInstalled = await PackageHelper.IsAppInstalledAsync("Microsoft.WindowsTerminal_8wekyb3d8bbwe");
177-
bool isWindowsTerminalPreviewInstalled = await PackageHelper.IsAppInstalledAsync("Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe");
178-
bool isFluentTerminalInstalled = await PackageHelper.IsAppInstalledAsync("53621FSApps.FluentTerminal_87x1pks76srcp");
179-
180-
if (isWindowsTerminalInstalled || isWindowsTerminalPreviewInstalled)
181-
{
182-
Model.AddTerminal(windowsTerminal);
183-
}
184-
else
183+
terminalDefs.Add(new Terminal()
185184
{
186-
Model.RemoveTerminal(windowsTerminal);
187-
}
185+
Name = "CMD",
186+
Path = "cmd.exe",
187+
Arguments = "",
188+
Icon = ""
189+
}, true); // CMD will always be present (for now at least)
188190

189-
if (isFluentTerminalInstalled)
190-
{
191-
Model.AddTerminal(fluentTerminal);
192-
}
193-
else
194-
{
195-
Model.RemoveTerminal(fluentTerminal);
196-
}
191+
terminalDefs.Where(x => x.Value).ForEach(x => model.AddTerminal(x.Key));
192+
terminalDefs.Where(x => !x.Value).ForEach(x => model.RemoveTerminal(x.Key));
193+
}
197194

198-
SaveModel();
195+
public async static Task<bool> IsWindowsTerminalBuildInstalled()
196+
{
197+
bool isWindowsTerminalInstalled = await PackageHelper.IsAppInstalledAsync("Microsoft.WindowsTerminal_8wekyb3d8bbwe");
198+
bool isWindowsTerminalPreviewInstalled = await PackageHelper.IsAppInstalledAsync("Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe");
199+
200+
return isWindowsTerminalPreviewInstalled || isWindowsTerminalInstalled;
199201
}
200202

201203
public void SaveModel()

Files/DataModels/TerminalFileModel.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System;
33
using System.Collections.Generic;
44
using System.Linq;
5+
using Files.Controllers;
56

67
namespace Files.DataModels
78
{
@@ -33,7 +34,14 @@ public Terminal GetDefaultTerminal()
3334

3435
public void ResetToDefaultTerminal()
3536
{
36-
DefaultTerminalName = "cmd";
37+
if (Terminals.Any(x => x.Name == "Windows Terminal"))
38+
{
39+
DefaultTerminalName = "Windows Terminal";
40+
}
41+
else
42+
{
43+
DefaultTerminalName = "CMD";
44+
}
3745
}
3846

3947
public void AddTerminal(Terminal terminal)

0 commit comments

Comments
 (0)