Files
bed/src/commands/ed/ed.cc
T

41 lines
980 B
C++

#include "commands/ed/ed.h"
#include "cli.h"
namespace crib::commands::ed {
std::string summary() {
return "A POSIX-compliant line editor.";
}
void help() {}
void run(std::vector<std::string> args) {
std::string prompt = "";
std::filesystem::path filepath;
bool suppress = false;
for (size_t i = 1; i < args.size(); i++) {
if (args[i] == "-p") {
i++;
if (i >= args.size())
throw crib::cli::cli_error("Prompt not specified!", 1);
prompt = args[i];
} else if (args[i] == "-s") {
suppress = true;
} else {
if (filepath.string().size())
throw crib::cli::cli_error("Invalid arguments given.", 1);
filepath = args[i];
}
}
Ed ed(filepath, suppress, prompt);
std::string command;
while (true) {
std::string cmd;
if (ed.prompt_mode)
std::cout << ed.prompt;
bool eof = !std::getline(std::cin, cmd);
if (!ed.handle(cmd, eof))
return;
}
}
} // namespace crib::commands::ed