if (enabled_)
newline();
hide();
- pushHistory(text_);
+ pushHistory(text_, true);
callback_(text_);
clear();
}
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()
+ && (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;
}
}
///\name History
///\{
- void pushHistory(std::string const & text); ///< Add string \a text to history
+ void pushHistory(std::string const & text, bool accept = false);
+ ///< Add string \a text to history
void prevHistory(); ///< Switch to previous history entry
void nextHistory(); ///< Switch to next history entry