#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 /…