Commit 24450d183a4f72675460293e5c87b812ad73e047
1 parent
4ebfa259
Allow positional arguments to show in help
Fixes #72. This adds an option for positional arguments to be shown in the help output.
Showing
2 changed files
with
18 additions
and
3 deletions
include/cxxopts.hpp
| ... | ... | @@ -1118,6 +1118,7 @@ namespace cxxopts |
| 1118 | 1118 | : m_program(std::move(program)) |
| 1119 | 1119 | , m_help_string(toLocalString(std::move(help_string))) |
| 1120 | 1120 | , m_positional_help("positional parameters") |
| 1121 | + , m_show_positional(false) | |
| 1121 | 1122 | , m_next_positional(m_positional.end()) |
| 1122 | 1123 | { |
| 1123 | 1124 | } |
| ... | ... | @@ -1129,6 +1130,13 @@ namespace cxxopts |
| 1129 | 1130 | return *this; |
| 1130 | 1131 | } |
| 1131 | 1132 | |
| 1133 | + Options& | |
| 1134 | + show_positional_help() | |
| 1135 | + { | |
| 1136 | + m_show_positional = true; | |
| 1137 | + return *this; | |
| 1138 | + } | |
| 1139 | + | |
| 1132 | 1140 | ParseResult |
| 1133 | 1141 | parse(int& argc, char**& argv); |
| 1134 | 1142 | |
| ... | ... | @@ -1187,6 +1195,7 @@ namespace cxxopts |
| 1187 | 1195 | std::string m_program; |
| 1188 | 1196 | String m_help_string; |
| 1189 | 1197 | std::string m_positional_help; |
| 1198 | + bool m_show_positional; | |
| 1190 | 1199 | |
| 1191 | 1200 | std::unordered_map<std::string, std::shared_ptr<OptionDetails>> m_options; |
| 1192 | 1201 | std::vector<std::string> m_positional; |
| ... | ... | @@ -1788,7 +1797,9 @@ Options::help_one_group(const std::string& g) const |
| 1788 | 1797 | |
| 1789 | 1798 | for (const auto& o : group->second.options) |
| 1790 | 1799 | { |
| 1791 | - if (o.is_container && m_positional_set.find(o.l) != m_positional_set.end()) | |
| 1800 | + if (o.is_container && | |
| 1801 | + m_positional_set.find(o.l) != m_positional_set.end() && | |
| 1802 | + !m_show_positional) | |
| 1792 | 1803 | { |
| 1793 | 1804 | continue; |
| 1794 | 1805 | } |
| ... | ... | @@ -1806,7 +1817,9 @@ Options::help_one_group(const std::string& g) const |
| 1806 | 1817 | auto fiter = format.begin(); |
| 1807 | 1818 | for (const auto& o : group->second.options) |
| 1808 | 1819 | { |
| 1809 | - if (o.is_container && m_positional_set.find(o.l) != m_positional_set.end()) | |
| 1820 | + if (o.is_container && | |
| 1821 | + m_positional_set.find(o.l) != m_positional_set.end() && | |
| 1822 | + !m_show_positional) | |
| 1810 | 1823 | { |
| 1811 | 1824 | continue; |
| 1812 | 1825 | } | ... | ... |
src/example.cpp
| ... | ... | @@ -31,7 +31,9 @@ int main(int argc, char* argv[]) |
| 31 | 31 | try |
| 32 | 32 | { |
| 33 | 33 | cxxopts::Options options(argv[0], " - example command line options"); |
| 34 | - options.positional_help("[optional args]"); | |
| 34 | + options | |
| 35 | + .positional_help("[optional args]") | |
| 36 | + .show_positional_help(); | |
| 35 | 37 | |
| 36 | 38 | bool apple = false; |
| 37 | 39 | ... | ... |