Hack 47. Create Your Own GNOME Right-Click Actions
Create custom menu actions in the Nautilus file manager.
GNOME and its file manager, Nautilus, have a custom menu feature similar to KDE/Konqueror. This hack shows you how to exploit that Nautilus feature, add your own menu selections, and get around some of the limitations of Nautilus.
The Nautilus approach and the KDE approach to adding custom menu selections differ in that you can't make the Nautilus menu selections context-sensitive so that they appear only when they would be useful. This means you can create menu actions that are useless in the wrong context. For example, there's no reason why you would want to click a spreadsheet and then select "convert to PNG image" from a custom menu. Yet, if you create a script that converts a file to a PNG image, that menu option (along with all the other script menu selections you have created) will appear even when you select files where such a conversion would be nonsense.
The only way to make a script context-sensitive is to associate the script with a type of file by using the GNOME File Types and Programs applet. After that, the script will appear as one of the ways to "Open" the file.
6.4.1. Adding a Scripts Option to the Nautilus Menu
You run custom scripts from the Nautilus File menu or by right-clicking and selecting the Scripts option. You might notice your current Nautilus menu doesn't contain a Scripts option. This simply means you haven't defined any scripts yet. Once you define a script, the option to run scripts will appear (along with the option to open the scripts folder where you can add, change, delete, or edit your scripts).
Place your scripts in the ~/.gnome2/nautilus-scripts directory. If you find you are adding so many scripts that the menu gets confusing, you can divide them into categories and place them into subdirectories of ~/.gnome2/nautilus-scripts. For example, you can put all your file conversion-related scripts in the ~/.gnome2/nautilus-scripts/Convert directory. This will place all the conversion scripts in a submenu so that you can select ScriptsConvertYour Script to run one of those scripts.
6.4.2. Image Conversion Script
This sample script takes an image file and converts it to the GIF format. It uses the convert command that comes with the ImageMagick package. This command is capable of converting images from just about any format to just about any other format.
Create the ~/.gnome2/nautilus-scripts/Convert2Gif script. Use your favorite editor to enter the following code, and then save the file:
#!/bin/bash convertprg=`which convert` while [ $# -gt 0 ]; do picture=$1 newfile=`echo "$picture" | cut -d . -f 1` $convertprg "$picture" "$newfile".gif shift done
Make the script executable with this command:
$ chmod +x ~/.gnome2/nautilus-scripts/Convert2Gif
Now you're about to find out if Nautilus scripting works in your version of GNOME. Use Nautilus to navigate to a non-GIF image file in a folder where you have permission to create new files. Right-click the image file and select ScriptsConvert2Gif. If scripts work in your copy of Nautilus, you should see a new file appear in GIF format.
6.4.3. Checking File Types
The one time you can easily get into trouble with Nautilus scripts is when you run a script against the wrong kind of file. It's easy to find the type of a file, but it's not that easy to narrow it down to something usable in a script. The following script has some additional code that checks to make sure the file is an image:
#!/bin/bash convertprg=`which convert` while [ $# -gt 0 ]; do picture=$1 filetype=`file $picture | cut -d ' ' -f 3` if [ $filetype = "image" ] then newfile=`echo "$picture" | cut -d . -f 1` $convertprg "$picture" "$newfile".gif fi shift done
This additional code runs the file command against the target image. The file command returns a string of text describing the type of the file. Then it uses the cut command to find the word "image" in the text output of file. The word "image" should be the third field if you separate the words with spaces. If this command returns the word "image," the script attempts to convert the image; otherwise, the file is skipped. The second field would identify the type of the image (JPEG, for example), but if we used that field we would have to compare it against a long list of image types. It is much easier to simply identify the file as an "image."
One final tip: the preceding script doesn't care what kind of image it is converting. That makes the script easily adaptable to become a conversion script to any other format that the ImageMagick convert command can handle. All you have to change is the file extension of the target file. In short, change .gif to .png and then save the file as Convert2Png, and now you have a script that converts images to PNG format. Place Convert2Png in the scripts directory, and off you go.
6.4.4. Environment Variables
If you're interested in Nautilus scripts, you can find an excellent collection at http://g-scripts.sourceforge.net/. This site also includes some tutorial information on scripting for Nautilus.