From 6172fb983cf8c722499c3be91804ca0ea9d5913c Mon Sep 17 00:00:00 2001 From: Josh Yelon Date: Tue, 9 Nov 2021 12:46:24 -0500 Subject: [PATCH] Minor bugfix to drivenengine readline mode --- luprex/core/cpp/drivenengine.cpp | 14 +++++++------- luprex/core/cpp/drivenengine.hpp | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/luprex/core/cpp/drivenengine.cpp b/luprex/core/cpp/drivenengine.cpp index 712caaa2..9ebb0e7a 100644 --- a/luprex/core/cpp/drivenengine.cpp +++ b/luprex/core/cpp/drivenengine.cpp @@ -23,9 +23,9 @@ Channel::~Channel() { driven_->channels_[chid_] = nullptr; } -void Channel::show_or_hide_command() { - // Decide if we should hide the command, and if so, do it. - if ((!readline_enabled_) || (driven_->stop_driver_) || (sb_out_->fill() > 0)) { +void Channel::show_or_hide_command(bool ignore_sb_out) { + bool sb_out_empty = (sb_out_->fill() == 0) || ignore_sb_out; + if (!sb_out_empty || (!readline_enabled_) || (driven_->stop_driver_)) { int ccsize = current_prompt_.size() + current_command_.size(); readline_echo_ += util::repeat_string("\b \b", ccsize); current_prompt_ = ""; @@ -62,7 +62,7 @@ void Channel::show_or_hide_command() { void Channel::set_prompt(const std::string &p) { desired_prompt_ = p; - show_or_hide_command(); + show_or_hide_command(false); } void Channel::feed_readline(int nbytes, const char *bytes) { @@ -72,7 +72,7 @@ void Channel::feed_readline(int nbytes, const char *bytes) { // Ignore newline immediately after carriage return. // Otherwise, crlf produces two newlines. } else if ((c == '\r') || (c == '\n')) { - show_or_hide_command(); + show_or_hide_command(true); readline_echo_ = readline_echo_ + " \n"; sb_in_->write_bytes(desired_command_); sb_in_->write_uint8('\n'); @@ -95,7 +95,7 @@ void Channel::feed_readline(int nbytes, const char *bytes) { } void Channel::peek_outgoing(int *nbytes, const char **bytes) { - show_or_hide_command(); + show_or_hide_command(false); if (readline_echo_.size() > 0) { *nbytes = readline_echo_.size(); *bytes = readline_echo_.c_str(); @@ -123,7 +123,7 @@ void Channel::set_readline(bool e) { if (e != readline_enabled_) { readline_enabled_ = e; desired_command_ = ""; - show_or_hide_command(); + show_or_hide_command(false); } } diff --git a/luprex/core/cpp/drivenengine.hpp b/luprex/core/cpp/drivenengine.hpp index 5d4d9ff2..c403df68 100644 --- a/luprex/core/cpp/drivenengine.hpp +++ b/luprex/core/cpp/drivenengine.hpp @@ -162,7 +162,7 @@ private: void feed_readline(int nbytes, const char *bytes); void peek_outgoing(int *nbytes, const char **bytes); void sent_outgoing(int nbytes); - void show_or_hide_command(); + void show_or_hide_command(bool ignore_sb_out); private: static const int READLINE_MAX=512;