diff --git a/src/Classes/EditControl.lua b/src/Classes/EditControl.lua index 97ce2c92fe..606e8aa0cb 100644 --- a/src/Classes/EditControl.lua +++ b/src/Classes/EditControl.lua @@ -530,7 +530,6 @@ function EditClass:OnKeyDown(key, doubleClick) if self.pasteFilter then text = self.pasteFilter(text) end - text = text:gsub("[\128-\255]","?") if self.sel and self.sel ~= self.caret then self:ReplaceSel(text) else @@ -607,8 +606,10 @@ function EditClass:OnKeyDown(key, doubleClick) if self.sel and self.sel ~= self.caret then self:ReplaceSel("") elseif self.caret > 1 then - local len = 1 + -- Remove one whole character, which may be several bytes wide. + local len = self.caret - (utf8.next(self.buf, self.caret, -1) or 1) if IsKeyDown("CTRL") then + len = 1 while self.caret - len > 1 and self.buf:sub(self.caret - len, self.caret - len):match("%s") and not self.buf:sub(self.caret - len - 1, self.caret - len - 1):match("\n") do len = len + 1 end @@ -632,8 +633,10 @@ function EditClass:OnKeyDown(key, doubleClick) if self.sel and self.sel ~= self.caret then self:ReplaceSel("") elseif self.caret <= #self.buf then - local len = 1 + -- Remove one whole character, which may be several bytes wide. + local len = (utf8.next(self.buf, self.caret, 1) or (#self.buf + 1)) - self.caret if IsKeyDown("CTRL") then + len = 1 while self.caret + len <= #self.buf and self.buf:sub(self.caret + len - 1, self.caret + len - 1):match("%s") and not self.buf:sub(self.caret + len, self.caret + len):match("\n") do len = len + 1 end