diff options
author | luigi1111 <luigi1111w@gmail.com> | 2021-01-15 23:46:14 -0500 |
---|---|---|
committer | luigi1111 <luigi1111w@gmail.com> | 2021-01-15 23:46:14 -0500 |
commit | 218981eba1cb274a547a59583257b2ac22ef3901 (patch) | |
tree | c8a4f278b681bf4ffe5516b550cedfe5a46aee47 | |
parent | Merge pull request #7119 (diff) | |
parent | readline_buffer: Avoid consecutive duplicates in the history (diff) | |
download | monero-218981eba1cb274a547a59583257b2ac22ef3901.tar.xz |
Merge pull request #7137
f2ad539 readline_buffer: Avoid consecutive duplicates in the history (codesoap)
-rw-r--r-- | contrib/epee/src/readline_buffer.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/contrib/epee/src/readline_buffer.cpp b/contrib/epee/src/readline_buffer.cpp index bcf499963..1047d1696 100644 --- a/contrib/epee/src/readline_buffer.cpp +++ b/contrib/epee/src/readline_buffer.cpp @@ -6,6 +6,7 @@ #include <boost/thread/lock_guard.hpp> #include <boost/algorithm/string.hpp> +static bool same_as_last_line(const std::string&); static void install_line_handler(); static void remove_line_handler(); @@ -175,8 +176,11 @@ static void handle_line(char* line) boost::trim_right(test_line); if(!test_line.empty()) { - add_history(test_line.c_str()); - history_set_pos(history_length); + if (!same_as_last_line(test_line)) + { + add_history(test_line.c_str()); + history_set_pos(history_length); + } if (test_line == "exit" || test_line == "q") exit = true; } @@ -192,6 +196,16 @@ static void handle_line(char* line) return; } +// same_as_last_line returns true, if the last line in the history is +// equal to test_line. +static bool same_as_last_line(const std::string& test_line) +{ + // Note that state->offset == state->length, when a new line was entered. + HISTORY_STATE* state = history_get_history_state(); + return state->length > 0 + && test_line.compare(state->entries[state->length-1]->line) == 0; +} + static char* completion_matches(const char* text, int state) { static size_t list_index; |