<?xml version="1.0" standalone="no"?>
<?xml-stylesheet href="to_html.xsl" type="text/xml"?>
<!-- vim: set sw=1 sts=1 : -->
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"/usr/share/sgml/docbook/dtd/xml/4.1.2/docbookx.dtd">

<book>
 <bookinfo>
  <title>
   ROX-Filer User Manual
   <ulink url="http://rox.sourceforge.net"/>
  </title>
  <author>
   <firstname>Thomas</firstname><surname>Leonard</surname>
  </author>
  <copyright><year>2005</year><holder>Thomas Leonard</holder></copyright>
  <legalnotice>
   <title>Conditions</title>
   <para>
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published
    by the Free Software Foundation; either version 2 of the License,
    or (at your option) any later version.

    This program is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
    for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software Foundation,
    Inc., 59 Temple Place, Suite 330, Boston, MA, 02111-1307, USA.
   </para>
  </legalnotice>

  <abstract>
   <para>
    <application>ROX-Filer</application> is a graphical file manger for the X
    Window System. Its user interface is based on the RISC OS filer and it
    supports similar features such as application directories and drag-and-drop
    loading and saving of files. The filer can also act as a pinboard, allowing
    you to pin frequently used files onto the desktop background.
   </para>
  </abstract>
 </bookinfo>

 <chapter id="intro">
  <title>Introduction</title>
  <para>
   <application>ROX-Filer</application> is a simple and easy to use graphical
   file manager for X11 &mdash; the windowing system used on Unix and Unix-like
   operating systems.  It is also the core component of the ROX Desktop
   <citation>ROX</citation>. Many of the filer's features were inspired by RISC
   OS <citation>RISC OS</citation>. `ROX' stands for `RISC OS&ndash;On&ndash;X'.
  </para>

  <sect1>
   <title>Features</title>
   <para>

    <variablelist>

     <varlistentry><term>XDND</term>
      <listitem><para>
        A common drag-and-drop protocol used, for example, by the GNOME
        desktop<citation>GNOME</citation>. This allows data to be loaded into an
        application by dragging it from a filer window to a program. The full
        specification is given in <citation>DND</citation>.
     </para></listitem></varlistentry>

     <varlistentry><term>XDS</term>
      <listitem><para>
        An extension to XDND that allows applications to save data by
        dragging an icon back to a filer window. The full specification is given in
        <citation>XDS</citation>.
     </para></listitem></varlistentry>

     <varlistentry><term>Basedir spec</term>
      <listitem><para>
        A simple, but flexible, system for managing user choices. By default, choices are
	saved under <filename>~/.config</filename>. However, you can change this by setting
	the <envar>XDG_CONFIG_HOME</envar> environment variable. See
        <citation>BaseDir</citation> for details.
     </para></listitem></varlistentry>

     <varlistentry><term>Application directories</term>
      <listitem><para>
        Self contained relocatable applications, where installation is as simple as
        copying it to where you want it and uninstalling it is just a matter of
        deleting a directory. Described later in this documentation.
     </para></listitem></varlistentry>

     <varlistentry><term>Thumbnails</term>
      <listitem><para>
        The filer can be made to display image files by using the image itself for the
        icon, instead of a generic `this-is-an-image' icon. Very useful for organising
        a directory full of photos! See <citation>Thumbs</citation> for details.
     </para></listitem></varlistentry>

     <varlistentry><term>Shared MIME Info Database</term>
      <listitem><para>
        In the past, each desktop had its own database of rules for determining the
	type of files. The Shared MIME Info Database<citation>SharedMIME</citation>
	unifies these into a single system shared by all desktops.
     </para></listitem></varlistentry>

     <varlistentry><term>Icon Themes</term>
      <listitem><para>
	Collections of file icons, called themes, can be installed (eg, to
	<filename>~/.icons</filename>). You can switch between themes in
	the Options box. Once other desktops support this fully, themes
	will be sharable between desktops. See <citation>IconTheme</citation> for details.
     </para></listitem></varlistentry>

     <varlistentry><term>DNotify support (Linux only)</term>
      <listitem><para>
        If used with a recent Linux kernel (2.4.x series), the filer will notice changes
	to directories automatically. On other systems, directories will update when the
	pointer is moved over them.
     </para></listitem></varlistentry>

    </variablelist>

   </para>
  </sect1>

 </chapter>

 <chapter id="invoking">
  <title>Invoking</title>
  <para>
   You should be able to start the filer by simply running the <userinput>rox</userinput>
   command, by typing it at a shell prompt or otherwise. If the filer isn't installed yet,
   consult <xref linkend="compiling"/>.
  </para>
  <para>
   By default, <application>ROX-Filer</application> will start by displaying
   the current directory.  You can get it to display other directories instead
   by listing them after the command:

   <screen>$ rox /home /usr /usr/local</screen>

   You can also use it to open files, like this:

   <screen>$ rox README</screen>

   The filer supports various options; use <option>-h</option> for a list.
   All options have long and short forms (eg <option>-h</option> and
   <option>--help</option>) &mdash; although on some systems you can only use the
   short versions.
   </para><para>
   Note that if the same version of the filer is already running on this
   machine then, by default, it will be used to open the directories.
   </para><para>
   For a complete list of command-line options, see <xref linkend="manpage"/>
  </para>

  <sect1>
   <title><anchor id="run_pin" xreflabel="Pinboard support"/>Pinboard support</title>
   <para>

    If you want the filer to manage your desktop background then you use
    the <option>--pinboard</option> option and supply a name for the pinboard,
    eg:

    <screen>$ rox --pinboard=MyPinboard</screen>

    The pinboard configuration is saved in
    <filename>~/.config/rox.sourceforge.net/ROX-Filer/pb_MyPinboard</filename>
    as soon as you change it in some way (for example, by dropping a file
    onto the background). You can have as many pinboards as you like and
    switch between them by running rox again, eg:

    <screen>$ rox --pinboard=MyOtherPinboard</screen>

    To turn off the pinboard again, set the name to an empty string:

    <screen>$ rox --pinboard=</screen>

    See the <xref linkend="winman"/> if you have trouble getting the icons to
    display correctly. The pinboard may also be turned on and off by locating
    <filename>ROX-Filer</filename> in a filer window and choosing <guimenuitem>Enable
    pinboard</guimenuitem> or <guimenuitem>Disable pinboard</guimenuitem> from the menu.</para>
  </sect1>

  <sect1>
   <title><anchor id="run_pan" xreflabel="Panel support"/>Panels</title>
   <para>

    Panels work just like the pinboard, except that they run along the edge of the screen.
    To create a panel:

    <screen>$ rox -b=MyPanel</screen>

    The panel should be displayed in a window without a title bar. If
    this does not work then see the <xref linkend="winman"/> for some ideas.
    You can drag files onto either side of the panel to add them. Panel icons
    can be repositioned by dragging them with the middle mouse button.
    Changes to the panel are automatically saved to
    <filename>~/.config/rox.sourceforge.net/ROX-Filer/pan_MyPanel</filename>.
    As with the pinboard, you can switch between panel configurations
    simply by running rox again with a different panel name.

    <screen>$ rox -b=MyOtherPanel</screen>

    You can set which edge of the screen the panel appears on using the popup menu.
    You can also set the edge when enabling the panel by using the side instead of -b.
    Specify a blank name to remove the panel:

    <screen>$ rox --bottom=</screen>
   </para>
  </sect1>

  <sect1>
   <title><anchor id="winman" xreflabel="window manager notes"/>Window manager notes</title>
   <para>
    You may have to play around with your window manager a bit to get
    the pinboard icons and panels to display correctly (eg, without borders
    and underneath all other windows). In particular, try setting the
    stacking level / depth to low (or a negative value). Make sure any
    'Keep transients above other windows' type options are turned off!
   </para>

   <sect2><title>Sawfish / sawmill</title>
    <para>
     Sawfish tries to guess whether you are using GNOME at start-up and only
     provides support if so. You may need to add the line
     <programlisting>(require 'gnome)</programlisting>
     to your <filename>.sawfishrc</filename> file (see the sawfish manual
     for more details).
    </para>
   </sect2>

   <sect2><title>IceWM</title>
    <para>

     Paste these configuration settings into
     <filename>~/.icewm/preferences</filename>:

     <programlisting>
      # Manage root window (EXPERIMENTAL - normally enabled!)
      GrabRootWindow=1 # 0/1
      # Bitmask of root window button click to use in window manager
      UseRootButtons=3 # [0-255]
      # Desktop mouse-button click to show the menu
      DesktopWinMenuButton=1 # [0-20]
      # Desktop mouse-button click to show the window list
      DesktopWinListButton=2 # [0-5]
      # Desktop mouse-button click to show the window list menu
      DesktopMenuButton=0 # [0-20]</programlisting>
     Paste these into <filename>~/.icewm/winoptions</filename>:

     <programlisting>
      # ROX-Filer pinboard and panel
      ROX-Filer.icon: folder
      ROX-Panel.layer: Dock
      ROX-Panel.doNotCover: 1
      ROX-Panel.ignoreWinList: 1
      ROX-Panel.ignoreTaskBar: 1
      ROX-Panel.ignoreQuickSwitch: 1
      ROX-Pinboard.layer: Below
      ROX-Pinboard.ignoreWinList: 1
      ROX-Pinboard.ignoreTaskBar: 1
      ROX-Pinboard.ignoreQuickSwitch: 1
      ROX-Filer.layer: Normal</programlisting>
     Restart IceWM and the filer for the new settings to take effect.

    </para>
   </sect2>

   <sect2><title>Window Maker</title>
    <procedure>
     <step><para>Run the filer using <userinput>rox -p=Default</userinput>.</para></step>
      <step><para>
       Press <keycap>Control</keycap>+<keycap>Escape</keycap>, or
       [RightButtonDown] on any window's titlebar.
       Choose <guimenuitem>Attributes...</guimenuitem> from the menu.
      </para></step>

      <step><para>
       The Attributes Inspector window appears. From the pulldown menu
       at the top, choose <guimenuitem>Window Specification</guimenuitem>
       (the top item).
      </para></step>

      <step><para>
       Press the <guibutton>Select window</guibutton> button.
       The cursor changes to a double crosshair. Select one of the
       <application>ROX-Filer</application> pinboard icons. The radio buttons
       in the <guilabel>Window Specification</guilabel> frame should change
       their labels to include <userinput>ROX-Pinboard.ROX-Filer</userinput>
       as the first item. Select that radio button.
      </para></step>

      <step><para>
       Choose <guimenuitem>Window Attributes</guimenuitem> from the pulldown
       menu. In the <guilabel>Attributes</guilabel> frame, choose the
       features you want the pinboard icons to have; I recommend the
       following:
	<itemizedlist>
	 <listitem><para>Disable titlebar</para></listitem>
	 <listitem><para>Disable resizebar</para></listitem>
	 <listitem><para>Disable close button</para></listitem>
	 <listitem><para>Disable miniaturize button</para></listitem>
	 <listitem><para>Keep at bottom (sunken)</para></listitem>
	 <listitem><para>Omnipresent</para></listitem>
	</itemizedlist>
       </para>
      </step>

      <step><para>
       Choose <guimenuitem>Advanced Options</guimenuitem> from the pulldown
       menu. In the <guilabel>Advanced</guilabel> frame, choose the advanced
       features you wish; I recommend the following:

       <itemizedlist>
	<listitem><para>Do not show in the window list</para></listitem>
	<listitem><para>Ignore 'Hide Others'</para></listitem>
	<listitem><para>Ignore 'Save Session' (possibly)</para></listitem>
       </itemizedlist>
      </para></step>

      <step><para>
       When you're finished selecting window attributes, press the
       <guibutton>Save</guibutton> button, and then close the Attributes
       Inspector window using the <guibutton>X</guibutton> button in the titlebar.
      </para></step>
     </procedure>
   </sect2>

   <sect2><title>Others</title>
    <para>
     If all else fails, try the Compatibility section of the Options window.
    </para>
   </sect2>
  </sect1>

  <sect1>
   <title>Running as root</title>
   <para>

    If you run the filer as the `root' user then the filer will display
    a message at the top of each window to remind you. The root user has
    permission to access or change any file in the system, so be very
    careful when using the filer like this.

    Normally, you should log in as an ordinary user and only change to
    root when you need to. If you have <command>sudo</command> installed
    and set up then you can run the filer like this:

    <screen>$ sudo rox</screen>

    Remember, any file operations you perform and any programs you run from
    these windows will run as root too! Be careful!
    </para><para>
    You may find that the X server won't allow root (or other users) to
    connect. Reading the manual pages for <command>xauth</command> and
    <command>xhost</command> may give you some hints, but it varies
    between systems (which is why this isn't built in to the filer!).

   </para>
   
   <para>
    Note: <command>gnomesu</command> can also be used to run the filer as root,
    but you'll need to use <command>setsid</command> to run it in a new
    session group, otherwise gnomesu kills it before it has a chance to open
    a window. For example:
    <screen>gnomesu -c 'setsid /usr/local/bin/rox /'</screen>
   </para>
  </sect1>

 </chapter>

 <chapter id="keys" xreflabel="mouse and key bindings">
  <title>Mouse button and key bindings</title>

  <itemizedlist><title>Quick start:</title>

   <listitem><para>Click the left
     <footnote><para>This documentation assumes that button&ndash;1 is the left
       button, button&ndash;2 is the middle button and button&ndash;3 is the
       right button. This is not always the case &mdash; for example, in a
       left-handed setup.</para></footnote> mouse button to open files and
     directories.</para></listitem>

   <listitem><para>
     Click the right button to get a menu. Click over a file to perform an action on that file.
   </para></listitem>

   <listitem><para>
     Drag files between windows with the left button to copy, move or link them
     (choose from a menu). Linking creates a shortcut to the original file.
   </para></listitem>

  </itemizedlist>

  <para>
   By default, the mouse button bindings are designed to fit in with X
   conventions. However, the behaviour is highly configurable &mdash; have a play in
   the Options window if you don't like the normal settings. The normal settings
   behave as follows:
  </para>

  <informaltable>
   <tgroup cols="2">
    <thead><row><entry>Key or mouse button</entry><entry>Action</entry></row></thead>

    <tbody>

     <row><entry>Left button click</entry><entry>
       Open the file or directory clicked on. Hold down <keycap>Control</keycap>
       to select things instead of opening them. Hold down <keycap>Shift</keycap>
       to look inside applications, treat files as text, follow symlinks, or
       get more control over mount points (see <xref linkend="media"/>).
     </entry></row>

     <row><entry>Middle button click</entry><entry>
       Same as left click, but open a directory in a new window or close the viewer
       when opening a file.
     </entry></row>

     <row><entry>Right button click</entry><entry>
       Open the main menu. Hold down <keycap>Control</keycap> while clicking to go
       directly to the Selection submenu. Hold down <keycap>Shift</keycap> to get the
       <guimenu>Send To</guimenu> menu (see the <xref linkend="SendTo"/> section).
     </entry></row>

     <row><entry>Drag an item  (left mouse button)</entry><entry>
       Show a menu of possible actions. There is an option to disable this menu,
       in which case this gesture will copy the file(s) to the destination (an
       application or another filer window). Hold down <keycap>Shift</keycap>
       to move the file, <keycap>Control</keycap>+<keycap>Shift</keycap> to
       create a symbolic link, or <keycap>Alt</keycap> to get the menu of
       possible actions.
     </entry></row>

     <row><entry>Drag an item (middle mouse button)</entry><entry>
       When you let go, display a menu of possible actions.
       There is an option to make this move the files rather than open the menu.
     </entry></row>

     <row><entry>Drag (not over an item)</entry><entry>
       Select a group of items by dragging a box around them. With the left
       mouse button, only the files in the box will be selected. If you hold
       down <keycap>Control</keycap> then the boxed items are added to the selection.
       If you use the middle button then the boxed items switch between being selected
       and unselected.
     </entry></row>

     <row><entry>Double-click background</entry><entry>
       Resize the window to a sensible size (this can be turned off from
       the Options window).
     </entry></row>

     <row><entry><keycap>Backspace</keycap></entry><entry>
       Change to viewing the parent directory.
     </entry></row>

     <row><entry>Cursor keys</entry><entry>
       Move the cursor around.
     </entry></row>

     <row><entry>
       <keycap>Page Up</keycap>, <keycap>Page Down</keycap></entry><entry>
       Move the cursor up and down a page at a time.
     </entry></row>

     <row><entry><keycap>Home</keycap>, <keycap>End</keycap></entry><entry>
       Move to the first/last entry in the directory.
     </entry></row>

     <row><entry><keycap>Return</keycap></entry><entry>
       Acts like clicking on the file. You may hold down Shift for other
       effects, as with clicking. Holding down Alt works like clicking with
       the middle button; directories open in a new window and opening files
       closes the directory at the same time.
     </entry></row>

     <row><entry><keycap>Spacebar</keycap></entry><entry>
       Toggles the item under the cursor between being selected and unselected,
       and moves to the next item.
     </entry></row>

     <row><entry><keycap>Tab</keycap>, <keycap>Shift</keycap>+<keycap>Tab</keycap></entry><entry>
       Moves the cursor to the next/previous selected item.
     </entry></row>

     <row><entry>Hold mouse over an item</entry><entry>
       Shows a tooltip containing a brief description of an application (if
       available), the target of a symbolic link, and the full name of a file,
       if it's too long to show in the main window.
     </entry></row>

  </tbody></tgroup></informaltable>

  <para>
   If you have user-defineable key-bindings enabled, then other keys can easily
   be set by opening the menu, moving the pointer over the item you want to use
   and pressing a key. The key will appear in the menu and can be used from
   then on. Key bindings are automatically saved when the filer quits.
   You can use an XSettings manager, such as ROX-Session, to turn this feature
   on for all Gtk+-2.0 applications.
  </para>
 </chapter>

 <chapter id="selection">
  <title>The selection and file groups</title>
  <para>
   When you select items in a <application>ROX-Filer</application> window,
   the filer takes the <emphasis>primary selection</emphasis>. You can then paste
   into another window to get the pathnames of the selected files.
  </para>

  <procedure>
   <title>Example: loading a file into an application that doesn't support
    drag-and-drop:</title>

   <step><para>Open the application's Open dialog box.</para></step>

   <step><para>
     <keycap>Control</keycap>-click on the file in
     <application>ROX-Filer</application> to select it.</para></step>

   <step><para>
     Click the middle button in the filename box in the application to paste the
     name in.
   </para></step>
  </procedure>

  <para>
   Note that clicking the middle mouse button in the main area of most web-browsers
   will open the selected file.
   </para><para>
   If you select something else (eg, some text in another program), the selected
   items in the filer window will be shown shaded (the filer no longer has the
   primary selection).  Clicking on one of the shaded items will cause the
   filer to regain the primary selection.
  </para>

  <sect1><title>Saving and restoring the selection</title>
   <para>
    It is sometimes useful to save the current selection for later. You can
    save the current selection to one of ten numbered groups by pressing
    <keycap>Control</keycap>+<keycap>&lt;number&gt;</keycap>.
    You can restore a saved group by pressing the group number on its own. You
    can do this from a different directory, or even a different filer window.
    </para><para>
    Saving is also useful even if there is no selection, since it still saves
    the current directory.
   </para>
   <procedure><title>Example: saving a directory and returning to it later:</title>
    <step><para>You are looking at a directory, and wish to remember it.
      Press <keycap>Control</keycap>+<keycap>1</keycap>.</para></step>
    <step><para>Move to another directory, or close the window, etc.</para></step>
    <step><para>Press <keycap>1</keycap> in any filer window to return
      to the first directory.</para></step> </procedure>
   <para>The groups are saved automatically for next time the filer is loaded.
  </para></sect1>
 </chapter>

 <chapter id="toolbar">
  <title><anchor id="Toolbar" xreflabel="Toolbar"/>The toolbar</title>
  <para>

   By default, each window has a toolbar along the top. You can disable
   this (or make it larger) from the Options window, as well as set which
   tools appear on the toolbar. Normally, you should click with the left
   mouse button (1). However, many tools can perform a related function
   if clicked on with buttons 2 or 3 (middle or right).
  </para>

  <informaltable><tgroup cols="3">

    <thead>
     <row><entry>
       Icon</entry><entry>
       Mouse button 1</entry><entry>
       Other button
     </entry></row>

    </thead>
    <tbody>

     <row><entry>
       Cross</entry><entry>
       Close the window</entry><entry>
       Open a new window
       </entry></row><row><entry>
       Up arrow</entry><entry>
       Change to parent directory</entry><entry>
       Show parent in a new window <xref linkend="newwin_fn"/>
       </entry></row><row><entry>
       House</entry><entry>
       Change to home directory</entry><entry>
       Show home in a new window <xref linkend="newwin_fn"/>
       </entry></row><row><entry>
       Jump to point</entry><entry>
       Open the <xref linkend="bookmarks"/>
       </entry><entry>
       Edit the bookmarks
       </entry></row><row><entry>
       Looping arrows</entry><entry>
       Reread the directory contents</entry><entry>
       Open a new window
       </entry></row><row><entry>
       Magnifying glass (+)</entry><entry>
       Select a larger icon size.</entry><entry>
       Select a smaller icon size.
       </entry></row><row><entry>
       Magnifying glass (fit)</entry><entry>
       Set Automatic sizing mode and resize the window.</entry><entry>
       -
       </entry></row><row><entry>
       List</entry><entry>
       Hide or show extra details</entry><entry>
       Same
       </entry></row><row><entry>
       A..Z</entry><entry>
       Step forward through the different sort types.</entry><entry>
       Step backward through the sort types.
       </entry></row><row><entry>
       Eye</entry><entry>
       Toggle the display of hidden files (those with names starting with a dot)</entry><entry>
       Same
       </entry></row><row><entry>
       List with selections</entry><entry>
       Select All.</entry><entry>
       Invert Selection.
       </entry></row><row><entry>
       Life-belt</entry><entry>
       Show <application>ROX-Filer</application>'s help files</entry><entry>
       Open manual directly
     </entry></row>
  </tbody></tgroup></informaltable>

  <para>
   <anchor id="newwin_fn" xreflabel="[1]"/>[1]
   If the 'New window on button 1' option is turned on
   then the default is to open a new window &mdash; clicking with the other
   button reuses the same window instead.
  </para>

  <para>
   Dragging files to the Up or Home icons acts just like dragging them
   into the directory which the button leads to. Dragging to the Bookmarks button
   will add the directory as a bookmark.
  </para>
  <para>
   The toolbar can also show the number of files in the directory, and
   information about the selection. This can be turned on or off in the
   Options box.
  </para>
 </chapter>

 <chapter id="menus">
  <title>The menus</title>
  <para>
   By default, you can open a menu by right clicking over a pinboard, panel or
   filer window.

   In filer windows, you may also press <keycap>\</keycap> to open the menu. As
   a shortcut, you can open the File submenu directly by holding down the
   <keycap>Control</keycap> key when opening the menu. Here is a full
   description of each menu item:

   <informaltable><tgroup cols="2">

     <thead><row><entry>Entry</entry><entry>Action</entry></row></thead>

     <tbody>
      <row><entry><guimenuitem>Display</guimenuitem></entry><entry>
        Change the display settings.
      </entry></row>

      <row><entry><guimenuitem>File</guimenuitem></entry><entry>
        Operations on the selected items.
      </entry></row>

      <row><entry><guimenuitem>Select</guimenuitem></entry><entry>
        Control which items are selected.
      </entry></row>

      <row><entry><guimenuitem>Options...</guimenuitem></entry><entry>
        Configure <application>ROX-Filer</application>.
      </entry></row>

      <row><entry><guimenuitem>New</guimenuitem></entry><entry>
        Create a new file or subdirectory inside this directory.
      </entry></row>

      <row><entry><guimenuitem>Window</guimenuitem></entry><entry>
        Operations on the window as a whole.
      </entry></row>

      <row><entry><guimenuitem>Help</guimenuitem></entry><entry>
        Information about the filer.
      </entry></row>

   </tbody></tgroup></informaltable>

  </para>

  <sect1>
   <title>The display menu</title>
   <para>

    <informaltable><tgroup cols="2">

      <thead><row><entry>Entry</entry><entry>Action</entry></row></thead>

      <tbody>
       <row><entry><guimenuitem>Icons View</guimenuitem></entry><entry>
       Files are displayed as rows of icons.
       </entry></row>

       <row><entry><guimenuitem>Icons, With...</guimenuitem></entry><entry>
       Files are displayed as rows of icons with additional details
       (chosen from the submenu). To see fuller information about each file
       use the List View instead.
       </entry></row>

       <row><entry><guimenuitem>List View</guimenuitem></entry><entry>
       Show files in a list along with their details. Click on a column heading
       to sort by that column.
       </entry></row>

       <row><entry><guimenuitem>Bigger Icons</guimenuitem></entry><entry>
       Increase the size of the icons. Turns off Automatic mode.
       </entry></row>

       <row><entry><guimenuitem>Smaller Icons</guimenuitem></entry><entry>
       Reduce the size of the icons. Turns off Automatic mode.
       </entry></row>

       <row><entry><guimenuitem>Automatic</guimenuitem></entry><entry>
       Select a sensbile icon size automatically now and when changing
       directory, etc.
       </entry></row>

       <row><entry><guimenuitem>Sort by XXX</guimenuitem></entry><entry>
       Set the sort mode. In List View you can also set the sort type by
       clicking on the column headings.
       </entry></row>

       <row><entry><guimenuitem>Reversed</guimenuitem></entry><entry>
       Sort in reverse order (newest to oldest, largest to smallest, etc).
       </entry></row>

       <row><entry><guimenuitem>Show Hidden</guimenuitem></entry><entry>
       If on, files beginning with a dot are shown, otherwise they are hidden.
       The titlebar shows <guilabel>(All)</guilabel> when this is on.
       </entry></row>

       <row><entry><guimenuitem>Filter Files...</guimenuitem></entry><entry>
       Restrict the display to only show files with names matching the
       given pattern.
       The titlebar shows <guilabel>(Glob (pattern))</guilabel> when this is on.
       </entry></row>

       <row><entry><guimenuitem>Show Thumbnails</guimenuitem></entry><entry>
       When on, the filer tries to load every image file and use that
       image as the file's icon. Useful if you have a directory full of
       photos and can't remember which is which!
       See the <xref linkend="thumbnails"/> section for details.
       </entry></row>

       <row><entry><guimenuitem>Refresh</guimenuitem></entry><entry>
       Rereads the contents of the directory and details of all the files
       in it. Use this if the display becomes out-of-date.
       </entry></row>

       <row><entry><guimenuitem>Save Display Settings...</guimenuitem></entry><entry>
       Remember the display settings just for this directory. Each time you
       open the directory, the saved settings will be used.
       </entry></row>
    </tbody></tgroup></informaltable>

   </para>

   <sect2><title><anchor id="Permissions" xreflabel="Permissions"/>
     Permissions
    </title>
    <para>

     The permissions field, when shown, is made up of four groups of three
     flags. Each flag is displayed as a letter if it is on and a dash (&ndash;)
     if not. The first three characters show the permissions for the owner
     of the file, the second for other members of the file's group and
     the third for everyone else. Whichever group applies to the
     <application>ROX-Filer</application> process itself is shown underlined.
     The fourth group shows any special flags.
     </para><para>
     The meanings of the characters are:

     <itemizedlist>

      <listitem><para><computeroutput>r</computeroutput> &mdash;
        Permission to read the contents of a file, or the names of files
        in a directory.</para></listitem>

      <listitem><para><computeroutput>w</computeroutput> &mdash;
        Permission to alter the contents of a file, or change which names
        appear in a directory.</para></listitem>

      <listitem><para><computeroutput>x</computeroutput> &mdash;
        Permission to run the file as a program, or refer to the files
        listed within the directory.</para></listitem>

      <listitem><para><computeroutput>U</computeroutput> &mdash;
        This program executes with the <emphasis>effective user ID</emphasis> of its
        owner rather than the person who ran it.</para></listitem>

      <listitem><para><computeroutput>G</computeroutput> &mdash;
        This program executes with the <emphasis>effective group ID</emphasis> of its
        group, regardless of who ran it.</para></listitem>

      <listitem><para><computeroutput>T</computeroutput> &mdash;
        Entries in this directory can only be altered or removed by the
        people who own the files even if they have write permission on the
        directory itself.</para></listitem>

     </itemizedlist>
     For example,
     <programlisting>
      <emphasis role="underline">rwx</emphasis>,rwx,r-x/---</programlisting>
     means that the owner of the file is the same as the effective user of
     <application>ROX-Filer</application> (basically, you own the file), you and
     members of the file's group have read, write and execute permission and other
     people have only read and execute permission. There are no special flags set.

     The rules which determine which permissions apply may vary slightly between
     operating systems, but a rough guide is:

     <itemizedlist>

      <listitem><para>If the <emphasis>effective user ID</emphasis> of the
        process is equal to the file's owner, then the owner permissions apply.
      </para></listitem>

      <listitem><para>Otherwise, if the <emphasis>effective group ID</emphasis>
        of the process is equal to the file's group OR the file's group is one
        of the process's <emphasis>supplemental groups</emphasis> then the
        group permissions apply.
      </para></listitem>

      <listitem><para>Otherwise, the `other' permissions apply. The
        <emphasis>real user ID</emphasis> and <emphasis>real group
         ID</emphasis> have no effect (except that a process may set its real
        IDs to its effective IDs).
      </para></listitem>

     </itemizedlist>

    </para>
   </sect2>
  </sect1>

  <sect1>
   <title>The file menu</title>
   <para>
    All of these work in the same way &mdash; if you open the menu with some
    items selected then the operation applies to those items. If you open
    then menu over an item while there is no selection then that item
    is temporarily selected.
    </para><para>
    If you choose one of these while there is no selection at all then the
    window goes into `target mode'; the operation happens to the next item you
    click on. Click on the window background, press <keycap>Escape</keycap>, or
    click with the right mouse button to cancel target mode. Target mode is
    mainly useful with the <guilabel>Single-click navigation</guilabel> option
    and keys bound to the various menu entries. </para><para>
    Note that individual applications may add extra menu items to the
    top of this submenu when you click over them &mdash; see
    <xref linkend="AppDir"/> for details. There may also be any number of
    user-defined actions at the top, which depend on the type of file
    clicked on. You can add programs here by choosing the
    <guimenuitem>Customise Menu</guimenuitem> item. For example, you could
    make <application>The Gimp</application> appear on the menu for images, and
    <application>FreeFS</application> appear for mount points.

    <informaltable><tgroup cols="2">
      <thead><row><entry>Entry</entry><entry>Action</entry></row></thead>
      <tbody>

       <row><entry>
         <guimenuitem>Copy...</guimenuitem></entry><entry>
         Make a copy of this object.
       </entry></row>

       <row><entry>
         <guimenuitem>Rename...</guimenuitem></entry><entry>
         Change the name used for this object, or move it between directories.
	 If multiple files are selected, this opens
	 <xref linkend='bulkrename' />.
       </entry></row>

       <row><entry>
         <guimenuitem>Link...</guimenuitem></entry><entry>
         Create a symbolic link to this name.
       </entry></row>

       <row><entry>
         <guimenuitem>Delete</guimenuitem></entry><entry>
         Remove all the selected entries from the directory. Subdirectories
         will have their contents deleted first. Deleting symlinks only removes
         the link, not the thing it points to.
       </entry></row>

       <row><entry>
         <guimenuitem>Shift Open</guimenuitem></entry><entry>
	 Opens applications as directories, files as text/plain, and
	 symlinks by opening the directory containing the thing they point to.
	 It also has interesting effects on mount points (see <xref linkend="media"/>).
	 This is the same effect as clicking with <keycap>Shift</keycap> held
	 down. The text of the menu entry changes to show which action will be
	 performed.
       </entry></row>

       <row><entry>
         <guimenuitem>Open AVFS</guimenuitem></entry><entry>
         Open the file as if it was a directory &mdash; see the
         <xref linkend="vfs"/> section.
       </entry></row>

       <row><entry>
         <guimenuitem>Send To...</guimenuitem></entry><entry>
         Opens the `Send To' menu, allowing you to send the selected files
         to one of a list of applications. See the
         <xref linkend="SendTo"/> section.
       </entry></row>

       <row><entry>
         <guimenuitem>Set Run Action...</guimenuitem></entry><entry>
         Allows you to set the default program to use when opening files of
         this type. See <xref linkend="RunAction"/> section for details.
       </entry></row>

       <row><entry>
         <guimenuitem>Set Icon...</guimenuitem></entry><entry>
         You can give each file or directory its own special icon using this
         feature &mdash; simply drag a suitable image onto <xref linkend="SetIcon"/>.
       </entry></row>

       <row><entry>
         <guimenuitem>Properties</guimenuitem></entry><entry>
         Display extra information about this object. You can also change
	 the access permissions from here (<guimenuitem>Permissions</guimenuitem>
	 below allows you to change many files at once), and change the target
	 to which a symlink points.
       </entry></row>

       <row><entry>
         <guimenuitem>Count</guimenuitem></entry><entry>
         Count the sizes of all the selected items. Directories also have their
         contents counted. Symlinks count themselves, not the things they point
         to.
       </entry></row>

       <row><entry>
         <guimenuitem>Set Type...</guimenuitem></entry><entry>
         Set the MIME type for a file. This only works on filesystems with extended attribute support. For older filesystems, you will have to rename a file to change its type.
       </entry></row>

       <row><entry>
         <guimenuitem>Permissions</guimenuitem></entry><entry>
         Allows you to change the permissions for the selected files.
	 If only one file is to be changed, you can use
	 <guimenuitem>Properties</guimenuitem> instead for a simpler interface.
       </entry></row>

       <row><entry>
         <guimenuitem>Find</guimenuitem></entry><entry>
         Search for files by specifying various conditions &mdash; see the
         <xref linkend="Searching"/> section.
       </entry></row>

    </tbody></tgroup></informaltable>
   </para>

   <formalpara><title>Note about symlinks:</title>
    <para>
     A symbolic link stores the <emphasis>location</emphasis>
     of another file. Deleting the symlink doesn't affect the other file.
     Deleting the other file means that the symlink won't work. There are
     two types of symbolic link &mdash; Relative and Absolute. An absolute
     link stores the path from the root directory to the target file (eg
     <filename>/home/fred/MyFile</filename>).

     A relative path stores the path from the symlink
     to the target (eg <filename>../fred/MyFile</filename>).
     If the target file is never going to move then you want an absolute link,
     but if the target may move (and the symlink will be moved with it) then
     you want a relative link.
    </para>
   </formalpara>
  </sect1>

  <sect1>
   <title>The select menu</title>
   <para>
    This menu allows you to select and unselect files in various ways. See the
    <xref linkend="keys"/> section for other ways to select files.

    <informaltable><tgroup cols="2">
      <thead><row><entry>Entry</entry><entry>Action</entry></row></thead>
      <tbody>
       <row><entry>
         <guimenuitem>Select All</guimenuitem></entry><entry>
         Select every item in this window.
       </entry></row>

       <row><entry><guimenuitem>Clear Selection</guimenuitem></entry><entry>
         Unselect every item in this window.
       </entry></row>

       <row><entry><guimenuitem>Invert Selection</guimenuitem></entry><entry>
	 Every selected file becomes unselected, and every unselected file
	 becomes selected.
       </entry></row>

       <row><entry>
         <guimenuitem>Select by Name...</guimenuitem></entry><entry>
         Select just those files that match the given name pattern. This
	 isn't as flexible as <guimenuitem>Select If...</guimenuitem> (see
	 below), but it is quicker to use. Files also highlight as you type
	 with this option. The default key binding is <keycap>.</keycap>,
	 so you can type <userinput>.png</userinput> to select all
	 <filename>.png</filename> files, for example.
       </entry></row>

       <row><entry>
         <guimenuitem>Select If...</guimenuitem></entry><entry>
         Select just those files that match the given pattern &mdash;
         see the <xref linkend="SelectIf"/> section.
       </entry></row>

    </tbody></tgroup></informaltable>

   </para>
  </sect1>

  <sect1>
   <title>The new menu</title>
   <para>

    Each entry in this submenu opens a savebox for creating a new file or
    directory. There are three standard entries; the others are the contents of
    your <filename>~/.config/rox.sourceforge.net/Templates</filename> directory, if it
    exists.


    <informaltable><tgroup cols="2">
      <thead><row><entry>Entry</entry><entry>Action</entry></row></thead>
      <tbody>
       <row><entry>Directory</entry><entry>
         Create a new directory.
         </entry></row>
	 
	 <row><entry>File</entry><entry>
         Create a blank file.
         </entry></row>

	 <row><entry>Customise Menu</entry><entry>
         Open the <filename>Templates</filename> directory so that you can
	 add extra items to the menu.
         </entry></row>
	 
	 <row><entry>&lt;user entries&gt;</entry><entry>
         Copy a file from your Templates directory.
       </entry></row>
    </tbody></tgroup></informaltable>


    To add your own entries, choose <guimenuitem>Customise Menu</guimenuitem>
    and put any files you want in there. Each file in the directory will appear
    on the menu and the box that appears will copy it. For example, you could
    create a blank HTML file:

    <programlisting>
&lt;html&gt;
 &lt;head&gt;
  &lt;title&gt;My Page&lt;/title&gt;
 &lt;/head&gt;
 &lt;body&gt;
  The contents.
 &lt;/body&gt;
&lt;/html&gt;</programlisting>

    Save this as <filename>index.html</filename> inside the
    <filename>Templates</filename> directory and you can easily create new
    HTML files. You can also save blank documents from various applications
    into here (eg, a blank spreadsheet, a blank letter, etc).
    </para><para>
    Note that you cannot set keyboard shortcuts for these user-defined
    entries at present.

   </para>
  </sect1>

  <sect1>
   <title>The window menu</title>
   <para>


    <informaltable><tgroup cols="2">
      <thead><row><entry>Entry</entry><entry>Action</entry></row></thead>
      <tbody>
       <row><entry>
         <guimenuitem>Parent, New Window</guimenuitem></entry><entry>
         Open a new window displaying this window's parent.
       </entry></row>

       <row><entry>
         <guimenuitem>Parent, Same Window</guimenuitem></entry><entry>
         As above, but reuse this window.
       </entry></row>

       <row><entry>
         <guimenuitem>New Window</guimenuitem></entry><entry>
         Open another window onto this directory.
       </entry></row>

       <row><entry>
         <guimenuitem>Home Directory</guimenuitem></entry><entry>
         Change to your home directory.
       </entry></row>

       <row><entry>
         <guimenuitem>Show Bookmarks</guimenuitem></entry><entry>
         Open the bookmarks menu (see <xref linkend="bookmarks"/>).
       </entry></row>

       <row><entry>
         <guimenuitem>Follow Symbolic Links</guimenuitem></entry><entry>
	 Converts the path shown in the window's titlebar to its canonical form.
	 For example, if <filename>/home/fred/link</filename> is a symlink
	 pointing to <filename>/usr/share/doc/</filename> then clicking on the symlink
	 will take you to that directory and going `up' will take you back to
	 <filename>/home/fred</filename>.
	 If you'd used <guimenuitem>Follow Symbolic Links</guimenuitem>, you would
	 have ended up in <filename>/usr/share</filename> instead.
       </entry></row>

       <row><entry>
         <guimenuitem>Resize Window</guimenuitem></entry><entry>
         Set the window to a sensible size for its contents.
       </entry></row>

       <row><entry>
         <guimenuitem>Close Window</guimenuitem></entry><entry>
         Close this window.
       </entry></row>

       <row><entry>
         <guimenuitem>Enter Path...</guimenuitem></entry><entry>
         Open the path-entry box (see the the <xref linkend="mini"/> section).
       </entry></row>

       <row><entry>
         <guimenuitem>Shell Command...</guimenuitem></entry><entry>
         Open the shell command box (see the <xref linkend="mini"/> section).
       </entry></row>

      <row><entry><guimenuitem>Xterm Here</guimenuitem></entry><entry>
        Open an xterm with its current directory set to this directory.
      </entry></row>

      <row><entry><guimenuitem>Switch to xterm</guimenuitem></entry><entry>
        Open an xterm with its current directory set to this directory, and close the
	filer window at the same time.
      </entry></row>

    </tbody></tgroup></informaltable>


   </para>
  </sect1>

  <sect1>
   <title>The help menu</title>
   <para>

    <informaltable><tgroup cols="2">
      <thead><row><entry>Entry</entry><entry>Action</entry></row></thead>
      <tbody>
       <row><entry>
         <guimenuitem>About ROX-Filer...</guimenuitem></entry><entry>
         Display information about the file. This is the same as locating ROX-Filer
	 itself in a filer window and selecting <guimenuitem>Properties</guimenuitem> from
	 the file menu.
       </entry></row>

       <row><entry>
         <guimenuitem>Show Help Files</guimenuitem></entry><entry>
	 Same as selecting ROX-Filer and choosing
	 <guimenuitem>Help</guimenuitem> from the file menu.
       </entry></row>

       <row><entry>
         <guimenuitem>Manual</guimenuitem></entry><entry>
	 Opens the HTML manual for your language, or the English version if there
	 is no translation.
       </entry></row>

    </tbody></tgroup></informaltable>

   </para>
  </sect1>

  <sect1>
   <title><anchor id="SendTo" xreflabel="Send To menu"/>The send to menu</title>
   <para>

    The `Send To' menu provides a quick way to send some files to an application.
    The filer scans all the <filename>$XDG_CONFIG_DIRS/rox.sourceforge.net/SendTo</filename>
    directories (see <citation>BaseDir</citation>) and lists
    the contents on this menu.
    </para><para>
    To change which applications appear here you should choose the
    <guimenuitem>Customise</guimenuitem> item from the bottom
    of the menu to create and open your own <filename>SendTo</filename>
    directory. Applications can be symlinked into this directory by dragging
    them in and choosing <guimenuitem>Link</guimenuitem> from the menu.
    </para><para>
    Opening the Send To menu via the main menu is rather slow, so it is
    normally opened by clicking the Menu mouse button over a file while
    holding the <keycap>Shift</keycap> key down.
   </para>
   <sect2>
    <title>Showing different applications for different types</title>
    <para>
     You may want to set things up so that, for example, the Gimp is
     only shown when an image is selected. To do this, create a
     hidden directory inside <filename>SendTo</filename> called
     <filename>.image</filename>, or whatever type you want to use.
     You can use either the complete type (eg <filename>.image_png</filename>)
     or just the media type. Use <guimenuitem>Properties</guimenuitem> over a
     file to find out its MIME type.
    </para>
    <para>
     Entries in these hidden directories are shown only for files of
     the appropriate type. If multiple files are selected, the
     <filename>.group</filename> directory is used instead.
    </para>
   </sect2>
  </sect1>

  <sect1>
   <title><anchor id="bookmarks" xreflabel="Bookmarks menu"/>The bookmarks menu</title>
   <para>
    The bookmarks menu can be used to store a list of frequently used directories.
    You can also open the menu from the main popup menu (in the <guimenuitem>Window</guimenuitem> submenu)
    and you can use this to bind a shortcut key to it. From the bookmarks menu
    you can add the currently shown directory to the list, jump to one of the
    stored directories, or open a dialog letting you edit the list. In the dialog
    box, you can remove entries, rearrange them (using the arrows or by
    dragging) and edit the pathnames directly, if required.
   </para>
   <para>
    The <guimenuitem>Recently Visited</guimenuitem> submenu shows the last few directories
    viewed. Choosing one will switch to that directory. The current directory is shown
    shaded, since you are already there.
   </para>
  </sect1>

 </chapter>

 <chapter id="icons">
  <title>The pinboard and panels</title>
  <para>

   The <xref linkend="run_pin"/> and <xref linkend="run_pan"/> sections explain
   how to turn the pinboard and panels on. Once on, you may drop items from filer
   windows onto the them to pin them up. Clicking on a pinned item acts just like
   clicking on it in a filer window. You can drag pinned icons just like normal
   icons and you can right-click on one to see the popup menu.
   </para><para>
   Drag panel icons with the middle mouse button to move them around.
   In previous versions of the filer, pinboard icons were also moved using the
   middle mouse button, but this is no longer supported (as the middle button
   is reserved for the window manager's use).
   </para><para>
   You can assign keyboard shortcuts to pinboard and panel icons. These can be
   used to open directories, files or applications quickly, even if another
   window has the focus.
   </para><para>
   Changes to the pinboard and panel are automatically saved. Clicking on pinned
   icons with <keycap>Control</keycap> held down selects and unselects them.
   Click on the background to unselect them all.
  </para>

  <important><para>
    Pinning a file does <emphasis>not</emphasis> copy it, it merely
    creates a shortcut to the original file. If you delete the file, then
    you've lost it! Removing a pinned file from its pinboard or panel
    only removes the link. This is different to most other filers...
  </para></important>

  <sect1>
   <title>The pinboard and panel menus</title>
   <para>

    <informaltable><tgroup cols="2">
      <thead><row><entry>Entry</entry><entry>Action</entry></row></thead>
      <tbody>

       <row><entry>
         <guimenuitem>ROX-Filer</guimenuitem></entry><entry>
         Show the filer's help, edit the options or open your home directory.
       </entry></row>

       <row><entry>
         <guimenuitem>File `file'</guimenuitem></entry><entry>
         Offers a smaller version of the filer's submenu of the same name.
       </entry></row>

       <row><entry>
         <guimenuitem>Edit Item</guimenuitem></entry><entry>
         Change the name displayed under the icon, or the pathname the item
         points to. You can also set a keyboard shortcut for the icon here.
	 For programs, you can specify extra arguments to be passed in.
       </entry></row>

       <row><entry>
         <guimenuitem>Show Location</guimenuitem></entry><entry>
         Open a directory viewer showing where the file is stored.
       </entry></row>

       <row><entry>
         <guimenuitem>Remove Item(s)</guimenuitem></entry><entry>
         Remove the selected items from the pinboard or panel.
       </entry></row>

       <row><entry>
         <guimenuitem>Backdrop...</guimenuitem></entry><entry>
	 Set the desktop backdrop image (see below). Only available from
	 the pinboard menu.
       </entry></row>

       <row><entry>
         <guimenuitem>Panel Options...</guimenuitem></entry><entry>
	 Set the edge of the screen on which the panel is displayed. Only available from
	 the panel menu.
       </entry></row>

    </tbody></tgroup></informaltable>

    </para><para>
    If you are setting up the defaults for multiple users and
    you wish to create a `Home' icon that leads to each user's home directory
    then you should first create a new icon and then use
    <guimenuitem>Edit Icon</guimenuitem> to change the location to
    <filename>~</filename> and the name to `Home'.
    </para><para>
    Note that individual applications may add extra menu items to the
    top of this menu when you click over them &mdash; see <xref linkend="AppDir"/>
    for details.
   </para>
  </sect1>

  <sect1>
   <title>Panel applets</title>
   <para>

    <application>ROX-Filer</application> allows you to run small programs
    inside the panel &mdash; such programs are called
    <emphasis>applets</emphasis>. To run an applet, drag it onto the panel from
    a filer window and instead of the applet's icon being shown, the applet
    will run.
   </para>

   <procedure><title>To create your own applets (programmers only!):</title>

    <step><para>
      Create a directory for the applet (eg <filename>MyApplet</filename>).
    </para></step>

    <step><para>
      Use the <guimenuitem>Set Icon...</guimenuitem> feature to create an icon
      called <filename>.DirIcon</filename> inside it (so the directory appears
      with an icon).
    </para></step>

    <step><para>
      Make a <filename>Help</filename> directory inside it for when the user
      chooses <guimenuitem>Help</guimenuitem> from the menu.
    </para></step>

    <step><para>
      Create an executable file called <filename>AppletRun</filename>. This will be
      passed the XID of the panel socket window when the directory is dragged
      onto the panel. You can use this to create a GtkPlug widget. A
      tutorial is available at
      <ulink url="http://rox.sourceforge.net/phpwiki/index.php/Tutorials/Applets"/>
    </para></step>

   </procedure>
  </sect1>

  <sect1>
   <title><anchor id="iconify" xreflabel="Iconified windows"/>Iconified windows on the pinboard</title>
   <para>
    When the pinboard is in use, ROX-Filer can be used to display an icon for each iconified
    (or 'minimised') window. You can turn this on or off from the Options box. Iconified window icons
    have a semi-transparent background slab effect, and can be dragged around.
    Clicking on one will expand it back into the window it represents. Some
    older window managers do not support this, and no icons will be shown.
   </para>
  </sect1>

  <sect1>
   <title><anchor id="backdropapp" xreflabel="Backdrop applications"/>The pinboard backdrop image</title>
   <para>
    You can set any image for the backdrop by choosing <guimenuitem>Backdrop...</guimenuitem>
    from the pinboard menu (right-click over the desktop background when the pinboard is turned on).
   </para>
   <para>
    To set an image, select <guilabel>Centre</guilabel>, <guilabel>Scale</guilabel>,
    <guilabel>Stretch</guilabel> or <guilabel>Tile</guilabel> to set the style,
    and then drag an image onto the marked area.  To return to a solid colour
    backdrop (as set in the Options box), click on <guibutton>Clear</guibutton>.
   </para><para>
    The Wallpaper<citation>Wallpaper</citation> application can be used for more complicated
    effects, such as choosing a new random image each hour, or rendering an image of the Earth
    as it is currently lit by the sun.
   </para>
   <formalpara><title>For programmers...</title>
    <para>
     If you want to create an application to set the backdrop (eg, to choose a
     random image, or a slideshow) you need to first create an application directory
     (see <xref linkend="AppDir"/>).
    </para>
   </formalpara><para>
    When run without arguments, the application should invoke the
    <function>SetBackdropApp</function> SOAP method (see <xref
    linkend="soap"/>). The filer will immediately run the application again,
    this time with the <option>--backdrop</option> option.
   </para><para>
    When run with <option>--backdrop</option>, the program should write the style and name of
    the image file to display to its standard output stream, eg:
    <screen>tile /tmp/image.png</screen>
    <userinput>centre</userinput> and <userinput>scale</userinput> are the other possible
    styles. The filer will then load this image and display it. The application does not
    set the backdrop itself, it only tells the filer what to display.
   </para><para>
    In the case of a random backdrop chooser, the program may then quit immediately. If
    the application created a temporary image then it should read the line "ok\n" from its
    standard input before deleting the image.
   </para><para>
    If the application wishes to show a sequence of images it should still read "ok\n",
    then wait until it's time to display the next image and then write that filename, and
    so on.
   </para><para>
    The filer will indicate that the program should stop running by closing the two
    streams. The program should clean up and exit at this point. Be sure to catch
    SIGPIPE when writing to standard output if you need to delete any temporary files.
   </para><para>
    See the Wallpaper<citation>Wallpaper</citation> application for a complete example application
    (written in python).
   </para>
  </sect1>
 </chapter>

 <chapter>
  <title>
   <anchor id="media" xreflabel="Removable devices"/>Removable devices
  </title>
  <para>
   Using removable devices, such as floppy disks and CDROMs under ROX-Filer is quite
   simple. However, it is important to understand about <emphasis>mounting</emphasis> and
   <emphasis>unmounting</emphasis> devices.
  </para>
  <para>
   Mounting a device causes its contents to appear in the filesystem. On a typical setup,
   the directory <filename>/floppy</filename> is an empty directory on the hard disk.
   The floppy device is then mounted onto this directory, causing its contents to appear
   inside. For example, a file called <filename>Letter</filename> on the floppy disk will
   appear as <filename>/floppy/Letter</filename>.
  </para>
  <para>
   Devices must be unmounted before the disk is removed. Unmounting causes the system to
   write any buffered data to the disk. If you remove a disk without unmounting
   it, it will probably be corrupted. CD and Zip drives often lock the tray while the
   device is mounted so you can't remove it accidentally.
  </para>
  <para>
   So that you don't have to specify which device should be mounted at which point in the
   filesystem every time you want to use a disk, a preset list is usually found in the
   file <filename>/etc/fstab</filename>. ROX-Filer shows mount points (such as
   <filename>/floppy</filename>) which are listed here but not mounted with transparent
   grey circles overlayed on their icons.
  </para>
  <para>
   Clicking on one of these mount points will mount the device for you. The circle turns
   green to indicate that the device is now mounted. Do <emphasis>not</emphasis> remove
   the device while the circle is lit! You can unmount the device by clicking
   while holding down <keycap>Shift</keycap> on the <filename>/floppy</filename>
   directory icon.
  </para>
  <para>
   You can also unmount a device by closing its directory window (eg, closing
   the view of <filename>/floppy</filename>) and choosing Unmount when prompted. The
   filer will only offer to unmount devices this way if they were mounted by
   the filer in the first place.
  </para>
  <para>
   If you want to open a directory without mounting anything (eg, if you want to
   see the contents of <filename>/floppy</filename> on the hard disk), you can
   click on the unmounted mount point with <keycap>Shift</keycap> held down.
   This isn't usually useful, as these directories are typically empty.
  </para>
 </chapter>

 <chapter>
  <title><anchor id="thumbnails" xreflabel="Thumbnails"/>File thumbnails</title>
  <para>
    When thumbnailing is turned on, the filer tries to load every image file
    and use that image as the file's icon. Useful if you have a directory full
    of photos and can't remember which is which! You can turn it on for
    a single directory by choosing <guimenuitem>Show Thumbnails</guimenuitem>
    from the <guimenu>Display</guimenu> menu. You can set it as the default
    from the Options box.
    The titlebar shows <guilabel>(Thumbs)</guilabel> when thumbnailing is on.
  </para>
  <para>
    The thumbnails are saved in <filename>~/.thumbnails</filename> for
    quick loading next time.
    While loading thumbnails, a progress bar appears at the bottom of
    the window. Clicking on the <guibutton>Cancel</guibutton> button
    beside the bar stops the scan.
    It is also possible to thumbnail other types of file, such as videos
    (eg, by showing the first frame), with a suitable helper program.
  </para>
  <sect1><title>Technical details</title>
  <para>
When in thumbnail mode <application>ROX-Filer</application> checks the
thumbnail directory (<filename>~/.thumbs/normal</filename>) for a
thumbnail for each file it scans. If a thumbnail exists it loads it and
continues on to the next file.
  </para><para>
To generate a thumbnail for a given file of type media/subtype the filer looks
for a program <filename>~/.config/rox.sourceforge.net/MIME-thumb/media_subtype</filename>,
falling back to <filename>~/.config/rox.sourceforge.net/MIME-thumb/media</filename> if one
cannot be found (this duplicates how run actions for files are looked up). If
neither file can be found and the file is of type image/* then the internal
routines are used. If the file is not of type image/* then no thumbnail is
generated.
  </para><para>
If the generator program is found, is executed with the parameters
<screen>thumbnailer /path/to/source/file /path/to/thumbnail pixel_size</screen>
  </para><para>
Once the child program exits, it attempts to load
<filename>/path/to/thumbnail</filename>. If that fails no thumbnail is
displayed.
  </para><para>
Note that because of the order it does things ROX-Filer will happily
use any pre-existing thumbnail even if it has no idea how it was
generated.
  </para>
  </sect1>

 </chapter>

 <chapter id="virtual">
  <title>
   <anchor id="vfs" xreflabel="Virtual file systems"/>Virtual file systems
  </title>
  <para>
   Some types of file can be represented as a directory. A typical example
   is a zip file, which contains an entire directory structure in compressed
   form. It is often useful to be able to open up such a file as if it
   was a real directory, and the VFS system allows you to do this.
  </para><para>
   To use this feature you must have a system such as
   AVFS<citation>AVFS</citation> installed, which causes the kernel to support
   various Virtual File Systems directly.
  </para>

 </chapter>

 <chapter id="minibuffer">
  <title><anchor id="mini" xreflabel="Minibuffer"/>The mini-buffer</title>
  <para>

   The mini-buffer is a white bar that appears along the bottom of the
   window and allows you to enter some text. Press <keycap>Escape</keycap> to
   get rid of it again. It behaves in different ways depending on how you
   invoked it:
  </para>

  <sect1>
   <title>The path-entry box</title>
   <para>

    This allows you to type in a path directly. As you type the display
    is updated to show the item entered visually. The main use is to find
    a file in a large directory quickly, but you can also use it for navigating
    between directories, or for selecting a full pathname from somewhere
    else and pasting it directly into the path-entry box.


    <informaltable><tgroup cols="2">
      <thead><row><entry>Key</entry><entry>Action</entry></row></thead>
      <tbody>

       <row><entry>
         <keycap>Return</keycap></entry><entry>
         Open the currently selected item.
       </entry></row>

       <row><entry>
         <keycap>Tab</keycap></entry><entry>
         Shell-style tab completion.
       </entry></row>

       <row><entry>
         <keycap>Up</keycap>, <keycap>Down</keycap></entry><entry>
         Select the previous/next matching entry.
       </entry></row>
    </tbody></tgroup></informaltable>

   </para>

   <para>
    If you start entering a name beginning with a `.' then the `Show Hidden'
    feature is temporarily turned on so that the file can be shown.
   </para>

   <para>
    Tab completion tries to fill in as many characters for you as it can.
    For example, if there are two files in a directory called 
    <filename>save-mail-nov-1999</filename> and
    <filename>save-mail-dec-1999</filename> then typing
    <userinput>save</userinput> and pressing <keycap>Tab</keycap> will expand
    <userinput>save</userinput> to <userinput>save-mail-</userinput> and beep
    to indicate that the match is not complete. If you use tab completion on a
    directory and it is unique then the filer will automatically change into
    the directory. This behavior should be familiar to shell users.
   </para>

   <informalexample><para>
     Let's say you want to locate the documentation for Wine in the directory
     <filename>/usr/share/doc</filename> (which is usually very large).
     Here's how you could do it:

     <orderedlist>

      <listitem><para>
	Open the minibuffer by choosing <guimenuitem>Enter
	Path...</guimenuitem> from the <guimenu>Window</guimenu> menu, or
        by pressing the slash (<keycap>/</keycap>) key.
      </para></listitem>

      <listitem><para>
	Press <keycap>CTRL</keycap>+<keycap>A</keycap> to select the existing
	contents.
      </para></listitem>

      <listitem><para>
	Type
	<userinput>u&lt;Tab&gt;sh&lt;Tab&gt;do&lt;Tab&gt;wi&lt;Tab&gt;</userinput>.
        As you type, the cursor will move to the correct subdirectory.
	If it beeps when you press <keycap>Tab</keycap> then you need to supply
	more letters, or press <keycap>Return</keycap>.
      </para></listitem>

     </orderedlist>

   </para></informalexample>
  </sect1>

  <sect1>
   <title>The shell command box</title>
   <para>

    This provides a quick way of entering shell commands if you don't
    want to open an xterm. If you don't know what shell commands are,
    skip this section!
    </para><para>
    Just type in the command and press <keycap>Return</keycap> to execute it.
    <keycap>Up</keycap> and <keycap>Down</keycap> arrows move through previously
    entered commands.
    <keycap>Tab</keycap> does shell-style completion.
    Clicking on an item inserts its name into the minibuffer.
    If some items are selected then they are assigned to the positional
    parameters <userinput>$1</userinput>, <userinput>$2</userinput>, etc.
    </para><para>
    Opening the minibuffer with a selection adds <computeroutput>"$@"</computeroutput>
    to the end of the command &mdash; this expands to all the selected files.
   </para>

   <informalexample><para>Examples:

     <orderedlist><title>To untar a <filename>.tgz</filename> archive:</title>

      <listitem><para>
        Open the minibuffer by choosing <guimenuitem>Shell Command...</guimenuitem> from
        the <guimenu>Window</guimenu> menu.
        I usually bind this to the bang (<keycap>!</keycap>) key.
      </para></listitem>

      <listitem><para>
        Type <userinput>tar xzf</userinput> and click on the file.
        The leading space is automatically inserted.
      </para></listitem>

      <listitem><para>
        Press <keycap>Return</keycap> to execute it.
      </para></listitem>

     </orderedlist>

     <orderedlist><title>To print all the selected files:</title>

      <listitem><para>
        Open the shell command minibuffer.
      </para></listitem>

      <listitem><para>
        Type <userinput>lpr</userinput> at the beginning of the line and press
        <keycap>Return</keycap>.
      </para></listitem>

     </orderedlist>

   </para></informalexample>

   <itemizedlist><title>Notes</title>

    <listitem><para>
      Be careful; you will not be asked to confirm! If in doubt, start the
      command with <userinput>xmessage</userinput> so that it will be displayed
      rather than executed.
    </para></listitem>

    <listitem><para>
      <citerefentry><refentrytitle>sh</refentrytitle></citerefentry>
      is always used as the name of the shell to run (mainly because
      <citerefentry><refentrytitle>bash</refentrytitle></citerefentry> and
      <citerefentry><refentrytitle>csh</refentrytitle></citerefentry> treat
      positional parameters differently).
      However, <envar>PATH</envar> is searched to find it so you can still use
      another shell if you want by naming it sh and putting it in your path.
    </para></listitem>

    <listitem><para>
      Commands execute in the background, so you can say:

      <command>sleep 240; xmessage Time to go!</command>
    </para></listitem>

   </itemizedlist>
  </sect1>

  <sect1>
   <title><anchor id="SelectIf" xreflabel="Select If"/>The conditional
    selection box</title> <para>

    Use this if you want to automatically select all files in the directory
    which match a condition.

    <orderedlist><title>For example, to select all files larger than 5Mb:</title>

     <listitem><para>
       Open the Select If minibuffer (bound to <keycap>?</keycap> by dafault).
     </para></listitem>

     <listitem><para>
       Type <userinput>Size &gt; 5Mb</userinput> and press <keycap>Return</keycap>.
     </para></listitem>

    </orderedlist>

    Just those files over 5 Mb in size will be selected. The expressions
    you can enter are in the same form as described in the
    <xref linkend="Searching"/> section, except that
    <userinput>prune</userinput> has no effect since the contents of
    directories are never checked anyway. You can press <keycap>Tab</keycap>
    to jump to each selected file in turn.

   </para>
  </sect1>
 </chapter>

 <chapter>
  <title>
   <anchor id="bulkrename" xreflabel="The Bulk Rename window"/>Renaming files in bulk
  </title>
  <para>
   If you have a large number of files to rename, it is tedious to rename them one
   by one. Instead, select all the files and choose <guimenuitem>Rename...</guimenuitem>
   from the menu to open the bulk rename window.
  </para>

  <para>
   The window shows a table with two columns. The <guilabel>Old name</guilabel> column
   shows the current name of each selected file, and the <guilabel>New name</guilabel>
   column shows the new name, which is initially the same.
  </para>

  <para>
   There are two ways to change the new names. You can edit the names in the table
   directly, or you can use the search and replace feature at the top of the window.
   This takes a regular expression to search for, and some text to replace matches
   with. For example, if you had a lot of files with names ending in
   <filename>.htm</filename> and you wanted to change them to use
   <filename>.html</filename>, you would enter <userinput>\.htm$</userinput> in
   the <guilabel>Replace:</guilabel> field and <userinput>.html</userinput> in the
   <guilabel>With:</guilabel> field. When you click <guibutton>Apply</guibutton>, the
   table is updated to show the proposed new names (but no actual renaming is done
   yet).
  </para>

  <para>
   Having checked that the new names look OK, click on the <guibutton>Rename</guibutton>
   button to actually perform the rename operation.
  </para>
 </chapter>

 <chapter id="actions">
  <title>Action windows</title>
  <para>
   Action windows are those boxes that appear while you're doing a
   Copy/Move/Link/etc operation. The status line at the top of the window shows
   the current directory or object that the window is processing. The scrolling
   area below is the log area &mdash; it shows what has been done, and questions
   may be displayed here.
   </para><para>
   Below this are four buttons and some options. All windows have the
   <guilabel>Quiet</guilabel> option. When this is on the filer will only
   confirm some operations (such as deleting a non-writeable file). Otherwise,
   all operations are confirmed.
   </para><para>
   The buttons work as follows:

   <variablelist>

    <varlistentry><term><guibutton>Yes</guibutton></term><listitem><para>
       answers yes to the question displayed in the log area.
    </para></listitem></varlistentry>

    <varlistentry><term><guibutton>No</guibutton></term><listitem><para>
       answers no to the question displayed in the log area.
    </para></listitem></varlistentry>

    <varlistentry><term><guibutton>Cancel</guibutton></term><listitem><para>
       kills the current operation (if any) and closes the action
       window.
    </para></listitem></varlistentry>

    <varlistentry><term><guibutton>Quiet</guibutton></term><listitem><para>
       is a quick way to turn <guilabel>Quiet</guilabel> on and click
       <guibutton>Yes</guibutton>.
    </para></listitem></varlistentry>


   </variablelist>

   You can control which actions get started automatically (without you
   having to click on <guibutton>Quiet</guibutton> at the start) from the
   Options window.
  </para>

  <sect1>
   <title>Action window options</title>
   <para>

    Some actions have options, which appear as option boxes at the bottom
    of the window. They are:

    <itemizedlist>

     <listitem><para>
       <guilabel>Force</guilabel> means that the filer won't treat non-writeable
       files as special.  Normally, it confirms the deletion even if
       <guibutton>Quiet</guibutton> is pressed.
       Note that you still can't remove files from non-writeable directories because
       in that case you really don't have permission.
     </para></listitem>

     <listitem><para>
       <guilabel>Brief</guilabel> prevents the filer logging a message every time it
       does something.  Use this to speed things up if large numbers of messages are
       being logged.
     </para></listitem>

     <listitem><para>
       <guilabel>Recurse</guilabel> means that doing something to a directory will
       also do the same thing to all its contents, and the contents of any
       subdirectories, and so on.
     </para></listitem>

     <listitem><para>
       <guilabel>Newer</guilabel> will automatically copy a file over an existing one
       if the file is newer than the one it replaces (later modification time).
     </para></listitem>

    </itemizedlist>
   </para>
   <para>
     You can set the defaults for these options from the Options box.
   </para>
  </sect1>
 </chapter>

 <chapter id="searching">
  <title><anchor id="Searching" xreflabel="Searching"/>Searching</title>
  <para>
   The Find feature looks through all the selected files and directories
   and any subdirectories (recursively) looking for items that match
   a particular expression.
   </para><para>
   Choose <guimenuitem>Find</guimenuitem> from the <guimenu>File</guimenu>
   submenu to search all the selected objects. If you want to select all the
   files within a single directory which meet certain criteria, use
   <guimenuitem>Select</guimenuitem> -> <guimenuitem>Select If...</guimenuitem>
   instead.
   </para><para>
   If you know the name of a file then just enter it in the `Expression:'
   box, enclosed in single quotes. For example, to find a file called
   <filename>log</filename> you would enter <userinput>'log'</userinput>.

   Remember to use normal quotes, not double quotes (") or back-quotes (`).
   </para><para>
   As the filer finds matching files they are added to the results list.
   Double-clicking on an entry in the list opens a viewer showing that file.
   The filer will use the same window to view other results (so, if you want
   the results shown in separate windows you must explicitly create a new
   window from the <guimenu>Window</guimenu> menu).
  </para>

  <sect1>
   <title>Wildcards</title>
   <para>

    You can also put shell-style wildcard characters inside the quotes,
    for example:

    <simplelist>

     <member><command>'*.html'</command></member>
     <member><command>'Report.*'</command></member>
     <member><command>'Draft[1-5]'</command></member>
     <member><command>'main.[ch]'</command></member>

    </simplelist>

    Look at the
    <citerefentry><refentrytitle>glob</refentrytitle>
     <manvolnum>7</manvolnum></citerefentry>
    manpage if you want to know more about shell wildcards.
    </para><para>
    If the pattern you enter contains a slash (`/') character then the
    pattern is matched against the file's full path, otherwise only the
    leafname is used. That is, <userinput>'*tmp*'</userinput> will find
    <filename>tmp</filename> and <filename>tmpfile</filename> but not
    <filename>/tmp/file</filename> &mdash; <userinput>'/*tmp*'</userinput> will find
    all three.
   </para>
  </sect1>

  <sect1>
   <title>Simple tests</title>
   <para>
    As well as finding files by their names you can also find them by
    various other attributes. Note that <emphasis>file</emphasis> is used here to
    mean anything that can appear in the filesystem &mdash; including directories,
    devices and so on.
    </para><para>
    You can also use a short form for each test; these are shown in brackets.
    You can combine multiple tests &mdash; `<userinput>-rw</userinput>' is
    the same as `<userinput>IsReadable and IsWriteable</userinput>'.
   </para>

   <itemizedlist><title>These look at the type of the item being checked:</title>

    <listitem><para>
      <userinput>IsReg (-f)</userinput> matches any regular (ie, normal) file.
    </para></listitem>

    <listitem><para>
      <userinput>IsLink (-l)</userinput> matches symlinks.
    </para></listitem>

    <listitem><para>
      <userinput>IsDir (-d)</userinput> matches directories.
    </para></listitem>

    <listitem><para>
      <userinput>IsChar (-c)</userinput> matches character device files.
    </para></listitem>

    <listitem><para>
      <userinput>IsBlock (-b)</userinput> matches block device files.
    </para></listitem>

    <listitem><para>
      <userinput>IsDev (-D)</userinput> matches block or character device files.
    </para></listitem>

    <listitem><para>
      <userinput>IsPipe (-p)</userinput> matches pipes.
    </para></listitem>

    <listitem><para>
      <userinput>IsSocket (-S)</userinput> matches sockets.
    </para></listitem>

    <listitem><para>
      <userinput>IsDoor (-O)</userinput> matches door objects (Solaris).
    </para></listitem>

   </itemizedlist>

   <itemizedlist><title>These look at the permissions set on the file &mdash;
     see the <xref linkend="Permissions"/> section.</title>

    <listitem><para>
      <userinput>IsSUID (-u)</userinput> matches files which have the Set-UID
      bit set.</para></listitem>

    <listitem><para>
      <userinput>IsSGID (-g)</userinput> matches files which have the Set-GID
      bit set.</para></listitem>

    <listitem><para>
      <userinput>IsSticky (-k)</userinput> matches files with the sticky bit
      set.</para></listitem>

    <listitem><para>
      <userinput>IsReadable (-r)</userinput> matches files which you can read
      from.</para></listitem>

    <listitem><para>
      <userinput>IsWriteable (-w)</userinput> matches files which you can write to.
    </para></listitem>

    <listitem><para>
      <userinput>IsExecutable (-x)</userinput> matches files which you can execute.
    </para></listitem>

   </itemizedlist>

   <itemizedlist><title>And a couple of other useful ones:</title>

    <listitem><para>
      <userinput>IsEmpty (-z)</userinput> finds empty files (ie, those whose
      length is 0 bytes).
    </para></listitem>

    <listitem><para>
      <userinput>IsMine (-o)</userinput> finds files which you own.
    </para></listitem>

   </itemizedlist>

  </sect1>

  <sect1>
   <title>Logic operators</title>
   <para>
    You can combine the above tests in various ways to perform more advanced
    searches.
    An expression is actually made up of a list of <emphasis>cases</emphasis>,
    separated by commas. The filer will try to match each case in turn
    until one matches or there are no more cases left. For example, to
    search for files with several possible endings:

    <screen>'*.gif', '*.htm', '*.html'</screen>

    Further, each of the cases is actually a list of conditions. The case
    only matches if all of its conditions are met. So, to find a directory
    called <filename>lib</filename> or a regular file ending in
    <filename>.so</filename>:

    <screen>IsDir 'lib', IsReg '*.so'</screen>

    You can negate a condition by putting a <userinput>!</userinput> in front
    of it and you can use a sub-expression as a condition by bracketing it,
    like this:

    <screen>
     !(IsDir, IsReg)

     !IsDir !IsReg

     Not isdir and not isreg

     !-d !-f</screen>
    All four do the same thing.
   </para>
  </sect1>

  <sect1>
   <title>Comparisons</title>
   <para>
    You can also compare various values using the operators
    <userinput>&lt;</userinput>,
    <userinput>&lt;=</userinput>,
    <userinput>=</userinput>,
    <userinput>!=</userinput>,
    <userinput>&gt;</userinput>, and
    <userinput>&gt;=</userinput>
    (for less-than, less-than-or-equal-to, equal-to,
    not-equal-to, greater-than and greater-than-or-equal-to).

    When comparing times, you may find it helpful to use
    <userinput>after</userinput> and <userinput>before</userinput> instead of
    <userinput>&gt;</userinput> and <userinput>&lt;</userinput> to make things
    clearer.
   </para>

   <itemizedlist><title>
     The following are read from the file being checked and may be used
     for the values being compared:
    </title>

    <listitem><para>
      <userinput>atime</userinput> The time that the file was last accessed.
    </para></listitem>

    <listitem><para>
      <userinput>ctime</userinput> The time that the file's status was last changed.
    </para></listitem>

    <listitem><para>
      <userinput>mtime</userinput> The time that the file's contents were last modified.
    </para></listitem>

    <listitem><para>
      <userinput>size</userinput> The size of the file.
    </para></listitem>

    <listitem><para>
      <userinput>inode</userinput> The file's inode (index) number.
    </para></listitem>

    <listitem><para>
      <userinput>nlinks</userinput> The number of links to this file. That is,
      the number of directory entries which refer to this file. Note that
      symlinks don't count as references.
    </para></listitem>

    <listitem><para>
      <userinput>uid</userinput> The User ID of the file.
    </para></listitem>

    <listitem><para>
      <userinput>gid</userinput> The Group ID of the file.
    </para></listitem>

    <listitem><para>
      <userinput>blocks</userinput> The number of disk blocks being used by the file.
    </para></listitem>

   </itemizedlist>

   <para>
    Times are measured as seconds since the Unix Epoch (00:00:00 UTC,
    January 1, 1970). Sizes are in bytes. When specifying constants to
    compare these values with you may use various keywords to scale the
    value:

    <itemizedlist>

     <listitem><para>
       <userinput>Byte(s)</userinput> has no effect, but looks better.
     </para></listitem>

     <listitem><para>
       <userinput>Kb</userinput> multiplies by 1024, so 2Kb is the same as 2048.
     </para></listitem>

     <listitem><para>
       <userinput>Mb</userinput> multiplies by 1024<superscript>2</superscript>,
       ie 1024 Kb.
     </para></listitem>

     <listitem><para>
       <userinput>Sec(s)</userinput> has no effect, but looks nice.
     </para></listitem>

     <listitem><para>
       <userinput>Min(s)</userinput> multiplies by 60 to get minutes.
     </para></listitem>

     <listitem><para>
       <userinput>Hour(s), Day(s), Week(s), Year(s)</userinput> likewise
       convert to the relevant unit.
     </para></listitem>

     <listitem><para>
       <userinput>Ago</userinput> makes the time in the past relative to when
       the check is done.
     </para></listitem>

     <listitem><para>
       <userinput>Hence</userinput> makes the time in the future.
     </para></listitem>

     <listitem><para>
       <userinput>Now</userinput> is short for <userinput>0 Secs Hence</userinput>.
     </para></listitem>

    </itemizedlist>

    Some examples should make this all a bit clearer!

    <screen>
     mtime after 1 day ago

     size &gt; 10 Mb

     IsReg and nlinks &gt; 1</screen>
    The first finds files modified within the last 24 hours. You could
    use <userinput>&gt;</userinput> instead of <userinput>after</userinput>,
    but it's not so clear what is meant.
    </para><para>
    The second finds files larger than 10 Mb. The last finds regular files with
    more than one directory entry.
    </para><para>
    Be careful though &mdash; the filer doesn't check the context of the
    modifiers, so <userinput>size &gt; 1 day ago</userinput> is allowed,
    although it doesn't make much sense!

    Also, forgetting to use <userinput>ago</userinput> or
    <userinput>hence</userinput> will cause odd effects (the time will be
    measured relative to the Epoch rather than the current time).
    Finally, don't use <userinput>=</userinput> with times &mdash;
    <userinput>atime = 1 day ago</userinput> looks for a file accessed
    <emphasis>exactly</emphasis> 86400 seconds ago...

   </para>
  </sect1>

  <sect1>
   <title>Specials</title>
   <para>

    <itemizedlist>

     <listitem><para>
       <userinput>System(Command)</userinput> executes `Command' on the file.
       The test succeeds if the command returns an exit status of zero. A `%'
       character in `Command' is replaced by the full path of the file being
       checked.  <userinput>System</userinput> is a very slow test to perform,
       so do it last if possible.  For example, if you're looking for a
       <filename>.c</filename> file containing the word `main', do:

       <screen>'*.c' system(grep -q main "%")</screen>
       so that the grep is only performed for files ending in <filename>.c</filename>
       (as opposed to only checking that the file ends in <filename>.c</filename> if
       it contains the word `main').
     </para></listitem>

     <listitem><para>
       <userinput>Prune</userinput> Always fails!
       <footnote><para>Note that this is the opposite of the
         <citerefentry><refentrytitle>find</refentrytitle><manvolnum>1</manvolnum>
       </citerefentry> command.</para></footnote>

       However, if it gets evaluated at all then it prevents the filer
       from checking inside the current directory. Remember the order in which
       the filer checks the expression!
     </para></listitem>

    </itemizedlist>

    Examples:

    <screen>
     '*.old' system(rm '%')

     'src' prune, '*.c'</screen>
    The first deletes each file ending in <filename>.old</filename>.
    The second looks for <filename>.c</filename> files, but does not bother
    checking inside directories called <filename>src</filename>.
    The expression is evaluated like this:
    </para><para>
    If file is named <filename>src</filename> then `Prune'.
    Either way, check if it ends in <filename>.c</filename> and include
    it in the results if so.
   </para>
  </sect1>
 </chapter>

 <chapter id="options">
  <title>Options</title>
  <para>

   You can configure various aspects of <application>ROX-Filer</application>
   from the Options box.
   Choose <guimenuitem>Options...</guimenuitem> from a filer window menu to
   open it. The list on the left of the window lists the various sections &mdash;
   click on one to see its options.

   At the bottom of the window are two buttons:

   <itemizedlist>

    <listitem><para>
      <guibutton>OK</guibutton>
      saves the current choices into your
      <filename>~/.config/rox.sourceforge.net/ROX-Filer</filename> directory for next time
      <application>ROX-Filer</application> is loaded, if anything changed.
      Exactly where choices are loaded from and saved to is controlled by the
      <envar>XDG_CONFIG_HOME</envar> environment variable &mdash; see
      <citation>BaseDir</citation> for details.
      Changes made in the Options box take effect instantly, so you don't need to
      click on <guibutton>OK</guibutton> just to try them out.
    </para></listitem>

    <listitem><para>
      <guibutton>Revert</guibutton>
      Restores all choices to how they were when the options box was opened.
      This button is shown shaded if you haven't made any changes.
      The Options window is not closed when this is used.
    </para></listitem>

   </itemizedlist>

   The options in the Options window have tooltips explaining the use of each
   option &mdash; hold the mouse pointer over an option to find out what it
   does.

  </para>
 </chapter>

 <chapter id="types">
  <title>Filetypes</title>
  <para>

   All files have a MIME type in the form <emphasis>text/plain</emphasis>. Here,
   <emphasis>text</emphasis> is the <emphasis>media type</emphasis> and
   <emphasis>plain</emphasis> is the <emphasis>sub-type</emphasis>.
   </para><para>
   <application>ROX-Filer</application> uses a file's name to decide what its MIME
   type is, and then uses the MIME type to decide what icon to give it and what
   program to use when you open the file.
  </para>

  <sect1>
   <title><anchor id="RunAction" xreflabel="the Set Run Action box"/>
    The Set Run Action box
   </title>
   <para>
    This box appears when you choose <guimenuitem>Set Run Action...</guimenuitem>
    from the File menu, and is used to set which application is loaded when you click
    on a file.
    </para><para>
    For example, let's say you want to set things up so that opening a
    <filename>.gif</filename> file loads it into the Gimp.
    First, right-click over a gif image to open the menu and choose
    <guimenuitem>Set Run Action...</guimenuitem> from the
    <guimenuitem>File</guimenuitem> submenu.
    Then, you have a choice of two methods to set the run action:
   </para>

   <sect2><title>Setting the run action by drag-and-drop</title>
    <para>
     Drag the Gimp (from a filer window, a panel or the pinboard) onto
     the area marked <guilabel>Drop a suitable application here</guilabel>.
     From now on, clicking on a GIF file will load it into the Gimp.
    </para>
   </sect2>

   <sect2><title>Setting the run action by entering a shell command</title>
    <para>
     Type: <userinput>gimp "$@"</userinput>
     into the box labelled <guilabel>Enter a shell command</guilabel> and press
     <keycap>Return</keycap>. <userinput>$@</userinput>
     will be replaced by the name of the file you click on when this command
     is used. As before, clicking on any GIF image will now load it into
     the Gimp.
    </para>
   </sect2>

   <sect2><title>Setting the default media-type handlers</title>
    <para>
     Whichever method you use to set the action you have the choice of
     setting the run action just for that type, or setting the default
     for all files with that media-type which don't already have a specific
     action.
     </para><para>
     Since the Gimp can load many types of image, it makes sense
     to select the <guilabel>Set default for all `image/&lt;anything&gt;'</guilabel>
     option so you don't have to do it again for image/jpeg files and so on. However,
     this only affects types that don't already have a specific action
     (ie, those that would have brought up an error box if you tried to
     open them).
    </para>
   </sect2>
  </sect1>

  <sect1>
   <title><anchor id="SetIcon" xreflabel="the Set Icon box"/>
    The Set Icon box
   </title>
   <para>

    This box appears when you choose <guimenuitem>Set Icon...</guimenuitem>
    from the File menu, and is used to set which image to use to represent
    the file.
    </para><para>
    It works much like the Set Run Action box described above, except that
    you may specifiy an icon for one file individually (by name) as well as
    for all files of a particular type. When setting the icon for a single
    file, the filer stores the name of the file and the name of the icon inside
    your <filename>~/.config/rox.sourceforge.net/MIME-icons</filename>
    directory. If either moves, the icon won't be displayed.
    </para><para>
    When setting the icon for a directory, you have the additional option of
    storing the image inside the directory itself as a hidden file. This means
    that other users will see the icon too, and you can safely delete the original
    image after the copy (note that the image is scaled down if needed, and converted
    to PNG format).
    </para><para>
    The directory icon inside the <guilabel>Drop an icon here</guilabel>
    area allows you to quickly get to a directory from which you are already
    using one or more icons.
   </para>
  </sect1>

  <sect1>
   <title>How filetypes are stored</title>
   <para>

    <application>ROX-Filer</application> uses two sub-directories in your
    <filename>~/.config/rox.sourceforge.net</filename> directory for filetypes:

    <variablelist>

     <varlistentry><term><filename>MIME-types</filename></term><listitem><para>
        contains symlinks, one for each MIME type, which point
        to programs that can handle files of that type. To set what program
        is run when you click on the file you should normally use the <guimenuitem>Set
         Run Action...</guimenuitem> feature (see the <xref linkend="RunAction"/> section).
        However, you can also set the actions manually &mdash; for example, to make
        opening an HTML file load it into Netscape:

        <orderedlist>
         <listitem><para>
           Find the Netscape application and go to <guimenuitem>Link...</guimenuitem>
           on the menu.
         </para></listitem>

         <listitem><para>
           Enter <userinput>text_html</userinput> as the name for the link and drag the
           icon from the Link box into the <filename>MIME-types</filename> directory.
         </para></listitem>

        </orderedlist>

        You can also put actual programs in here as well as links if you want
        to.
     </para></listitem></varlistentry>

     <varlistentry><term><filename>MIME-icons</filename></term><listitem><para>
        contains the images used to display each type of file.
        So the filer will try to display an HTML file using the icon
        <filename>MIME-icons/text_html.png</filename>. If no icon is set here,
	the filer will use the currently selected icon theme (as set in the options
	box); see <citation>IconTheme</citation> for details.
     </para></listitem></varlistentry>

    </variablelist>

    In <filename>MIME-types</filename> you can also provide default actions for each media type.
    For example, if <filename>text_html</filename> isn't found then the filer
    will try simply using <filename>text</filename>.
   </para>

  </sect1>

  <sect1>
   <title>How the filer determines a file's type</title>
   <para>
    The filer usually works out the type for a file from its name. If this fails,
    it tries to guess from the file's contents. It is possible to override this guessing
    by setting an extended attribute on the file with the correct type, using the
    <guimenuitem>Set Type...</guimenuitem> menu item.
   </para>
   <para>
    To edit the rules used to guess types, open the options box and go to the Types section.
    There is a button there that will launch the MIME-Editor application.
    You can also edit the rules manually &mdash; see <citation>SharedMIME</citation> for details.
   </para>
  </sect1>
 </chapter>

 <chapter id="appdirs">
  <title><anchor id="AppDir" xreflabel="Application directories"/>
   Application directories
  </title>
  <para>
   An application directory is a directory which can be run as an application.
   It contains all the resources of an application &mdash; source code, binaries,
   documentation and so on. Keeping everything in one place make installation
   and uninstallation much easier for users. You can also keep multiple
   versions of a program by simply having several application directories.
   You may move and rename them as you please. Application directories
   make programs easier to use and install.
   </para><para>
   They're more secure too, because you can compile an application as a user and
   then simply copy it as root. Since you don't have to run an install script
   you are free from the danger of running untrusted code as root. All you have
   to watch out for is setuid binaries.
   </para><para>

   The following files are treated as special by
   <application>ROX-Filer</application>:

   <itemizedlist>

    <listitem><para>
      <filename>AppRun</filename>
      is executed when you click on the directory &mdash; make sure
      it is executable (use the Permissions box)!
    </para></listitem>

    <listitem><para>
      <filename>.DirIcon</filename>
      is the image used to represent the directory (this works even if
      there is no <filename>AppRun</filename>).
    </para></listitem>

    <listitem><para>
      <filename>Help</filename>
      is the directory to be opened when you choose <guimenuitem>Help</guimenuitem>
      from the File menu.
    </para></listitem>

    <listitem><para>
      <filename>AppInfo.xml</filename>
      contains extra information about an application (see below).
    </para></listitem>

    <listitem><para>
      <filename>AppIcon.xpm</filename>
      is used if <filename>.DirIcon</filename> is missing (for backwards
      compatibility; not to be used anymore).
    </para></listitem>

   </itemizedlist>

   Have a look at the <filename>ROX-Filer</filename> application directory for a
   full example.

  </para>

  <note><para>For security reasons, an application directory must have the
    same owner as the <filename>AppRun</filename> file inside.</para></note>

  <sect1>
   <title>The AppInfo file</title>
   <para>

    <filename>AppInfo.xml</filename> is an XML file with the following structure
    (any elements may be omitted, and the file itself is optional):

    <screen>
&lt;?xml version="1.0"?&gt;
&lt;AppInfo&gt;
  &lt;Summary xml:lang="en"&gt;A graphical file manager&lt;/Summary&gt;
  &lt;Summary xml:lang="de"&gt;Ein grafische Datei-Manager&lt;/Summary&gt;
  &lt;Summary xml:lang="nl"&gt;Een grafisch bestandsbeheerprogramma&lt;/Summary&gt;
  &lt;Summary xml:lang="es"&gt;Un manejador de archivos gr&#xE1;afico&lt;/Summary&gt;
  &lt;About xml:lang="en"&gt;
    &lt;Purpose&gt;File manager&lt;/Purpose&gt;
    &lt;Version&gt;1.3.5 PREVIEW&lt;/Version&gt;
    &lt;Authors&gt;Thomas Leonard and others&lt;/Authors&gt;
    &lt;License&gt;GNU General Public License&lt;/License&gt;
    &lt;Homepage&gt;http://rox.sourceforge.net&lt;/Homepage&gt;
  &lt;/About&gt;
  &lt;About xml:lang="es"&gt;
    &lt;Purpose&gt;Manejador de Archivos&lt;/Purpose&gt;
    &lt;Authors&gt;Thomas Leonard y otros&lt;/Authors&gt;
  &lt;/About&gt;
  &lt;AppMenu&gt;
    &lt;Item option="-p=Default"&gt;
      &lt;Label&gt;Enable pinboard&lt;/Label&gt;
      &lt;Label xml:lang="es"&gt;Habilitar el pinboard&lt;/Label&gt;
    &lt;/Item&gt;
    &lt;Item option="-p="&gt;
      &lt;Label&gt;Disable pinboard&lt;/Label&gt;
      &lt;Label xml:lang="es"&gt;Deshabilitar el pinboard&lt;/Label&gt;
    &lt;/Item&gt;
  &lt;/AppMenu&gt;
&lt;/AppInfo&gt;
</screen>

    <itemizedlist>

     <listitem><para>
       <userinput>Summary</userinput>
       is displayed in a tooltip when the mouse is held over the application.
     </para></listitem>

     <listitem><para>
       <userinput>About</userinput>
       contains a list of fields which are shown in the `File Info'
       box for the application (any element names may be used, but the above
       are suggested).
     </para></listitem>

     <listitem><para>
       <userinput>AppMenu</userinput>
       is a list of extra menu items to display for the application.
       When one is chosen, <filename>AppRun</filename> is called with
       <userinput>option</userinput> as its only argument. You can nest
       AppMenus inside other AppMenus to create submenus, provided they have
       &lt;Label&gt; elements.
     </para></listitem>

    </itemizedlist>

   </para>
  </sect1>
 </chapter>

 <chapter id="i18n">
  <title>Internationalisation</title>
  <para>

  </para>

  <sect1>
   <title><anchor id="LANG" xreflabel="Translations"/>
    Selecting a translation
   </title>
   <para>

    <application>ROX-Filer</application> is able to translate many of its messages,
    provided suitable translation files are provided:

    <orderedlist>
     <listitem><para>Open the Options box from the menu,</para></listitem>
     <listitem><para>Select a language from the menu at the top,</para></listitem>
     <listitem><para>Click on <guibutton>Save</guibutton> and restart the filer
       for the new setting to take full effect.</para></listitem>
    </orderedlist>

   </para>
  </sect1>

  <sect1>
   <title>Creating a new translation</title>
   <para>

    <orderedlist>
     <listitem><para>Go into the <filename>src</filename> directory and create
       the file <filename>messages.pot</filename>:

       <screen>
        $ cd ROX-Filer/src
        $ make messages.pot</screen>

     </para></listitem>

     <listitem><para>Copy the file into the <filename>po</filename>
       subdirectory under <filename>src</filename> as
       <filename>&lt;name&gt;.po</filename>. Eg, if your
       language is referred to as `ml' (`my language'):

       <screen>$ cp messages.pot po/ml.po</screen>
     </para></listitem>

     <listitem><para>Load the copy into a text editor.</para></listitem>

     <listitem><para>Fill in the translations, which are all blank to start with.
     </para></listitem>

     <listitem><para>Run the <filename>make-mo</filename> script to create the
       binary file which <application>ROX-Filer</application> can use.
       You will need the GNU gettext package for this.
       If you don't have it then just send me the <filename>.po</filename> file
       and I'll convert it for you.

       <screen>
        $ cd ROX-Filer/src/po
        $ ./make-mo ml
        Created file ../../Messages/ml.gmo OK</screen>
     </para></listitem>

     <listitem><para>Edit <filename>ROX-Filer/Options.xml</filename> so that
       your language is listed, restart the filer and select it from the Options box
       (see the <xref linkend="LANG"/> section).
     </para></listitem>

     <listitem><para>Submit the <filename>.po</filename> file to me so that I
       can include it in future releases of the filer.
     </para></listitem>

    </orderedlist>
   </para>
  </sect1>

  <sect1>
   <title>Updating an existing translation</title>
   <para>

    <orderedlist>
     <listitem><para>Go into the directory containing the <filename>.po</filename>
       files and run the <filename>update-po</filename> script.
       This checks the source code for new and changed strings and updates all
       the translation files.

       <screen>
        $ cd ROX-Filer/src/po
        $ ./update-po</screen>
     </para></listitem>

     <listitem><para>Edit the file by hand as before, filling in the new blanks
       and updating out-of-date translations.
       Look out for <computeroutput>fuzzy</computeroutput> entries where
       <command>update-po</command> has made a guess; check it's correct and
       remove the <computeroutput>fuzzy</computeroutput> line.
     </para></listitem>

     <listitem><para>Run <command>make-mo</command> as before.</para></listitem>

     <listitem><para>Submit the updated file to me.</para></listitem>

    </orderedlist>

    See the <command>gettext</command> info page for more instructions on creating
    a translation.

   </para>
  </sect1>
 </chapter>

 <chapter id="hacking">
  <title>Hacking</title>
  <para>
   This is a quick start guide for people who want to modify the source
   code. If you make useful changes or fix bugs, please send patches
   to me or to the mailing list. Tell me which version you're using!
  </para>

  <sect1>
   <title>Compiling</title>
   <para>
    The first time you compile the program you need to do <command>AppRun
     --compile</command>, but in future you only need to run <command>make</command>
    in the <filename>src</filename> directory when you change the
    <filename>.c</filename> and <filename>.h</filename> files.
    You might want to run <command>make depend</command> too.
   </para>
  </sect1>

  <sect1>
   <title>Creating and applying patches</title>
   <para>
    When people make small modifications to the sources they will often
    distribute them as <emphasis>patch files</emphasis> &mdash; usually on the
    mailing list.

    To apply a patch, go into the <filename>src</filename> directory and run
    <command>patch</command> with the patch file. Then recompile, like this:

    <screen>
     $ cd ROX-Filer/src
     $ patch &lt; patchfile
     $ ../AppRun --compile</screen>

    You can remove the patch by simply repeating the above sequence &mdash;
    <command>patch</command> will detect that the patch is already applied
    and offer to remove it.
    </para><para>
    To create a patch you should first get the latest version of the filer
    from CVS (instructions on using CVS can be found on the web-site).
    Modify the program as you please. Create the patch using
    <command>cvs diff</command> from the appropriate directory:

    <screen>$ cvs diff -u &gt; my_patch</screen>

    This creates a human&ndash; and machine-readable patch file. Submit this
    to the mailing list. The are many reasons for posting patches rather
    that the modified files:

    <itemizedlist>
     <listitem><para>They are smaller, and hence shouldn't bounce.
       They are also quicker to download for people with slow connections.
     </para></listitem>

     <listitem><para>People can see what they're getting into before applying them!
     </para></listitem>

     <listitem><para>Patches can (usually) be applied to slightly modified
       versions of the sources. This means that people can apply several patches
       without each new one overwriting the others.
     </para></listitem>

    </itemizedlist>

   </para>
  </sect1>

  <sect1>
   <title>Autoconf</title>
   <para>
    Here's a quick explanation of the autoconf system in case you haven't
    used it before. See <command>info autoconf</command> for full details.
    </para><para>
    There's a file called <filename>configure.in</filename> which contains
    various tests (<command>info autoconf</command>).
    You run <command>autoconf</command> and it reads through the file
    and generates a shell script to perform the tests, saving it as
    <filename>configure</filename>.
    <filename>configure</filename> is normally distributed with the program because
    not everyone has autoconf.
    </para><para>
    You then run <filename>configure</filename> (in fact, let the
    <filename>AppRun</filename> script do it because
    it passes it some arguments), which performs all the tests. It reads
    in <filename>Makefile.in</filename> and <filename>config.h.in</filename>
    and fills in the missing values with the test results to produce
    <filename>Makefile</filename> and <filename>config.h</filename>.
    </para><para>
    You run <command>make</command>, which creates <filename>.o</filename>
    files from the <filename>.c</filename> files and links to produce
    <filename>ROX-Filer</filename>.
   </para>
  </sect1>

  <sect1><title>Data-structures</title>
   <para>
    The <filename>global.h</filename> file lists each major data-structure used
    in the filer and explains its purpose. This is a good place to start reading
    if you want to know how the filer works.
   </para>
  </sect1>
 </chapter>

 <appendix id="compiling">
  <title>Compiling</title>
  <para>

   If you've just got hold of the filer by downloading the source archive
   then you'll need to compile it before you can use it. If you downloaded
   and installed a binary package, or if <application>ROX-Filer</application>
   was included with your system, then you can skip this section. If you got
   here by clicking on the lifebelt symbol in a filer window, or if typing
   <command>rox</command> at a shell prompt works, then you don't need to
   compile.

   <itemizedlist><title>To compile, you will need the following:</title>

    <listitem><para>
      Unix or Linux (root access is not required),
    </para></listitem>

    <listitem><para>
      The X Window system (supplied as standard on all modern systems),
    </para></listitem>

    <listitem><para>
      GTK+ 2.4.0 or later (libraries and headers) &mdash; get the latest version
      from <citation>GTK+</citation>,
    </para></listitem>

    <listitem><para>
      LibXML 2.0.0 or later (libraries and headers) &mdash; get the latest
      version from <citation>libxml</citation>,
    </para></listitem>

    <listitem><para>
      A C compiler, such as `gcc' (standard on most systems).
    </para></listitem>

   </itemizedlist>

   All of the above are standard on most modern Linux distributions.
   To check which version of GTK+ you have installed, run the
   <command>pkg-config</command> command, like this
   (<prompt>$</prompt> is the shell prompt):

   <screen>$ pkg-config --modversion gtk+-2.0
2.6.8</screen>
  </para>

  <procedure><title>To compile:</title>

   <step><para>
     The filer now uses the Shared MIME Database<citation>SharedMIME</citation>
     to work out the types of files. You need to install this before the
     filer will work properly (ROX-Filer will warn you if it's not installed
     when you run it).
   </para></step>

   <step><para>
     Change to the directory containing the ROX-Filer subdirectory.
   </para></step>

   <step><para>
     Run the <command>install.sh</command> script, like this:

     <screen>$ ./install.sh</screen>

   </para></step>

   <step><para>
     <application>ROX-Filer</application> will perform various checks to find
     out what kind of system it is being run on and will then compile. If it
     doesn't work then please e-mail me and complain! Tell me what kind of
     system you have and what errors were reported. If you manage to fix the
     problem yourself then please e-mail me the fix.
   </para></step>

   <step><para>
     Once the filer has compiled you will be asked where you want to install
     it. If you want to do a system-wide installation as root, you may
     want to stop here, <command>su</command> to root and rerun the install
     script.

     If you don't have the root password then don't worry &mdash; just follow
     the instructions for installing into your home directory.
   </para></step>
  </procedure>

  <para>
   You can now run the filer by running the <command>rox</command> script
   without any options, like this:

   <screen>$ rox</screen>

   A window should appear and display the contents of the current directory.

   If you installed the script into your home directory then you may
   need to set your <envar>PATH</envar> environment variable so that the shell can
   find it. For example, if you installed it into a directory called
   <filename>bin</filename> in your home directory, use this:

   <screen>$ PATH=$HOME/bin:$PATH; export PATH</screen>

   or (if you are using the <citerefentry><refentrytitle>csh</refentrytitle>
    <manvolnum>1</manvolnum></citerefentry> shell):

   <screen>$ setenv PATH $HOME/bin:$PATH
$ rehash</screen>

  </para>

 </appendix>

 <appendix id="manpage"><title>Manual page</title>

  <refentry id="rox">

   <refmeta>
    <refentrytitle>ROX</refentrytitle>
    <manvolnum>1</manvolnum>
   </refmeta>

   <refnamediv>
    <refname>ROX-Filer</refname>
    <refpurpose>a simple graphical file manager</refpurpose>
   </refnamediv>

   <refsynopsisdiv>
    <cmdsynopsis>
     <command>rox</command>
     <arg choice="opt" rep="repeat"><option>OPTION</option></arg>
     <arg choice="opt" rep="repeat">FILE</arg>
    </cmdsynopsis>
   </refsynopsisdiv>

   <refsect1><title>DESCRIPTION</title>
    <para>
     ROX-Filer is a simple and easy to use graphical file manager for X11, the
     windowing system used on Unix and Unix-like operating systems.
     </para><para>
     It is also the core component of the ROX Desktop:
     <ulink url="http://rox.sourceforge.net"/>
     </para><para>
     Invoking <command>rox</command> opens each directory or file listed,
     or the current working directory if no arguments are given.
    </para>
   </refsect1>

   <refsect1><title>COMMAND-LINE OPTIONS</title>
    <para>
     <variablelist>

      <varlistentry><term><option>-b</option></term><term><option>--border=PANEL</option></term>
       <listitem><para>open PANEL.
      </para></listitem></varlistentry>

      <varlistentry><term><option>-B</option></term><term><option>--bottom=PANEL</option></term>
       <listitem><para>open PANEL as a bottom-edge panel.
      </para></listitem></varlistentry>

      <varlistentry><term><option>-c</option></term><term><option>--client-id=ID</option></term>
       <listitem><para>used for session management.
      </para></listitem></varlistentry>

      <varlistentry><term><option>-d</option></term><term><option>--dir=DIR</option></term>
       <listitem><para>open DIR as directory (not as an application, even if it looks like one).
      </para></listitem></varlistentry>

      <varlistentry><term><option>-D</option></term><term><option>--close=DIR</option></term>
       <listitem><para>close DIR and all its subdirectories.
      </para></listitem></varlistentry>

      <varlistentry><term><option>-h</option></term><term><option>--help</option></term>
       <listitem><para>display help about the various options.
      </para></listitem></varlistentry>

      <varlistentry><term><option>-l</option></term><term><option>--left=PANEL</option></term>
       <listitem><para>open PANEL as a left-edge panel.
      </para></listitem></varlistentry>

      <varlistentry><term><option>-m</option></term><term><option>--mime-type=FILE</option></term>
       <listitem><para>print MIME type of FILE and exit.
      </para></listitem></varlistentry>

      <varlistentry><term><option>-n</option></term><term><option>--new</option></term>
      <listitem><para>start a new filer, even if one already seems to be
      running. This also prevents the filer from forking (running in the
      background). This option is mainly useful for debugging.
      </para></listitem></varlistentry>

      <varlistentry><term><option>-p</option></term><term><option>--pinboard=PIN</option></term>
       <listitem><para>use pinboard PIN as the pinboard.
      </para></listitem></varlistentry>

      <varlistentry><term><option>-r</option></term><term><option>--right=PANEL</option></term>
       <listitem><para>open PANEL as a right-edge panel.
      </para></listitem></varlistentry>

      <varlistentry><term><option>-R</option></term><term><option>--RPC</option></term>
       <listitem><para>read and invoke SOAP RPC from standard input (see <xref linkend="soap"/>).
      </para></listitem></varlistentry>

      <varlistentry><term><option>-s</option></term><term><option>--show=FILE</option></term>
       <listitem><para>open a directory showing FILE.
      </para></listitem></varlistentry>

      <varlistentry><term><option>-S</option></term><term><option>--rox-session</option></term>
       <listitem><para>run under ROX-Session, open the default panel and pinboard (implies --new).
      </para></listitem></varlistentry>

      <varlistentry><term><option>-t</option></term><term><option>--top=PANEL</option></term>
       <listitem><para>open PANEL as a top-edge panel.
      </para></listitem></varlistentry>

      <varlistentry><term><option>-u</option></term><term><option>--user</option></term>
       <listitem><para>show user name in each window.
      </para></listitem></varlistentry>

      <varlistentry><term><option>-v</option></term><term><option>--version</option></term>
       <listitem><para>display the version information and exit.
      </para></listitem></varlistentry>

      <varlistentry><term><option>-x</option></term><term><option>--examine=FILE</option></term>
       <listitem><para>FILE has changed; re-examine it.
      </para></listitem></varlistentry>

     </variablelist>
    </para>
   </refsect1>

   <refsect1><title>NOTES</title>
    <para>
     The main documentation for ROX-Filer is available by choosing
     <guimenuitem>Show Help Files</guimenuitem> from the
     popup menu, or by clicking on the right-most toolbar icon.
    </para>
   </refsect1>

   <refsect1><title>LICENSE</title>
    <para>Copyright (C) 2004 Thomas Leonard.
     </para><para>
     You may redistribute copies of ROX-Filer under the terms of the GNU General
     Public License.
    </para>
   </refsect1>

   <refsect1><title>BUGS</title>
    <para>
     Please report bugs to the developer mailing list: <ulink url="http://rox.sourceforge.net/contact.html"/>.
    </para>
   </refsect1>

   <refsect1><title>AUTHORS</title>
    <para>
     ROX-Filer was created by Thomas Leonard, with help from:
     </para><para>
     <simplelist columns='3'>
      <member>Michael Adams</member>
      <member>Christopher Arndt</member>
      <member>Jens Askengren</member>
      <member>Liav Asseraf</member>
      <member>Wilbert Berendsen</member>
      <member>Francesco Bochicchio</member>
      <member>Yuri Bongiorno</member>
      <member>Andrzej Borsuk</member>
      <member>Richard Boulton</member>
      <member>Simon Britnell</member>
      <member>Arnaud Calvo</member>
      <member>Babyfai Cheung</member>
      <member>Andrew Clover</member>
      <member>Fabien Coutant</member>
      <member>Couderc Damien</member>
      <member>Andreas Dehmel</member>
      <member>Micah Dowty</member>
      <member>Dmitry Elfimov</member>
      <member>Mattias Engdegard</member>
      <member>Andrew Flegg</member>
      <member>Olivier Fourdan</member>
      <member>Eric Gillespie</member>
      <member>Thierry Godefroy</member>
      <member>Olli Helenius</member>
      <member>Alex Holden</member>
      <member>Jasper Huijsmans</member>
      <member>Sigve Indregard</member>
      <member>Bernard Jungen</member>
      <member>Marcin Juszkiewicz</member>
      <member>James Kermode</member>
      <member>Jim Knoble</member>
      <member>Krzysztof Krzyzaniak</member>
      <member>Aaron Kurtz</member>
      <member>Vincent Ledda</member>
      <member>Vincent Lefevre</member>
      <member>Victor Liu See-le</member>
      <member>Alexey Lubimov</member>
      <member>Krzysztof Luks</member>
      <member>Marcus Lundblad</member>
      <member>Anders Lundmark</member>
      <member>Jose Romildo Malaquias</member>
      <member>Denis Manente</member>
      <member>Brendan McCarthy</member>
      <member>Andras Mohari</member>
      <member>Christiansen Merel</member>
      <member>Jimmy Olgeni</member>
      <member>Richard Olsson</member>
      <member>Matthew O'Phinney</member>
      <member>Daniele Peri</member>
      <member>Andy Piper</member>
      <member>Marcelo Ramos</member>
      <member>Michel Alexandre Salim</member>
      <member>Adam Sampson</member>
      <member>Chris Sawer</member>
      <member>Christian Storgaard</member>
      <member>Taras</member>
      <member>Simon Truss</member>
      <member>Hirosi Utumi</member>
      <member>Jan Wagemakers</member>
      <member>Keith Warno</member>
      <member>Götz Waschk</member>
      <member>Stephen Watson</member>
      <member>Andre Wyrwa</member>
      <member>Geoff Youngs</member>
      <member>Diego Zamboni</member>
     </simplelist>
     </para><para>
     and many others; the <filename>Changes</filename> file contains more
     detailed information!
    </para>
   </refsect1>

  </refentry>
 </appendix>

 <appendix id="soap"><title>SOAP RPC</title>

  <para>When the filer starts you can use command-line options to control its behaviour.
   As an alternative to this, the filer allows you to specify an operation with a
   <citation>SOAP</citation> RPC format message. In fact, if you use the command-line options,
   the filer converts to SOAP RPC internally.
  </para>

  <para>All SOAP RPC messages are passed on standard input, like this:

   <screen>
$ rox --RPC &lt;&lt; EOF
&lt;?xml version="1.0"?&gt;
&lt;env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope"&gt;
 &lt;env:Body xmlns="http://rox.sourceforge.net/SOAP/ROX-Filer"&gt;
  &lt;Panel&gt;
   &lt;Name&gt;Default&lt;/Name&gt;
   &lt;Side&gt;Bottom&lt;/Side&gt;
  &lt;/Panel&gt;
 &lt;/env:Body&gt;
&lt;/env:Envelope&gt;
EOF</screen>

   The following methods are recognised:</para>

  <itemizedlist>

   <listitem><para><function>Version</function>()
     Returns the filer's version.
   </para></listitem>

   <listitem><para><function>CloseDir</function>(<parameter>Filename</parameter>)
     Close directory <parameter>Filename</parameter> and all its subdirectories.
   </para></listitem>

   <listitem><para><function>Examine</function>(<parameter>Filename</parameter>)
     <parameter>Filename</parameter> may have changed &mdash; check it and
     update the display.
   </para></listitem>

   <listitem><para><function>OpenDir</function>(<parameter>Filename</parameter>,
     [<parameter>Style</parameter>, <parameter>Details</parameter>, <parameter>Sort</parameter>,
     <parameter>Class</parameter>, <parameter>ID</parameter>],
     <parameter>Hidden</parameter>, <parameter>Filter</parameter>)
     Open a window showing directory <parameter>Filename</parameter>.
     <parameter>Style</parameter> is one of <userinput>Large</userinput>, <userinput>Small</userinput>, <userinput>Huge</userinput>
     or <userinput>Automatic</userinput>.
     <parameter>Details</parameter> is one of <userinput>None</userinput>, <userinput>ListView</userinput>, <userinput>Size</userinput>, <userinput>Type</userinput>, <userinput>Times</userinput> or <userinput>Permissions</userinput>.
     <parameter>Sort</parameter> is one of <userinput>Name</userinput>, <userinput>Type</userinput>, <userinput>Date</userinput>, <userinput>Size</userinput>,
<userinput>Owner</userinput> or <userinput>Group</userinput>.
     If any of these three option parameters are missing, the default is used.
     <parameter>Class</parameter> can be used to set the WM_CLASS property on the new window. You can
     use this to get your window manager to treat the window
specially.
     <parameter>ID</parameter> is a string used to identify the 
opened window. If a window with this ID already exists, it is changed to the
given directory. Otherwise, a new window is created and given this ID.
If used from a program, ensure the IDs you generate are unique, for example
by including your process name, PID and a timestamp in the ID.
<parameter>Hidden</parameter> if <userinput>true</userinput> means
that hidden files (those that start with a dot character) are shown,
or not shown if <userinput>false</userinput>.  If ommitted then the 
configured setting is used.
<parameter>Filter</parameter> can be used to filter files shown by
their name.  For example using a filter of <userinput>*.c</userinput>
means that only files ending in .c are shown.
   </para></listitem>

   <listitem><para><function>Panel</function>(<parameter>Side</parameter>,
     [<parameter>Name</parameter>])
     Open the panel named <parameter>Name</parameter> on screen side
     <parameter>Side</parameter> (<userinput>Top</userinput>|<userinput>Bottom</userinput>|<userinput>Left</userinput>|<userinput>Right</userinput>).
     <parameter>Name</parameter> can be a name in <filename>~/.config/rox.sourceforge.net/ROX-Filer</filename>
     (eg, <userinput>MyPanel</userinput>) or a full pathname.
     If not given, the panel on that side is turned off.
   </para></listitem>

   <listitem><para><function>PanelAdd</function>(<parameter>Side</parameter>,
     <parameter>Path</parameter>, [<parameter>Label</parameter>,
     <parameter>After</parameter>, <parameter>Shortcut</parameter>, <parameter>Args</parameter>])
     Add <parameter>Path</parameter> to the panel on side <parameter>Side</parameter>,
     with label <parameter>Label</parameter>. If <parameter>After</parameter> is
     <userinput>true</userinput> the icon goes on the right/bottom side of the panel,
     otherwise on the left/top side.  If <parameter>Shortcut</parameter>
is given it is the keyboard shortcut to trigger this item.  If
<parameter>Args</parameter> is given it is the argument string to
append to the item when run if it is a program.
   </para></listitem>

   <listitem><para><function>PanelRemove</function>(<parameter>Side</parameter>,
     <parameter>Path</parameter>, [<parameter>Label</parameter>])
     Remove <parameter>Path</parameter> from the panel on side
<parameter>Side</parameter>. If <parameter>Label</parameter> is given
then this must match the label of the item.  If more than one item matches, only one is removed.
   </para></listitem>

   <listitem><para><function>Pinboard</function>([<parameter>Name</parameter>])
     Display pinboard <parameter>Name</parameter> on the desktop background.
     <parameter>Name</parameter> can be a name in  <filename>~/.config/rox.sourceforge.net/ROX-Filer</filename>
     (eg, <userinput>MyPinboard</userinput>) or a full pathname.
     If not given, the pinboard is turned off.
   </para></listitem>

   <listitem><para><function>PinboardAdd</function>(<parameter>Path</parameter>,
     <parameter>X</parameter>, <parameter>Y</parameter>,
[<parameter>Label</parameter>, <parameter>Shortcut</parameter>, <parameter>Args</parameter>])
     Add <parameter>Path</parameter> to the pinboard at position
     (<parameter>X</parameter>, <parameter>Y</parameter>), giving it
the (optional) label
     <parameter>Label</parameter>.  If <parameter>Shortcut</parameter>
is given it is the keyboard shortcut to trigger this item.  If
<parameter>Args</parameter> is given it is the argument string to
append to the item when run if it is a program.
   </para></listitem>

   <listitem><para><function>PinboardRemove</function>(<parameter>Path</parameter>, [<parameter>Label</parameter>])
     Remove <parameter>Path</parameter> from the pinboard. If <parameter>Label</parameter> is given
then this must match the label of the item.  If more than one item matches, only one is removed.
   </para></listitem>

   <listitem><para><function>SetBackdropApp</function>(<parameter>App</parameter>)
     Make <parameter>App</parameter> (an application directory) the new handler
     for the current pinboard's backdrop.
     The <filename>AppInfo.xml</filename> file inside <parameter>App</parameter>
     must contain the CanSetBackdrop element, eg:
     <programlisting>
&lt;?xml version="1.0"?&gt;
&lt;AppInfo&gt;
      &lt;ROX:CanSetBackdrop xmlns:ROX="http://rox.sourceforge.net/SOAP/ROX-Filer"/>
&lt;/AppInfo&gt;</programlisting>
     The application will be run with the <option>--backdrop</option> option
     as it's only argument after invoking this method, and whenever the pinboard is
     reloaded. DO NOT use this method if invoked with <option>--backdrop</option> or
     you will get stuck in an infinite loop!
     See <xref linkend="backdropapp"/> for a guide to writing backdrop applications.
   </para></listitem>

   <listitem><para><function>SetBackdrop</function>(<parameter>Filename</parameter>,
   <parameter>Style</parameter>)
   Set the backdrop image to a given file. If you want to regenerate the image next
   time the user logs in, or you want to change it automatically from time to time,
   use <function>SetBackdropApp</function> above instead.
   </para></listitem>

   <listitem><para><function>Run</function>(<parameter>Filename</parameter>)
     Run <parameter>Filename</parameter> as if it was clicked on in the filer.
   </para></listitem>

   <listitem><para><function>Show</function>(<parameter>Directory</parameter>,
     <parameter>Leafname</parameter>)
     Open <parameter>Directory</parameter> and flash the file
     <parameter>Leafname</parameter> inside it.
   </para></listitem>

   <listitem><para><function>FileType</function>(<parameter>Filename</parameter>)
     Returns the MIME-type of <parameter>Filename</parameter> (by writing the
     SOAP response to standard output).
   </para></listitem>
  </itemizedlist>

  <para>
   The following calls can be used to start new file actions.
   <parameter>Quiet</parameter> can be <userinput>true</userinput> if the
   operation should start immediately, instead of waiting for the user to
   confirm. If <userinput>false</userinput>, the user must always confirm. If
   not given, the default setting is used.
  </para>

  <itemizedlist>
   <listitem><para><function>Copy</function>(<parameter>From</parameter>,
     <parameter>To</parameter>, [<parameter>Leafname</parameter>,
     <parameter>Quiet</parameter>])
     Copy each file in the array <parameter>From</parameter> to the directory
     <parameter>To</parameter>. If <parameter>Leafname</parameter> is given
     then <parameter>From</parameter> should contain a single entry only;
     <parameter>Leafname </parameter> gives the new leafname.
   </para></listitem>

   <listitem><para><function>Move</function>(<parameter>From</parameter>,
     <parameter>To</parameter>, [<parameter>Leafname</parameter>,
     <parameter>Quiet</parameter>])
     Move each file in the array <parameter>From</parameter> to the directory
     <parameter>To</parameter>. If <parameter>Leafname</parameter> is given
     then <parameter>From</parameter> should contain a single entry only;
     <parameter>Leafname</parameter> gives the new leafname.
   </para></listitem>

   <listitem><para><function>Link</function>(<parameter>From</parameter>,
     <parameter>To</parameter>, [<parameter>Leafname</parameter>])
     Symlink each file in the array <parameter>From</parameter> to the
     directory <parameter>To</parameter>. If <parameter>Leafname</parameter> is
     given then <parameter>From</parameter> should contain a single entry only;
     <parameter>Leafname</parameter> gives the new leafname.
   </para></listitem>

   <listitem><para><function>Mount</function>(<parameter>MountPoints</parameter>,
     [<parameter>OpenDir</parameter>, <parameter>Quiet</parameter>])
     Mount each directory in the list <parameter>MountPoints</parameter>. If
     <userinput>true</userinput>, <parameter>OpenDir</parameter> causes each
     directory to be opened once it is mounted.
   </para></listitem>


   <listitem><para><function>Unmount</function>(<parameter>MountPoints</parameter>,
     [<parameter>Quiet</parameter>])
     Unmount each directory in the list <parameter>MountPoints</parameter>.
   </para></listitem>

  </itemizedlist>

 </appendix>

 <bibliography>
  <title>References</title>

  <bibliomixed>
   <abbrev>ROX</abbrev><citetitle>The ROX desktop,
    <ulink url="http://rox.sourceforge.net"/></citetitle>
  </bibliomixed>

  <bibliomixed>
   <abbrev>RISC OS</abbrev><citetitle>RISC OS,
    <ulink url="http://www.riscos.com"/></citetitle>
  </bibliomixed>

  <bibliomixed>
   <abbrev>GTK+</abbrev><citetitle>GTK+ Toolkit,
    <ulink url="http://www.gtk.org"/></citetitle>
  </bibliomixed>

  <bibliomixed>
   <abbrev>libxml</abbrev><citetitle>The XML C library for Gnome
    <ulink url="http://www.xmlsoft.org"/></citetitle>
  </bibliomixed>

  <bibliomixed>
   <abbrev>GNOME</abbrev><citetitle>The GNOME desktop,
    <ulink url="http://www.gnome.org"/></citetitle>
  </bibliomixed>

  <bibliomixed>
   <abbrev>DND</abbrev><citetitle>The Drag and Drop protocol,
    <ulink url="http://www.newplanetsoftware.com/xdnd/"/></citetitle>
  </bibliomixed>

  <bibliomixed>
   <abbrev>XDS</abbrev><citetitle>The X Direct Save protocol,
    <ulink url="http://www.newplanetsoftware.com/xds/"/></citetitle>
  </bibliomixed>

  <bibliomixed>
   <abbrev>BaseDir</abbrev><citetitle>The freedesktop.org base directory system,
    <ulink url="http://www.freedesktop.org/wiki/Standards_2fbasedir_2dspec"/></citetitle>
  </bibliomixed>

  <bibliomixed>
   <abbrev>AVFS</abbrev><citetitle>AVFS - A Virtual File System,
    <ulink url="http://sourceforge.net/projects/avf/"/></citetitle>
  </bibliomixed>

  <bibliomixed>
   <abbrev>SOAP</abbrev><citetitle>Simple Object Access Protocol (SOAP) 1.2
    <ulink url="http://www.w3.org/TR/SOAP/"/></citetitle>
  </bibliomixed>

  <bibliomixed>
   <abbrev>Thumbs</abbrev><citetitle>Thumbnail Managing Standard (Version 0.5)
    <ulink url="http://triq.net/~jens/thumbnail-spec/"/></citetitle>
  </bibliomixed>

  <bibliomixed>
   <abbrev>Wallpaper</abbrev><citetitle>Wallpaper backdrop control application
    <ulink url="http://rox.sourceforge.net/phpwiki/index.php/Wallpaper"/></citetitle>
  </bibliomixed>

  <bibliomixed>
   <abbrev>SharedMIME</abbrev><citetitle>Shared MIME-info Database (Version 0.16)
    <ulink url="http://www.freedesktop.org/wiki/Standards_2fshared_2dmime_2dinfo_2dspec"/></citetitle>
  </bibliomixed>

  <bibliomixed>
   <abbrev>IconTheme</abbrev><citetitle>The freedesktop.org Icon Theme specification
    <ulink url="http://www.freedesktop.org/wiki/Standards_2ficon_2dtheme_2dspec"/></citetitle>
  </bibliomixed>

 </bibliography>

</book>
