-
Notifications
You must be signed in to change notification settings - Fork 8.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Terminal hangs or prints repetitive characters when using Japanese IME #14349
Comments
The same problem occurs with PowerShell version 5.1.22621.608. 2022-11-06-13-35-41.mp4 |
Just to be sure: You're saying this never happens if you are not at the right side edge? Because if that's true, then that would narrow down the issue quite a lot and make fixing it much easier. |
I tested this again and found out this also happens when I am not at the right side edge. Steps to reproduce: 2022-11-08-12-36-32.mp4 |
I uninstalled version 1.15.2875.0 and installed https://github.com/microsoft/terminal/releases/download/v1.14.2281.0/Microsoft.WindowsTerminal_Win11_1.14.2282.0_8wekyb3d8bbwe.msixbundle and it seems the problem go away. |
Unfortunately, 1.16 still has this issue.
Although this is a Japanese message, I hope you can get information from this. 😅 Every time this happens, I need to uninstall 1.15, install 1.14 and recover setting.json. I checked the settings, but I cloud not found the setting about auto-update. |
1.17 has this too. https://superuser.com/questions/1676001/windows-stop-killing-my-terminals-for-an-update |
I genuinely can't figure out how to reproduce the issue. I've tried writing some variation of "どうぞよろしくお願いいたします。" over and over again for about But clearly this regression is caused by either of these two commits, both of which first shipped in v1.15: I don't think either of the two commits themselves is "buggy", but rather that they make bugs in TSF (Text Services Framework) obvious. This is because backspacing like in hnakamur's videos causes the I think what's happening here is that TSF is either:
2c922e1 could have triggered the regression because it drops clamping the signed ed800dc could have triggered the regression because it changed this: _activeTextStart = ::base::ClampMin(_activeTextStart, ::base::ClampedNumeric<size_t>(range.StartCaretPosition)); into this: _activeTextStart = std::min(_activeTextStart, _inputBuffer.size()); I think the latter is technically more correct 2, but if TSF is in a bad state where the internal state didn't properly reset, then this may be off. Footnotes
|
I've marked #15938 as closing this issue, but I'll have to unfortunately rely on you to validate it, as I was entirely unable to reproduce the issue. 😟 |
Can I download the binary built with #15938 included? As of 1.17.11461.0, I just reproduce the issue just by inputting and deleting "日本語を入力して" three times. |
@hnakamur sure can! You should be able to go to: https://dev.azure.com/ms/terminal/_build/results?buildId=494745&view=artifacts&pathAsName=false&type=publishedArtifacts Then navigate to the If there are subsequent commits, then this link: will take you to the latest CI run |
Thanks, your shortcut link works. 2023-09-07.22-53-27.mp4 |
I tried again with「以前のバージョンのMicrosoft IMEを使う」 on, the issue was reproduced. As for me, I am fine with the current version of Microsoft IME. |
Hmm, I think that's fairly good news for us (Windows Terminal) at least, because it implies that this is indeed a bug in TSF. (An application shouldn't notice a difference in behavior between the legacy and new IME after all.) Would it be fine for us to only support the new IME? BTW I tried to reproduce the issue with the legacy IME and again couldn't get it to reproduce it. 😟 |
I suppose the support for the old IME would be nice, but I am fine without it. I was using 「日本語を入力して」"nihongowonyuuryokusite" to reproduce the issue. |
Thanks! But I still can't get it to reproduce the issue. 🥲 I just genuinely can't figure this out.
One of my main tasks has been to improve the Internationalization of this project for a while now and I don't intend to give up just yet. 🙂 I was hoping to unify conhost's IME with the one in Windows Terminal at some point. conhost's IME implementation has two benefits: It uses TSF directly (without the WinRT (I prefer the latter a lot.) I'm just not sure when I can get to that. There's a lot of remaining Internationalization bugs in this project after all... But there's a good chance that using TSF directly without the WinRT wrapper will allow us to properly support the legacy IME and fix all those weird edge cases. @zadjii-msft Should we close this bug, or repurpose it to track the Japanese legacy IME being broken? I think the latter might be good. This issue would get fixed properly if we ever manage to integrate the conhost TSF implementation into WT. |
When using tab to cycle through items I noticed that when the text would hit the right side of the terminal it would start bugging out for consecutive uses of tab. It seems to print previous lines again although this is purely visual. japanese.text.bug.mp4Win Terminal version: 1.17.11461.0 |
Next in the popular series of minor refactorings: Out with the old, in with the new! This PR removes all of the existing TSF code, both for conhost and Windows Terminal. conhost's TSF implementation was awful: It allocated an entire text buffer _per line_ of input. Additionally, its implementation spanned a whopping 40 files and almost 5000 lines of code. Windows Terminal's implementation was absolutely fine in comparison, but it was user unfriendly due to two reasons: Its usage of the `CoreTextServices` WinRT API indirectly meant that it used a non-transitory TSF document, which is not the right choice for a terminal. A `TF_SS_TRANSITORY` document (-context) indicates to TSF that it cannot undo a previously completed composition which is exactly what we need: Once composition has completed we send the result to the shell and we cannot undo this later on. The WinRT API does not allow us to use `TF_SS_TRANSITORY` and so it's unsuitable for our application. Additionally, the implementation used XAML to render the composition instead of being part of our text renderer, which resulted in the text looking weird and hard to read. The new implementation spans just 8 files and is ~1000 lines which should make it significantly easier to maintain. The architecture is not particularly great, but it's certainly better than what we had. The implementation is almost entirely identical between both conhost and Windows Terminal and thus they both also behave identical. It fixes an uncountable number of subtle bugs in the conhost TSF implementation, as it failed to check for status codes after calls. It also adds several new features, like support for wavy underlines (as used by the Japanese IME), dashed underlines (the default for various languages now, like Vietnamese), colored underlines, colored foreground/background controlled by the IME, and more! I have tried to replicate the following issues and have a high confidence that they're resolved now: Closes #1304 Closes #3730 Closes #4052 Closes #5007 (as it is not applicable anymore) Closes #5110 Closes #6186 Closes #6192 Closes #13805 Closes #14349 Closes #14407 Closes #16180 For the following issues I'm not entirely sure if it'll fix it, but I suspect it's somewhat likely: #13681 #16305 #16817 Lastly, there's one remaining bug that I don't know how to resolve. However, that issue also plagues conhost and Windows Terminal right now, so it's at least not a regression: * Press Win+. (emoji picker) and close it * Move the window around * Press Win+. This will open the emoji picker at the old window location. It also occurs when the cursor moves within the window. While this is super annoying, I could not find a way to fix it. ## Validation Steps Performed * See the above closed issues * Use Vietnamese Telex and type "xin choaf" Results in "xin chào" ✅ * Use the MS Japanese IME and press Alt+` Toggles between the last 2 modes ✅ * Use the MS Japanese IME, type "kyouhaishaheiku", and press Space * The text is converted, underlined and the first part is doubly underlined ✅ * Left/Right moves between the 3 segments ✅ * Home/End moves between start/end ✅ * Esc puts a wavy line under the current segment ✅ * Use the Korean IME, type "gksgks" This results in "한한" ✅ * Use the Korean IME, type "gks", and press Right Ctrl Opens a popup which allows you to navigate with Arrow/Tab keys ✅
We just published a major update to our IME implementation in the nightly Canary branch. It was rewritten from the ground up and has tons of improvements! If you're interested in trying it out, you can get it here: https://aka.ms/terminal-canary-installer If you encounter any issues or have any suggestions, or if you simply like/dislike the changes, please let us know! Thank you for bearing with us. 😊 |
Important
📌 plan of record: move the console tsf implementation to the Terminal codebase
Windows Terminal version
1.15.2875.0
Windows build number
10.0.22621.755
Other Software
WSL2 Ubuntu 22.04.1 LTS (version 2204.1.23.0)
Steps to reproduce
Input some Japanese characters using Microsoft IME at the right side edge of the terminal window.
Expected Behavior
Characters are converted correctly.
Actual Behavior
Sometimes repetitive characters are inputted, sometimes the terminal hangs or crashes.
2022-11-06-12-46-12.mp4
2022-11-06-13-03-10.mp4
The text was updated successfully, but these errors were encountered: