Obter palavra sob o cursor no X11

9

Para alguns scripts, preciso colocar a palavra atualmente sob o cursor.

xdotoolUma ferramenta similar ou pode obtê-lo?

UniversallyUniqueID
fonte
Você quer dizer a palavra selecionada ? Então sim. (Mas não xdotool)
Jacob Vlijm

Respostas:

10

Como obter o texto atualmente selecionado

Você pode obter o texto selecionado no momento com o comando:

echo $(xclip -o -sel)

... mas você precisa instalar xclipprimeiro:

sudo apt-get install xclip

De man xclip:

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

e:

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

Veja também aqui ou, como sempre man xclip,.


EDITAR

Solução alternativa com a última seleção

De um comentário, entendi que xclipgera a última seleção, mesmo que não haja mais nada selecionado (por exemplo, quando o arquivo é fechado). Isso parece ser um problema na sua situação.

Embora xseltambém tenha esse problema, ele pode ser contornado: se fizermos o seu script não apenas ler a seleção atual no script, mas também gravar o mesmo conteúdo em um arquivo. Podemos então verificar se a nova seleção é diferente da última seleção. Caso contrário, podemos concluir que nenhuma nova seleção é feita, e o comando provavelmente produz uma seleção desatualizada. Podemos então dizer ao script para passar.

Um exemplo (using xsel, que possui pequenas vantagens neste caso):

#!/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

Não é necessário dizer que você precisa instalar xsel:

sudo apt-get install xsel
Jacob Vlijm
fonte
Existe uma maneira de fazer isso sem seleção?
UniversallyUniqueID
1
@BharadwajRaju Isso realmente me surpreenderia, qual é o aplicativo atual para se comunicar? Você não saberia! Isso exigiria algum reconhecimento global de texto sobre o que acontece na tela. E mesmo assim ... eu não vejo isso acontecer.
Jacob Vlijm
Existe uma maneira de descobrir se existe algum texto atualmente selecionado? Porque, mesmo que não exista, xclipretorna o último texto selecionado.
UniversallyUniqueID
@BharadwajRaju see my update.
Jacob Vlijm
Às vezes (aleatoriamente) ele retorna Error: Target STRING not availablee sai.
UniversallyUniqueID