Commit 915c68703f2778869348e9a634663b18b70c26c5

Authored by Henry Fredrick Schreiner
1 parent 200d0f27

Nicer help printing

examples/try.cpp
@@ -6,7 +6,7 @@ int main (int argc, char** argv) { @@ -6,7 +6,7 @@ int main (int argc, char** argv) {
6 CLI::App app("K3Pi goofit fitter"); 6 CLI::App app("K3Pi goofit fitter");
7 7
8 std::string file; 8 std::string file;
9 - app.add_option("-f,--file", file, "File name"); 9 + app.add_option("-f,--file,file", file, "File name");
10 10
11 int count; 11 int count;
12 app.add_flag("-c,--count", count, "Counter"); 12 app.add_flag("-c,--count", count, "Counter");
include/CLI.hpp
@@ -470,6 +470,11 @@ public: @@ -470,6 +470,11 @@ public:
470 return out; 470 return out;
471 } 471 }
472 472
  473 + // Just the pname
  474 + std::string get_pname() const {
  475 + return pname;
  476 + }
  477 +
473 /// Process the callback 478 /// Process the callback
474 bool run_callback() const { 479 bool run_callback() const {
475 if(opts.validators.size()>0) { 480 if(opts.validators.size()>0) {
@@ -1299,10 +1304,10 @@ public: @@ -1299,10 +1304,10 @@ public:
1299 std::cerr << "ERROR: "; 1304 std::cerr << "ERROR: ";
1300 std::cerr << e.what() << std::endl; 1305 std::cerr << e.what() << std::endl;
1301 if(e.print_help) 1306 if(e.print_help)
1302 - std::cerr << help() << std::endl; 1307 + std::cerr << help();
1303 } else { 1308 } else {
1304 if(e.print_help) 1309 if(e.print_help)
1305 - std::cout << help() << std::endl; 1310 + std::cout << help();
1306 } 1311 }
1307 return e.exit_code; 1312 return e.exit_code;
1308 } 1313 }
@@ -1323,6 +1328,18 @@ public: @@ -1323,6 +1328,18 @@ public:
1323 out << "Subcommand: " << name << " "; 1328 out << "Subcommand: " << name << " ";
1324 out << prog_discription << std::endl; 1329 out << prog_discription << std::endl;
1325 out << "Usage: " << progname; 1330 out << "Usage: " << progname;
  1331 +
  1332 + // Check for options
  1333 + bool npos = false;
  1334 + for(const Option &opt : options) {
  1335 + if(opt.nonpositional()) {
  1336 + npos = true;
  1337 + break;
  1338 + }
  1339 + }
  1340 +
  1341 + if(npos)
  1342 + out << " [OPTIONS...]";
1326 1343
1327 // Positionals 1344 // Positionals
1328 bool pos=false; 1345 bool pos=false;
@@ -1332,6 +1349,8 @@ public: @@ -1332,6 +1349,8 @@ public:
1332 if(opt.has_discription()) 1349 if(opt.has_discription())
1333 pos=true; 1350 pos=true;
1334 } 1351 }
  1352 +
  1353 +
1335 out << std::endl << std::endl; 1354 out << std::endl << std::endl;
1336 1355
1337 // Positional discriptions 1356 // Positional discriptions
@@ -1339,7 +1358,7 @@ public: @@ -1339,7 +1358,7 @@ public:
1339 out << "Positionals:" << std::endl; 1358 out << "Positionals:" << std::endl;
1340 for(const Option &opt : options) 1359 for(const Option &opt : options)
1341 if(opt.positional() && opt.has_discription()) { 1360 if(opt.positional() && opt.has_discription()) {
1342 - out << " " << std::setw(30) << std::right << opt.help_positional(); 1361 + out << std::setw(30) << std::left << " " + opt.get_pname();
1343 out << opt.get_discription() << std::endl; 1362 out << opt.get_discription() << std::endl;
1344 } 1363 }
1345 out << std::endl; 1364 out << std::endl;
@@ -1348,21 +1367,14 @@ public: @@ -1348,21 +1367,14 @@ public:
1348 1367
1349 1368
1350 // Options 1369 // Options
1351 - int len = std::accumulate(std::begin(options), std::end(options), 0,  
1352 - [](int val, const Option &opt){  
1353 - return std::max(opt.help_len()+3, val);});  
1354 -  
1355 - bool npos = false;  
1356 - for(const Option &opt : options) {  
1357 - if(opt.nonpositional()) {  
1358 - if(!npos) {  
1359 - out << "Options:" << std::endl;  
1360 - npos=true; 1370 + if(npos) {
  1371 + out << "Options:" << std::endl;
  1372 + for(const Option &opt : options) {
  1373 + if(opt.nonpositional()) {
  1374 + out << opt.help(30) << std::endl;
1361 } 1375 }
1362 - out << opt.help(len) << std::endl;  
1363 } 1376 }
1364 - if(npos)  
1365 - out << std::endl; 1377 + out << std::endl;
1366 } 1378 }
1367 1379
1368 // Subcommands 1380 // Subcommands