diff --git a/Dalamud/Game/Command/CommandInfo.cs b/Dalamud/Game/Command/CommandInfo.cs index 8aed817d0..16462a831 100644 --- a/Dalamud/Game/Command/CommandInfo.cs +++ b/Dalamud/Game/Command/CommandInfo.cs @@ -11,7 +11,7 @@ public interface IReadOnlyCommandInfo /// The command itself. /// The arguments supplied to the command, ready for parsing. public delegate void HandlerDelegate(string command, string arguments); - + /// /// Gets a which will be called when the command is dispatched. /// @@ -26,6 +26,11 @@ public interface IReadOnlyCommandInfo /// Gets a value indicating whether if this command should be shown in the help output. /// bool ShowInHelp { get; } + + /// + /// Gets the display order of this command. Defaults to alphabetical ordering. + /// + int DisplayOrder { get; } } /// @@ -51,4 +56,7 @@ public sealed class CommandInfo : IReadOnlyCommandInfo /// public bool ShowInHelp { get; set; } = true; + + /// + public int DisplayOrder { get; set; } = -1; } diff --git a/Dalamud/Interface/Internal/DalamudCommands.cs b/Dalamud/Interface/Internal/DalamudCommands.cs index 00997c1d5..636f71bfa 100644 --- a/Dalamud/Interface/Internal/DalamudCommands.cs +++ b/Dalamud/Interface/Internal/DalamudCommands.cs @@ -178,7 +178,7 @@ internal class DalamudCommands : IServiceType if (arguments.IsNullOrWhitespace()) { chatGui.Print(Loc.Localize("DalamudCmdHelpAvailable", "Available commands:")); - foreach (var cmd in commandManager.Commands) + foreach (var cmd in commandManager.Commands.OrderBy(cInfo => cInfo.Key)) { if (!cmd.Value.ShowInHelp) continue; diff --git a/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs b/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs index 4e60d4be8..3abb1bb39 100644 --- a/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs +++ b/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs @@ -2762,13 +2762,14 @@ internal class PluginInstallerWindow : Window, IDisposable var commands = commandManager.Commands .Where(cInfo => cInfo.Value is { ShowInHelp: true } && - commandManager.GetHandlerAssemblyName(cInfo.Key, cInfo.Value) == plugin.Manifest.InternalName) - .ToArray(); + commandManager.GetHandlerAssemblyName(cInfo.Key, cInfo.Value) == plugin.Manifest.InternalName); if (commands.Any()) { ImGui.Dummy(ImGuiHelpers.ScaledVector2(10f, 10f)); - foreach (var command in commands) + foreach (var command in commands + .OrderBy(cInfo => cInfo.Value.DisplayOrder) + .ThenBy(cInfo => cInfo.Key)) { ImGuiHelpers.SafeTextWrapped($"{command.Key} → {command.Value.HelpMessage}"); }