Support "ls -a" to list scripts in subdirs.

develop
Alexander Gavrilov 2012-08-29 19:03:53 +04:00
parent 4e169558f5
commit 8a617edb10
1 changed files with 17 additions and 8 deletions

@ -219,28 +219,30 @@ static std::string getScriptHelp(std::string path, std::string helpprefix)
return "No help available."; return "No help available.";
} }
static std::map<string,string> listScripts(PluginManager *plug_mgr, std::string path) static void listScripts(PluginManager *plug_mgr, std::map<string,string> &pset, std::string path, bool all, std::string prefix = "")
{ {
std::vector<string> files; std::vector<string> files;
getdir(path, files); getdir(path, files);
std::map<string,string> pset;
for (size_t i = 0; i < files.size(); i++) for (size_t i = 0; i < files.size(); i++)
{ {
if (hasEnding(files[i], ".lua")) if (hasEnding(files[i], ".lua"))
{ {
std::string help = getScriptHelp(path + files[i], "-- "); std::string help = getScriptHelp(path + files[i], "-- ");
pset[files[i].substr(0, files[i].size()-4)] = help; pset[prefix + files[i].substr(0, files[i].size()-4)] = help;
} }
else if (plug_mgr->eval_ruby && hasEnding(files[i], ".rb")) else if (plug_mgr->eval_ruby && hasEnding(files[i], ".rb"))
{ {
std::string help = getScriptHelp(path + files[i], "# "); std::string help = getScriptHelp(path + files[i], "# ");
pset[files[i].substr(0, files[i].size()-3)] = help; pset[prefix + files[i].substr(0, files[i].size()-3)] = help;
}
else if (all && !files[i].empty() && files[i][0] != '.')
{
listScripts(plug_mgr, pset, path+files[i]+"/", all, prefix+files[i]+"/");
} }
} }
return pset;
} }
static bool fileExists(std::string path) static bool fileExists(std::string path)
@ -335,7 +337,7 @@ command_result Core::runCommand(color_ostream &con, const std::string &first, ve
con.print("Basic commands:\n" con.print("Basic commands:\n"
" help|?|man - This text.\n" " help|?|man - This text.\n"
" help COMMAND - Usage help for the given command.\n" " help COMMAND - Usage help for the given command.\n"
" ls|dir [PLUGIN] - List available commands. Optionally for single plugin.\n" " ls|dir [-a] [PLUGIN] - List available commands. Optionally for single plugin.\n"
" cls - Clear the console.\n" " cls - Clear the console.\n"
" fpause - Force DF to pause.\n" " fpause - Force DF to pause.\n"
" die - Force DF to close immediately\n" " die - Force DF to close immediately\n"
@ -469,6 +471,12 @@ command_result Core::runCommand(color_ostream &con, const std::string &first, ve
} }
else if(first == "ls" || first == "dir") else if(first == "ls" || first == "dir")
{ {
bool all = false;
if (parts.size() && parts[0] == "-a")
{
all = true;
vector_erase_at(parts, 0);
}
if(parts.size()) if(parts.size())
{ {
string & plugname = parts[0]; string & plugname = parts[0];
@ -491,7 +499,7 @@ command_result Core::runCommand(color_ostream &con, const std::string &first, ve
con.print( con.print(
"builtin:\n" "builtin:\n"
" help|?|man - This text or help specific to a plugin.\n" " help|?|man - This text or help specific to a plugin.\n"
" ls [PLUGIN] - List available commands. Optionally for single plugin.\n" " ls [-a] [PLUGIN] - List available commands. Optionally for single plugin.\n"
" cls - Clear the console.\n" " cls - Clear the console.\n"
" fpause - Force DF to pause.\n" " fpause - Force DF to pause.\n"
" die - Force DF to close immediately\n" " die - Force DF to close immediately\n"
@ -523,7 +531,8 @@ command_result Core::runCommand(color_ostream &con, const std::string &first, ve
con.print(" %-22s- %s\n",(*iter).name.c_str(), (*iter).description.c_str()); con.print(" %-22s- %s\n",(*iter).name.c_str(), (*iter).description.c_str());
con.reset_color(); con.reset_color();
} }
auto scripts = listScripts(plug_mgr, getHackPath() + "scripts/"); std::map<string, string> scripts;
listScripts(plug_mgr, scripts, getHackPath() + "scripts/", all);
if (!scripts.empty()) if (!scripts.empty())
{ {
con.print("\nscripts:\n"); con.print("\nscripts:\n");