首页 > 解决方案 > 如何获取 McCLIM 的光标位置

问题描述

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

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

看起来像这样: 在此处输入图像描述

我发现了一个叫做 的东西cursor-position/stream-cursor-position,但我不知道如何获得cursor/stream当前的关注。我试过*standard-output*了,但是失败了。

我怎么能这样做?

标签: lispcommon-lispmcclim

解决方案


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

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

该点只是一个 X 点 (x, y)。尽管如此,该点是焦点窗口的相对坐标。焦点窗口也是 ic vlaues 的一部分,属性名为 XNFocusWindow。

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

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

推荐阅读