Отправить выделенный текст в аргумент командной строки - PullRequest
2 голосов
/ 07 декабря 2009

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

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

pytranslate WORD

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

Пример:

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

Bonjour mondiale...

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

pytranslate Bonjour mondiale
Detected source language: fr
Hello World

Ответы [ 4 ]

4 голосов
/ 07 декабря 2009
#!/bin/bash
pytranslate "$(xsel -p)"

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

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

2 голосов
/ 07 декабря 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
1 голос
/ 07 декабря 2009

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

0 голосов
/ 07 декабря 2009

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


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

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

...