浏览代码

LibLine: Don't compare byte and code point counts of the input text

This commit fixes the odd state after pasting some text containing
multibyte code points.
This also increases the input buffer size, as reading 16 bytes at a time
felt slightly laggy when pasting a large number of emojis :^)
Ali Mohammad Pur 1 年之前
父节点
当前提交
99cc0514a7
共有 1 个文件被更改,包括 5 次插入4 次删除
  1. 5 4
      Userland/Libraries/LibLine/Editor.cpp

+ 5 - 4
Userland/Libraries/LibLine/Editor.cpp

@@ -384,7 +384,7 @@ void Editor::insert(StringView string_view)
         insert(ch);
 }
 
-void Editor::insert(const u32 cp)
+void Editor::insert(u32 const cp)
 {
     StringBuilder builder;
     builder.append(Utf32View(&cp, 1));
@@ -842,7 +842,7 @@ ErrorOr<void> Editor::handle_read_event()
 
     auto prohibit_scope = prohibit_input();
 
-    char keybuf[16];
+    char keybuf[1024];
     ssize_t nread = 0;
 
     if (!m_incomplete_data.size())
@@ -1235,10 +1235,11 @@ ErrorOr<void> Editor::handle_read_event()
         insert(code_point);
     }
 
-    if (consumed_code_points == m_incomplete_data.size()) {
+    if (consumed_code_points == valid_bytes) {
         m_incomplete_data.clear();
     } else {
-        for (size_t i = 0; i < consumed_code_points; ++i)
+        auto bytes_to_drop = input_view.byte_offset_of(consumed_code_points + 1);
+        for (size_t i = 0; i < bytes_to_drop; ++i)
             m_incomplete_data.take_first();
     }