The "thunartab" script works for each separate workspace so that there can be a distinct instance of Thunar for each one. If you do want other instances of Thunar on the same workspace, just select "Thunar" in the panel start menu or type "thunar &" in the terminal. Right clicking on a directory in Thunar and selecting "Open as Root" will also open a new instance of Thunar but as root. Whatever Thunar window is raised receives the new tabs created from opening directories outside of Thunar including the Places add-on mentioned earlier.
I am hoping that in the next version of Thunar the one-window per workspace option will be added. Surprisingly, not many of Linux File managers have this one-window option, including recent versions of Nautilus, Nemo and Caja. However, the light-weight LXDE's file manager PCManFM does. As a side note, it should be fairly easy to modify "thunartab" to work with other file managers in XFCE (See comment section at bottom of script for example).
1. To use, after downloading the attached script into your Downloads folder, run in the terminal:
Code: Select all
cd ~/Downloads && tar -zxvf thunartab.tar.gz && sudo chmod 755 thunartab && sudo cp thunartab /usr/local/bin/
Code: Select all
sudo apt install gridsite-clients xdotool
Although I do have website coding experience with html, css, etc., I am a novice when it comes to computer programming languages. So, If you have any suggestions for improving the script please share!
BASH Script:
Code: Select all
#!/bin/bash
# Script to open new file manager tab instead of window (e.g., Thunar) in XFCE.
# Version 1. 2017-04-18
# Lock script to process multiple instances consecutively when "Open All" on Desktop.
if [[ $1 == "file:///home/$USER/Desktop/"* ]]; then
ME=`basename "$0"`;
LCK="/tmp/${ME}.LCK";
exec 8>$LCK;
flock -x 8; # lock $LCK
trap 'rm -f $LCK' exit # remove $LCK regardless of exit status
sleep .1 # hack to give time for each script to execute properly--weird!
fi
# Convert desktop file urls to thunar-friendly local paths.
# Accommodates special characters in directory names (!@#$, etc).
fileurl=$1
filepath="$(urlencode -d ${fileurl#file://})/"
# Check for running instances of $app on current desktop/workspace.
app=thunar
wid=( $(xdotool search --desktop $(xdotool get_desktop) --class $app) )
lastwid=${wid[*]: -1} # Get PID of newest active thunar window.
# If $wid is null launch app with filepath.
if [ -z $wid ]; then
$app "$filepath"
# If app is already running, activate it and use shortcuts to paste filepath into path bar.
else
xdotool windowactivate --sync $lastwid key ctrl+t ctrl+l # Activate pathbar in thunar
xdotool type -delay 0 "$filepath" # "--delay 0" removes default 12ms between each keystroke
xdotool key Return
fi
exit 0
# Easy Installation:
# cd ~/Downloads && tar -zxvf thunartab.tar.gz && sudo chmod 755 thunartab && sudo cp thunartab /usr/local/bin/
# Install dependencies: sudo apt install gridsite-clients xdotool # gridsite-clients contains urlencode
# Reboot # if you want to run "thunartab" as a command in terminal
# Select script in the XFCE's GUI "Preferred Applications"
#
# For alternatives for script location run "echo $PATH" (without quotes) in terminal
# Troubleshooting: If more than one thunar window opens with "Open All", try increasing sleep value on line 12
#
# For other file-managers (e.g., Nemo, Caja, Nautilus), change app name on line 21
# You may also have to modified the xdotool shortcuts on line 31.
# For example for Nemo, change line 31 to something like
# xdotool windowactivate --sync $lastwid key ctrl+t ctrl+l ctrl+v Return ctrl+l Escape
# Manually test shortcuts in file manager first.
#
# Main sources for learning bash for this script include:
# http://ryanstutorials.net/bash-scripting-tutorial/ "Bash Scripting Tutorial" (Very good for beginners like myself"
# http://jdimpson.livejournal.com/5685.html "Using flock to protect critical sections in shell scripts"
# https://askubuntu.com/questions/55656/open-nautilus-as-new-tab-in-existing-window (the starting idea for this script)
#
# Bug reports or suggestions, please email me, Sam, at sampub@islandroots.ca