#!/bin/sh
#*********************************************************************************************************
#*   __     __               __     ______                __   __                      _______ _______   *
#*  |  |--.|  |.---.-..----.|  |--.|   __ \.---.-..-----.|  |_|  |--..-----..----.    |       |     __|  *
#*  |  _  ||  ||  _  ||  __||    < |    __/|  _  ||     ||   _|     ||  -__||   _|    |   -   |__     |  *
#*  |_____||__||___._||____||__|__||___|   |___._||__|__||____|__|__||_____||__|      |_______|_______|  *
#* http://www.blackpantheros.eu | http://www.blackpanther.hu - kbarcza[]blackpanther.hu * Charles Barcza *
#*************************************************************************************(c)2002-2011********
export TEXTDOMAIN="default-apps"
export TEXTDOMAINDIR="/usr/share/locale"
#---------------------------------------------------------------
# Project         : blackPanther OS default-apps
# Module          : bin
# File            : default-terminal
# Version         : 0.2
# Author          : Charles Barcza
# Created On      : Mon Aug 4 2008
# Purpose         : launch a terminal
#---------------------------------------------------------------
 . /etc/blackPanther-default-apps.conf
appname=terminal
if [ -f ~/.personal-terminal ];then
    . ~/.personal-terminal
    echo "Presonal conf found!"
fi

set_a_terminal() {
echo "TERMINAL=$1" > ~/.personal-terminal
echo $"Personal terminal definied, please restart $0 without parameter."
exit
}

strip_terminal_var() {
    if [[ -n "$TERMINAL" ]]; then
	if [[ `basename "$TERMINAL"` == "default-terminal" ]]; then
	    unset TERMINAL
	elif [[ `basename "$TERMINAL"` == "xvt" ]]; then
	    unset TERMINAL
	else
	    set $TERMINAL
	    if ! which $1 > /dev/null 2>&1; then
		unset TERMINAL
	    fi
	fi
    fi
}

if [ "$1" = "-s" ];then
    echo $"Force define user terminal.."
    set_a_terminal $2
elif [ "$1" = "-u" ];then
    rm -f $HOME/.personal-terminal
    echo $"Clear definied personal terminal conf.."
    exit
elif [ "$1" = "-h" -o "$1" = "--help" -o "$1" = "--segits" ];then
    echo ""
    echo -e $"${GRN}This is a$BLK blackPanther OS$GRN specific tool"
    echo ""
    echo -e $"$MAG  Usage:"
    echo -e $"$YEL       `basename $0` -s $DEF Set a personal ${appname} (You conf file: $HOME/.personal-${appname})"
    echo -e $"$YEL       `basename $0` -u $DEF Unset definied ${appname} (Remove you conf file: $HOME/.personal-${appname})"
    echo -e $"$YEL       `basename $0` -h $DEF This screen"
    echo ""
    echo -e $"$YEL       `basename $0` --newtab/--tab $DEF Only for Yakuake Terminal. Example: default-terminal --newtab YOURCOMMAND"
    echo ""
    echo -e $"$CYN  [$RED Example:$CYN `basename $0` -s yakuake$RED OR to autodetect:$CYN `basename $0`]$DEF"
    echo ""
    exit
fi

strip_terminal_var
if [[ -z "$TERMINAL" ]]; then
 
    # using GNOME
    if [[ -n "$GNOME_DESKTOP_SESSION_ID" ]]; then
	if [[ -n `gconftool -g /desktop/gnome/applications/terminal/exec` ]]; then
	    TERMINAL=`gconftool -g /desktop/gnome/applications/terminal/exec`
	fi
    fi

    #using KDE
    if [[ -n "$KDE_FULL_SESSION" ]]; then
	#TERMINAL=`which konsole 2> /dev/null || which quadkonsole 2> /dev/null`
	NEWTERMINAL=`grep -m 1 'TerminalApplication\[\$e\]=' $HOME/.kde4/share/config/kdeglobals 2>/dev/null`
	[[ -z "$NEWTERMINAL" ]] && NEWTERMINAL=`grep -m 1 'TerminalApplication\[\$e\]=' /etc/kde/kdeglobals 2>/dev/null`
	[[ -z "$NEWTERMINAL" ]] && NEWTERMINAL=`kreadconfig --group General --key TerminalApplicaion 2>/dev/null`
	if [[ -n "$NEWTERMINAL" ]]; then
	    TERMINAL=`echo $NEWTERMINAL | sed -e 's/TerminalApplication\[\$e\]=//' -e 's/!//'`

	fi

	if [ "$TERMINAL" = "yakuake" ] && [ ! "${1}x" = "x" ];then
	    #echo "Default terminal the yakuake! This command output don't show in yakuake. Switch now any konsole program.."
	    unset TERMINAL
	fi

    fi

    strip_terminal_var
    if [ -n $(pidof yakuake) ];then
	    echo "The Yakuake is already running! Window opening..."
	    #unset TERMINAL
	    TERMINAL="yakuake-remote"
    fi
    
    #[[ -z "$TERMINAL" ]] && TERMINAL=`which mrxvt 2> /dev/null` 
    [[ -z "$TERMINAL" ]] && TERMINAL=`which gnome-terminal 2> /dev/null`
    [[ -z "$TERMINAL" ]] && TERMINAL=`which yakuake 2> /dev/null`
    #[[ -z "$TERMINAL" ]] && TERMINAL=`which tilda 2> /dev/null`
    [[ -z "$TERMINAL" ]] && TERMINAL=`which konsole 2> /dev/null`
    [[ -z "$TERMINAL" ]] && TERMINAL=`which Eterm 2> /dev/null`
    [[ -z "$TERMINAL" ]] && TERMINAL=`which aterm 2> /dev/null`
    [[ -z "$TERMINAL" ]] && TERMINAL=`which kterm 2> /dev/null`
    [[ -z "$TERMINAL" ]] && TERMINAL=`which quadkonsole 2> /dev/null`
    [[ -z "$TERMINAL" ]] && TERMINAL=`which multi-gnome-terminal 2> /dev/null`
    [[ -z "$TERMINAL" ]] && TERMINAL=`which rxvt 2> /dev/null`
    [[ -z "$TERMINAL" ]] && TERMINAL=`which multixterm 2> /dev/null`
    [[ -z "$TERMINAL" ]] && TERMINAL=`which terminal 2> /dev/null`
    [[ -z "$TERMINAL" ]] && TERMINAL=`which lxterminal 2> /dev/null`
    [[ -z "$TERMINAL" ]] && TERMINAL=`which multixterm 2> /dev/null`
    [[ -z "$TERMINAL" ]] && TERMINAL=`which terminator 2> /dev/null`
    [[ -z "$TERMINAL" ]] && TERMINAL=`which xfce4-terminal 2> /dev/null`
    [[ -z "$TERMINAL" ]] && TERMINAL=`find /usr/bin -name "vte*" | head -n 1 2> /dev/null`
    [[ -z "$TERMINAL" ]] && TERMINAL=`which xterm 2> /dev/null`


fi

if [ -n "$TERMINAL" ]; then 
    if [ "$TERMINAL" = "yakuake-remote" ];then
	NEW_TAB=$(echo $@| grep -e --newtab -e --tab)
	PAR=$(echo $@| sed "s| -e ||") 
	COMMAND=$(echo $PAR| sed 's|--newtab||' | sed 's|--tab||')
	TAB_TITLE="$USER * $(echo $COMMAND | awk '{ print $1 }')"
	exec yakuake 2>/dev/null &
	[[ -n "$NEW_TAB" ]]&& qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.addSession &>/dev/null
    	SESSION_ID=`qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.activeSessionId`                                                                                            
    	qdbus org.kde.yakuake /yakuake/tabs setTabTitle $SESSION_ID $TAB_TITLE &>/dev/null                                                                                              
        exec qdbus org.kde.yakuake /yakuake/sessions runCommandInTerminal $SESSION_ID "$COMMAND" &>/dev/null

     else
	exec $TERMINAL "$@"
    fi
else
    xmsg=`which kdialog 2>/dev/null ||which pydialog 2>/dev/null || which zenity 2>/dev/null`
    [ -n "$DISPLAY" ] && $xmsg --error $"Sorry. Terminal not detected, please install on PC (etc: installing xterm)"
    [ ! -n "$DISPLAY" ] && echo -n $"Sorry. Terminal not detected! Please install on PC (etc: installing xterm)"
fi
