Просмотр исходного кода

fix(cli): make emqx_ctl aware of max width

Zaiming (Stone) Shi 4 лет назад
Родитель
Сommit
47661042b9
1 измененных файлов с 13 добавлено и 3 удалено
  1. 13 3
      apps/emqx/src/emqx_ctl.erl

+ 13 - 3
apps/emqx/src/emqx_ctl.erl

@@ -160,18 +160,28 @@ format(Format, Args) ->
 
 -spec(format_usage([cmd_usage()]) -> [string()]).
 format_usage(UsageList) ->
+    Width = lists:foldl(fun({CmdStr, _}, W) ->
+                                max(iolist_size(CmdStr), W)
+                        end, 0, UsageList),
     lists:map(
         fun({CmdParams, Desc}) ->
-            format_usage(CmdParams, Desc)
+            format_usage(CmdParams, Desc, Width)
         end, UsageList).
 
 -spec(format_usage(cmd_params(), cmd_descr()) -> string()).
 format_usage(CmdParams, Desc) ->
+    format_usage(CmdParams, Desc, 0).
+
+format_usage(CmdParams, Desc, 0) ->
+    format_usage(CmdParams, Desc, iolist_size(CmdParams));
+format_usage(CmdParams, Desc, Width) ->
     CmdLines = split_cmd(CmdParams),
     DescLines = split_cmd(Desc),
+    Zipped = zip_cmd(CmdLines, DescLines),
+    Fmt = "~-" ++ integer_to_list(Width + 1) ++ "s# ~ts~n",
     lists:foldl(fun({CmdStr, DescStr}, Usage) ->
-                        Usage ++ format("~-70s# ~ts~n", [CmdStr, DescStr])
-                end, "", zip_cmd(CmdLines, DescLines)).
+                        Usage ++ format(Fmt, [CmdStr, DescStr])
+                end, "", Zipped).
 
 %%--------------------------------------------------------------------
 %% gen_server callbacks