NautilusScriptsHowto
Differences between revisions 6 and 7
11388
Comment: pic + little brush up
|
64
|
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)