Получить слово под курсором в X11

9

Для некоторых сценариев мне нужно получить слово в данный момент под курсором.

Может xdotoolили подобный инструмент получить?

UniversallyUniqueID
источник
Вы имеете в виду выбранное слово? Тогда да. (Но не 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.


РЕДАКТИРОВАТЬ

Проблемы с последним выбором

Из комментария я понял, что 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