UbuntuHelp:NautilusScriptsHowto
出自Ubuntu中文
| 点击翻译: |
English |
请不要直接编辑翻译本页,本页将定期与来源同步。 |
<<Include(Tag/ContentCleanup)>>
<<Include(Tag/TooLong)>>
<<Anchor(Top)>>
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. [[UbuntuHelp:[Top|Back to top]]]
[编辑] Managing Nautilus scripts
All of your scripts are stored in the `nautilus-scripts` folder - so to add a new script, simply place it there. You can find the `nautilus-scripts` folder here:
~/.gnome2/nautilus-scripts
[[UbuntuHelp:[Top|Back to top]]]
[编辑] Adding scripts
- Open a text editor, copy/paste them into it, and save the script in your `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`, or right-click on the script, select properties, then permissions, and give allow it to be executable)
That's it! {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
You may need to run some scripts as a root user. This is generally a bad idea, unless you know what you are doing. Setting appropriate rights can be done thanks to the `chmod` command.
CAUTION- you might want to set the preferences in Nautilus/Gedit/Whatever_else_you_are_opening_as_root so as to let you know instantly whether or not you are currently in the root-application. i.e. a yellow background in root-gedit and nautilus, instead of the normal white....
[[UbuntuHelp:[Top|Back to top]]]
[编辑] Scripting
[编辑] What is a script ?
Scripts can be
- binaries (compiled programs)
- shell scripts (bash, sh ...)
- ...
that is to say basically anything that can be run [[UbuntuHelp:[Top|Back to top]]]
[编辑] Environment variables
Whenever a script is called, Nautilus sets 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 [[UbuntuHelp:[Top|Back to top]]]
[编辑] Sample scripts
Note: These scripts may be out of date. Use at your own risk.
[编辑] Email the selected file
[[UbuntuHelp:[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
[[UbuntuHelp:[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
[[UbuntuHelp:[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
[[UbuntuHelp:[Top|Back to top]]] Change file-permission to read-only.
#!/bin/bash
chmod ugo-wx $*
[编辑] Edit file with gedit with root-privileges
[[UbuntuHelp:[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
Note from blazoner - A much simpler alternative that works with filenames containing spaces is:
#!/bin/sh
gksudo "gedit $NAUTILUS_SCRIPT_SELECTED_URIS"
[编辑] Open Nautilus with root-privileges here
[[UbuntuHelp:[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
Note from blazoner - A much simpler alternative:
#!/bin/sh
### root-nautilus-here
gksudo "nautilus --no-desktop $NAUTILUS_SCRIPT_CURRENT_URI"
[编辑] Run file with root privileges
[[UbuntuHelp:[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
Note from blazoner - A much simpler alternative that works with filenames containing spaces and also opens folders (in nautilus) as root is:
#!/bin/sh
gksudo "gnome-open $NAUTILUS_SCRIPT_SELECTED_URIS"
[编辑] Open search window here
[[UbuntuHelp:[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
[[UbuntuHelp:[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
[[UbuntuHelp:[Top|Back to top]]] (doesn't work on Hardy Heron)
#!/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
[[UbuntuHelp:[Top|Back to top]]]
[编辑] Links
Software
