improvements to the help command, including outputting detailed descriptions
This commit is contained in:
parent
de77c55df7
commit
3dc004d27a
@ -10,6 +10,9 @@ namespace cellar {
|
||||
namespace help {
|
||||
extern void set_description(string,string);
|
||||
extern string get_description(string);
|
||||
|
||||
extern void set_details(string,string);
|
||||
extern string get_details(string);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include "internal/bottles.hpp"
|
||||
#include "commands.hpp"
|
||||
#include "dll.hpp"
|
||||
#include "help.hpp"
|
||||
|
||||
using namespace std;
|
||||
using namespace cellar::bottles;
|
||||
@ -14,6 +15,7 @@ DLL_PUBLIC map<string, CommandFunction> cellar::commands::bottles_commands() {
|
||||
map<string, CommandFunction> result;
|
||||
/*[[[cog
|
||||
import cog
|
||||
import os
|
||||
|
||||
with open("src/bottles/commands.txt") as commandfile:
|
||||
for line in commandfile:
|
||||
@ -30,6 +32,17 @@ DLL_PUBLIC map<string, CommandFunction> cellar::commands::bottles_commands() {
|
||||
.replace("\"", "\\\"")
|
||||
.replace("\\", "\\\\")))
|
||||
# the replace methods escape " and \ characters
|
||||
else:
|
||||
print("-- No description is available for the {0} command.".format(name))
|
||||
|
||||
if os.path.exists("src/bottles/help/" + name):
|
||||
cog.out("cellar::help::set_details(\"{0}\", R\"(".format(name))
|
||||
with open("src/bottles/help/" + name) as detailsfile:
|
||||
for detail in detailsfile:
|
||||
cog.out(detail)
|
||||
cog.out(")\");")
|
||||
else:
|
||||
print("-- No details are available for the {0} command.".format(name))
|
||||
]]]*/
|
||||
//[[[end]]]
|
||||
return result;
|
||||
|
@ -25,6 +25,7 @@ map<string, CommandFunction> cellar::commands::core_commands() {
|
||||
map<string, CommandFunction> result;
|
||||
/*[[[cog
|
||||
import cog
|
||||
import os.path
|
||||
|
||||
with open("src/commands.txt") as commandfile:
|
||||
for line in commandfile:
|
||||
@ -41,6 +42,17 @@ map<string, CommandFunction> cellar::commands::core_commands() {
|
||||
.replace("\"", "\\\"")
|
||||
.replace("\\", "\\\\")))
|
||||
# the replace methods escape " and \ characters
|
||||
else:
|
||||
print("-- No description is available for the {0} command.".format(name))
|
||||
|
||||
if os.path.exists("src/help/" + name):
|
||||
cog.out("cellar::help::set_details(\"{0}\", R\"(".format(name))
|
||||
with open("src/help/" + name) as detailsfile:
|
||||
for detail in detailsfile:
|
||||
cog.out(detail)
|
||||
cog.out(")\");")
|
||||
else:
|
||||
print("-- No details are available for the {0} command.".format(name))
|
||||
]]]*/
|
||||
//[[[end]]]
|
||||
return result;
|
||||
|
26
src/help/details.cpp
Normal file
26
src/help/details.cpp
Normal file
@ -0,0 +1,26 @@
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
#include "help.hpp"
|
||||
|
||||
map<string,string> details_map;
|
||||
|
||||
void cellar::help::set_details(string command, string details) {
|
||||
if (details.empty()) {
|
||||
if (details_map.find(command) == details_map.end()) { // not found
|
||||
return; // no details no cry
|
||||
} else {
|
||||
details_map.erase(command);
|
||||
}
|
||||
} else { // setting details
|
||||
details_map[command] = details;
|
||||
}
|
||||
}
|
||||
|
||||
string cellar::help::get_details(string command) {
|
||||
if (details_map.find(command) == details_map.end()) { // not found
|
||||
return "";
|
||||
} else {
|
||||
return details_map.at(command);
|
||||
}
|
||||
}
|
@ -3,6 +3,8 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <boost/algorithm/string.hpp>
|
||||
|
||||
#include "cellar.hpp"
|
||||
#include "internal/core.hpp"
|
||||
#include "help.hpp"
|
||||
@ -17,16 +19,41 @@ void cellar::commands::help_command(int argc, vector<string> argv) {
|
||||
|
||||
cout << endl; // TODO: cellar::output function for code clarity
|
||||
|
||||
output::statement("You have these commands:");
|
||||
stringstream sstr;
|
||||
for (string command : commands) {
|
||||
sstr << "\t" << command;
|
||||
if (argc == 1) {
|
||||
output::statement("You have these commands:");
|
||||
stringstream sstr;
|
||||
for (string command : commands) {
|
||||
sstr << "\t" << command;
|
||||
|
||||
string desc = help::get_description(command);
|
||||
if (!desc.empty()) {
|
||||
sstr << " - " << desc;
|
||||
}
|
||||
output::statement(sstr.str());
|
||||
sstr.str("");
|
||||
}
|
||||
} else {
|
||||
string command = argv[1];
|
||||
stringstream sstr;
|
||||
sstr << "cellar " << command << " - ";
|
||||
|
||||
string desc = help::get_description(command);
|
||||
if (!desc.empty()) {
|
||||
sstr << " - " << desc;
|
||||
}
|
||||
if (desc.empty()) { sstr << "no description is available."; }
|
||||
else { sstr << desc; }
|
||||
output::statement(sstr.str());
|
||||
sstr.str("");
|
||||
|
||||
cout << endl;
|
||||
|
||||
string details = help::get_details(command);
|
||||
if (details.empty()) { output::statement("no details available."); }
|
||||
else {
|
||||
vector<string> detaillines;
|
||||
boost::split(detaillines, details, boost::is_any_of("\n"));
|
||||
|
||||
for (string line : detaillines) {
|
||||
if (!line.empty()) { output::statement(line); }
|
||||
else { cout << endl; }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
1
src/help/version
Normal file
1
src/help/version
Normal file
@ -0,0 +1 @@
|
||||
No, really, that's all it does.
|
@ -5,6 +5,7 @@
|
||||
#include "internal/launch.hpp"
|
||||
#include "commands.hpp"
|
||||
#include "dll.hpp"
|
||||
#include "help.hpp"
|
||||
|
||||
using namespace std;
|
||||
using namespace cellar::launch;
|
||||
@ -14,6 +15,7 @@ DLL_PUBLIC map<string, CommandFunction> cellar::commands::launch_commands() {
|
||||
map<string, CommandFunction> result;
|
||||
/*[[[cog
|
||||
import cog
|
||||
import os
|
||||
|
||||
with open("src/launch/commands.txt") as commandfile:
|
||||
for line in commandfile:
|
||||
@ -30,6 +32,17 @@ DLL_PUBLIC map<string, CommandFunction> cellar::commands::launch_commands() {
|
||||
.replace("\"", "\\\"")
|
||||
.replace("\\", "\\\\")))
|
||||
# the replace methods escape " and \ characters
|
||||
else:
|
||||
print("-- No description is available for the {0} command.".format(name))
|
||||
|
||||
if os.path.exists("src/launch/help/" + name):
|
||||
cog.out("cellar::help::set_details(\"{0}\", R\"(".format(name))
|
||||
with open("src/launch/help/" + name) as detailsfile:
|
||||
for detail in detailsfile:
|
||||
cog.out(detail)
|
||||
cog.out(")\");")
|
||||
else:
|
||||
print("-- No details are available for the {0} command.".format(name))
|
||||
]]]*/
|
||||
//[[[end]]]
|
||||
return result;
|
||||
|
@ -1,3 +1,3 @@
|
||||
launch launch_command
|
||||
winecfg launch_winecfg
|
||||
regedit launch_regedit
|
||||
launch launch_command Launch a program in WINE.
|
||||
winecfg launch_winecfg Launch winecfg.
|
||||
regedit launch_regedit Launch regedit.
|
||||
|
1
src/launch/help/regedit
Normal file
1
src/launch/help/regedit
Normal file
@ -0,0 +1 @@
|
||||
This is an alias for "cellar launch regedit".
|
1
src/launch/help/winecfg
Normal file
1
src/launch/help/winecfg
Normal file
@ -0,0 +1 @@
|
||||
This is an alias for "cellar launch winecfg".
|
Loading…
Reference in New Issue
Block a user