diff options
Diffstat (limited to 'lib/irb/cmd/show_cmds.rb')
-rw-r--r-- | lib/irb/cmd/show_cmds.rb | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/irb/cmd/show_cmds.rb b/lib/irb/cmd/show_cmds.rb new file mode 100644 index 0000000000..acced27d48 --- /dev/null +++ b/lib/irb/cmd/show_cmds.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +require "stringio" +require_relative "nop" + +module IRB + # :stopdoc: + + module ExtendCommand + class ShowCmds < Nop + category "IRB" + description "List all available commands and their description." + + def execute(*args) + commands_info = IRB::ExtendCommandBundle.all_commands_info + commands_grouped_by_categories = commands_info.group_by { |cmd| cmd[:category] } + longest_cmd_name_length = commands_info.map { |c| c[:display_name] }.max { |a, b| a.length <=> b.length }.length + + output = StringIO.new + + commands_grouped_by_categories.each do |category, cmds| + output.puts Color.colorize(category, [:BOLD]) + + cmds.each do |cmd| + output.puts " #{cmd[:display_name].to_s.ljust(longest_cmd_name_length)} #{cmd[:description]}" + end + + output.puts + end + + puts output.string + + nil + end + end + end + + # :startdoc: +end |