Sogou IME candidate/composition UI invisible in Windows Terminal Stable 1.23.2512.16003 (Preview 1.24 works) #23896

Closed
opened 2026-01-31 08:55:26 +00:00 by claunia · 20 comments
Owner

Originally created by @CNTianQi233 on GitHub (Dec 22, 2025).

Windows Terminal version

1.23.2512.16003

Windows build number

10.0.26100.4351

Other Software

  • Sogou Pinyin IME 15.12.0.2761 (SGMyInput.exe / SogouImeBroker.exe / SGTool.exe)
  • Windows Terminal Preview (for A/B comparison): 1.24.2509.25002
  • Microsoft Pinyin IME: works normally in the same Terminal Stable session

Steps to reproduce

  1. Install and keep both Windows Terminal Stable and Windows Terminal Preview on the same machine.
  2. Open Windows Terminal Stable (1.23.2512.16003). Ensure it is NOT running elevated.
  3. Click inside the terminal content area so the caret is in the terminal.
  4. Switch to Sogou IME (Chinese mode) and type pinyin, e.g. "nihao" or "ceshi".
  5. Observe that the candidate/composition UI is not visible. However, pressing number keys / Enter still commits the converted Chinese text into the terminal.
  6. Repeat the same steps in Windows Terminal Preview (1.24.2509.25002): the candidate/composition UI appears normally.

Expected Behavior

Sogou IME candidate/composition window should appear near the caret in the terminal, consistent with other Win32 text input controls and consistent with Windows Terminal Preview on the same machine.

Actual Behavior

In Windows Terminal Stable, when the terminal content area has focus, Sogou IME candidate/composition UI becomes invisible (no candidate list / no composition window), but conversion still works: I can select candidates via number keys or Enter and the committed Chinese text appears in the terminal.

This does NOT happen with Microsoft Pinyin IME, and does NOT happen in Windows Terminal Preview on the same machine.

Diagnostics / traces:

  • Captured ETW traces for both cases using the same WPR profile (Terminal.wprp!DefTerm.Verbose + GeneralProfile).
  • Lost Buffers/Events = 0 in both traces (xperf -a tracestats).
  • Sogou-related processes stay alive in both traces (no crash/exit), which suggests the input pipeline works and only the IME UI is not rendered/positioned.

Attachments:

Originally created by @CNTianQi233 on GitHub (Dec 22, 2025). ### Windows Terminal version 1.23.2512.16003 ### Windows build number 10.0.26100.4351 ### Other Software - Sogou Pinyin IME 15.12.0.2761 (SGMyInput.exe / SogouImeBroker.exe / SGTool.exe) - Windows Terminal Preview (for A/B comparison): 1.24.2509.25002 - Microsoft Pinyin IME: works normally in the same Terminal Stable session ### Steps to reproduce 1. Install and keep both Windows Terminal Stable and Windows Terminal Preview on the same machine. 2. Open Windows Terminal Stable (1.23.2512.16003). Ensure it is NOT running elevated. 3. Click inside the terminal content area so the caret is in the terminal. 4. Switch to Sogou IME (Chinese mode) and type pinyin, e.g. "nihao" or "ceshi". 5. Observe that the candidate/composition UI is not visible. However, pressing number keys / Enter still commits the converted Chinese text into the terminal. 6. Repeat the same steps in Windows Terminal Preview (1.24.2509.25002): the candidate/composition UI appears normally. ### Expected Behavior Sogou IME candidate/composition window should appear near the caret in the terminal, consistent with other Win32 text input controls and consistent with Windows Terminal Preview on the same machine. ### Actual Behavior In Windows Terminal Stable, when the terminal content area has focus, Sogou IME candidate/composition UI becomes invisible (no candidate list / no composition window), but conversion still works: I can select candidates via number keys or Enter and the committed Chinese text appears in the terminal. This does NOT happen with Microsoft Pinyin IME, and does NOT happen in Windows Terminal Preview on the same machine. Diagnostics / traces: - Captured ETW traces for both cases using the same WPR profile (Terminal.wprp!DefTerm.Verbose + GeneralProfile). - Lost Buffers/Events = 0 in both traces (xperf -a tracestats). - Sogou-related processes stay alive in both traces (no crash/exit), which suggests the input pipeline works and only the IME UI is not rendered/positioned. Attachments: - terminal-stable.etl (repro) - terminal-preview.etl (working) - OneDrive folder link: https://1drv.ms/f/c/0dfd59633394b347/IgDmE_Jc2UhiTaY7u-MANJgfAcIJovnPlAXafxPS8hqKktA
claunia added the Issue-BugNeeds-Tag-FixNeeds-Attention labels 2026-01-31 08:55:26 +00:00
Author
Owner

@clapat-bb commented on GitHub (Dec 22, 2025):

I've encountered the same problem. Currently, Sogou Input Method doesn't show any candidate boxes when inputting Chinese characters, while other third-party input methods do.

@clapat-bb commented on GitHub (Dec 22, 2025): I've encountered the same problem. Currently, Sogou Input Method doesn't show any candidate boxes when inputting Chinese characters, while other third-party input methods do.
Author
Owner

@zscv commented on GitHub (Dec 22, 2025):

I encountered the same problem after updating to version 1.23.13503.0. Microsoft Pinyin input works fine for Chinese characters, but Sogou does not display the candidate box when inputting Chinese characters.

@zscv commented on GitHub (Dec 22, 2025): I encountered the same problem after updating to version 1.23.13503.0. Microsoft Pinyin input works fine for Chinese characters, but Sogou does not display the candidate box when inputting Chinese characters.
Author
Owner

@clapat-bb commented on GitHub (Dec 22, 2025):

Haha, when I encountered this problem, I updated to the latest Sogou Input Method and suspected it was a font setting issue from this morning, but after verifying all of these, the problem persisted. I've temporarily switched to WeChat Input Method now; the green interface is quite eye-friendly.

@clapat-bb commented on GitHub (Dec 22, 2025): Haha, when I encountered this problem, I updated to the latest Sogou Input Method and suspected it was a font setting issue from this morning, but after verifying all of these, the problem persisted. I've temporarily switched to WeChat Input Method now; the green interface is quite eye-friendly.
Author
Owner

@o87110 commented on GitHub (Dec 22, 2025):

iFlytek input method also has this problem.

@o87110 commented on GitHub (Dec 22, 2025): iFlytek input method also has this problem.
Author
Owner

@lhecker commented on GitHub (Dec 22, 2025):

If I had to take a guess, I think this is another variant of a bug we fixed in #19046 and #19117. It was first released in v1.24 and also backported to v1.23.12102.0. It should be part of the version you're using.

The problem now is that our IME integration is identical between v1.23 and v1.24, so why does one work and not the other? The diff is completely empty:

git diff origin/release-1.23..origin/release-1.24 src/tsf/Implementation.cpp

This is very weird.


Side note:

The issue back then was actually a bug in QQPinjin itself, and other similar IME. They specify that they want a custom foreground color (TF_CT_COLORREF) and the default background color (TF_CT_NONE). Then, they set the custom foreground color to #000000 black. Since your terminal background is also black, you then couldn't see the IME text anymore. This sounds very similar to your issue.

(If you're wondering what an IME should do instead: They should just not specify any color at all! Simply set both crText|crBk.type to TF_CT_NONE. And if an IME does want a custom color, they should always specify colors for crText, crBk, and crLine at the same time, to ensure that there's no mixups with the application colors.)

@lhecker commented on GitHub (Dec 22, 2025): If I had to take a guess, I think this is another variant of a bug we fixed in #19046 and #19117. It was first released in v1.24 and also backported to [v1.23.12102.0](https://github.com/microsoft/terminal/releases/tag/v1.23.12102.0). It should be part of the version you're using. The problem now is that our IME integration is identical between v1.23 and v1.24, so why does one work and not the other? The diff is completely empty: ```sh git diff origin/release-1.23..origin/release-1.24 src/tsf/Implementation.cpp ``` This is very weird. --- Side note: The issue back then was actually a bug in QQPinjin itself, and other similar IME. They specify that they want a custom foreground color (`TF_CT_COLORREF`) and the default background color (`TF_CT_NONE`). Then, they set the custom foreground color to `#000000` black. Since your terminal background is also black, you then couldn't see the IME text anymore. This sounds very similar to your issue. (If you're wondering what an IME should do instead: They should just not specify any color at all! Simply set both `crText|crBk.type` to `TF_CT_NONE`. And if an IME does want a custom color, they should always specify colors for `crText`, `crBk`, and `crLine` at the same time, to ensure that there's no mixups with the application colors.)
Author
Owner

@lhecker commented on GitHub (Dec 22, 2025):

Ah now that I re-read your issue description, I realize I misunderstood your issue. I thought you meant the completion text, but you meant the candidate window of course. Perhaps I need a second coffee? 😅 I apologize for that. 😢

Unfortunately, for that I can't immediately think of a reason... Our IME integration (TSF) between v1.23 and v1.24 is identical and the window management contains barely 60 lines of changes (most of which is completely unrelated). There's lots of changes in the terminal UI / control code, but that should have no effect on an IME, unless it integrated itself with our UI code. (TSF gives the window coordinates directly to the IME so there should be no need for that.)

We're planning to release v1.24 as the next stable version very soon. So, it may not be worth it to investigate this further. 🙈

@lhecker commented on GitHub (Dec 22, 2025): Ah now that I re-read your issue description, I realize I misunderstood your issue. I thought you meant the completion text, but you meant the candidate window of course. Perhaps I need a second coffee? 😅 I apologize for that. 😢 Unfortunately, for that I can't immediately think of a reason... Our IME integration (TSF) between v1.23 and v1.24 is identical and the window management contains barely 60 lines of changes (most of which is completely unrelated). There's lots of changes in the terminal UI / control code, but that should have no effect on an IME, unless it integrated itself with our UI code. (TSF gives the window coordinates directly to the IME so there should be no need for that.) We're planning to release v1.24 as the next stable version very soon. So, it may not be worth it to investigate this further. 🙈
Author
Owner

@MonchiLin commented on GitHub (Dec 22, 2025):

Based on @lhecker’s reply, I installed version 1.24 using the following command, and Sogou IME now works correctly:

winget install --id Microsoft.WindowsTerminal.Preview -e
@MonchiLin commented on GitHub (Dec 22, 2025): Based on @lhecker’s reply, I installed version 1.24 using the following command, and Sogou IME now works correctly: ```powershell winget install --id Microsoft.WindowsTerminal.Preview -e ```
Author
Owner

@elvismile commented on GitHub (Dec 23, 2025):

I encountered the same problem after updating to version 1.23.13503.0. Microsoft Pinyin input works fine for Chinese characters, but Sogou does not display the candidate box when inputting Chinese characters.

@elvismile commented on GitHub (Dec 23, 2025): I encountered the same problem after updating to version 1.23.13503.0. Microsoft Pinyin input works fine for Chinese characters, but Sogou does not display the candidate box when inputting Chinese characters.
Author
Owner

@Fitmtfk commented on GitHub (Dec 23, 2025):

I have some more information about this bug.My regedit has the same problem.I have two device runing Win11 23H2 but different subversion(22631.6199 and 22631.4112)
22631.6199:Windows Terminal(1.23.13503.0),regedit(10.0.22621.5262) all broken
22631.4112:Windows Terminal(1.21.10351.0),regedit(10.0.22621.4111) all fine
and i try to copy regedit(10.0.22621.4111) with mui to 22631.6199 it works well.
Perhaps there is a causal relationship between these two problems

@Fitmtfk commented on GitHub (Dec 23, 2025): I have some more information about this bug.My regedit has the same problem.I have two device runing Win11 23H2 but different subversion(22631.6199 and 22631.4112) 22631.6199:Windows Terminal(1.23.13503.0),regedit(10.0.22621.5262) all broken 22631.4112:Windows Terminal(1.21.10351.0),regedit(10.0.22621.4111) all fine and i try to copy regedit(10.0.22621.4111) with mui to 22631.6199 it works well. Perhaps there is a causal relationship between these two problems
Author
Owner

@showyourlucky commented on GitHub (Dec 23, 2025):

I resolved this issue using version 1.24.2812
download link: https://github.com/microsoft/terminal/releases/download/v1.24.2812.0/Microsoft.WindowsTerminalPreview_1.24.2812.0_x64.zip

@showyourlucky commented on GitHub (Dec 23, 2025): I resolved this issue using version 1.24.2812 download link: https://github.com/microsoft/terminal/releases/download/v1.24.2812.0/Microsoft.WindowsTerminalPreview_1.24.2812.0_x64.zip
Author
Owner

@eromoe commented on GitHub (Dec 25, 2025):

same problem

@eromoe commented on GitHub (Dec 25, 2025): same problem
Author
Owner

@fengyichui commented on GitHub (Dec 26, 2025):

same problem

@fengyichui commented on GitHub (Dec 26, 2025): same problem
Author
Owner

@airborne007 commented on GitHub (Dec 26, 2025):

version: 1.23.13503.0 also has the same problem

@airborne007 commented on GitHub (Dec 26, 2025): version: 1.23.13503.0 also has the same problem
Author
Owner

@zscv commented on GitHub (Dec 27, 2025):

I've been watching the new version like it's a part-time job every day, but nothing's happening. 😂
I've decided to revert to the previous version. If you have the same problem, you can do the following:

  1. Uninstall the "bad" version:
    winget uninstall --id Microsoft.WindowsTerminal
  2. Go back to the "good" version(eg., v1.23.12811.0):
    winget install --id Microsoft.WindowsTerminal --version 1.23.12811.0
@zscv commented on GitHub (Dec 27, 2025): I've been watching the new version like it's a part-time job every day, but nothing's happening. 😂 I've decided to revert to the previous version. If you have the same problem, you can do the following: 1. Uninstall the "bad" version: `winget uninstall --id Microsoft.WindowsTerminal` 2. Go back to the "good" version(eg., v1.23.12811.0): `winget install --id Microsoft.WindowsTerminal --version 1.23.12811.0`
Author
Owner

@Fitmtfk commented on GitHub (Jan 2, 2026):

I have some more information about this bug.My regedit has the same problem.I have two device runing Win11 23H2 but different subversion(22631.6199 and 22631.4112) 22631.6199:Windows Terminal(1.23.13503.0),regedit(10.0.22621.5262) all broken 22631.4112:Windows Terminal(1.21.10351.0),regedit(10.0.22621.4111) all fine and i try to copy regedit(10.0.22621.4111) with mui to 22631.6199 it works well. Perhaps there is a causal relationship between these two problems

may be it was fixed by sogou?
wt version:1.23.13503.0
sogou version:15.12.0.2855 compiled time: Dec 26 2025 21:11:17
but the problem still exsist in regedit

@Fitmtfk commented on GitHub (Jan 2, 2026): > I have some more information about this bug.My regedit has the same problem.I have two device runing Win11 23H2 but different subversion(22631.6199 and 22631.4112) 22631.6199:Windows Terminal(1.23.13503.0),regedit(10.0.22621.5262) all broken 22631.4112:Windows Terminal(1.21.10351.0),regedit(10.0.22621.4111) all fine and i try to copy regedit(10.0.22621.4111) with mui to 22631.6199 it works well. Perhaps there is a causal relationship between these two problems may be it was fixed by sogou? wt version:1.23.13503.0 sogou version:15.12.0.2855 compiled time: Dec 26 2025 21:11:17 but the problem still exsist in regedit
Author
Owner

@lhecker commented on GitHub (Jan 12, 2026):

may be it was fixed by sogou?
[...]
sogou version:15.12.0.2855 compiled time: Dec 26 2025 21:11:17

Can someone else confirm whether the latest version of Sogou fixes the issue with Windows Terminal 1.23? I unfortunately cannot easily use that IME to test it myself.

@lhecker commented on GitHub (Jan 12, 2026): > may be it was fixed by sogou? > [...] > sogou version:15.12.0.2855 compiled time: Dec 26 2025 21:11:17 Can someone else confirm whether the latest version of Sogou fixes the issue with Windows Terminal 1.23? I unfortunately cannot easily use that IME to test it myself.
Author
Owner

@lhecker commented on GitHub (Jan 12, 2026):

The most likely cause for this regression was https://github.com/microsoft/terminal/pull/19584 which added the following 3 TSF flags (TSF is the Windows platform for IMEs):

  • TF_TMAE_UIELEMENTENABLEDONLY: TSF activates only text services that are categorized as GUID_TFCAT_TIPCAP_UIELEMENTENABLED.
  • TF_TMAE_NOACTIVATETIP + TF_TMAE_NOACTIVATEKEYBOARDLAYOUT: TSF does not sync the current keyboard layout. The keyboard layout will be adjusted when the calling thread gets focus. = Faster startup.

My guess would be that Sogou IME doesn't set GUID_TFCAT_TIPCAP_UIELEMENTENABLED, but perhaps it's the other two that cause some weird interaction.

@lhecker commented on GitHub (Jan 12, 2026): The most likely cause for this regression was https://github.com/microsoft/terminal/pull/19584 which added the following 3 TSF flags (TSF is the Windows platform for IMEs): - `TF_TMAE_UIELEMENTENABLEDONLY`: TSF activates only text services that are categorized as `GUID_TFCAT_TIPCAP_UIELEMENTENABLED`. - `TF_TMAE_NOACTIVATETIP` + `TF_TMAE_NOACTIVATEKEYBOARDLAYOUT`: TSF does not sync the current keyboard layout. The keyboard layout will be adjusted when the calling thread gets focus. = Faster startup. My guess would be that Sogou IME doesn't set `GUID_TFCAT_TIPCAP_UIELEMENTENABLED`, but perhaps it's the other two that cause some weird interaction.
Author
Owner

@nathancorvussolis commented on GitHub (Jan 13, 2026):

TF_TMAE_UIELEMENTENABLEDONLY or TF_TMF_UIELEMENTENABLEDONLY, and GUID_TFCAT_TIPCAP_UIELEMENTENABLED are used in UILess Mode.

UILess Mode Overview - Win32 apps | Microsoft Learn
https://learn.microsoft.com/en-us/windows/win32/tsf/uiless-mode-overview

The application draws the UI by itself in UILess Mode.
For example, previous version of Japanese IME on legacy console shows a candidate window at last line.

Image

If applications do not implement ITfUIElementSink, I think there is no need to declare TF_TMAE_UIELEMENTENABLEDONLY.

TIPs should determine whether it is in UILless mode using ITFUIElementMgr::BeginUIElement method, but some IMEs (like CorvusSKK and perhaps others) uses inappropriately the flags obtained with ITfThreadMgrEx::ActivateEx method or ITfThreadMgrEx::GetActiveFlags method.

@nathancorvussolis commented on GitHub (Jan 13, 2026): `TF_TMAE_UIELEMENTENABLEDONLY` or `TF_TMF_UIELEMENTENABLEDONLY`, and `GUID_TFCAT_TIPCAP_UIELEMENTENABLED` are used in UILess Mode. UILess Mode Overview - Win32 apps | Microsoft Learn https://learn.microsoft.com/en-us/windows/win32/tsf/uiless-mode-overview The application draws the UI by itself in UILess Mode. For example, previous version of Japanese IME on legacy console shows a candidate window at last line. <img width="515" height="179" alt="Image" src="https://github.com/user-attachments/assets/945c4aa4-bacf-4d49-acfe-470caf469123" /> If applications do not implement ITfUIElementSink, I think there is no need to declare `TF_TMAE_UIELEMENTENABLEDONLY`. TIPs should determine whether it is in UILless mode using ITFUIElementMgr::BeginUIElement method, but some IMEs (like CorvusSKK and perhaps others) uses inappropriately the flags obtained with ITfThreadMgrEx::ActivateEx method or ITfThreadMgrEx::GetActiveFlags method.
Author
Owner

@lhecker commented on GitHub (Jan 13, 2026):

Ah, so that's what TF_TMAE_UIELEMENTENABLEDONLY does. I mean the documentation is...

  • TF_TMAE_UIELEMENTENABLEDONLY --> "TSF activates only text services that are categorized in GUID_TFCAT_TIPCAP_UIELEMENTENABLED."
  • GUID_TFCAT_TIPCAP_UIELEMENTENABLED --> "TIP supports the UIElement."

and that to me sounded harmless, if not useful. Googling any of these names didn't bring up the documentation you mentioned. I continue to struggle a lot with implementing TSF, because the documentation is so... "sparse".

In any case, thank you so much for linking that @nathancorvussolis! I'll remove that flag ASAP.

@lhecker commented on GitHub (Jan 13, 2026): Ah, so that's what `TF_TMAE_UIELEMENTENABLEDONLY` does. I mean the documentation is... * `TF_TMAE_UIELEMENTENABLEDONLY` --> "TSF activates only text services that are categorized in `GUID_TFCAT_TIPCAP_UIELEMENTENABLED`." * `GUID_TFCAT_TIPCAP_UIELEMENTENABLED` --> "TIP supports the UIElement." and that to me sounded harmless, if not useful. Googling any of these names didn't bring up the documentation you mentioned. I continue to struggle a lot with implementing TSF, because the documentation is so... "sparse". In any case, thank you so much for linking that @nathancorvussolis! I'll remove that flag ASAP.
Author
Owner

@fallenleavesguy commented on GitHub (Jan 20, 2026):

Image

use this

@fallenleavesguy commented on GitHub (Jan 20, 2026): <img width="1382" height="740" alt="Image" src="https://github.com/user-attachments/assets/3b145b6f-c23c-4cb4-839b-9d0fee20c19f" /> use this
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#23896