如何获取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);
我正在尝试向 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);