如何获取McCLIM的光标位置

How to get cursor position of McCLIM

我正在尝试向 McCLIM 添加输入法支持,以便它可以在 McCLIM 中输入 CJK,使用像 fcitx 这样的输入法客户端。

为了更好地绘制fcitx,我想获取文本编辑区变化时的光标位置。

看起来像这样:

我找到了一个叫做 cursor-position/stream-cursor-position 的东西,但我不知道如何获得 cursor/stream 当前的焦点。我试过*standard-output*,但失败了。

我该怎么做?

我知道您没有使用 libx11,但我只想向您展示 libX11 是如何做到这一点的。

基本上这是由协议中的 XIM_SET_IC_VALUES 完成的。值在预编辑属性的嵌套值中的位置。

该点只是一个 X 点 (x, y)。尽管如此,该点还是相对于焦点的坐标 window。焦点 window 也是 ic vlaues 的一部分,具有 属性 名称 XNFocusWindow。

如果不设置焦点window,通过XCreateIC的客户端window将作为焦点window。

    XVaNestedList preedit_attr;
    preedit_attr = XVaCreateNestedList(0, XNSpotLocation, &nspot, NULL);
    XSetICValues(ic, XNPreeditAttributes, preedit_attr, NULL);
    XFree(preedit_attr);