Получить текст вокруг курсора ввода в Linux

Мотивация: я пытаюсь написать сценарии, которые отправляют нажатия клавиш в текущее окно. Прямо сейчас я использую xdotool, который позволяет мне отправлять необработанные нажатия клавиш. Однако я хочу, чтобы точные нажатия клавиш зависели от текущего текста вокруг курсора ввода в сфокусированном окне.

Проблема: существует ли общий способ чтения состояния курсора ввода текста - как его текущей позиции, так и текста вокруг него? Интуитивно мне нужно содержимое текущего текстового поля, а также расположение курсора в этом текстовом поле. Возможно, в общем случае это невозможно, но есть ли способ сделать это, который работал бы для emacs и firefox? Я использую Ubuntu Linux

Дальнейшая мотивация: из-за тяжелого случая RSI я управляю своим компьютером голосом, а не печатаю. Это работает путем настройки голосовых сценариев, которые запускаются произнесением разных фраз. При диктовке английской прозы было бы полезно автоматически писать слова с заглавной буквы в начале предложений. Это автоматическое использование заглавных букв можно выполнить, прочитав символы непосредственно перед вводным символом вставки, проверив, содержат ли они точку, и если да, набрав начало следующей фразы, которую я диктую голосом, с заглавной буквы.

Спасибо большое! Если кто-нибудь может помочь мне здесь, это значительно повысит мою повседневную доступность.


person Kevin Ellis    schedule 27.10.2020    source источник


Ответы (1)


Поскольку для X11 не существует стандартного инструментария для виджетов, а есть только набор независимо разработанных произвольных наборов инструментов, универсального способа реализовать это не существует.

Что касается X11 и инструментов, работающих на его уровне (таких как xdotool), то есть только окна типа InputOutput (т.е. видимые окна, которые принимают события и в которые можно рисовать) или только Input, которые невидимы и принимают только события . Дальше так сказать доработанных виджетов нет. Вы получаете пиксельную сетку, которую вы можете рисовать.

Интерфейсы доступности — это бремя наборов инструментов (или если вы не используете набор инструментов — тогда вы круты — вы, разработчик), для реализации: https://www.freedesktop.org/wiki/Accessibility/

Абсолютно общий способ - сделать снимок экрана окна, сфокусированного в данный момент, использовать решение, основанное на компьютерном зрении/машинном обучении, для идентификации каретки, а затем распознавать строку текста вокруг нее. И, честно говоря, ИМХО, сделать это таким способом, вероятно, было бы намного надежнее, чем надеяться на правильную реализацию интерфейсов специальных возможностей.

person datenwolf    schedule 27.10.2020