teemperor added a comment. 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?
In D81001#2190864 <https://reviews.llvm.org/D81001#2190864>, @gedatsu217 wrote: >>>> I don't think the value of m_previous_autosuggestion_size should only grow >>>> (which is what this if is doing), as this way we just keep printing a >>>> longer and longer space buffer over time. Just printing enough to clear >>>> the buffer of the previous completion is enough. >>> >>> If I keep the number of characters of the only previous command, I think >>> there is a problem. For example, If I type "help frame var" → "help frame >>> info" → "help frame v", the remains are hidden. However, If I type "help >>> frame var" → "help frame info" → "help" → "help frame v", the number of >>> characters of "help frame var" is more than that of "help", so "help frame >>> v[aro]" is displayed. What do you think? >> >> Not sure if I understand your example correctly, but as soon as you type >> "help frame ", you should have an autosuggestion of "help frame info" and >> then typing the "v" should clear the "nfo" part. The "help" autosuggestion >> should not be involved at all in any logic after you typed "help "? > > What I mean is that if I should keep the length of characters of the only > previous command, following thing occurs. > > 1. execution "help frame var" and m_previous_autosuggestion_size = len("help > frame var") = 14 > 2. execution "help frame info" and m_previous_autosuggestion_size = len("help > frame info") = 15 > 3. execution "help" and m_previous_autosuggestion_size = len("help") = 4 > 4. Typing "help frame v". Then, spaces_to_print = > m_previous_autosuggestion_size - line.size() - to_add.getValue().length() = 4 > - 12 - 2 < 0. So, spaces are not added. (In short, "help frame v[aro]" is > displayed.) > > (Maybe, I do not understand what you say. ) I think you got it :). My point was that `m_previous_autosuggestion_size` is updated everytime you type a character from what I can see, so you don't see the `4` from step 3. It's more like this from what I can tell: 1. same as your step 1. 2. same as your step 2. 3. same asyour step 3: execution "help" and m_previous_autosuggestion_size = len("help") = 4 3.5 [new step]: Typing "help frame ". m_previous_autosuggestion_size = len("help frame info") = 15. This is because we update the size in TypedCharacter which gets triggered for every character. 4. Typing "help frame v". Then, spaces_to_print = m_previous_autosuggestion_size - line.size() - to_add.getValue().length() = 15 - 12 - 2 = 1. (which is exactly the space needed to overwrite the 'o'). ================ Comment at: lldb/source/Host/common/Editline.cpp:1009 to_add.push_back(request.GetParsedArg().GetQuoteChar()); + if (m_suggestion_callback && to_add.empty()) { + to_add.push_back(' '); ---------------- I think this can be shortened to just: ``` lang=c++ to_add.push_back(' '); el_insertstr(m_editline, to_add.c_str()); // Clear autosuggestion from line buffer if we only added a space. if (to_add == " ") return CC_REDISPLAY; return CC_REFRESH; } ``` ================ 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); ---------------- The `(int)` cast isn't necessary. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D81001/new/ https://reviews.llvm.org/D81001 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits