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 {
|
namespace help {
|
||||||
extern void set_description(string,string);
|
extern void set_description(string,string);
|
||||||
extern string get_description(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 "internal/bottles.hpp"
|
||||||
#include "commands.hpp"
|
#include "commands.hpp"
|
||||||
#include "dll.hpp"
|
#include "dll.hpp"
|
||||||
|
#include "help.hpp"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace cellar::bottles;
|
using namespace cellar::bottles;
|
||||||
@ -14,6 +15,7 @@ DLL_PUBLIC map<string, CommandFunction> cellar::commands::bottles_commands() {
|
|||||||
map<string, CommandFunction> result;
|
map<string, CommandFunction> result;
|
||||||
/*[[[cog
|
/*[[[cog
|
||||||
import cog
|
import cog
|
||||||
|
import os
|
||||||
|
|
||||||
with open("src/bottles/commands.txt") as commandfile:
|
with open("src/bottles/commands.txt") as commandfile:
|
||||||
for line in commandfile:
|
for line in commandfile:
|
||||||
@ -30,6 +32,17 @@ DLL_PUBLIC map<string, CommandFunction> cellar::commands::bottles_commands() {
|
|||||||
.replace("\"", "\\\"")
|
.replace("\"", "\\\"")
|
||||||
.replace("\\", "\\\\")))
|
.replace("\\", "\\\\")))
|
||||||
# the replace methods escape " and \ characters
|
# 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]]]
|
//[[[end]]]
|
||||||
return result;
|
return result;
|
||||||
|
@ -25,6 +25,7 @@ map<string, CommandFunction> cellar::commands::core_commands() {
|
|||||||
map<string, CommandFunction> result;
|
map<string, CommandFunction> result;
|
||||||
/*[[[cog
|
/*[[[cog
|
||||||
import cog
|
import cog
|
||||||
|
import os.path
|
||||||
|
|
||||||
with open("src/commands.txt") as commandfile:
|
with open("src/commands.txt") as commandfile:
|
||||||
for line in commandfile:
|
for line in commandfile:
|
||||||
@ -41,6 +42,17 @@ map<string, CommandFunction> cellar::commands::core_commands() {
|
|||||||
.replace("\"", "\\\"")
|
.replace("\"", "\\\"")
|
||||||
.replace("\\", "\\\\")))
|
.replace("\\", "\\\\")))
|
||||||
# the replace methods escape " and \ characters
|
# 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]]]
|
//[[[end]]]
|
||||||
return result;
|
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 <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include <boost/algorithm/string.hpp>
|
||||||
|
|
||||||
#include "cellar.hpp"
|
#include "cellar.hpp"
|
||||||
#include "internal/core.hpp"
|
#include "internal/core.hpp"
|
||||||
#include "help.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
|
cout << endl; // TODO: cellar::output function for code clarity
|
||||||
|
|
||||||
output::statement("You have these commands:");
|
if (argc == 1) {
|
||||||
stringstream sstr;
|
output::statement("You have these commands:");
|
||||||
for (string command : commands) {
|
stringstream sstr;
|
||||||
sstr << "\t" << command;
|
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);
|
string desc = help::get_description(command);
|
||||||
if (!desc.empty()) {
|
if (desc.empty()) { sstr << "no description is available."; }
|
||||||
sstr << " - " << desc;
|
else { sstr << desc; }
|
||||||
}
|
|
||||||
output::statement(sstr.str());
|
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 "internal/launch.hpp"
|
||||||
#include "commands.hpp"
|
#include "commands.hpp"
|
||||||
#include "dll.hpp"
|
#include "dll.hpp"
|
||||||
|
#include "help.hpp"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace cellar::launch;
|
using namespace cellar::launch;
|
||||||
@ -14,6 +15,7 @@ DLL_PUBLIC map<string, CommandFunction> cellar::commands::launch_commands() {
|
|||||||
map<string, CommandFunction> result;
|
map<string, CommandFunction> result;
|
||||||
/*[[[cog
|
/*[[[cog
|
||||||
import cog
|
import cog
|
||||||
|
import os
|
||||||
|
|
||||||
with open("src/launch/commands.txt") as commandfile:
|
with open("src/launch/commands.txt") as commandfile:
|
||||||
for line in commandfile:
|
for line in commandfile:
|
||||||
@ -30,6 +32,17 @@ DLL_PUBLIC map<string, CommandFunction> cellar::commands::launch_commands() {
|
|||||||
.replace("\"", "\\\"")
|
.replace("\"", "\\\"")
|
||||||
.replace("\\", "\\\\")))
|
.replace("\\", "\\\\")))
|
||||||
# the replace methods escape " and \ characters
|
# 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]]]
|
//[[[end]]]
|
||||||
return result;
|
return result;
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
launch launch_command
|
launch launch_command Launch a program in WINE.
|
||||||
winecfg launch_winecfg
|
winecfg launch_winecfg Launch winecfg.
|
||||||
regedit launch_regedit
|
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