Отправить выделенный текст в аргумент командной строки

Я нашел эту утилиту, pytranslate, которая переводит разные языки друг на друга, используя API перевода Google. Работает именно так, как описано.

Однако мне надоело выбирать слово, которое я не понимаю, а затем щелкать его средней кнопкой мыши в команде. Формат команды такой:

pytranslate WORD

Есть ли программа / сценарий, способный определять, когда я выбираю слово или серию слов с помощью мыши, а затем выполняет указанную выше команду с выделенным текстом вместо WORD в окне терминала?

Пример:

Выбранный текст:

Bonjour mondiale...

Результирующая команда / результат:

pytranslate Bonjour mondiale
Detected source language: fr
Hello World

person torger    schedule 07.12.2009    source источник


Ответы (4)


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

Теперь просто поместите это в ~/bin (убедитесь, что это включено в ваш PATH) и запустите. (Возможно, вам потребуется установить пакет xsel.) Он возьмет текущее содержимое первичного буфера выбора и передаст его в pytranslate.

Если вы хотите, чтобы это было кнопкой, создайте программу запуска, которая запускает это в терминале, и используйте команду чтения bash, чтобы сделать «Нажмите ENTER, чтобы продолжить».

person Community    schedule 07.12.2009

Вдохновленный блестящим однострочником Роджера Пейта, я создал простой скрипт цикла для pytranslate. В настоящее время это временно - так как я еще не реализовал перехват ошибок - ждите новых правок.

#!/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
person torger    schedule 07.12.2009

Сможете ли вы использовать поддержку буфера обмена в пакете PyGTK? делать работу? Он утверждает, что имеет доступ к «первичному» буферу обмена X, который, по его словам, является местом, где вы обычно находите выделенный текст.

person Peter Hansen    schedule 07.12.2009

Примечание: этот ответ был бесполезен для человека, задавшего вопрос, который не использовал Windows. Учитывая, что в названии не указана ОС, я оставлю это для пользователей Windows, которые могут прийти таким путем.


Вы можете легко создать его самостоятельно, используя пакет pywin32 и модуль win32clipboard. См., Например, этот вопрос.

Раньше я делал это с помощью процедуры, которая просто периодически опрашивала буфер обмена, каждые несколько секунд или около того, и всякий раз, когда он обнаруживал изменение, он захватывал содержимое и что-то с ним делал. В вашем случае используйте пакет подпроцесса для вызова pytranslate с текстом.

person Peter Hansen    schedule 07.12.2009
comment
Поскольку его средняя кнопка вставляет последний выделенный текст, я предполагаю, что он на * nix. - person richo; 07.12.2009
comment
Также тег Ubuntu-9.04, который я только что заметил;) BTW OP, ваш тег select, вероятно, объединяет его с системным вызовом select (). - person richo; 07.12.2009
comment
Ах, хорошее замечание. Использование терминального окна фразы тоже должно было быть подарком. Также тег ubuntu-9.04. :-) - person Peter Hansen; 07.12.2009
comment
Извините, я должен был сделать это очевидным, я использую ubuntu 9.04. - person torger; 07.12.2009
comment
answermysearches.com /, показывает, как использовать функцию буфера обмена pygtk - и если это будет связано с окнами выше, я посмотрю, смогу ли я получить рабочий скрипт. - person torger; 07.12.2009
comment
Я попробовал другой ответ, указав на те же документы, на которые указывает этот, Назариус. (Как новичок в SO, я должен спросить: следует ли мне удалить этот неправильный ответ или просто оставить его здесь для потомков?) - person Peter Hansen; 07.12.2009
comment
Питер: если это совсем не так, удалите. Если он может быть кому-то полезен, но не отвечает на этот вопрос: решать вам, но следует хотя бы оставить объяснение, если вы не удалите. - person ; 07.12.2009