Отримайте слово під курсором у X11


9

Для деяких сценаріїв мені потрібно отримати слово, яке зараз знаходиться під курсором.

Може отримати xdotoolчи подібний інструмент?


Ви маєте на увазі вибране слово? Тоді так. (Але не xdotool)
Яків Влійм

Відповіді:


10

Як отримати текст, який ви вибрали на даний момент

Ви можете отримати поточно вибраний текст за допомогою команди:

echo $(xclip -o -sel)

... але вам потрібно спочатку встановити xclip:

sudo apt-get install xclip

Від man xclip:

-o, -out
    prints the selection to standard out (generally for piping to a file or program) 

і:

-selection
    specify which X selection to use, options are "primary" to use XA_PRIMARY (default), "secondary" for XA_SECONDARY or "clipboard" for XA_CLIPBOARD

Дивіться також тут , або, як завжди, man xclip.


EDIT

Вирішення проблем з останнім вибором

З коментаря я зрозумів, що xclipвидає останній вибір, навіть якщо вже нічого не вибрано (наприклад, коли файл закритий). Це, здається, є проблемою у вашій ситуації.

Хоча xselтакож є ця проблема, її можна вирішити: якщо ми зробимо ваш сценарій не тільки прочитати поточний вибір у сценарій, але і записати той самий вміст у файл. Потім ми можемо перевірити, чи відрізняється новий вибір від останнього. Якщо ні, то можна зробити висновок, що новий вибір не робиться, і команда, швидше за все, створює застарілий вибір. Потім ми можемо сказати сценарій пройти.

Приклад (використання xsel, яке має в цьому випадку невеликі переваги):

#!/bin/bash

# make sure the file to store the last selection exists
f=~/.old_sel
touch $f
# get the previous & current selection
old=$(cat "$f"); new=$(xsel -o)

if [ "$old" != "$new" ]; then
  # if selection changed, store the new selection to remember
  echo "$new" > "$f"
  # do the action, whatever that may be
  echo $new
fi

Не потрібно говорити, що вам потрібно буде встановити xsel:

sudo apt-get install xsel

Чи є спосіб це зробити без вибору?
UniversallyUniqueID

1
@BharadwajRaju Це дійсно мене здивувало б, з яким поточним додатком спілкуватися? Ви б не знали! Це вимагатиме деякого глобального розпізнавання тексту щодо того, що відбувається на екрані. І навіть тоді .. Я не бачу, щоб це сталося.
Яків Влійм

Чи є спосіб знайти, чи є якийсь текст на даний момент вибраний? Тому що навіть якщо такої немає, xclipповертає останній вибраний текст.
UniversallyUniqueID

@BharadwajRaju дивись моє оновлення.
Яків Влійм

Іноді (випадковим чином) воно повертається Error: Target STRING not availableі виходить.
UniversallyUniqueID
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.