xi-editor / xi-mac

The xi-editor mac frontend.
Apache License 2.0
3.02k stars 147 forks source link

Extra characters while inputting Tamil Text #366

Closed SundarTM closed 5 years ago

SundarTM commented 5 years ago

While Inputting Tamil text with compound letters (கா, கி, etc.), Xi-editor generates additional characters. The rpc log collected shows that xi-mac making redundant duplicate rpc calls for each compound character insertion. This causes extra characters to be left in the text.

Steps to recreate:

Logs: The duplicate calls are marked bold. {"method":"edit","params":{"method":"insert","view_id":"view-id-2","params":{"chars":"க"}}} {"method":"edit","params":{"method":"delete_backward","view_id":"view-id-2","params":[]}} {"method":"edit","params":{"method":"insert","view_id":"view-id-2","params":{"chars":"கா"}}} {"method":"edit","params":{"method":"delete_backward","view_id":"view-id-2","params":[]}} {"method":"edit","params":{"method":"insert","view_id":"view-id-2","params":{"chars":"கா"}}} {"method":"edit","params":{"method":"insert","view_id":"view-id-2","params":{"chars":"க"}}} {"method":"edit","params":{"method":"delete_backward","view_id":"view-id-2","params":[]}} {"method":"edit","params":{"method":"insert","view_id":"view-id-2","params":{"chars":"கி"}}} {"method":"edit","params":{"method":"delete_backward","view_id":"view-id-2","params":[]}} {"method":"edit","params":{"method":"insert","view_id":"view-id-2","params":{"chars":"கி"}}} {"method":"edit","params":{"method":"insert","view_id":"view-id-2","params":{"chars":"த"}}} {"method":"edit","params":{"method":"delete_backward","view_id":"view-id-2","params":[]}} {"method":"edit","params":{"method":"insert","view_id":"view-id-2","params":{"chars":"தம"}}} {"method":"edit","params":{"method":"delete_backward","view_id":"view-id-2","params":[]}} {"method":"edit","params":{"method":"delete_backward","view_id":"view-id-2","params":[]}} {"method":"edit","params":{"method":"insert","view_id":"view-id-2","params":{"chars":"தம்"}}} {"method":"edit","params":{"method":"delete_backward","view_id":"view-id-2","params":[]}} {"method":"edit","params":{"method":"delete_backward","view_id":"view-id-2","params":[]}}
{"method":"edit","params":{"method":"insert","view_id":"view-id-2","params":{"chars":"தம்"}}}

cmyr commented 5 years ago

Okay looking at this a bit more, there's something strange happening in our IME handling: our fn replaceCharactersInRange: is being called twice, first by setMarkedText and then again by insertText; and since the actual insertion is handled in replaceCharactersInRange, that's being called twice as well.

The next step here is to go re-read whatever docs are available on the NSInputClient protocol, to figure out exactly what the expected behaviour of these two functions is, and update them accordingly.

edit: if someone wants to take this on they're more then welcome; it isn't on the top of my list right now but is definitely a Real Bug, and should be a pretty self-contained fix.

SundarTM commented 5 years ago

Created PR #368