Search code examples
kde-plasmakde4dolphin-browser

Use dolphin (or other browser) like yakuake


I often want to open a file browser to open a file and then close the browser.

Is there a way (a plasmoid, a dolphin plugin, another browser...) which could allow me to have a file browser "in the style of" yakuake? (i.e. unfolding with a shortcut, and re-folding when I chose the file I want)


Solution

  • Took me some time, but finally managed to get what you want (and eventually, what I also want :) with xdotool (on Ubuntu sudo apt-get install xdotool).

    With this script, you can have any application behave like you asked:

    #!/bin/bash
    
    SEARCHED_WINDOW=$1
    COMMAND=${2:-$SEARCHED_WINDOW}
    SEARCHED_WINDOW_CLASSNAME=toggleApp$SEARCHED_WINDOW
    WINDOW_ID=$(xdotool search --classname $SEARCHED_WINDOW_CLASSNAME)
    VISIBLE_WINDOW_ID=$(xdotool search --onlyvisible --classname $SEARCHED_WINDOW_CLASSNAME 2>/dev/null)
    
    if [ -z "$WINDOW_ID" ]; then
        $COMMAND 2>/dev/null &
        pid=$!
        NEW_WINDOW_ID=$(xdotool search --onlyvisible --sync --pid $pid 2>/dev/null)
        xdotool set_window --classname $SEARCHED_WINDOW_CLASSNAME $NEW_WINDOW_ID
        xdotool windowfocus $NEW_WINDOW_ID
    elif [ -z "$VISIBLE_WINDOW_ID" ]; then
        xdotool windowmap $WINDOW_ID
        xdotool windowfocus $WINDOW_ID
    else
        xdotool windowunmap $VISIBLE_WINDOW_ID
    fi
    

    (Inspired from here)

    You call it like this:

    ./toggle.sh dolphin
    

    If the command to launch the program is different, you can add a second parameter:

    ./toggle.sh appName commandToLaunchApp
    

    What this script does is the following:

    1. If the app is not running: launch it, give window a specific class, and give window focus
    2. If the app is running but with no visible window: make window visible and give it focus
    3. Else, i.e. app is running and visible: hide it.

    All you have left to do is map a shortcut to the above-mentionned command to launch the script. In KDE : System settings > Shortcuts and gestures > Custom shortcuts. Then Edit > New > Global shortcut > Command.

    Plus, this script works with any app, should work with any EWMH compliant window manager, and allows you to have other instances of the same app (this is why I added the class trick).