diff --git a/spec/help_spec.lua b/spec/help_spec.lua index b40d7f4..0fb2428 100644 --- a/spec/help_spec.lua +++ b/spec/help_spec.lua @@ -44,7 +44,8 @@ describe("tests related to help message generation", function() :args "*" assert.equal(table.concat({ - "Usage: foo [-h] [] [] ...", + "Usage: foo [-h] ", + " [] [] ...", "", "Arguments: ", " first", diff --git a/spec/usage_spec.lua b/spec/usage_spec.lua index 2c4331e..f542714 100644 --- a/spec/usage_spec.lua +++ b/spec/usage_spec.lua @@ -18,9 +18,10 @@ describe("tests related to usage message generation", function() parser:argument "others" :args "*" - assert.equal( - [=[Usage: foo [] [] ...]=], - parser:prepare():get_usage() + assert.equal(table.concat({ + "Usage: foo ", + " [] [] ..." + }, "\r\n"), parser:prepare():get_usage() ) end) diff --git a/src/argparse.lua b/src/argparse.lua index b5a7440..673e29b 100644 --- a/src/argparse.lua +++ b/src/argparse.lua @@ -309,28 +309,38 @@ function Parser:update_charset(charset) return charset end +local max_usage_width = 70 +local usage_welcome = "Usage: " + function Parser:get_usage() if not self._usage then - local buf = {"Usage:", self._name} + local lines = {usage_welcome .. self._name} + + local function add(s) + if #lines[#lines]+1+#s <= max_usage_width then + lines[#lines] = lines[#lines] .. " " .. s + else + lines[#lines+1] = (" "):rep(#usage_welcome) .. s + end + end for _, elements in ipairs{self._options, self._arguments} do for _, element in ipairs(elements) do - table.insert(buf, element:get_usage()) + add(element:get_usage()) end end if #self._commands > 0 then if self._require_command then - table.insert(buf, "") + add("") else - table.insert(buf, "[]") + add("[]") end - table.insert(buf, "...") + add("...") end - -- TODO: prettify - self._usage = table.concat(buf, " ") + self._usage = table.concat(lines, "\r\n") end return self._usage