English 中文(简体)
Send selected text to a command line argument
原标题:

I found this utility, pytranslate, which translates a variety of languages into each other using Google s translation API. It works exactly as described.

However I ve gotten sick of selecting a word I do not understand, then middle-clicking it into the command. The command format is as such:

pytranslate WORD

Is there a program/script that has the ability to detect when I select a word, or a series of words with my mouse, and then executes the above command with the selected text in the place of WORD in a terminal window?

Example:

Selected text:

Bonjour mondiale...

Resultant command/result:

pytranslate Bonjour mondiale
Detected source language: fr
Hello World
最佳回答
#!/bin/bash
pytranslate "$(xsel -p)"

Now just put this in ~/bin (make sure that s included in your PATH), and run it. (You may need to install the xsel package.) It will take the current contents of the primary selection buffer and pass it to pytranslate.

If you want it as a button, create a launcher which runs this in a terminal, and use bash s read command to do "Press ENTER to continue".

问题回答

Taking inspiration from Roger Pate s brilliant one liner I ve created a simple looping script for pytranslate. This is currently provisional - as I haven t implemented error catching yet - wait for new edits.

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

Would you be able to use clipboard support in the PyGTK package to do the job? It claims to have access to the "primary" X clipboard which it says is where you d normally find the selected text.

Note: this answer was useless to the questioner, who wasn t using Windows. Given that the title doesn t specify the OS, I ll leave it around for Windows users who may come this way.


You can easily whip one up yourself using the pywin32 package and the win32clipboard module. See, for example, this question.

I ve done this in the past with a routine that just polled the clipboard periodically, every few seconds or so, and whenever it found a change it grabbed the contents and did something with it. In your case, use the subprocess package to call out to pytranslate with the text.





相关问题
Can Django models use MySQL functions?

Is there a way to force Django models to pass a field to a MySQL function every time the model data is read or loaded? To clarify what I mean in SQL, I want the Django model to produce something like ...

An enterprise scheduler for python (like quartz)

I am looking for an enterprise tasks scheduler for python, like quartz is for Java. Requirements: Persistent: if the process restarts or the machine restarts, then all the jobs must stay there and ...

How to remove unique, then duplicate dictionaries in a list?

Given the following list that contains some duplicate and some unique dictionaries, what is the best method to remove unique dictionaries first, then reduce the duplicate dictionaries to single ...

What is suggested seed value to use with random.seed()?

Simple enough question: I m using python random module to generate random integers. I want to know what is the suggested value to use with the random.seed() function? Currently I am letting this ...

How can I make the PyDev editor selectively ignore errors?

I m using PyDev under Eclipse to write some Jython code. I ve got numerous instances where I need to do something like this: import com.work.project.component.client.Interface.ISubInterface as ...

How do I profile `paster serve` s startup time?

Python s paster serve app.ini is taking longer than I would like to be ready for the first request. I know how to profile requests with middleware, but how do I profile the initialization time? I ...

Pragmatically adding give-aways/freebies to an online store

Our business currently has an online store and recently we ve been offering free specials to our customers. Right now, we simply display the special and give the buyer a notice stating we will add the ...

Converting Dictionary to List? [duplicate]

I m trying to convert a Python dictionary into a Python list, in order to perform some calculations. #My dictionary dict = {} dict[ Capital ]="London" dict[ Food ]="Fish&Chips" dict[ 2012 ]="...

热门标签