[Lldb-commits] [PATCH] D81001: [lldb] Display autosuggestion part in gray if there is one possible suggestion

Raphael Isemann via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Thu Aug 6 04:30:49 PDT 2020

teemperor added a comment.

In D81001#2199205 <https://reviews.llvm.org/D81001#2199205>, @gedatsu217 wrote:

>> So the way the issue with the single space is now solved is by doing CC_REDISPLAY when we're only adding the single space? Isn't that also deleting the whole autosuggestion?
> Yes. CC_REDISPLAY can delete all the gray characters left.

So, if I would type "b" and then press tab, the autosuggestion would briefly disappear until I type the next character?

Comment at: lldb/source/Host/common/Editline.cpp:1081
+    if (spaces_to_print > 0) {
+      std::string spaces = std::string((int)spaces_to_print, ' ');
+      fputs(spaces.c_str(), m_output_file);
gedatsu217 wrote:
> teemperor wrote:
> > The `(int)` cast isn't necessary.
> I found that lldb crashed. Sorry, I should have checked more when I uploaded this.
> I use spaces_to_print as size_t, but this sometimes becomes less than zero. So, I have to use this as int.
Yeah I see that spaces_to_print can overflow. How about this code instead that avoids all the casting and overflowing and so on:

size_t new_autosuggestion_size = line.size() + to_add->length();
// If the previous command line + autosuggestion was longer than the
// current autosuggestion, make sure that the autosuggestion is overwriting
// the old output by enough adding trailing spaces.
if (new_autosuggestion_size < m_previous_autosuggestion_size) {
  size_t spaces_to_print = m_previous_autosuggestion_size - new_autosuggestion_size;
  std::string spaces = std::string(spaces_to_print, ' ');
  fputs(spaces.c_str(), m_output_file);
m_previous_autosuggestion_size = new_autosuggestion_size;



More information about the lldb-commits mailing list