
Можно ли получить доступ к выделенному тексту с помощью скрипта оболочки?
Я хочу создать сочетание клавиш для использования «espeak» для чтения выделенного текста.
решение1
Да, это относительно просто, существует множество инструментов для работы с буфером обмена, я использовал их для заполнения регистрационных форм устройств Apple и проверки адреса электронной почты, а также xdotool
… гораздо проще, чем заполнять формы 1000 раз…
Итак, настройте ярлык, чтобы он был/home/bob/bin/speak.sh
speak.sh
:
#!/bin/bash
xclip -o | xclip -selection clipboard -i
xclip -o | espeak
решение2
кратко: обычно вы не можете этого сделать (если только выделенный фрагмент не был скопирован в буфер обмена)
long: есть несколько особых случаев, например, xterm имеет функцию, которая (обычно отключена) позволяет приложению читать выделенный текст через escape-последовательность. Это описано вПоследовательности управления XTerm:
Ps = 5 2 -> Manipulate Selection Data. These controls may
be disabled using the allowWindowOps resource. The parameter
Pt is parsed as
Pc; Pd
The first, Pc, may contain zero or more characters from the
set c p s 0 1 2 3 4 5 6 7 . It is used to construct
a list of selection parameters for clipboard, primary, select,
or cut buffers 0 through 7 respectively, in the order given.
If the parameter is empty, xterm uses s 0 , to specify the
configurable primary/clipboard selection and cut buffer 0.
The second parameter, Pd, gives the selection data. Normally
this is a string encoded in base64. The data becomes the new
selection, which is then available for pasting by other appli-
cations.
If the second parameter is a ? , xterm replies to the host
with the selection data encoded using the same protocol.
If the second parameter is neither a base64 string nor ? ,
then the selection is cleared.
То есть, еслиallowWindowOpsресурс включен, приложение может сделать что-то вроде
printf '\033]52;s;?\007'
и прочитать данные выбора как строку base64. Но это особый случай.
Некоторые приложения, конечно, копируют в буфер обмена (см. FAQ), но не все. Например, rxvt и т. д. используют первичный выбор. Решения, которое бы работало везде, не существует.
Дальнейшее чтение:
- Почему я не могу выбрать/вставить в/из других программ?(часто задаваемые вопросы по xterm)
- Копирование и вставка с помощью URxvt
- Билет №3229 вставка перенесенной строки добавляет EOL(Полуночный Командир)
- Re: Доступ к выбору X в xterm (OSC 52)(emacs-разработка)
- Debian #384593 xterm: allowWindowOps должен быть отключен по умолчанию