X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/89a95d4776098c0d70653eebdc4f455f2e8e341d..ed35b2d30b2d7f336d94bbab59f114a21064ad58:/Console.cpp diff --git a/Console.cpp b/Console.cpp index f4f5b10..8a8277e 100644 --- a/Console.cpp +++ b/Console.cpp @@ -292,7 +292,7 @@ static CYUTF8String Run(CYPool &pool, int client, const std::string &code) { static std::ostream *out_; -static void Output(CYUTF8String json, std::ostream *out, bool expand = false, bool reparse = false) { +static void Output(CYUTF8String json, std::ostream *out, bool reparse = false) { CYPool pool; if (reparse) do { @@ -317,29 +317,7 @@ static void Output(CYUTF8String json, std::ostream *out, bool expand = false, bo if (data == NULL || out == NULL) return; - if (!expand || - data[0] != '@' && data[0] != '"' && data[0] != '\'' || - data[0] == '@' && data[1] != '"' && data[1] != '\'' - ) - CYLexerHighlight(data, size, *out); - else for (size_t i(0); i != size; ++i) - if (data[i] != '\\') - *out << data[i]; - else switch(data[++i]) { - case '\0': goto done; - case '\\': *out << '\\'; break; - case '\'': *out << '\''; break; - case '"': *out << '"'; break; - case 'b': *out << '\b'; break; - case 'f': *out << '\f'; break; - case 'n': *out << '\n'; break; - case 'r': *out << '\r'; break; - case 't': *out << '\t'; break; - case 'v': *out << '\v'; break; - default: *out << '\\'; --i; break; - } - - done: + CYLexerHighlight(data, size, *out); *out << std::endl; } @@ -400,6 +378,9 @@ class History { } } void operator +=(std::string command) { + if (HIST_ENTRY *entry = history_get(where_history())) + if (command == entry->line) + return; add_history(command.c_str()); ++histlines_; } @@ -626,9 +607,9 @@ static void CYConsolePrepTerm(int meta) { CYConsoleRemapKeys(vi_movement_keymap); } -static void CYOutputRun(const std::string &code, bool expand = false, bool reparse = false) { +static void CYOutputRun(const std::string &code, bool reparse = false) { CYPool pool; - Output(Run(pool, client_, code), &std::cout, expand, reparse); + Output(Run(pool, client_, code), &std::cout, reparse); } static void Console(CYOptions &options) { @@ -658,7 +639,6 @@ static void Console(CYOptions &options) { bool bypass(false); bool debug(false); - bool expand(false); bool lower(true); bool reparse(false); @@ -674,13 +654,13 @@ static void Console(CYOptions &options) { CYOutputRun(""); - struct sigaction action; - sigemptyset(&action.sa_mask); - action.sa_handler = &sigint; - action.sa_flags = 0; - sigaction(SIGINT, &action, NULL); - for (;;) { + struct sigaction action; + sigemptyset(&action.sa_mask); + action.sa_handler = &sigint; + action.sa_flags = 0; + sigaction(SIGINT, &action, NULL); + if (setjmp(ctrlc_) != 0) { mode_ = Working; *out_ << std::endl; @@ -726,9 +706,6 @@ static void Console(CYOptions &options) { *out_ << "done." << std::endl; } else if (data == "exit") { return; - } else if (data == "expand") { - expand = !expand; - *out_ << "expand == " << (expand ? "true" : "false") << std::endl; } else if (data == "lower") { lower = !lower; *out_ << "lower == " << (lower ? "true" : "false") << std::endl; @@ -798,7 +775,7 @@ static void Console(CYOptions &options) { std::cout << std::endl; } - CYOutputRun(code, expand, reparse); + CYOutputRun(code, reparse); } }