Как получить положение курсора McCLIM

#lisp #common-lisp #mcclim

#lisp #common-lisp #mcclim

Вопрос:

Я пытаюсь добавить поддержку метода ввода в McCLIM, чтобы он мог вводить CJK в McCLIM, используя клиент метода ввода, такой как fcitx.

Чтобы лучше рисовать fcitx, я хочу получить положение курсора в области редактирования текста, когда оно изменилось.

выглядит так: введите описание изображения здесь

Я нашел что-то, что называется cursor-position/stream-cursor-position , но я не знаю, как cursor/stream сфокусироваться на текущем. Я пытался *standard-output* , но это не удалось.

Как я мог это сделать?

Комментарии:

1. AFAIK текущая панель также является расширенным потоком

2. Да, это так. Но как мне точно узнать, какая панель была сфокусирована?

Ответ №1:

Я знаю, что вы не используете libx11, но я бы хотел просто показать вам, как libX11 это делает.

В основном это делается с помощью XIM_SET_IC_VALUES в протоколе. Значения местоположения точки внутри вложенного значения атрибутов preedit.

Точка — это просто точка X (x, y). Несмотря на это, точка является относительной координатой к окну фокусировки. Окно фокусировки также является частью ic vlaues с именем свойства XNFocusWindow.

Если вы не установите окно фокусировки, в качестве окна фокусировки будет использоваться клиентское окно, прошедшее через XCreateIC.

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

Комментарии:

1. Вы правы. Но теперь мой вопрос заключается в том, как получить точку X (x, y)?

2. Я не знаю mcclim, но краткий поиск это может быть связано с тем, что вы хотите: порт-клавиатура-ввод-фокус github.com/McCLIM/McCLIM/blob /…