chikatoike / IMESupport

IMESupport for Sublime Text 2/3
289 stars 97 forks source link

Fixed not work with win10 x64 and Pinyin input method #23

Closed zcodes closed 7 years ago

zcodes commented 7 years ago

hi, guys, I use windows 10 x64 and Pinyin input method, the IMESupport not work. but after i change the hook code and recompiled it, it worked now, maybe someone else can test this method work or not...

change the code in hook/imesupport_hook.c

static LRESULT CALLBACK WindowMessageHookProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    static int x = INVALID_VALUE;
    static int y = INVALID_VALUE;
    static int font_height = INVALID_VALUE;

    switch (msg) {
    case WM_IME_STARTCOMPOSITION:
    case WM_IME_COMPOSITION:
    case WM_IME_NOTIFY: // just add WM_IME_NOTIFY message handle here and it worked !
        if (x != INVALID_VALUE && y != INVALID_VALUE && font_height != INVALID_VALUE) {
            SetInlinePosition(hWnd, x, y, font_height);
        }
        break;
    default:
        if (msg == GetMessageId()) {
            if (wParam != INVALID_VALUE && lParam != INVALID_VALUE) {
                x = (wParam >> 16) & 0xffff;
                y = wParam & 0xffff;
                font_height = lParam;
            }
            else {
                x = INVALID_VALUE;
                y = INVALID_VALUE;
                font_height = INVALID_VALUE;
            }
        }
        break;
    }

    return 0;
}

sublime

Explorare commented 7 years ago

Works like a charm.

jfcherng commented 7 years ago

@Explorare https://github.com/zcodes/IMESupport

shanmine commented 7 years ago

Hi,@zcodes 用您修改过的插件,在打开左侧的文件夹边栏以后,光标定位出现问题! sublime

Explorare commented 7 years ago

Windows 10 14393.693 Sublime Text 3 3126 可复现此问题 image

zcodes commented 7 years ago

@shanmine @Explorare 我在我的分支中修复了一下这个问题,不过还是一个hack而已,暂时还没有发现(或存在)合适的api来解决这个问题。

Explorare commented 7 years ago

@zcodes 感谢修正,比上个版本好很多了。但还是有点错位,比如 image 中拼音把前面的文字遮住了一点 image 这张则是 Chrome 中 IME 输入条的位置,应该在光标的正下方随光标移动才对,目前只能卡在光标起始位置,不过影响也不大就是了。如果有有精力和能力得话请修复一下,谢谢了。

shanmine commented 7 years ago

@zcodes 你好,谢谢及时的回复,不过试用了一下,当打开左侧side_bar的时候依然是定位不准,可能是我的电脑的原因,13“屏,全高清的分辨率,1.5倍的填充率。暂时没有找到比较好的解决办法,现在使用sublime text 2了!

zcodes commented 7 years ago

@Explorare 在插件的目录下有个 IMESupport.sublime-settings文件,你可以尝试修改一下 "imesupport_offset_x" 选项的值,默认是0,你试试改成一个正数看看有没有效果,你这种情况应该会管用。

Explorare commented 7 years ago

@zcodes 经测试将 imesupport_offset_x 设为 5 之后,拼音不会遮挡文字。但 IME 窗口依然无法随光标移动。不过至少不影响正常使用了。感谢帮助。

stevesjtu commented 7 years ago

imesupport_offset_x默认值是4,会覆盖文字,当调到50后正常了

yhnbgfd commented 7 years ago

@zcodes 200%DPI下面有问题,我观察了偏移的位置,应该就是DPI的问题。 最新3143版本支持触摸还支持高DPI,再解决IME,就完美了

a1waysbeta commented 7 years ago

Hi,@zcodes。win10 x64 1703 + DPI125 + ST 3143 + 微软拼音输入法,我修改imesupport_offset_x或y,都没有变化,是修改的方式不对么还是保存的格式不对呢?

zcodes commented 7 years ago

@a1waysbeta @yhnbgfd 最新的ST的api中有了 text_to_window 方法可以获取当前光标的位置,所以我fork的分支里面会优先使用该方法获取光标位置,如果用最新的ST,offset设置就不起作用了。

text_to_window 似乎也只支持dpi 100%,我在dpi 100%使用是可以的,强行把我这低分屏调成 125%测试了一下确实偏移严重,目前我还不知道该如何解决,只能寄希望于开发者早日实现IME支持了...

a1waysbeta commented 7 years ago

Hi,@zcodes。论坛英文看的很吃力,作者有添加IME支持的苗头么?

zcodes commented 7 years ago

@a1waysbeta 有,看这https://forum.sublimetext.com/t/dev-build-3137/29149/28