Obtener palabra debajo del cursor en X11

9

Para algunas secuencias de comandos, necesito obtener la palabra actualmente debajo del cursor.

¿Puede xdotoolo una herramienta similar obtenerlo?

ID universalmente único
fuente
¿Te refieres a la palabra seleccionada ? Entonces sí. (Pero no xdotool)
Jacob Vlijm

Respuestas:

10

Cómo obtener el texto seleccionado actualmente

Puede obtener el texto seleccionado actualmente con el comando:

echo $(xclip -o -sel)

... pero xclipprimero deberías instalar :

sudo apt-get install xclip

De man xclip:

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

y:

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

Ver también aquí o, como siempre man xclip,.


EDITAR

Problemas de solución con la última selección

De un comentario, entendí que xclipgenera la última selección, incluso si ya no hay nada seleccionado (por ejemplo, cuando el archivo está cerrado). Eso parece ser un problema en su situación.

Aunque xseltambién tiene este problema, se puede solucionar: si hacemos que su script no solo lea la selección actual en el script, sino que también escriba el mismo contenido en un archivo. Luego podemos verificar si la nueva selección es diferente de la última selección. Si no, podemos concluir que no se realiza una nueva selección, y el comando probablemente produce una selección desactualizada. Entonces podemos decirle al script que pase.

Un ejemplo (usando xsel, que tiene ligeras ventajas en este 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

No es necesario decir que necesitaría instalar xsel:

sudo apt-get install xsel
Jacob Vlijm
fuente
¿Hay alguna manera de hacerlo sin selección?
UniversallyUniqueID
1
@BharadwajRaju Eso realmente me sorprendería, ¿cuál es la aplicación actual para comunicarse? ¡No lo sabrías! Requeriría un reconocimiento de texto global sobre lo que sucede en la pantalla. E incluso entonces ... no veo que suceda.
Jacob Vlijm
¿Hay alguna manera de encontrar si hay algún texto seleccionado actualmente? Porque incluso si no hay ninguno, xclipdevuelve el último texto seleccionado.
UniversallyUniqueID
@BharadwajRaju ver mi actualización.
Jacob Vlijm
A veces (al azar) regresa Error: Target STRING not availabley sale.
UniversallyUniqueID