LINUX.ORG.RU

Вставка текста в текстовое поле, минуя буфер обмена

 


2

3

Задача: нужно вставлять текст в текстовое поле по клавише, минуя буфер обмена. Нашёл тему. Пробовал так:

#!/bin/bash
xdotool type "Текст, который вставляется"
И так:
#!/usr/bin/bash
xdotool type --clearmodifiers --delay 50 'Текст, который вставляется'
В первом случае как и говорилось в теме система не поспевает и вставляется не весь текст. Во втором случае вставляется ерунда, система сходит с ума и не вырубается, клава перестаёт работать, мышь делает не то, что нужно. Как правильно написать скрипт? Может есть другие способы? Kubuntu 14.04.

★★

Последнее исправление: KOT040188 (всего исправлений: 1)

что такое «текстовое поле» и почему нельзя использовать буфер обмена? иными словами, какую проблему ты пытаешься решить?

val-amart ★★★★★
()
Ответ на: комментарий от KOT040188

гуд лак. я задал конкретный вопрос, ты не смог на него ответить. у меня ровно 0 incentive включать свой crystal ball ради тебя.

val-amart ★★★★★
()

Можно использовать xvkbd, правда у него с русским бывают проблемы. Но можно так:

echo "Текст, который вставляется" | iconv -f UTF8 -t UTF16 | xvkbd  -utf -file -
Можно посылать комбинации c Ctrl,Alt и т.п., нажатия и позиционирование мыши. Только, насколько я понял, комбинации посылаются в конкретное окно, и комбинации, обрабатываемые WM, типа Ctrl+Alt+Del или Alt+F4 (закрытие окна) не сработают.

arson ★★★★★
()

Можно попробовать использовать key в связке со sleep для xdotool, возможно это поможет избавиться от «не успевания» системы:

$ xdotool key f sleep 0.1 key o sleep 0.1 key o sleep 0.1 key b sleep 0.1 key a sleep 0.1 key r

foobar

Либо вместо sleep использовать --delay.

alozovskoy ★★★★★
()
Последнее исправление: alozovskoy (всего исправлений: 2)

Простой вариант: сохранить буфер, заюзать его, восстановить буфер, сделать вид, что мы его не трогали.

Сложный: хмм. Написать простой IME, шлющий в нужное окно preedit-текст — вариант, но я не знаю, кто таким упарывался. Будет более-менее работать везде. Но это в development.

x3al ★★★★★
()
Ответ на: комментарий от KOT040188

Тогда давай сразу что нужно сделать, постараюсь что-нибудь придумать. Вообще идея такая - текст загоняешь в xdotool, который эмулирует нажатие кнопок на клавиатуре, т.е. ввод текста в поле будет происходить без буфера обмена. Хотя, если судить по оп-посту, то тебе просто нужно этот скрипт повесить на хоткей.

alozovskoy ★★★★★
()
Последнее исправление: alozovskoy (всего исправлений: 1)
Ответ на: комментарий от KOT040188

Текст откуда берешь? Вообще я тоже тебе решение (в моем понимании) написал, в чем проблема? Кстати, xdotool type --delay 300 'foo bar' у меня тоже корректно отрабатывает.

alozovskoy ★★★★★
()
Ответ на: комментарий от alozovskoy

Текст в теле скрипта. Что, правда корректно? Потыкаю ещё, может у меня были глюки…

KOT040188 ★★
() автор топика
Ответ на: комментарий от alozovskoy
xdotool type --delay 300 'foo bar'

Этот код почему-то вставляет текст не в поле ответа здесь, а в поле поиска лисы, причём без первой буквы… Та же история и в kate… И как оказалось вставляет текст на активной раскладке. То есть если раскладка русская, то вместо foo bar вставится ащщ ифк. Вот так…

KOT040188 ★★
() автор топика
Ответ на: комментарий от alozovskoy

Пожалуй лучше через сохранение и восстановление буфера делать. Слишком xdotool не предсказуемый. Он даже результаты иногда разные выдаёт…

KOT040188 ★★
() автор топика
Ответ на: комментарий от Allakka

Первый раз сработало, последующие нет. Ну и зависимость от раскладки никуда не делась…

KOT040188 ★★
() автор топика
Ответ на: комментарий от KOT040188

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

anonymous
()
Ответ на: комментарий от KOT040188

Этот код почему-то вставляет текст не в поле ответа здесь, а в поле поиска лисы, причём без первой буквы…

У меня корректно работает.

И как оказалось вставляет текст на активной раскладке.

А это вообще странно, у меня от раскладки не зависит.

Может все вышеперечисленное какие-то DE-фичи?

alozovskoy ★★★★★
()
Ответ на: комментарий от KOT040188

Слишком xdotool не предсказуемый

Так используй xvkbd

И как оказалось вставляет текст на активной раскладке.

В xvkbd это лечится опцией -xsendevent

arson ★★★★★
()
Ответ на: комментарий от arson

Спасибо тебе, добрый человек! Работает, но только с латиницей.

xvkbd -xsendevent -text 'Текст, который вставляется'
Вставляет ТекÑÑ, коÑоÑÑй вÑÑавлÑеÑÑÑ

KOT040188 ★★
() автор топика
Ответ на: комментарий от KOT040188

Тебе ж уже выше по тексту посоветовали прикрутить к xvkbd iconv и пример написания дали. Не просто так посоветовали.

hobbit ★★★★★
()
Ответ на: комментарий от KOT040188

Этот код вставляет ÿþ"5:AB, :>B>@K9 2AB02;O5BAO
Теперь вставляет ÿЭ5ЖФИб ЖЮИЮ"Л9 2ФИ02жЩ5ИФЩ

Вставляешь то куда?

arson ★★★★★
()
Ответ на: комментарий от KOT040188

Этот код вставляет ÿþ"5:AB, :>B>@K9 2AB02;O5BAO

Ты забыл или у тебя не работает опция -utf, попробуй -utf16. Какая версия xvkbd?

Про опцию -xsendevent забудь, современные приложения могут с ней не работать.

arson ★★★★★
()
Последнее исправление: arson (всего исправлений: 1)
Ответ на: комментарий от KOT040188
echo "Текст, который вставляется" | iconv -f UTF8 -t UTF16 | xvkbd  -utf16 -file -

Если я убираю -utf16 (или -utf), то получаю, тоже что и ты.

arson ★★★★★
()

Задача: нужно вставлять текст в текстовое поле по клавише

радуйтесь последними мгновениями.. скоро гредёт Wayland! :-)

...и тогда придётся менять исходники Wayland-композитора, для того чтобы вытворять такие «фокусы», а не костылять говноскрипты на bash как щаз :-)

user_id_68054 ★★★★★
()
Ответ на: комментарий от arson

Я в пакетах не нашёл iconv. Его надо как-то устанавливать? Я эти кракозябры получаю этим кодом, что вы привели.

KOT040188 ★★
() автор топика
Ответ на: комментарий от KOT040188
$ pacman -Qo iconv
/usr/bin/iconv is owned by glibc 2.21-4

что говоришь не нашёл? :-)

user_id_68054 ★★★★★
()
Ответ на: комментарий от KOT040188

3.3-1

Ну ищи 3.6.
А вообще в xvkbd много забавных глюков. Еще пару недель назад у меня все работало безо всяких iconv, а тут возьми и отвались.

arson ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.