Please add your own hints and tips here!
Watching how other people use programs often shows you tips and tricks you didn't know. ROX-Filer has lots of features; some are extremely useful while some I almost never use. Here are my favourite features and settings...
A good way to find out what the most important settings are is to try using a new system for a bit. Anything you change in the first few minutes is probably important to you!
No matter what system I'm using, the first thing I have to do is turn off click-to-raise (where clicking anywhere inside a window brings it in front of other windows). Without this, it's almost impossible to use multiple programs together. I'd wondered whether people who do use click-to-raise have developed their own way to use the system efficiently with it, but watching over the shoulders of experienced and computer-savvy Windows users, I've come to the conclusion that it's always awkward, no matter how good you are.
Actually, I thought drag-and-drop couldn't be done with overlapping windows on Windows until I watched experienced users. Here's how they drag a link from a web browser to another window:
Ouch. It's not just drag-and-drop that suffers with click-to-raise. Try using a standalone calculator application with a word processor. As soon as you try to paste a result into the document, the calculator disappears! This is why OroboROX (at least, the version in Zero Install) defaults to no click-to-raise. It's also why Metacity is so low on ROX-Session's list of window managers - it provides no way to turn this off.
Tip for Windows users: TX-Mouse will sort you out.
I also use sloppy focus, but I didn't make that the default because I think that's just a personal preference, whereas click-to-raise affects the whole desktop experience (and, if you're a prorgammer, even the way you design applications). Programs designed in click-to-raise environments have to have everything built in, because using multiple applications is too painful. Programs designed in non-click-to-raise environments tend to be smaller and make use of interaction with other programs.
Although clicking inside a window doesn't bring it to the front in OroboROX, clicking or dragging the titlebar with the left mouse button does. To move a window without changing the stacking order, drag with the right mouse button (button-3). This also works in XFWM4, which is very similar to OroboROX (so similar, in fact, that I use OroboROX at home and XFWM4 at work without getting confused).
I generally use six workspaces, with Pager on my panel, giving me plenty of room. I used to have problems nagivating (having to remember which one I was on), but I've found the solution. I use the Windows key + the six letter keys in the top-left of the keyboard (QWE / ASD) to switch to the six desktops, so that the layout on the keyboard is the same as the layout in the pager and I avoid the need to remember where I am!
For me, ROX-Filer isn't an application that I start, use and quit; it's part of the desktop environment that I invoke without thinking about it. I know I use it all the time because sometimes I break it during development and I think "I'll do something else and fix it later". Typically, within five seconds or so of having this thought I've automatically tried to run ROX-Filer in order to get to the "something else"! Then I think "I must fix it now!", and automatically try to run it again to get to the source code to fix it ;-)
I use ROX-Filer to manage the desktop background and one panel. ROX-Filer starts pretty quickly anyway, but this way it's always loaded, which allows it to keep directories cached and open its windows even faster!
One of the most common operations is opening my home directory from any program. For this, I set up a global short-cut (Ctrl-Tab for some reason), which you can do by dragging your home directory to either the pinboard or the panel, right-clicking, and choosing Edit Item. Short-cuts set this way will work even if some other application has the input focus.
Whatever I want to do, I first use ROX-Filer to navigate to the directory I want to use (usually starting with Ctrl-Tab to open my home). I move around with the keyboard: just press / (forward slash) and start typing. The cursor highlights the first match, and Tab-completion works as any shell user expects. You can use the Up and Down arrows to move between matches, and Return opens the file or directory under the cursor. To enter a hidden directory, just type the initial . (period) and ROX-Filer will display all hidden items.
Pressing Backspace moves to the parent directory when you delete the last slash. This also removes the leaf name, so each further press of Backspace moves you up one directory, even when the path entry minibuffer is open (this was originally a bug, but I liked it so much it's now a feature ;-).
Often, I don't want to keep the filer window open while I'm editing a file, so I click with the middle mouse button to open the file and close the filer window at the same time. I set default run actions for each file type using the menu (Set Run Action...), but I'll want to load almost every kind of file into my text editor (Vim!) eventually: click with Shift held down to do that.
The other program I use all the time is good old xterm (yes, I'm a command-line lover!). I prefer xterm to gnome-terminal because it's faster and because you can adjust the selection using button-3, which is very useful. Press ` (backtick) to open a terminal with the current directory set to the directory ROX-Filer is showing. Again, I often want to close the filer window at the same time, and Shift+` does this (this isn't set by default, but it's on the Window menu and setting menu short-cuts is easy).
The key to effective use of ROX-Filer is being able to open filer windows quickly. We've seen how to close a filer window while starting Vim or xterm... how do we get back to the filer window?
From xterm you can always just type rox of course, but four key-presses it way too slow! Besides, it's annoying if you're in the middle of typing a long command (even with zsh's excellent Esc-Q short-cut). So, I bind it to F12 and then I can open a ROX-Filer window onto whichever directory I'm in with a single key.
For Vim, I use the same F12 short-cut to open the window containing the file being edited. My .vimrc line uses the filer's --show option to make the file itself wink a couple of times in the new window so you can see where you came from, just like when going to the parent directory from another directory.
If you can't get back to a filer window from the application, you can always open your home directory (Ctrl-Tab!) and use the bookmarks button on the toolbar - the directory you want is probably in the handy Recently Visited submenu.
If you've used X for a while, you'll have discovered the middle-button-paste feature. This pastes the currently-selected text (not the clipboard!) to wherever you click. In particular, if you select some files in ROX-Filer then middle clicking into any application will paste the filenames. That includes:
If you select something else in another window, ROX-Filer loses the primary selection (it shows the selection greyed out). To get it back, just click on any item in the greyed-out selection.
Tip: to select files quickly by glob, use . (period). For example, typing .png will instantly select all files ending in .png. With a bit of editing of the pattern with the cursor keys, you can select on other parts of the name (e.g., all files starting with test-).
Tab and Shift-Tab move forwards and backwards through the selected items. You can also select based on more complex rules by pressing ? and entering an expression (e.g., size > 10 Mb). Click on the help icon that appears next to the entry box for some hints about that, or (gasp!) read the manual.
Turning off click-to-raise makes it easy to use programs together, and this is how ROX is designed to be used. You should make sure you can switch effortlessly between ROX-Filer and your most-used applications (xterm and Vim in my case). ROX provides a good interface for use in scripts (including a more comprehensive set of SOAP calls - see the manual).
Of course, I use many more programs than discussed here. Archive is something I use a lot too (and it's well worth adding it to your SendTo menu for directories), and I use several panel applets like NetStat, Load and Clock... but this article is too long already. Check out the Hints and Tips section of the web-site for more!
OroboROX lets you define a keyboard short-cut for this.
For other window managers, or if you want a clickable button, Andras Mohari suggests this script:
#!/bin/sh if wmctrl -m | grep -q '"showing the desktop" mode: ON'; then exec wmctrl -k off else exec wmctrl -k on fi
This requires the wmctrl program and was tested using xfwm4 (should work with any other EWMH-compatible window manager that implements the 'show desktop' feature, at least in theory).
Save the script and set its permissions to make it executable (File -> Permissions). You can now drag it to your panel and click on it to show the desktop. You can also bind a keyboard short-cut to it using the panel's Edit Item menu item.
This assumes that you are running ROX-Session.
There are three different methods you can use:
dbus-send --print-reply --type=method_call --dest=net.sf.rox.Session \ /Settings net.sf.rox.Session.Settings.SetString string:ROX/WindowManager string:xfwm4
Side panels can be managed by ROX-Filer, but by default they are not turned on. They allow you to create short-cuts to files, directories and applications. Panels work much like the pinboard (the desktop background), except that they come to the front when the mouse hits the edge of the screen and the layout is more rigid. You can also run small programs called applets inside a panel.
To add a border panel:
$ rox -b Default
Here, Default is the name of the panel to use. You can use different names to switch between different setups.
Note that ROX-Session will automatically turn on the pinboard and one panel when you log in, by running the command rox -S from the RunROX script. The -S flag makes it use the configuration set in ROX-Filer's Options box, under Desktop.
See also the Customization page in the guide-book.
To hide a panel, give the side of the screen on which it is currently displayed but without naming a panel to put there:
$ rox --bottom=
To get the semi-transparent panel shown in the screenshot, I used the new XComposite extension provided by the x.org X server. To use it, you need to turn the extension on in /etc/X11/xorg.conf:
Section "Extensions" Option "Composite" "Enable" EndSection
You also need to be running xcompmgr. Use the transset command to adjust the opacity of windows.
You can give an argument to set the level, from fully transparent to fully opaque.
Note: this is all experimental (and rather slow!), but it makes for more interesting screenshots!
The desktop background is called the pinboard. To enable turn it on and enable desktop-icons, use this command:
$ rox --pinboard Default
You can now drag files, directories and applications onto the pinboard to create short-cuts to them.
You cannot actually save things to the pinboard; you can only create links to things that exist in directories elsewhere.
If you use ROX-Session, then a pinboard will be set up for you on login automatically.
Each application's savebox contains an icon representing the file to save. You can drag this icon to a ROX-Filer window, a directory on a pinboard or panel, or to another application. For example, if you want to save a compressed text file, drag from Edit's savebox onto Archive, and then drag the compressed data to a filer window to actually save it.
With ROX-Filer, you can select which program you want to use to download resources (images, software, data, etc). This is used when you drag a link from a web browser into a filer window, for example.
To change the download handler program, open the "Options"-dialog of ROX-Filer and select the "Drag and Drop"-tab.
Hint: if you want downloads over SSL (https) to work, you should try curl instead of wget; it is generally a better choice
ROX applications designed to be used as Download Handlers include:
You need something like this in your ~/.vimrc file:
function! Save() let tmpname = tempname() let fname = expand('%') if fname == '' let fname = 'TextFile' endif silent exec 'write !savebox ' . fname . ' &gt; ' . tmpname let newname = system('cat ' . tmpname) let tmp = system('rm ' . tmpname) if tmpname != '' exec 'file ' . escape(newname, ' ') set nomodified endif endfunction command! Save call Save() map <F3> :Save<CR>
You'll need the savebox command from http://rox.sourceforge.net/snapshots/gui_utils.tgz.
Extract the archive and run './configure && make install' as root to install savebox.
Once you have the script saved to .vimrc or .gvimrc, you can then hit F3 to
get a savebox from which you may then drag and drop to a ROX-Filer window;
updating the text within this box will change the name under which it is saved.
All saveboxes (including the Copy/Rename/Link saveboxes in the filer) are
marked with the 'Savebox' class so your window manager can recognise them.
For example, sawfish users should choose 'Customise->Matched Windows' and
add a new rule. The matcher should be 'Class' and you can use Grab to copy
the value by clicking on any savebox. Set 'Depth' to a high number to keep it
above other windows.
Users of OroboROX, which on its own doesn't have an interface for this, may find Devil's Pie to be useful. You'll need to manually create the /.devilspie.xml file and the add something like (I hope):
<flurb name="Savebox on top"> <matchers> <matcher name="DevilsPieMatcherWindowName"> <property name="class_name" value="Savebox" /> </matcher> </matchers> <actions> <action name="DevilsPieActionLayer"> <property name="above" value="TRUE"/> </action> </actions> </flurb>
With HAL and Ivman and pmount,
you can have devices like CD-ROMs and USB flash sticks be automatically mounted and added to your panel. When you unmount it the mountpoint will be removed from your panel.
The following was tried with Udev 070, HAL 0.5.4, DBus 0.50, Ivman 0.6.4, and pmount 0.9.3.
We are going to set things up so that Ivman is run as root and handles the automounting under /media , with the help of pmount.
Then users can run their own instances of Ivman too, to handle desktop specific stuff (like adding devices to the panel).
dbus-daemon --system
hald --daemon=yes --retain-privileges
ivman
NOTE: If all this works, don't forget to check that dbus, hald and ivman is started as above in your bootscripts...
#!/bin/sh exec 1>&2 echo -n "Launching volume manager... " if ps -C ivman -o user | grep -q $USER then echo "Already running." exit else echo "OK" exec ivman fi
<!-- <ivm:Match name="ivm.mountable" value="true"> <ivm:Option name="mount" value="true" /> </ivm:Match> -->
--- hal-0.5.4/hald/linux2/blockdev.c 2005-08-10 06:05:58.000000000 -0300 +++ hal-0.5.4-lijon/hald/linux2/blockdev.c 2005-10-21 19:15:28.000000000 -0200 @@ -202,7 +202,7 @@ device_property_atomic_update_begin (); hal_device_property_set_bool (d, "volume.is_mounted", FALSE); - hal_device_property_set_string (d, "volume.mount_point", ""); +// hal_device_property_set_string (d, "volume.mount_point", ""); device_property_atomic_update_end (); HAL_INFO (("Clearing mount point for %s", device_file));
#!/bin/sh ### Change "Top" below to the panel you want your devices on... rox --RPC << EOF <?xml version="1.0"?> <env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope"> <env:Body xmlns="http://rox.sourceforge.net/SOAP/ROX-Filer"> <Panel$1> <Side>Top</Side> <Path>$2</Path> </Panel$1> </env:Body> </env:Envelope> EOF
<ivm:Match name="ivm.mountable" value="true"> <ivm:Property name="hal.volume.is_mounted"> <ivm:Action value="true" exec='rox.panelput Add "$hal.volume.mount_point$"' /> <ivm:Action value="false" exec='rox.panelput Remove "$hal.volume.mount_point$"' /> </ivm:Property> </ivm:Match>
This lets you unmount your media and also FUSE mountpoints with the Eject entry on the ROX-Filer file menu.
Don't forget to make the script executable.
#!/bin/sh pumount "$1" 2>/dev/null || fusermount -u "$1" 2>/dev/null || echo "Could not unmount with pumount or fusermount -u" >&2
Ivman 0.9.3 has the problem that mountpoints are not enclosed by quotes when passed as arg to pmount. So if a inserted media has spaces in the desired mount point, pmount will fail! look in ivmans src/manager.c:619 and put \" around the $hal.volume.desired_mount_point$ thing...
At least for me, my CD-ROM's got mounted as /media/hde and stuff like that, this patch to /usr/share/hal/fdi/policy/10osvendor/10-storage-policy.fdi fixed it so that media is mounted with the volume label as mountpoint:
--- /System/Links/Shared/hal/fdi/policy/10osvendor/10-storage-policy.fdi 2005-10-21 19:18:07.000000000 -0200 +++ /System/Settings/hal/fdi/policy/10-storage-policy.fdi 2005-10-22 13:12:44.000000000 -0200 @@ -96,8 +96,7 @@ <match key="block.is_volume" bool="true"> <match key="volume.fsusage" string="filesystem"> <!-- skip for drives with the no partitions hint (they are handled above) --> - <match key="@block.storage_device:storage.no_partitions_hint" bool="false"> - +<!-- <match key="@block.storage_device:storage.no_partitions_hint" bool="false"> --> <merge key="volume.policy.should_mount" type="bool">true</merge> <merge key="volume.policy.mount_filesystem" type="copy_property">volume.fstype</merge> @@ -173,7 +172,7 @@ <merge key="volume.policy.should_mount" type="bool">true</merge> </match> </match> - </match> +<!-- </match> --> </match> </match>
Good luck!
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- --> <deviceinfo version="0.2"> <device> <match key="@block.storage_device:storage.bus" string="usb"> <match key="info.category" string="volume"> <merge key="volume.is_usb_storage" type="bool">true</merge> </match> </match> </device> </deviceinfo>
<ivm:Match name="ivm.mountable" value="true"> <ivm:Property name="hal.volume.is_mounted"> <ivm:Action value="true" exec='rox.seticon Set "$hal.volume.mount_point$" $HOME/.ivman/other.png' /> <ivm:Action value="false" exec='rox.seticon Unset "$hal.volume.mount_point$"' /> </ivm:Property> <ivm:Match name="hal.volume.is_usb_storage" value="true"> <ivm:Property name="hal.volume.is_mounted"> <ivm:Action value="true" exec='rox.seticon Set "$hal.volume.mount_point$" $HOME/.ivman/usb.png' /> <ivm:Action value="false" exec='rox.seticon Unset "$hal.volume.mount_point$"' /> </ivm:Property> </ivm:Match> <ivm:Match name="hal.volume.is_disc" value="true"> <ivm:Property name="hal.volume.is_mounted"> <ivm:Action value="true" exec='rox.seticon Set "$hal.volume.mount_point$" $HOME/.ivman/cdr.png' /> <ivm:Action value="false" exec='rox.seticon Unset "$hal.volume.mount_point$"' /> </ivm:Property> </ivm:Match> <ivm:Property name="hal.volume.is_mounted"> <ivm:Action value="true" exec='rox.panelput Add "$hal.volume.mount_point$"' /> <ivm:Action value="false" exec='rox.panelput Remove "$hal.volume.mount_point$"' /> </ivm:Property> </ivm:Match>
rox --RPC << EOF <?xml version="1.0"?> <env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope"> <env:Body xmlns="http://rox.sourceforge.net/SOAP/ROX-Filer"> <$1Icon> <Path>$2</Path> <Icon>$3</Icon> </$1Icon> </env:Body> </env:Envelope> EOF
To set up global shortcuts (which work whatever you're doing) you need to have a ROX-Filer pinboard or panel active ROX-Session can set these up for you). Any item on a pinboard or panel can have a keyboard shortcut set for it by choosing 'Edit Item' from the popup menu.
You can also set keyboard shortcuts for use in filer windows (and some other applications) like this:
Keys are automatically saved when the filer quits.
The GTK developers have decided to disable this feature by default. To turn it on:
gtk-can-change-accels = 1
You also need to create an empty file called ~/.no-qtrc-to-gtkrc-mapping, then log out and log back in again.
For some unknown reason, KDE defaults to debug-level logging. To stop it printing
all that stuff, run kdebugdialog and turn all the options off.
The messages are actually displayed by ROX-Session, but are sent by other applications. Since error messages mean that something has gone wrong, you should report a bug against the program producing them (NOT against ROX-Session!).
You can set how long the messages are displayed for from ROX-Session's Options box, and you can see a log of old messages there too. You can also see the log by right-clicking on the messages as they're shown, which is useful if you need more time to read them, or if you want to copy-and-paste into a bug report.
If you really need to disable messages (because some application is just too noisy), you can do this in its AppRun file:
exec some_app "$@" 2>&1
The extra 2>&1 at the end of the exec line causes errors to be treated as normal (non-error) output, so ROX-Session won't display them.
To hide messages from your window manager, create a script containing:
#!/bin/sh exec window_manager "$@" 2>&1
Then use the name of that script in the ROX-Session Session Settings box.
Note that we do not provide any way to supress all error messages from all applications (despite frequent requests). Ignoring errors is never the right thing to do, and providing this option to users would be irresponsible. Although you may think that the warnings you see are harmless, the same bug could be causing serious trouble to other users. The developers may spend weeks trying to track down the problem, when the message you saw would have located the problem instantly.
To get to the shell from a ROX-Filer window, right click to open the menu and choose Terminal Here... from the Window submenu. I usually bind this to the ` key so that I don't have to open the menu.
By default xterm is used for this. Choose Options... from the main menu and go to the Menu section to set a different program.
If you just want to enter one command, choose Shell Command... from the Window menu instead. This allows you to enter a command in a prompt that appears at the bottom of the filer window. I usually bind this to !.
Drag your preferred terminal emulator to the pinboard or to a panel and assigned a short-cut key using the Edit Item... menu item. This short-cut will open a terminal window whatever program you are currently using. I usually bind Ctrl-` to this function.
You can probably find some suitable terminal emulators in /usr/share/applications.
To bind keys to menu items, see the keyboard shortcuts page.
Drag an application, directory or file onto the pinboard or a panel. Bring up the menu and choose Edit Item. Set the shortcut there.
These shortcuts can be used whatever else you are doing, so don't use a shortcut that's often used for something else, like F1!
An easy way to launch App Dirs from your shell without patching the shell.
This only works with zsh
Add to your /.zshrc:
alias rehash="rehash; . ~/bin/load-appdir-cache.sh" [ "$DISPLAY" ] && . ~/bin/load-appdir-cache.sh
Create this /bin/load-appdir-cache.sh:
APPDIR_CACHE=${HOME}/.appdir_cache if [ -f $APPDIR_CACHE ]; then cat $APPDIR_CACHE | while read item; do hash $item; done fi
And this /bin/update-appdir-cache:
#!/bin/sh APPDIR_CACHE=${HOME}/.appdir_cache echo Updating AppDir cache... >/dev/stderr echo -n > $APPDIR_CACHE find /ROX-Apps ~/Apps -name AppRun | while read app; do echo "$(basename $(dirname $app))=$app" >> $APPDIR_CACHE done
Make sure to change /ROX-Apps to where your appdirs live, like /usr/local/apps
Then make this script executable:
chmod +x ~/bin/update-appdir-cache
And put it in your Auto Start folder:
ln -sf ~/bin/update-appdir-cache ~/Choices/ROX-Session/AutoStart/
You can use this patch to add support to bash.
If you're using the zsh shell, add this to your ~/.zshrc:
open-rox-cwd() { rox } zle -N open-rox-cwd bindkey '\e[24~' open-rox-cwd
Now, pressing F12 will open a ROX filer window showing the current directory (even in the middle of
editing a line). The actual keycode (the odd string after bindkey) varies by terminal; press <Ctrl-V> <Key> at a shell
prompt to see what it should be (replacing ^[ with \e).
ROX-Filer has an Open With feature, but it's called Send To instead.
The SendTo menu is easily opened by right-clicking over a file with the Shift key held down. Choosing a program from the menu acts like dragging the file to it. One particularly useful program to add to this menu is Archive (for compressing files and directories).
You can also set certain programs to only appear when you click on files of a particular type (see the help message from the File -> Customise menu item):
Yes, if you can make them appear as part of the filesystem. Some projects
that allow this include:
Note that AVFS is turned on on a per-process basis. So make sure you turn it on in the script that runs ROX-Filer (eg, ROX-Session/RunROX), not something that starts later (like your .zshrc file, which will only affect things started from the shell).
The filer asks the WM to not cover a few pixels at the edge of the screen. When you move the pointer over the edge of the screen, the panel
comes to the front. If this doesn't work, try a different window manager (works fine with XFWM4).
XFWM4 also lets you configure the desktop margins, which you can use to stop windows going too near the edge of the screen.
Some window managers, such as sawfish, also allow you to mark certain windows with the avoid flag to stop them from being covered at all.
Here is a quick tip (from Guillaume Millet) to synchronize the ROX and Gnome file associations automatically. Just create the following script and save it in ~/.config/rox.sourceforge.net/MIME-types/ as "application", "video", "audio" and "image".
These are the fallback handlers for each of the basic MIME-types. If a more specific handler is defined it will override these, so you can maintain some differences if it is so desired.
#!/bin/sh app=$(gnomevfs-info -s "$1" | grep "Default app" | sed 's/.*\: //') if [ -e ~/.local/share/applications/$app ] ; then exec $(grep "^Exec" ~/.local/share/applications/$app | sed 's/Exec=//;s/%[a-zA-Z]//') "$@" fi if [ -e /usr/share/applications/$app ] ; then exec $(grep "^Exec" /usr/share/applications/$app | sed 's/Exec=//;s/%[a-zA-Z]//') "$@" fi
Don't forget to make the script executable (chmod +x filename).
Drag them with the middle mouse button.
Click with the middle mouse button (both buttons at once on two-button mice).
/usr/apps/Windows Network/AppInfo.xml
<?xml version="1.0"?> <AppInfo> <Summary xml:lang="en">Samba Network Filesystem.</Summary> <About xml:lang="en"> <Purpose>Open Windows Network Folder</Purpose> <Version>0.1</Version> <Author>Yasuhiro Matsumoto [mattn_jp@hotmail.com]</Author> <License>GNU General Public License</License> <Homepage>http://www.ac.cyberhome.ne.jp/~mattn/</Homepage> </About> <AppMenu> <Item option="[umount]"> <Label>Unmount</Label> </Item> </AppMenu> </AppInfo>
/usr/apps/Windows Network/AppRun
#!/bin/sh SMBDIR=/smb if [ "$1" == "[umount]" ]; then fusermount -u $SMBDIR exit fi exec 1>&2 echo -n "Launching Samba Network Filesystem... " if ps -C smbnetfs -o user | grep -q $USER then echo "Already running." else echo "OK" if ! smbnetfs $SMBDIR; then exit fi sleep 5 fi rox $SMBDIR
This rox-app mount windows network to "/smb" directory. and start rox file manager.
If you want to unmount this "Windows Network", right click this app icon and select "Unmount".
Yes. Open the menu over an RPM and choose 'Set Run Action...'. Set the command to:
gnomesu -u root -e -c "rpm -i \"$1\""
Drag the selection onto ROX-Filer (that is, open the directory containing 'ROX-Filer' itself and drag to it). You can add ROX-Filer to the Send To menu so that clicking Shift+Menu over the selection will let you do this easily.
One of the features of ROX-Filer is the ability to provide thumbnail images for of certain files. These are small images based on the content of the file and used to replace the default type icon for that file in ROX-Filer windows. You can see this effect by viewing a directory containing JPEG files and turning on thumbnail mode (Display => Show Thumbnails, normally bound to ctrl-T). ROX-Filer shows "thumbs" in the titlebar when thumbnail mode is on.
By itself ROX-Filer can generate thumbnails for the most common image file types
* JPEG
* PNG
* GIF
* SVG (normally)
* and a few others
However it does not support all image types, nor does it generate thumbnails for other types of file such as video or font files. To do so would increase the size of the program and slow it down. Also the file types that the user would want thumbnailing would vary from user to user.
The solution is to allow ROX-Filer to call external programs which are capable of generating thumbnails for certain types. The user can then enable or disable whichever types they wish to thumbnail.
Available thumbnail helpers include:
* VideoThumbnail: many types of video files
* MagickThumbnail: image types not handled internally
The helper applications are normally implemented as Library Directories.
OSError: [Errno 17]
$XDG_CONFIG_HOME
if it is different).If your computer takes a long time to boot, then it's probably because it's loading a slew of unnecessary programs. Many distributions try to simplify things by having everything you might ever want running by default. Needless to say, this is slow and a security risk.
Note: changing your boot sequence could prevent your computer from booting. Make sure you know how to fix it if that happens! (eg, by typing linux single at the LILO prompt and using the shell)
Here are some good ways to find out what useless stuff you've got running:
Of course, any of these might be useful in some particular situation. I'm describing this for a typical single-user desktop machine.
There are some Linux distributions and other Unixes which startup fast and run almost no services by default, for instance CRUX (my CRUX needs 20 seconds until login console is up plus 10 seconds for starting XDM), FreeBSD and NetBSD.
Linux tends to do one thing at a time when booting, to make errors more obvious. If you care more about speed, you can run them in parallel. For example, adding an & to the end of a command will let the boot sequence continue while it executes (ifup brings up interfaces, which may involve slow DHCP negotiations):
ifup -a &
Here's an excellent (technical) article from IBM, showing how the make command can be used to start services in parallel wherever possible:
It's probably slocate indexing all your files for the locate command.
It's supposed to happen around midnight when noone's around, but most people don't leave their machines on all the time. Use System to find where it's being run from (probably something in /etc/cron.daily) and move it to cron.weekly or cron.never, etc.
There are several different parts of the desktop that can be themed, as shown in the picture below.
See also:
If you use OroboROX, right click on the OroboROX icon in a ROX-Filer window and choose Options to get a list of themes.
If using another window manager, you can find lots of themes at http://themes.freshmeat.net.
All the ROX applications use GTK. Everything inside the window frame of a GTK application is drawn by GTK, while the frame itself (the titlebar and resize frame) is drawn by the window manager.
The basic goal of the theme system is to keep programmers away from graphic design. The programmer says to GTK "display a button". The theme designer says to GTK "draw buttons like this". For more information, see The GTK+ Theme Architecture.
ROX uses GTK 2, so make sure you get a GTK2 theme if you want to change the style of the menus and other user interface widgets. To install a GTK theme:
You can find lots of themes at http://themes.freshmeat.net.
On startup, GTK reads the file ~/.gtkrc-2.0. You can edit this file to customize the appearance of your programs. See the following pages for some examples.
Make sure you have the appropriate theme engine installed (eg gtk2-engines-pixbuf).
ROX-Filer uses the standard Gtk stock icons system to change the toolbar icons. Put something like this
in your ~/.gtkrc-2.0 file:
pixmap_path "/path/to/icons" style "normal" { stock["gtk-close"] = {{"close-icon.png"}} stock["gtk-go-up"] = {{"up-icon.png"}} stock["gtk-home"] = {{"home-icon.png"}} stock["gtk-refresh"] = {{"refresh-icon.png"}} stock["gtk-zoom-in"] = {{"zoom-in-icon.png"}} stock["gtk-zoom-fit"] = {{"zoom-fit-icon.png"}} stock["gtk-jump-to"] = {{"jump-to-icon.png"}} stock["gtk-sort-ascending"] = {{"sort-icon.png"}} stock["gtk-help"] = {{"help-icon.png"}} stock["rox-show-hidden"] = {{"hidden-icon.png"}} stock["rox-show-details"] = {{"details-icon.png"}} stock["rox-select"] = {{"select-icon.png"}} } widget "*" style "normal"
Put something like this in your ~/.gtkrc-2.0 file:
style "panel-style" { bg[NORMAL] = "#efb47c" font_name = "Sans 5" } widget "rox-panel.*" style "panel-style"
Put something like the following in your ~/.gtkrc-2.0 file:
Note: to prevent this file from being overridden when changing themes use ~/.gtkrc.mine
instead
style "rox" = "default" { bg[NORMAL] = "#ffffff" bg[ACTIVE] = "#ffffff" } widget_class "*Collection*" style "rox"
Other widget_class backgrounds you may like to change include:
but remember that this will affect all GTK applications.
This is similar to the previous question. Put something like the following in your ~/.gtkrc-2.0 file:
Note: to prevent this file from being overridden when changing themes use ~/.gtkrc.mine
instead
pixmap_path "/home/yourhome/images" style "rox" = "default" { bg_pixmap[NORMAL] = "roxbg.png" } widget_class "*Collection*" style "rox"
See the GTK Theming Tutorial for more information.
Icon themes provide icons for all the different types of file. The current series of ROX-Filer (2.2.x) supports freedesktop.org icon themes; install new icon themes in your ~/.icons directory, and then select it in your Options dialog's 'Types' panel.
Themes are listed in the Themes block on the left of the page, or you can browse the list of themes.
In The Future, we hope to be able to share icon themes with other desktops.
The filer uses GTK to load images. As long as you have SVG support in GTK, ROX-Filer will load them fine. To test for SVG support execute:
gdk-pixbuf-query-loaders | grep svg
If you get a line with svg_loader.so in it, you should be ok.
Make sure you don't have any Choices/MIME-icons directories (~/Choices, /usr/local/share/Choices, /usr/share/Choices, etc). These override icons set in the theme.
If you've previously installed ROX-Filer 2.0.0, you probably have one of these directories around.
"What's the best/easiest way of creating icons sets for using in ROX-Filer so that they can be shared ?
Do I have to manually drop an icon in the box for every MIME type, or is there some App that does this is a smarter way? I would like to make a bunch of icon sets and put them online for download."
Copy the ROX-Filer/ROX theme directory as ~/.icons/MyTheme and edit the icons there. Use the Options box to select your new theme. Delete/move everything in your Choices/MIME-Icons directories or they will override the theme.
You can also use the SOAP method (see the manual for ROX). You can make a small script that takes a file argument and call ROX to set that image as background on the pinboard. You can't use the rootwindow for background, the pinboard is actually one big window that covers your desktop!
Example script (untested, but should work):
#!/bin/sh rox --RPC << EOF <?xml version="1.0"?> <env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope"> <env:Body xmlns="http://rox.sourceforge.net/SOAP/ROX-Filer"> <SetBackdrop> <Filename>$1</Filename> <Style>Stretch</Style> </SetBackdrop> </env:Body> </env:Envelope> EOFChange the Style element to your prefered mode (Stretch, Scale, Center, Tile), make the script executable (chmod +x scriptname) and put in in your ~/Choices/SendTo/.image and it should show up when you shift-rightclick on an image. Though it will not show up at the top of the file menu when right click, if you want this you will have to choose Customise Menu from the top of the File menu (ROX-Filer 2.1.0 or later required).
Many functions of ROX can be called by external programs using the SOAP interface. See the appendix C of the manual for more information on this.
There is a small Python script for calling these SOAP methods from the command line or from Python code. You can find it here.
There are various possibilities:
ROX-style applications like Edit should already have an Up button on their toolbar for this.
You can get some window managers to provide such a button in the title bar. This code creates a change-to-parent action for sawfish:
(defun change-to-parent (window) "Close window and open the parent directory viewer" (interactive "%W") (let ((title (caddr (get-x-property window 'WM_NAME)))) (when (and title (string-match "[~/][^*?]+" title)) (let ((path (substring title (match-start 0) (match-end 0)))) (system (concat "rox -s " path)) (delete-window-safely window) ))))
You can script other applications. For example, Stephen Watson gives these instructions for Emacs:
(defun rox-view-file (file) "Open ROX-Filer window for named file" (interactive "fFile to show: ") (call-process "rox" nil 0 nil "-s" file) ) (defun rox-view-current () "Open ROX-Filer window for the current file" (interactive) (rox-view-file buffer-file-name) )
For Vim (or GVim), put this in your ~/.vimrc file:
map <F12> :silent !rox -s %<CR>
You can use the OpenDir SOAP method to set the style of the window directly (see the SOAP section of the filer's manual). You can also use use this to set the WM_CLASS, so that your window manager can be set to treat the window
specially.
Matthew Weier O'Phinney writes:
"I now have an XML file entitled appsDir.xml containing the following:
<env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope"> <env:Body xmlns:ns="http://rox.sourceforge.net/SOAP/ROX-Filer"> <ns:OpenDir> <ns:Filename>/home/matthew/Apps</ns:Filename> <ns:Style>Large</ns:Style> <ns:Class>AppsDir</ns:Class> </ns:OpenDir> </env:Body> </env:Envelope>
In addition, I have installed bbappconf.
In addition, I have applied a patch (link is now broken; is the bug fixed now?) that makes the program behave when in an iconic or withdrawn (read: dockapp) state, as well as allowing for certain "geometry" type tags.
I run bbappconf as 'bbappconf -i &' in my .xinitrc file.
bbappconf looks for the WM_CLASS name and class. The Class defined in the SOAP RPC xml file above is the WM_CLASS name; class remains "ROX-Filer". Based on the combination of class and name, it applies the settings specified in a configuration file to the window in question when it appears.
In my ~/.bbtools/bbappconf.bb file, I have a series of applications for which I want to control either geometry, stickiness, starting workspace, or toggling decor. I have the following entry now, corresponding to the
above SOAP RPC xml file:
bbappconf.3.classHint.class: ROX-Filer bbappconf.3.classHint.name: AppsDir bbappconf.3.positionX: 698 bbappconf.3.positionY: 0 bbappconf.3.width: 324 bbappconf.3.height: 200 bbappconf.3.Stick: true
This places a window 324x200 in the upper right corner of my desktop and makes it sticky.
bbappconf, while originally developed as a blackbox tool, can be used without blackbox. A file entitled bbappconf.nobb contains settings that should be used if not using blackbox.
Also, the positionX, positionY, width, and height attributes are undocumented. They are a part of the patch to bbappconf detailed above -- this is why I include a sample configuration in here."
Sure. One way is to put the script below into (for example) ~/bin. Name it 'Firefox' or something and make it executable. Check if that /opt install path applies to your system.
#!/bin/bash FIREFOX="/opt/firefox/firefox" if [ -x "$FIREFOX" ]; then "$FIREFOX" "$1" || "$FIREFOX" -remote "OpenURL($1, new-tab)" fi
Then right click on some HTML file in ROX-Filer and choose Set Run Action. Drag the `Firefox' script you created into the box, and you're set.
Here's another firefox script, make sure to change FIREFOXDIR to the right directory:
#!/bin/sh FIREFOXDIR=/Programs/FireFox/Current REMOTE="$FIREFOXDIR/mozilla-xremote-client -a firefox" if ( $REMOTE "ping()" 2>/dev/null); then exec $REMOTE "openurl($1,new-tab)" else exec firefox "$1" fi
Openbox 3 appdirs menu (Andrew Stephens)
OB3 uses XML for its configuration files, so I made my own small python script to create XML dynamic menu entries for files, appdirs, and normal directories (in that order). Files are opened/run using the rox filer (so it relies on what run action you've specified for the file type). Application Directories are simply run like usual, and normal directories are turned into their own submenus.
For your menu file, use an entry something like this:
<menu id="roxmenu-menu" label="ROX Menu" execute="/home/andrew/.config/openbox/scripts/roxapps.py /home/andrew/Apps" />
This will give you a menu of all your files, appdirs, and directories in your personal Apps folder. I like to the script to take my ROX-Menu entries so I use '/home/andrew/Choices/ROX-Menu-bin/Menu_Root' as the argument for script. The main thing to note is that the script DOES require a path as an argument.
Here it is... I'm new to Python (n++ doesn't work?) so feel free to make it better - There probably should be some exception handling in it... among other things...
#!/usr/bin/python import sys import os.path print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" print "<openbox_pipe_menu>" def scan( menu_path ): mylist = os.listdir( menu_path ) mylist.sort() filelist = [] appdirlist = [] dirlist = [] for name in mylist: fullname = os.path.join( menu_path, name ) fullappdir = os.path.join( fullname,"AppRun" ) if os.path.isfile( fullname ): if name <> ".DirIcon": filelist.append( "<item label=\"" + name + "\"><action name=\"Execute\"><execute>rox \"" \ + fullname + "\"</execute></action></item>" ) elif os.path.isdir( fullname ): if os.path.exists( fullappdir ): appdirlist.append( "<item label=\"" + name + "\"><action name=\"Execute\"><execute>" \ + fullappdir + "</execute></action></item>" ) else: dirlist.append( name ) for f in filelist: print f for a in appdirlist: print a for d in dirlist: fullname = os.path.join( menu_path, d ) print "<menu id=\"" + d + "\" label=\"" + d + "\">" scan( fullname ) print "</menu>" scan ( sys.argv[1] ) print "</openbox_pipe_menu>"
After I switched from the fluxbox wm to the openbox wm, I noticed in the
docs that for this wm one can generate menu items dynamicly by external
scripts. Below a small perl script that walks through the filesystem
generating menu entries that open a directory with rox. Also, more
interesting, if it encounters AppDirs, program entries are generated.
To use it edit ~/.openbox/menu (or /usr/share/commonbox/menu) to include
for example :
[pipe] (/) {/path/to/menu.pl /} [pipe] (Apps) {/path/to/menu.pl /usr/local/apps ~/apps}
Thus you can open any dir via the '/' entry and apps are automatically
listed under the 'Apps' entry.
File menu.pl given below.
#!/usr/bin/perl $no_idx = $#ARGV; die "$0 needs a directory as argument.\n" unless @ARGV; for (@ARGV) { $dir = $_ || next; opendir DIR, $dir || die "Could not open $dir\n"; print "[exec] (.) {rox $dir}\n" unless $no_idx; $dir =~ s#/$##; print "[pipe] (..) {$0 $dir/..}\n" unless $no_idx; push @entries, map { -x "$dir/$_/AppRun" ? [$_, "[exec] ($_) {$dir/$_/AppRun}\n"] : [$_, "[pipe] ($_) {$0 $dir/$_}\n"] } grep {$_ !~ /^\./ and -d "$dir/$_"} readdir DIR; closedir DIR; } print map {$$_[1]} sort {$$a[0] cmp $$b[0]} @entries;