Encontré esta utilidad, pytranslate, que traduce una variedad de idiomas entre sí utilizando API de traducción de Google. Funciona exactamente como se describe.

Sin embargo, me he cansado de seleccionar una palabra que no entiendo y luego hacer clic con el botón central en el comando. El formato del comando es como tal:

pytranslate WORD

¿Hay un programa / script que tiene la capacidad de detectar cuando selecciono una palabra o una serie de palabras con mi mouse y luego ejecuta el comando anterior con el texto seleccionado en lugar de WORD en una ventana de terminal?

Ejemplo:

Texto seleccionado

Bonjour mondiale...

Comando resultante / resultado:

pytranslate Bonjour mondiale
Detected source language: fr
Hello World
2
torger 7 dic. 2009 a las 04:25

4 respuestas

La mejor respuesta
#!/bin/bash
pytranslate "$(xsel -p)"

Ahora solo ponga esto en ~/bin (asegúrese de que esté incluido en su RUTA), y ejecútelo. (Es posible que deba instalar el paquete xsel). Tomará el contenido actual del búfer de selección principal y lo pasará a pytranslate.

Si lo desea como un botón, cree un lanzador que ejecute esto en una terminal y use el comando de lectura de bash para hacer "Presione ENTRAR para continuar".

4
Roger PateRoger Pate 7 dic. 2009 a las 01:43

Nota : esta respuesta fue inútil para el interlocutor, que no estaba usando Windows. Dado que el título no especifica el sistema operativo, lo dejaré para los usuarios de Windows que puedan venir por aquí.


Puede preparar uno fácilmente usando el paquete pywin32 y el módulo win32clipboard. Consulte, por ejemplo, esta pregunta .

He hecho esto en el pasado con una rutina que solo sondeaba periódicamente el portapapeles, cada pocos segundos, y cada vez que encontraba un cambio, tomaba el contenido e hacía algo con él. En su caso, use el paquete de subproceso para llamar a pytranslate con el texto.

0
Community 23 may. 2017 a las 12:01

¿Podría utilizar el soporte del portapapeles en el paquete PyGTK ¿para hacer el trabajo? Afirma tener acceso al portapapeles X "primario", que dice que es donde normalmente encontraría el texto seleccionado.

1
Peter Hansen 18 dic. 2009 a las 13:36

Inspirándome en el brillante liner de Roger Pate, he creado un script de bucle simple para pytranslate. Esto es actualmente provisional, ya que aún no he implementado la detección de errores, espere nuevas ediciones.

#!/bin/bash
# Primary Clipboard poller using xsel (middle click) and pytranslate
# Checks for changes every 1 second
# If change has occured, a command is executed (pytranslate here)
########## Information ########## 
# It now stores definitions in a text file - saves bandwith and reduces hits on google (caseless)
# Works for Romance languagse
#TODO
# Character based langauges
# Catch errors

if [ ! -e "pytranslatecache" ]; then
touch pytranslatecache
fi

while [ 1 ]
do
   OLDENTRY="$(xsel -p)"
   sleep 1
   NEWENTRY="$(xsel -p)"
   if [ "$NEWENTRY" != "$OLDENTRY" ] ; then
     if [ "$(grep -F -o -i "$NEWENTRY" pytranslatecache)" = "$NEWENTRY" ] ; then
    echo "From Cache:"
        echo "$(grep -i "$NEWENTRY" pytranslatecache)" 
     else
    DEFINITION=""$(pytranslate -s fr "$(xsel -p)")""
        echo "$NEWENTRY"":"$DEFINITION
        echo "$NEWENTRY"":"$DEFINITION >> pytranslatecache
     fi
   fi
# Catch Errors - Commands
   if [ $? != 0 ]; then
   {
       echo "Failed to translate string."
    } fi
done
2
torger 7 dic. 2009 a las 08:20