NautilusScriptsHowto

Differences between revisions 6 and 7
Revision 6 as of 2006-06-17 16:35:27
Size: 11388
Editor: lan31-4-82-228-167-67
Comment: pic + little brush up
Revision 7 as of 2006-06-19 16:07:21
Size: 64
Editor: 127
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
||<tablestyle="float:right; font-size: 0.9em; width:40%; background:#FFEFD5; margin: 0 0 1em 1em;" style="padding:0.5em;">'''Contents'''[[BR]][[TableOfContents]]||
[[Anchor(Top)]]

attachment:IconsPage/IconNautilus.png
The nautilus file manager is extensible through the use of scripts.

= Introduction =
== Purpose ==

With scripts you can do many things such as :
 * make an enhanced "open with"-alike feature (open some files that match a filter in your preferred application
 * make a zip of a directory and mail it
 * open a terminal in the selected directory
 * ...
all of this with a simple right click


[#Top Back to top]
== Managing Nautilus scripts ==

attachment:nautilus_folder.png

You can find the Nautilus-scripts folder here :
{{{
     ~/.gnome2/nautilus-scripts
}}}

[#Top Back to top]
=== Adding scripts ===

 * place your scripts in the nautilus-scripts folder
 * name them accordingly to the label you want in the right-click context menu
 * make them executable (`chmod +x my_script_name`)
 That's it! :D
{i} You will not have a `File->Scripts` nor see a `Scripts` entry in the context menu until you first add files there

=== Removing scripts ===

 * simply remove them from the nautilus-scripts folder

=== Setting rights to your scripts ===

attachment:IconsPage/IconWarning3.png
You may need to run some scripts as a root user, this is generally a bad idea, unless you [[BR]] know what you are doing. Setting appropriate rights can be done thanks to the `chmod` command.


[#Top Back to top]
= Scripting =

== What is a script ? ==
You can place in the nautilus several "scripts", they can be :
 * binaries (compiled programs)
 * shell scripts (bash, sh ...)
 * ...
that is to say basically anything that can be run

[#Top Back to top]
== Environment variables ==
Whenever a script is called, nautilus set some variables that can be used in your scripts. These are :

 * `NAUTILUS_SCRIPT_SELECTED_FILE_PATHS`
    newline-delimited paths for selected files (only if local)
 * `NAUTILUS_SCRIPT_SELECTED_URIS`
    newline-delimited URIs for selected files
 * `NAUTILUS_SCRIPT_CURRENT_URI`
    current location
 * `NAUTILUS_SCRIPT_WINDOW_GEOMETRY`
    position and size of current window

[#Top Back to top]
= Sample scripts =

'''Notes: These scripts may be out of date. Use at your own risk'''

== Email the selected file ==
[#Top Back to top]

This one is really useful. How many times have you needed to find a file and then send it? And to be honest, from Evolution or mozilla-thunderbird this is not that simple. It is much easier to use Nautilus to find your file and then send it from there.

{{{
    #!/usr/bin/perl -w
    # By John Russell

    # This script sends the selected file(s) with your email client.

    use strict;

    my $MAILTO_URL="mailto:?";
    my @files = split("\n", $ENV{NAUTILUS_SCRIPT_SELECTED_FILE_PATHS});
    my $count = 0;
    foreach my $file (@files)
    {
        if ( ! -f $file && ! -l $file )
        {
            my @dialog = ("gdialog","--title","Error","--msgbox", "\nError: Can not send $file. \n\n Only regular files can be mailed. ","200", "300");
            system (@dialog);
     }
     else
     {
        $MAILTO_URL = $MAILTO_URL . "attach=" . $file . "&";
               shift;
         $count += 1;
     }
    }


    if ($count > 0)
    {
        my @command = ("gnome-open", $MAILTO_URL);
        system(@command);
    }
}}}

Added by Darrell: I found that the mailto: syntax in the above does not work with mozilla-thunderbird. I have created the following amended version which seems to work with Thunderbird:

{{{
    #!/usr/bin/perl -w
    # By John Russell
    # and hacked to work with thunderbird by Darrell

    # This script sends the selected file(s) with mozilla-thunderbird.

    use strict;

    my $attach_string="\"attachment='";
    my @files = split("\n", $ENV{NAUTILUS_SCRIPT_SELECTED_FILE_PATHS});
    my $count = 0;
    foreach my $file (@files)
    {
        if ( ! -f $file && ! -l $file )
        {
            my @dialog = ("gdialog","--title","Error","--msgbox", "\nError: Can not send $file. \n\n Only regular files can be mailed. ","200", "300");
            system (@dialog);
        }
        else
        {
           $attach_string = $attach_string . "file://" . $file . ",";
               shift;
            $count += 1;
        }
    }


    if ($count > 0)
    {
        $attach_string = $attach_string . "'\"";
    # replace spaces with '%20' as demanded by mozilla/thunderbird
        $attach_string =~ s/\s/%20/g;
    # invoke shell script to call thunderbird differently depending on whether it's running already or not
        my $command = ("~/scripts/thunderbird-email-attachments " . $attach_string);
        system($command);
    }
}}}

You will see there is also a shell script which is required, (~/scripts/thunderbird-email-attachments in my example above, don't put it in the nautilus-scripts directory, otherwise it will show up in the context menu):

{{{
    #!/bin/sh

    # if thunderbird is already running open a compose window in the running instance

     if `ps xc | grep -q mozilla-thunder`; then
      exec mozilla-thunderbird -a Mozilla-Thunderbird -remote "xfeDoCommand(ComposeMessage,$1)"

    # else start a new instance with the compose window only

     else
      exec mozilla-thunderbird -compose $1
     fi
}}}

== Mount ISO ==
[#Top Back to top]

Mount an ISO image, from Nautilus. Note from carney1979 - this script will be updated to work with filenames containing spaces soon.

{{{
    #!/bin/bash
    #
    #By modprobing loop it makes sure that the module is loaded and ready for
    #use. If it is already loaded then nothing will happen.
    modprobe loop
    for I in `echo $*`
    do
       foo=`gksudo -u root -k -m "enter your password for root terminal access" /bin/echo "got r00t?"`
    sudo mount -o loop -t iso9660 $I /media/iso
       done
    done
    exit0
}}}

== Unmount ISO ==
[#Top Back to top]

Unmount an iso image, from nautilus. Note from carney1979 - this script will be updated to work with filenames containing spaces soon.

{{{
    #!/bin/bash
    #
    for I in `echo $*`
    do
       foo=`gksudo -u root -k -m "enter your password for root terminal access" /bin/echo "got r00t?"`
    sudo umount $I
      done
    done
    exit0
}}}

== Set file read-only ==
[#Top Back to top]

Change file-permission to read-only.

{{{
    #!/bin/bash

    chmod ugo-wx $*
}}}

== Edit file with gedit with root-privileges ==
[#Top Back to top]

Note from carney1979 - this script will be updated to work with filenames containing spaces soon.

{{{
    #!/bin/bash
    #
    for I in `echo $*`
    do
       foo=`gksudo -u root -k -m "enter your password for root terminal access" /bin/echo "got r00t?"`
    sudo gedit $I
       done
    done
    exit0
}}}

== Open Nautilus with root-privileges here ==
[#Top Back to top]

{{{
    #!/bin/bash
    # root-nautilus-here
    # opens a root-enabled instance of a nautilus window in selected location
    # requires sudo privileges and gksudo, which may involve security risks.
    #Install in your ~/Nautilus/scripts directory.
    #
    # Placed in the public domain by Shane T. Mueller 2001
    # Fixes provided by Doug Nordwall
    #
    # 2004.04.18 -- keith@penguingurus.com - Added gksudo usage to provide popup
    # password window if sudo has expired. Line only echos got
    # root to std output. But gksudo updates your sudo access
    # privs, so running nautilus with sudo will succeed
    # without asking for a password.
    
    
    foo=`gksudo -u root -k -m "enter your password for nautilus root access" /bin/echo "got r00t?"`
    sudo nautilus --no-desktop $NAUTILUS_SCRIPT_CURRENT_URI
}}}

== Run file with root privileges ==
[#Top Back to top]

Note from carney1979 - this script will be updated to work with filenames containing spaces soon.

{{{
    #!/bin/bash
    #
    for I in `echo $*`
    do
       /usr/bin/gksudo $I
       done
    done
    exit0
}}}

== Open search window here ==
[#Top Back to top]

{{{
    #!/bin/sh
    # From Johnathan Bailes
    # This script opens a gnome-search-tool in the directory you select.
    #
    # Distributed under the terms of GNU GPL version 2 or later
    #
    # Install in your ~/Nautilus/scripts directory.
    # You need to be running Nautilus 1.0.3+ to use scripts.
    
    cd $NAUTILUS_SCRIPT_CURRENT_URI
    exec gnome-search-tool
}}}

== Open terminal here ==
[#Top Back to top]

{{{
    #!/bin/bash
    #
    # This script opens a gnome-terminal in the directory you select.
    #
    # Distributed under the terms of GNU GPL version 2 or later
    #
    # Install in ~/.gnome2/nautilus-scripts or ~/Nautilus/scripts
    # You need to be running Nautilus 1.0.3+ to use scripts.
    
    # When a directory is selected, go there. Otherwise go to current
    # directory. If more than one directory is selected, show error.
    if [ -n "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" ]; then
        set $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
        if [ $# -eq 1 ]; then
            destination="$1"
            # Go to file's directory if it's a file
            if [ ! -d "$destination" ]; then
                destination="`dirname "$destination"`"
            fi
        else
            zenity --error --title="Error - Open terminal here" \
               --text="You can only select one directory."
            exit 1
        fi
    else
        destination="`echo "$NAUTILUS_SCRIPT_CURRENT_URI" | sed 's/^file:\/\///'`"
    fi
    
    # It's only possible to go to local directories
    if [ -n "`echo "$destination" | grep '^[a-zA-Z0-9]\+:'`" ]; then
        zenity --error --title="Error - Open terminal here" \
           --text="Only local directories can be used."
        exit 1
    fi
    
    cd "$destination"
    exec x-terminal-emulator
}}}

== Hide or Show Hidden Files ==
[#Top Back to top]

{{{
    #!/bin/sh
    # When hidden files (.emacs, etc) are hidden, shows "Show Hidden Files" option.
    # When hidden files are shown, shows "Hide Hidden Files" option.
    # Uses gconf to toggle between the two Nautilus options.
    # Should be placed in ~/.gnome2/nautilus-scripts/ with executable permission.
    OLDSTATE=$(gconftool-2 --get "/desktop/gnome/file_views/show_hidden_files")
    if [ "$OLDSTATE" == "false" ] ; then
      NEWSTATE="True"
      mv ~/.gnome2/nautilus-scripts/Show\ Dot\ Files ~/.gnome2/nautilus-scripts/Hide\ Dot\ Files
    else
      NEWSTATE="False"
      mv ~/.gnome2/nautilus-scripts/Hide\ Dot\ Files ~/.gnome2/nautilus-scripts/Show\ Dot\ Files
    fi
    gconftool-2 --set "/desktop/gnome/file_views/show_hidden_files" --type boolean $NEWSTATE
}}}

Note: You can do the same without a script by pressing CTRL+H under Nautilus

----
[#Top Back to top]

= Links =

 * [wiki:Self:Nautilus_Scripts Nautilus_Scripts]
 * [http://g-scripts.sourceforge.net/]

CategoryDocumentation CategoryCleanup
#REFRESH 0 http://help.ubuntu.com/community/NautilusScriptsHowto

NautilusScriptsHowto (last edited 2008-08-06 16:32:34 by localhost)