#!/usr/bin/env bash
# AUTHOR: gotbletu (@gmail|twitter|youtube|github|lbry)
#         https://www.youtube.com/user/gotbletu
# DESC:   turn any terminal into a dropdown terminal
# DEMO:   https://www.youtube.com/watch?v=mVw2gD9iiOg
# DEPEND: coreutils xdotool wmutils (https://github.com/wmutils/core | https://aur.archlinux.org/packages/wmutils-git/)
# CLOG:   2022-03-05   else statement to allow terminal to jump to current virtual desktop if is visible on another desktop
#         2022-02-28   added auto launch terminal if none running by https://github.com/aaccioly
#         2021-02-10   use comm to match window name and class, this avoids terminal windows with different names
#         2015-02-15   0.1

# get screen resolution width and height
ROOT=$(lsw -r)
width=$(wattr w "$ROOT")
height=$(wattr h "$ROOT")

# option 1: set terminal emulator manually
# my_term=urxvt
# my_term=sakura
my_term="xterm"
# my_term="alacritty"
# my_term=terminator
# my_term=gnome-terminal
# my_term=kitty # for kitty to work uncomment line 30 and comment line 33

# option 2: auto detect terminal emulator (note: make sure to only open one)
# my_term="urxvt|kitty|xterm|uxterm|termite|sakura|lxterminal|terminator|mate-terminal|pantheon-terminal|konsole|gnome-terminal|xfce4-terminal"

# get terminal emulator pid ex: 44040485
# pid=$(xdotool search --class "$my_term" | tail -n1)

# get terminal emulator and matching name pid ex: 44040485
pid=$(comm -12 <(xdotool search --name "$my_term" | sort) <(xdotool search --class "$my_term" | sort))

# start a new terminal if none is currently running
if [[ -z "$pid" ]]; then
    while IFS='|' read -ra TERMS; do
        for candidate_term in "${TERMS[@]}"; do
            if command -v "$candidate_term" &>/dev/null; then
                ${candidate_term} &>/dev/null &
                disown
                pid=$!
                break
            fi
        done
    done <<<"$my_term"
else
    # get windows id from pid ex: 0x2a00125%
    wid=$(printf 0x%x "$pid")

    # maximize terminal emulator
    wrs "$width" "$height" "$wid"

    # toggle show/hide terminal emulator
    mapw -t "$wid"
fi
