====== Custom actions ====== Thunar allows users to add custom actions to the file and folder context menus (by the use of the ''thunar-uca'' plugin, part of the Thunar distribution, in the ''plugins/'' subdirectory). You can setup new actions in the {gui>Custom Actions} dialog, available via the {gui>Configure custom actions...} item in the {gui>Edit} menu. This page serves as an introduction to the **Custom Actions** plugin, and includes a list of useful examples. ===== Adding a custom action ===== This section provides a step-by-step introduction to the **Custom Actions** plugin, demonstrating how to add a **Print File** action, which uses xfprint to print text files. We start by opening the **Custom Actions** dialog as explained above. In the dialog, click on the first button in the list of buttons (the one labeled with the ''+''). The **Create Action** dialog will appear, as shown in the screenshot below. On the first page, enter ''Print File'' as name and ''Print the selected using xfprint'' as description. Enter ''xfprint4 %f'' as command (the ''%f'' will be replaced with the path to the selected file, as explained in the dialog), and select an icon for the icon (in the screenshot the ''xfprint.svg'' icon was used). **NB:** Thunar seems to do the sensible thing when passing file/folder names with spaces in them, so don't worry excessively about putting single or double quotes around the "%" placeholder. Now, continue with the second page (the {gui>Appearance Conditions} page). We want to create an action that is only applicable to text files, so select the **Text Files** options and unselect the options for the other file types. Next you can specify a **File Pattern** to display the action only for text files that match a certain pattern. In the example, we set the file pattern to ''*'' (which matches all filenames) to indicate that the action should be displayed for all text files. That's all. Click **OK** to close the **Create Action** dialog. The new action, labeled **Print File** will appear in the **Custom Actions** list. Now close the **Custom Actions** dialog, select a text file in Thunar and open the context menu (right-click on the file icon). The newly created **Print File** action will appear in the context menu, as shown in the screenshot below. {{ documentation:thunar-custom-actions-3.png }} You can use the [[http://thunar.xfce.org/pwiki/start#mailinglist|thunar-dev mailinglist]] to get in touch with the developers, if you have questions about this short tutorial or custom actions in general. ===== Examples ===== Here are a few useful examples of custom actions. Feel free to extend this list. ==== Finding files in the current folder ==== * Name: **Search...** * Command: ''gnome-search-tool --path=%f'' * File pattern: * * Appears if selection contains: Directories **Note:** For this action, you'll need to have ''gnome-search-tool'' installed, which is part of the ''gnome-utils'' package. This program also has a [[http://linux.die.net/man/1/gnome-search-tool|lot of other nice command-line options]] which you could use to create even more specialized actions. ==== Finding files in the current folder with catfish ==== * Name: **Search files...** * Command: ''%%catfish --fileman=thunar --path=%f%%'' * File pattern: * * Appears if selection contains: Directories **Note:** For this action, you'll need to have ''catfish'' installed, which is part of the ''catfish'' package. ==== Finding files inside the selected folder with catfish ==== * Name: **Search files inside...** * Command: ''%%catfish --fileman=thunar --path=%f%d%%'' * File pattern: * * Appears if selection contains: Directories **Note:** For this action, you'll need to have ''catfish'' installed, which is part of the ''catfish'' package. ==== Working with archives (tar, gzip, etc) ==== * Name: **Extract here (bzip2)** * Command: ''tar xjf %n'' * File pattern: *.tar.bz2;*.tbz2 * Appears if selection contains: Other Files * Name: **Extract here (zip)** * Command: ''unzip %f'' * File pattern: *.zip * Appears if selection contains: Other Files * Name: **Create tar.gz from folder** * Command: ''tar czvf %n.tar.gz %n'' * File pattern: * * Appears if selection contains: Directories **Hint:** You may prefer the [[http://thunar.xfce.org/plugins.html#thunar-archive-plugin|Thunar Archive Plugin]], which does pretty much the same thing with less manual setup required on your part. It's either included with your distribution (in the case of [[http://xubuntu.org/|Xubuntu]]), or available as a separate package (''thunar-archive-plugin'' in Debian Etch). You might also need the ''xarchiver'' or "squeeze" package for things to work quite right. ==== Playing music files ==== * Name: **Play with XMMS** * Command: ''xmms %F'' * File pattern: * * Appears if selection contains: Directories, Audio Files * Name: **Enqueue in XMMS** * Command: ''xmms -e %F'' * File pattern: * * Appears if selection contains: Directories, Audio Files **Hint:** Works exactly the same with Audacious. ==== Burning an ISO file to a CD ==== * Name: **Burn with K3B** * Command: ''%%k3b --cdimage %f%%'' * File pattern: *.iso * Appears if selection contains: Other Files ==== Viewing images ==== * Name: **View with GQview** * Command: ''gqview %f'' * File pattern: * * Appears if selection contains: Directories, Image Files **Note:** This tip also works just as well with GThumb ==== Converting PNGs to JPEGs ==== * Name: **To JPEG** * Command: ''convert %f -quality 75 %f.jpg'' * File pattern: *.png * Appears if selection contains: Image Files **Hint:** ''`basename %f .png`.jpg'' (be careful--those are //back//ticks) will strip the old .png extension off of the original filename. ==== Losslessly Rotating JPEGs ==== * Name: **Rotate Clockwise** * Command: ''for file in %F; do tempfile=$(mktemp); (jpegtran -copy all -rotate 90 $file > $tempfile); mv -f $tempfile $file; rm -f $tempfile; done'' * File pattern: *.jpg;*.JPG;*.jpeg;*.JPEG * Appears if selection contains: JPEG Image Files **Note:** jpegtran is available as part of the libjpeg or libjpeg-progs packages of most distributions. Unlike using "convert", the complicated loop structure is necessary with "jpegtran": "jpegtran -rotate 90 -outfile %F %F" will produce a 0kb file. ==== Opening a terminal ==== * Name: **Open in a terminal** * Command: ''%%terminal --default-working-directory=%d%%'' * File pattern: * * Appears if selection contains: Directories **Note:** You might need to type ''xfce4-terminal'' instead of just ''terminal'' for some distributions. ==== Opening a root terminal ==== * Name: **Open a root terminal here** * Command: ''gksu "xfce4-terminal --default-working-directory=%f"'' * File pattern: * * Appears if selection contains: Directories **Note:** You should rewrite the command with normal straight quotes. ==== Opening a root Thunar ==== * Name: **Open a root Thunar here** * Command: ''gksu thunar %f'' * File pattern: * * Appears if selection contains: Directories ==== Editing as root ==== * Name: **Edit as root** * Command: ''gksu put-your-favourite-text-editor-here %f'' * File pattern: * * Appears if selection contains: Text files **Note:** You'll need to replace put-your-favourite-text-editor-here with your favourite text editor (e.g. mousepad or geany). ==== Creating a symbolic link ==== * Name: **Create symlink** * Command: ''ln -s %f "%n (symlink)"'' * File pattern: * * Appears if selection contains: Directories, other files ==== Saving the selected file/folder's pathname to the clipboard ==== For fans of the Windows "SendTo Extensions" power toy. **This tip requires the ''xclip'' program, which you may need to install using your distribution's package manager.** * Name: **Copy Pathname to Clipboard** * Description: Copies file's full pathname to the X PRIMARY selection * Command: ''echo -n %f | xclip -i'' * File pattern: * * Appears if selection contains: //any// ==== Setting an image as the desktop background ==== * Name: **Set as desktop background** * Command:xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/image-path -s %f * File pattern: * * Appears if selection contains: Image Files ==== Viewing the disk usage of the current directory ==== * Name: **Disk Usage** * Command: ''baobab %d'' * File pattern: * * Appears if selection contains: Tick all the boxes **Note:** The idea is to get a visual picture of the current directory and any subdirectories. You could also use fsview or filelight, but the visuals are crisper in baobab. ==== Using 'nano' text editor ==== * Command: ''terminal -x nano %f'' Since nano isn't a GUI app, you must start it in a terminal window. ==== Comparing selected files/directories ==== * Name: **Compare** * Command: ''meld %F'' * File pattern: * * Appears if selection contains: Directories and Text files **Note:** You will need ''meld'' package. ==== Changing OpenOffice.org supported formats ==== **Note:** You will need ''unoconv'' package for all following actions. * Name: **Convert to ODT** * Command: ''unoconv -f odt %F'' * File pattern: *.doc;*.docx * Appears if selection contains: Other files * Name: **Export to PDF** * Command: ''unoconv -f pdf %F'' * File pattern: *.doc;*.docx;*.odt;*.odp;*.pps;*.ppt;*.xls;*.xlsx;*.ods;*.pptx * Appears if selection contains: Other files You can go on, try ''man unoconv'' for details. ==== Download subtitles with periscope ==== * Name: **Download subtitles** * Command: ''periscope -l en %F && zenity --info --title "Done" --text "Subtitles downloaded successfully" || zenity --error --title "Error" --text "Subtitles not downloaded successfully"'' * File pattern: * * Appears if selection contains: Video Files **Note:** You will need ''python-periscope'' package. Get it [[http://code.google.com/p/periscope/|here]]. You'll also neeed ''zenity'' package. This command will try to get the English subtitles, change ''-l en'' to something else (''fr'', ''de'', ''pt-br'', ...). You should rewrite the command with normal straight quotes. ==== Rename subtitles easily ==== * Name: **Rename subtitles** * Description: Select video and subtitles file. Subtiles will be reanmed based on the video name. * Command: ''subrnm %F'' * File pattern: *.avi;*.mp4;*.crdownload;*.srt;*.sub * Appears if selection contains: Video Files, Text Files, Other Files **Note:** You will need ''subrnm'' script. Get it [[http://pastebin.com/DA8jwHz3|here]]. You'll also neeed ''zenity'' package. ==== Resize and email images ==== * Name: **Resize Images then email them** * Description: Select Image files and resize them before sending in email. Leaves originals untouched. * File pattern: * * Appears if selection contains: Image files ** Note:** You will need the script here (which I name thunar-resize-sendto and place in /usr/local/bin), "zenity", and "imagemagick" packages. I used the xfce-newmail icon. Use the following command line:\\ /usr/local/bin/thunar-resize-sendto %F\\ \\ Not sure why this isn't part of Thunar plugins, since it's pretty sweet. Tested on Xubuntu Lucid.\\ \\ **NOTE!:** This uses /tmp/thunar-pics0 & /tmp/thunar-pics1 as temp directories, and will completely remove anything in these directories. I doubt there's a conflict, but you've been warned. You can see the list of files it creates below in /tmp. #!/bin/bash #input to this is a list of files to send. # depends on thunar, ImageMagick and Zenity TMP=/tmp/thunar-pics LOG=/tmp/thunar-resize-sendto.log MARKER=/tmp/thunar-resize-sendto.marker SENDTO="/usr/lib/thunar/thunar-sendto-email" SIZES="320x200 640x480 800x600 1024x640" DISCMD="zenity --list --text=\"Select Size\" --checklist --column=Select --column=New --hide-header --print-column=ALL" # Find unused tmp dir if [ -e $MARKER ]; then CUR=$(cat $MARKER) else CUR=1 fi if [ 1 == $CUR ]; then CUR=0 else CUR=1 fi echo "$CUR" >$MARKER TEMP="${TMP}$CUR" mkdir -p $TEMP rm -rf $TEMP/* for s in $SIZES; do if [ -z $COLS ]; then COLS="$s " else COLS="$COLS 0 $s" fi done SIZE=$($DISCMD $COLS) echo "CUR=$CUR SIZE=$SIZE" >$LOG for f in "$@"; do n=$(basename "$f") echo "item '$f'->$TEMP/$n" >>$LOG convert $f -resize $SIZE "$TEMP/$n" FILES="$FILES $TEMP/$n" done $SENDTO $FILES