├── .gitignore ├── Community.PowerToys.Run.Plugin.HttpStatusCodes.UnitTests ├── Community.PowerToys.Run.Plugin.HttpStatusCodes.UnitTests.csproj └── MainTests.cs ├── Community.PowerToys.Run.Plugin.HttpStatusCodes ├── Community.PowerToys.Run.Plugin.HttpStatusCodes.csproj ├── ErrorHandler.cs ├── HttpStatusEntry.cs ├── Images │ ├── httpstatuscodes.dark.png │ └── httpstatuscodes.light.png ├── Main.cs ├── PluginSettings.cs └── plugin.json ├── HttpStatusCodes.sln ├── LICENSE ├── README.md └── httpstatuscodes.gif /.gitignore: -------------------------------------------------------------------------------- 1 | # Binaries for programs and libraries 2 | bin/ 3 | obj/ 4 | out/ 5 | 6 | # NuGet Packages Directory 7 | packages/ 8 | !packages/README.txt 9 | 10 | # MSBuild Temporary Files 11 | *.suo 12 | *.user 13 | *.vspscc 14 | *.vssscc 15 | *.csproj.user 16 | *.csproj.vspscc 17 | *.vbproj.user 18 | *.vbproj.vspscc 19 | *.fsproj.user 20 | *.fsproj.vspscc 21 | *.vcxproj.user 22 | *.vcxproj.vspscc 23 | 24 | # Build Artifacts 25 | *.dll 26 | *.exe 27 | *.pdb 28 | *.mdb 29 | *.dll.config 30 | *.exe.config 31 | *.log 32 | *.bak 33 | *.tmp 34 | 35 | # MSTest Test Results 36 | TestResults/ 37 | *_TestResults/ 38 | 39 | # NUnit Test Results 40 | *.TestLog.xml 41 | *.TestResult.xml 42 | 43 | # Visual Studio Cache/Generated files 44 | .vs/ 45 | *.cache 46 | *.lock.wpd 47 | *.mdf 48 | *.ldf 49 | *.sqlite3 50 | 51 | # Roslyn Compiler Generated Files 52 | *.rsproj 53 | *.rsp 54 | 55 | # Visual Studio Code 56 | .vscode/ 57 | *.code-workspace 58 | 59 | # JetBrains Rider 60 | .Rider/ 61 | *.idea/ 62 | *.sln.iml -------------------------------------------------------------------------------- /Community.PowerToys.Run.Plugin.HttpStatusCodes.UnitTests/Community.PowerToys.Run.Plugin.HttpStatusCodes.UnitTests.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net8.0-windows 5 | x64;ARM64 6 | $(Platform) 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Community.PowerToys.Run.Plugin.HttpStatusCodes.UnitTests/MainTests.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.VisualStudio.TestTools.UnitTesting; 2 | using System.Linq; 3 | using Wox.Plugin; 4 | 5 | namespace Community.PowerToys.Run.Plugin.HttpStatusCodes.UnitTests 6 | { 7 | [TestClass] 8 | public class MainTests 9 | { 10 | private Main main; 11 | 12 | [TestInitialize] 13 | public void TestInitialize() 14 | { 15 | main = new Main(); 16 | } 17 | 18 | [TestMethod] 19 | public void Query_should_return_results() 20 | { 21 | var results = main.Query(new("search")); 22 | 23 | Assert.IsNotNull(results.First()); 24 | } 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Community.PowerToys.Run.Plugin.HttpStatusCodes/Community.PowerToys.Run.Plugin.HttpStatusCodes.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net8.0-windows 5 | true 6 | x64;ARM64 7 | $(Platform) 8 | enable 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | PreserveNewest 18 | 19 | 20 | PreserveNewest 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Community.PowerToys.Run.Plugin.HttpStatusCodes/ErrorHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Wox.Plugin; 4 | using Wox.Plugin.Logger; 5 | using BrowserInfo = Wox.Plugin.Common.DefaultBrowserInfo; 6 | 7 | namespace Community.PowerToys.Run.Plugin.HttpStatusCodes; 8 | 9 | internal static class ErrorHandler 10 | { 11 | internal static List OnError(string icon, string queryInput, string errorMessage, Exception exception = default) 12 | { 13 | Log.Error($"Failed to calculate <{queryInput}>: {errorMessage}", typeof(HttpStatusCodes.Main)); 14 | 15 | return [ CreateErrorResult(errorMessage, icon) ]; 16 | } 17 | 18 | internal static void OnPluginError() 19 | { 20 | var errorMessage = $"Failed to open {BrowserInfo.Name ?? BrowserInfo.MSEdgeName}"; 21 | Log.Error(errorMessage, typeof(HttpStatusCodes.Main)); 22 | } 23 | 24 | private static Result CreateErrorResult(string errorMessage, string iconPath) 25 | { 26 | return new Result 27 | { 28 | Title = "Search failed", 29 | SubTitle = errorMessage, 30 | IcoPath = iconPath, 31 | Score = 300, 32 | }; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Community.PowerToys.Run.Plugin.HttpStatusCodes/HttpStatusEntry.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Community.PowerToys.Run.Plugin.HttpStatusCodes; 4 | 5 | public class HttpStatusEntry(string code, string reasonPhrase, string oneLiner, string definedIn) 6 | { 7 | public string Code { get; } = code; 8 | public string ReasonPhrase { get; } = reasonPhrase; 9 | public string OneLiner { get; } = oneLiner; 10 | public string DefinedIn { get; } = definedIn; 11 | } 12 | 13 | public static class HttpStatusCatalog 14 | { 15 | private static readonly Dictionary Entries = new() 16 | { 17 | {"100", new HttpStatusEntry("100", "Continue", "The server has received the request headers, and that the client should proceed to send the request body", "http://tools.ietf.org/html/rfc7231#section-6.2.1")}, 18 | {"101", new HttpStatusEntry("101", "Switching Protocols", "The requester has asked the server to switch protocols and the server is acknowledging that it will do so", "http://tools.ietf.org/html/rfc7231#section-6.2.2")}, 19 | {"200", new HttpStatusEntry("200", "OK", "Standard response for successful HTTP requests", "http://tools.ietf.org/html/rfc7231#section-6.3.1")}, 20 | {"201", new HttpStatusEntry("201", "Created", "The request has been fulfilled and resulted in a new resource being created", "http://tools.ietf.org/html/rfc7231#section-6.3.2")}, 21 | {"204", new HttpStatusEntry("204", "No Content", "The server has successfully fulfilled the request and that there is no additional content to send in the response payload body", "http://tools.ietf.org/html/rfc7231#section-6.3.5")}, 22 | {"206", new HttpStatusEntry("206", "Partial Content", "The server is successfully fulfilling a range request for the target resource", "http://tools.ietf.org/html/rfc7233#section-4.1")}, 23 | {"301", new HttpStatusEntry("301", "Moved Permanently", "The resource has been moved permanently to a different URI", "http://tools.ietf.org/html/rfc7231#section-6.4.2")}, 24 | {"302", new HttpStatusEntry("302", "Found", "The server is redirecting to a different URI, as indicated by the Location header", "http://tools.ietf.org/html/rfc7231#section-6.4.3")}, 25 | {"303", new HttpStatusEntry("303", "See Other", "The server is redirecting to a different URI which accesses the same resource", "http://tools.ietf.org/html/rfc7231#section-6.4.4")}, 26 | {"304", new HttpStatusEntry("304", "Not Modified", "There is no need to retransmit the resource, since the client still has a previously-downloaded copy", "http://tools.ietf.org/html/rfc7232#section-4.1")}, 27 | {"305", new HttpStatusEntry("305", "Use Proxy", "The requested resource is only available through a proxy, whose address is provided in the response", "http://tools.ietf.org/html/rfc7231#section-6.4.5")}, 28 | {"307", new HttpStatusEntry("307", "Temporary Redirect", "Subsequent requests should use the specified proxy", "http://tools.ietf.org/html/rfc7231#section-6.4.7")}, 29 | {"400", new HttpStatusEntry("400", "Bad Request", "The request could not be understood by the server due to malformed syntax", "http://tools.ietf.org/html/rfc7231#section-6.5.1")}, 30 | {"401", new HttpStatusEntry("401", "Unauthorized", "Authentication is required and has failed or has not yet been provided", "http://tools.ietf.org/html/rfc7235#section-3.1")}, 31 | {"402", new HttpStatusEntry("402", "Payment Required", "The 402 (Payment Required) status code is reserved for future use", "http://tools.ietf.org/html/rfc7231#section-6.5.2")}, 32 | {"403", new HttpStatusEntry("403", "Forbidden", "The server understood the request but refuses to authorize it", "http://tools.ietf.org/html/rfc7231#section-6.5.3")}, 33 | {"404", new HttpStatusEntry("404", "Not Found", "The requested resource could not be found but may be available again in the future", "http://tools.ietf.org/html/rfc7231#section-6.5.4")}, 34 | {"405", new HttpStatusEntry("405", "Method Not Allowed", "A request was made of a resource using a request method not supported by that resource", "http://tools.ietf.org/html/rfc7231#section-6.5.5")}, 35 | {"406", new HttpStatusEntry("406", "Not Acceptable", "The requested resource is only capable of generating content not acceptable according to the Accept headers sent in the request", "http://tools.ietf.org/html/rfc7231#section-6.5.6")}, 36 | {"407", new HttpStatusEntry("407", "Proxy Authentication Required", "The client must first authenticate itself with the proxy", "http://tools.ietf.org/html/rfc7235#section-3.2")}, 37 | {"408", new HttpStatusEntry("408", "Request Timeout", "The server timed out waiting for the request", "http://tools.ietf.org/html/rfc7231#section-6.5.7")}, 38 | {"409", new HttpStatusEntry("409", "Conflict", "The request could not be processed because of conflict in the request", "http://tools.ietf.org/html/rfc7231#section-6.5.8")}, 39 | {"410", new HttpStatusEntry("410", "Gone", "The resource requested is no longer available and will not be available again", "http://tools.ietf.org/html/rfc7231#section-6.5.9")}, 40 | {"411", new HttpStatusEntry("411", "Length Required", "The request did not specify the length of its content, which is required by the requested resource", "http://tools.ietf.org/html/rfc7231#section-6.5.10")}, 41 | {"412", new HttpStatusEntry("412", "Precondition Failed", "The server does not meet one of the preconditions that the requester put on the request", "http://tools.ietf.org/html/rfc7232#section-4.2")}, 42 | {"413", new HttpStatusEntry("413", "Payload Too Large", "The request is larger than the server is willing or able to process", "http://tools.ietf.org/html/rfc7231#section-6.5.11")}, 43 | {"414", new HttpStatusEntry("414", "URI Too Long", "The URI provided was too long for the server to process", "http://tools.ietf.org/html/rfc7231#section-6.5.12")}, 44 | {"415", new HttpStatusEntry("415", "Unsupported Media Type", "The request entity has a media type which the server or resource does not support", "http://tools.ietf.org/html/rfc7231#section-6.5.13")}, 45 | {"416", new HttpStatusEntry("416", "Range Not Satisfiable", "The client has asked for a portion of the file (byte serving), but the server cannot supply that portion", "http://tools.ietf.org/html/rfc7233#section-4.4")}, 46 | {"417", new HttpStatusEntry("417", "Expectation Failed", "The server cannot meet the requirements of the Expect request-header field", "http://tools.ietf.org/html/rfc7231#section-6.5.14")}, 47 | {"426", new HttpStatusEntry("426", "Upgrade Required", "The client should switch to a different protocol", "http://tools.ietf.org/html/rfc7231#section-6.5.15")}, 48 | {"428", new HttpStatusEntry("428", "Precondition Required", "The origin server requires the request to be conditional.", "http://tools.ietf.org/html/rfc6585#section-3")}, 49 | {"429", new HttpStatusEntry("429", "Too Many Requests", "The user has sent too many requests in a given amount of time (rate limiting).", "http://tools.ietf.org/html/rfc6585#section-4")}, 50 | {"431", new HttpStatusEntry("431", "Request Header Fields Too Large", "The server is unwilling to process the request because its header fields are too large.", "http://tools.ietf.org/html/rfc6585#section-5")}, 51 | {"500", new HttpStatusEntry("500", "Internal Server Error", "The server encountered an unexpected condition that prevented it from fulfilling the request", "http://tools.ietf.org/html/rfc7231#section-6.6.1")}, 52 | {"501", new HttpStatusEntry("501", "Not Implemented", "The server does not support the functionality required to fulfill the request", "http://tools.ietf.org/html/rfc7231#section-6.6.2")}, 53 | {"502", new HttpStatusEntry("502", "Bad Gateway", "The server, while acting as a gateway or proxy, received an invalid response from an inbound server it accessed while attempting to fulfill the request", "http://tools.ietf.org/html/rfc7231#section-6.6.3")}, 54 | {"503", new HttpStatusEntry("503", "Service Unavailable", "The server is currently unable to handle the request due to a temporary overload or scheduled maintenance", "http://tools.ietf.org/html/rfc7231#section-6.6.4")}, 55 | {"504", new HttpStatusEntry("504", "Gateway Timeout", "The server, while acting as a gateway or proxy, did not receive a timely response from an upstream server", "http://tools.ietf.org/html/rfc7231#section-6.6.5")}, 56 | {"505", new HttpStatusEntry("505", "HTTP Version Not Supported", "The server does not support, or refuses to support, the major version of HTTP that was used in the request", "http://tools.ietf.org/html/rfc7231#section-6.6.6")}, 57 | {"511", new HttpStatusEntry("511", "Network Authentication Required", "The client needs to authenticate to gain network access.", "http://tools.ietf.org/html/rfc6585#section-6")} 58 | }; 59 | 60 | /// 61 | /// Try to find an entry by its code. 62 | /// 63 | public static bool TryFindByCode(string code, out HttpStatusEntry? entry) 64 | { 65 | return Entries.TryGetValue(code, out entry); 66 | } 67 | } -------------------------------------------------------------------------------- /Community.PowerToys.Run.Plugin.HttpStatusCodes/Images/httpstatuscodes.dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grzhan/HttpStatusCodePowerToys/51c2c0b47d2c8c9e04477f7e0f0cdb151646a014/Community.PowerToys.Run.Plugin.HttpStatusCodes/Images/httpstatuscodes.dark.png -------------------------------------------------------------------------------- /Community.PowerToys.Run.Plugin.HttpStatusCodes/Images/httpstatuscodes.light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grzhan/HttpStatusCodePowerToys/51c2c0b47d2c8c9e04477f7e0f0cdb151646a014/Community.PowerToys.Run.Plugin.HttpStatusCodes/Images/httpstatuscodes.light.png -------------------------------------------------------------------------------- /Community.PowerToys.Run.Plugin.HttpStatusCodes/Main.cs: -------------------------------------------------------------------------------- 1 | using ManagedCommon; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Diagnostics; 5 | using System.Linq; 6 | using System.Windows.Controls; 7 | using Microsoft.PowerToys.Settings.UI.Library; 8 | using Wox.Infrastructure; 9 | using Wox.Infrastructure.Storage; 10 | using Wox.Plugin; 11 | using BrowserInfo = Wox.Plugin.Common.DefaultBrowserInfo; 12 | 13 | namespace Community.PowerToys.Run.Plugin.HttpStatusCodes 14 | { 15 | /// 16 | /// Main class of this plugin that implement all used interfaces. 17 | /// 18 | public class Main : IPlugin, IDisposable, ISettingProvider, ISavable 19 | { 20 | /// 21 | /// ID of the plugin. 22 | /// 23 | public static string PluginID => "8419E21B985441A9A06C4B6264422694"; 24 | 25 | /// 26 | /// Name of the plugin. 27 | /// 28 | public string Name => "Http Status Codes"; 29 | 30 | /// 31 | /// Description of the plugin. 32 | /// 33 | public string Description => "Search for HTTP status codes and open the corresponding RFC."; 34 | 35 | private PluginInitContext Context { get; set; } 36 | 37 | private string IconPath { get; set; } 38 | 39 | private bool Disposed { get; set; } 40 | 41 | private readonly PluginJsonStorage _storage; 42 | private readonly PluginSettings _settings; 43 | 44 | public Main() 45 | { 46 | _storage = new PluginJsonStorage(); 47 | _settings = _storage.Load(); 48 | } 49 | 50 | public void Save() 51 | { 52 | _storage.Save(); 53 | } 54 | 55 | public Control CreateSettingPanel() 56 | { 57 | throw new NotImplementedException(); 58 | } 59 | 60 | public IEnumerable AdditionalOptions => new List() 61 | { 62 | new PluginAdditionalOption() 63 | { 64 | Key = "ReferenceType", 65 | DisplayLabel = "Reference Type", 66 | DisplayDescription = 67 | "Configuration to determine the type of documentation (RFC or MDN) referenced upon pressing Enter or clicking to open the browser after finding the corresponding HTTP status code.", 68 | PluginOptionType = PluginAdditionalOption.AdditionalOptionType.Combobox, 69 | ComboBoxItems = new List>() 70 | { 71 | new KeyValuePair("RFC", "0"), 72 | new KeyValuePair("MDN", "1"), 73 | }, 74 | ComboBoxValue = (int)_settings.ReferenceType 75 | } 76 | }; 77 | 78 | /// 79 | /// Return a filtered list, based on the given query. 80 | /// 81 | /// The query to filter the list. 82 | /// A filtered list, can be empty when nothing was found. 83 | public List Query(Query query) 84 | { 85 | ArgumentNullException.ThrowIfNull(query); 86 | var isGlobalQuery = string.IsNullOrEmpty(query.ActionKeyword); 87 | if (string.IsNullOrEmpty(query.Search) || isGlobalQuery || query.Search.Length < 3) 88 | { 89 | return []; 90 | } 91 | if (HttpStatusCatalog.TryFindByCode(query.Search, out var httpStatus)) 92 | { 93 | return [ 94 | new Result 95 | { 96 | Title = $"{httpStatus?.Code} {httpStatus?.ReasonPhrase}", 97 | SubTitle = httpStatus?.OneLiner, 98 | IcoPath = IconPath, 99 | Action = _ => 100 | { 101 | var url = httpStatus!.DefinedIn; 102 | if (_settings.ReferenceType == ReferenceType.Mdn) 103 | { 104 | url = "https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/" + httpStatus!.Code; 105 | } 106 | 107 | try { 108 | if (Helper.OpenCommandInShell(BrowserInfo.Path, BrowserInfo.ArgumentsPattern, 109 | url)) return true; 110 | } catch (InvalidOperationException) { 111 | // See https://github.com/grzhan/HttpStatusCodePowerToys/issues/3 112 | // In some operating systems (perhaps Windows 10), 113 | // the DefaultBrowserInfo fails to return the correct browser path. 114 | // Therefore, attempt to launch the browser directly based on the URL. 115 | Process.Start(new ProcessStartInfo(url) 116 | { 117 | UseShellExecute = true 118 | }); 119 | } 120 | ErrorHandler.OnPluginError(); 121 | return false; 122 | }, 123 | Score = 300, 124 | } 125 | ]; 126 | } 127 | return []; 128 | } 129 | 130 | /// 131 | /// Initialize the plugin with the given . 132 | /// 133 | /// The for this plugin. 134 | public void Init(PluginInitContext context) 135 | { 136 | Context = context ?? throw new ArgumentNullException(nameof(context)); 137 | Context.API.ThemeChanged += OnThemeChanged; 138 | UpdateIconPath(Context.API.GetCurrentTheme()); 139 | } 140 | 141 | /// 142 | public void Dispose() 143 | { 144 | Dispose(true); 145 | GC.SuppressFinalize(this); 146 | } 147 | 148 | /// 149 | /// Wrapper method for that dispose additional objects and events form the plugin itself. 150 | /// 151 | /// Indicate that the plugin is disposed. 152 | protected virtual void Dispose(bool disposing) 153 | { 154 | if (Disposed || !disposing) 155 | { 156 | return; 157 | } 158 | 159 | if (Context?.API != null) 160 | { 161 | Context.API.ThemeChanged -= OnThemeChanged; 162 | } 163 | 164 | Disposed = true; 165 | } 166 | 167 | public void UpdateSettings(PowerLauncherPluginSettings settings) 168 | { 169 | var refOption = 0; 170 | if (settings is { AdditionalOptions: not null }) 171 | { 172 | var referenceType = 173 | settings.AdditionalOptions.FirstOrDefault(x => x.Key == "ReferenceType"); 174 | refOption = referenceType?.ComboBoxValue ?? refOption; 175 | _settings.ReferenceType = (ReferenceType)refOption; 176 | } 177 | 178 | Save(); 179 | } 180 | 181 | private void UpdateIconPath(Theme theme) => IconPath = theme is Theme.Light or Theme.HighContrastWhite ? "Images/httpstatuscodes.light.png" : "Images/httpstatuscodes.dark.png"; 182 | 183 | private void OnThemeChanged(Theme currentTheme, Theme newTheme) => UpdateIconPath(newTheme); 184 | } 185 | } 186 | -------------------------------------------------------------------------------- /Community.PowerToys.Run.Plugin.HttpStatusCodes/PluginSettings.cs: -------------------------------------------------------------------------------- 1 | namespace Community.PowerToys.Run.Plugin.HttpStatusCodes; 2 | 3 | public class PluginSettings 4 | { 5 | public ReferenceType ReferenceType { get; set; } = ReferenceType.Rfc; 6 | } 7 | 8 | public enum ReferenceType 9 | { 10 | Rfc = 0, 11 | Mdn = 1, 12 | } -------------------------------------------------------------------------------- /Community.PowerToys.Run.Plugin.HttpStatusCodes/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": "8419E21B985441A9A06C4B6264422694", 3 | "ActionKeyword": "http", 4 | "IsGlobal": false, 5 | "Name": "Http Status Codes", 6 | "Author": "grzhan", 7 | "Version": "0.1.3", 8 | "Language": "csharp", 9 | "Website": "https://github.com/hlaueriksson/Community.PowerToys.Run.Plugin.HttpStatusCodes", 10 | "ExecuteFileName": "Community.PowerToys.Run.Plugin.HttpStatusCodes.dll", 11 | "IcoPathDark": "Images\\httpstatuscodes.dark.png", 12 | "IcoPathLight": "Images\\httpstatuscodes.light.png", 13 | "DynamicLoading": false 14 | } 15 | -------------------------------------------------------------------------------- /HttpStatusCodes.sln: -------------------------------------------------------------------------------- 1 | Microsoft Visual Studio Solution File, Format Version 12.00 2 | # Visual Studio Version 17 3 | VisualStudioVersion = 17.10.35027.167 4 | MinimumVisualStudioVersion = 10.0.40219.1 5 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Community.PowerToys.Run.Plugin.HttpStatusCodes", "Community.PowerToys.Run.Plugin.HttpStatusCodes\Community.PowerToys.Run.Plugin.HttpStatusCodes.csproj", "{42D4374E-8084-4541-9893-60759138875D}" 6 | EndProject 7 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Community.PowerToys.Run.Plugin.HttpStatusCodes.UnitTests", "Community.PowerToys.Run.Plugin.HttpStatusCodes.UnitTests\Community.PowerToys.Run.Plugin.HttpStatusCodes.UnitTests.csproj", "{33CAB7FE-2DD6-4625-9134-77D55F97F1E5}" 8 | EndProject 9 | Global 10 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 11 | Debug|ARM64 = Debug|ARM64 12 | Debug|x64 = Debug|x64 13 | Release|ARM64 = Release|ARM64 14 | Release|x64 = Release|x64 15 | EndGlobalSection 16 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 17 | {42D4374E-8084-4541-9893-60759138875D}.Debug|ARM64.ActiveCfg = Debug|ARM64 18 | {42D4374E-8084-4541-9893-60759138875D}.Debug|ARM64.Build.0 = Debug|ARM64 19 | {42D4374E-8084-4541-9893-60759138875D}.Debug|x64.ActiveCfg = Debug|x64 20 | {42D4374E-8084-4541-9893-60759138875D}.Debug|x64.Build.0 = Debug|x64 21 | {42D4374E-8084-4541-9893-60759138875D}.Release|ARM64.ActiveCfg = Release|ARM64 22 | {42D4374E-8084-4541-9893-60759138875D}.Release|ARM64.Build.0 = Release|ARM64 23 | {42D4374E-8084-4541-9893-60759138875D}.Release|x64.ActiveCfg = Release|x64 24 | {42D4374E-8084-4541-9893-60759138875D}.Release|x64.Build.0 = Release|x64 25 | {33CAB7FE-2DD6-4625-9134-77D55F97F1E5}.Debug|ARM64.ActiveCfg = Debug|ARM64 26 | {33CAB7FE-2DD6-4625-9134-77D55F97F1E5}.Debug|ARM64.Build.0 = Debug|ARM64 27 | {33CAB7FE-2DD6-4625-9134-77D55F97F1E5}.Debug|x64.ActiveCfg = Debug|x64 28 | {33CAB7FE-2DD6-4625-9134-77D55F97F1E5}.Debug|x64.Build.0 = Debug|x64 29 | {33CAB7FE-2DD6-4625-9134-77D55F97F1E5}.Release|ARM64.ActiveCfg = Release|ARM64 30 | {33CAB7FE-2DD6-4625-9134-77D55F97F1E5}.Release|ARM64.Build.0 = Release|ARM64 31 | {33CAB7FE-2DD6-4625-9134-77D55F97F1E5}.Release|x64.ActiveCfg = Release|x64 32 | {33CAB7FE-2DD6-4625-9134-77D55F97F1E5}.Release|x64.Build.0 = Release|x64 33 | EndGlobalSection 34 | GlobalSection(SolutionProperties) = preSolution 35 | HideSolutionNode = FALSE 36 | EndGlobalSection 37 | GlobalSection(ExtensibilityGlobals) = postSolution 38 | SolutionGuid = {A92F02E6-409B-4D5B-BC53-5F376A3FB3B3} 39 | EndGlobalSection 40 | EndGlobal 41 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 grzhan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PowerToys Run: Http Status Codes 2 | 3 | [![GitHub release](https://img.shields.io/github/v/release/grzhan/HttpStatusCodePowerToys?style=flat-square)](https://github.com/grzhan/HttpStatusCodePowerToys/releases/latest) 4 | [![GitHub all releases](https://img.shields.io/github/downloads/grzhan/HttpStatusCodePowerToys/total?style=flat-square)](https://github.com/grzhan/HttpStatusCodePowerToys/releases/) 5 | [![GitHub release (latest by date)](https://img.shields.io/github/downloads/grzhan/HttpStatusCodePowerToys/latest/total?style=flat-square)](https://github.com/grzhan/HttpStatusCodePowerToys/releases/latest) 6 | 7 | A [PowerToys Run](https://learn.microsoft.com/windows/powertoys/run) plugin for searching HTTP status codes. This plugin displays the codes along with their reason-phrase (e.g. "Not Found") and a short sentence describing the function of this code. 8 | 9 | Hitting return opens a browser window with the proper RFC (or [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404)) for that status code. 10 | 11 | ![httpstatuscode](httpstatuscodes.gif) 12 | 13 | ## Installation 14 | 15 | 1. Close PowerToys. 16 | 2. Download [latest release](https://github.com/grzhan/HttpStatusCodePowerToys/releases/latest). 17 | 3. Extract it to `%LOCALAPPDATA%\Microsoft\PowerToys\PowerToys Run\Plugins\`. 18 | 4. Start PowerToys. 19 | 20 | ## Usage 21 | 22 | + `http {code}` 23 | 24 | 25 | ## License 26 | 27 | This software is licensed under the [MIT licence](https://github.com/grzhan/HttpStatusCodePowerToys/blob/main/LICENSE) -------------------------------------------------------------------------------- /httpstatuscodes.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grzhan/HttpStatusCodePowerToys/51c2c0b47d2c8c9e04477f7e0f0cdb151646a014/httpstatuscodes.gif --------------------------------------------------------------------------------