X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FTermlib%2FEditor.cc;h=ce6a3fb140dc5a7719b2a2de3d5a3f4fc19fe00c;hb=8da6e83b001f0ae8383af7eb4b3e3a079178a777;hp=8d16f4db9d923eecec3450ce1aee9253417a7e42;hpb=2e64ec3584f231af8c4aab0b780046b355ff64ae;p=senf.git diff --git a/Utils/Termlib/Editor.cc b/Utils/Termlib/Editor.cc index 8d16f4d..ce6a3fb 100644 --- a/Utils/Termlib/Editor.cc +++ b/Utils/Termlib/Editor.cc @@ -276,7 +276,7 @@ prefix_ void senf::term::BaseEditor::write(std::string const & s) /////////////////////////////////////////////////////////////////////////// prefix_ senf::term::LineEditor::LineEditor(AbstractTerminal & terminal, AcceptCallback cb) - : BaseEditor(terminal), enabled_ (true), prompt_ ("$"), promptWidth_ (1u), editWidth_ (0u), + : BaseEditor(terminal), enabled_ (false), prompt_ ("$"), promptWidth_ (1u), editWidth_ (0u), text_ (""), point_ (0u), displayPos_ (0u), lastKey_ (0u), callback_ (cb), historyPoint_ (0u) { defineKey(KeyParser::Return, &bindings::accept); @@ -346,7 +346,7 @@ prefix_ void senf::term::LineEditor::accept() if (enabled_) newline(); hide(); - pushHistory(text_); + pushHistory(text_, true); callback_(text_); clear(); } @@ -430,15 +430,16 @@ prefix_ void senf::term::LineEditor::insert(std::string const & text) redisplay(); } -prefix_ void senf::term::LineEditor::pushHistory(std::string const & text) +prefix_ void senf::term::LineEditor::pushHistory(std::string const & text, bool accept) { if (! text.empty() - && (historyPoint_ == history_.size() || history_[historyPoint_] != text) + && (accept || historyPoint_ == history_.size() || history_[historyPoint_] != text) && (history_.empty() || history_.back() != text)) { history_.push_back(text); while (history_.size() > MAX_HISTORY_SIZE) history_.erase(history_.begin()); - historyPoint_ = history_.size() - 1; + if (accept) + historyPoint_ = history_.size() - 1; } } @@ -465,7 +466,7 @@ prefix_ void senf::term::LineEditor::nextHistory() } } -prefix_ void senf::term::LineEditor::auxDisplay(int line, std::string const & text) +prefix_ void senf::term::LineEditor::auxDisplay(unsigned line, std::string const & text) { toLine(line+1); clearLine(); @@ -521,7 +522,7 @@ prefix_ bool senf::term::LineEditor::cb_init() if (!BaseEditor::cb_init()) return false; prompt(prompt_); - forceRedisplay(); + show(); return true; }