/
githubmirror
/
PowerToys
Обзор
Документация
Войти
/
githubmirror
/
PowerToys
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.WindowsTerminal/Helpers/TerminalQuery.cs
79 строк
3 KB
Niels Laute
CmdPal: Enable dock pinning and per-profile icons for Windows Terminal (#46372)
23 апр 2026, 20:53
Не верифицирован
23 апр 2026, 20:53
656ea91
Код
Авторство
О чём код?
// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Security.Principal; using ManagedCommon; using Windows.Management.Deployment; // using Wox.Plugin.Logger; namespace Microsoft.CmdPal.Ext.WindowsTerminal.Helpers; public class TerminalQuery : ITerminalQuery { private readonly PackageManager _packageManager; // Static list of all Windows Terminal packages. private static ReadOnlyCollection<string> Packages => new List<string> { "Microsoft.WindowsTerminal", "Microsoft.WindowsTerminalPreview", "Microsoft.WindowsTerminalCanary", }.AsReadOnly(); private IEnumerable<TerminalPackage> Terminals => GetTerminals(); public TerminalQuery() { _packageManager = new PackageManager(); } public IEnumerable<TerminalProfile> GetProfiles() { var profiles = new List<TerminalProfile>(); if (!Terminals.Any()) { // TODO: what kind of logging should we do? // Log.Warn($"No Windows Terminal packages installed", typeof(TerminalQuery)); Logger.LogWarning("No Windows Terminal packages installed"); } foreach (var terminal in Terminals) { if (!File.Exists(terminal.SettingsPath)) { // TODO: what kind of logging should we do? // Log.Warn($"Failed to find settings file {terminal.SettingsPath}", typeof(TerminalQuery)); Logger.LogWarning($"Failed to find settings file {terminal.SettingsPath}"); continue; } var settingsJson = File.ReadAllText(terminal.SettingsPath); profiles.AddRange(TerminalHelper.ParseSettings(terminal, settingsJson)); } return profiles; } public IEnumerable<TerminalPackage> GetTerminals() { var user = WindowsIdentity.GetCurrent().User; var localAppDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); foreach (var p in _packageManager.FindPackagesForUser(user.Value).Where(p => Packages.Contains(p.Id.Name))) { var appListEntries = p.GetAppListEntries(); var aumid = appListEntries.Single().AppUserModelId; var version = new Version(p.Id.Version.Major, p.Id.Version.Minor, p.Id.Version.Build, p.Id.Version.Revision); var settingsPath = Path.Combine(localAppDataPath, "Packages", p.Id.FamilyName, "LocalState", "settings.json"); yield return new TerminalPackage(aumid, version, p.DisplayName, settingsPath, p.Logo.LocalPath, p.InstalledPath); } } }