#!/bin/bash # Created By: srdusr # Created On: Tue 07 Mar 2023 15:06:47 PM CAT # Project: Agnostic dropdown/scratchpad terminal that works on most window managers ## List of supported terminals with dropdown class #supported_terminals=( # "wezterm" # "kitty" # "alacritty" #) # ## Check if any of the supported terminals with dropdown class are running #for term in "${supported_terminals[@]}"; do # if pgrep -f "$term.*--class dropdown" > /dev/null; then # my_term="$term" # break # fi #done # ## If none of the supported terminals are running, start the first available one #if [ -z "$my_term" ]; then # for term in "${supported_terminals[@]}"; do # if command -v "$term" > /dev/null 2>&1; then # my_term="$term" # break # fi # done # if [ -z "$my_term" ]; then # echo "No supported terminal found." # exit 1 # fi # # # Start the terminal with dropdown class # case "$my_term" in # "wezterm") # wezterm start --class dropdown -e tmux new-session -A -s dropdown -e bash > /dev/null 2>&1 & # ;; # "kitty") # kitty --class dropdown tmux new-session -A -s dropdown -e bash > /dev/null 2>&1 & # ;; # "alacritty") # alacritty --class dropdown -e tmux new-session -A -s dropdown -e bash > /dev/null 2>&1 & # ;; # esac #fi # ## Get the window ID of the dropdown terminal #id="$(xdo id -N dropdown)" # ## Toggle the visibility of the dropdown terminal #if [ -n "$id" ]; then # if xwininfo -id "$id" | grep "Map State: IsViewable" > /dev/null; then # # The dropdown window is visible, so hide it # dimensions="$(xwininfo -id "$id" | awk '/Width:|Height:/ { printf("%s=%s;", tolower($1), $2) }')" # xdo hide "$id" 2>/dev/null # else # # The dropdown window is hidden, so show it # xdo show "$id" # # Restore the dimensions of the window # xdotool windowsize "$id" "$(echo "$dimensions" | tr ';' ' ')" 2>/dev/null # fi #fi # Function to get window ID by window class name get_window_id_by_class() { local class="$1" if command -v ydotool > /dev/null; then ydotool search --classname "$class" elif command -v xdotool > /dev/null; then xdotool search --classname "$class" fi } # List of supported terminals with dropdown class supported_terminals=( "wezterm" "kitty" "alacritty" ) # Check if any of the supported terminals with dropdown class are running for term in "${supported_terminals[@]}"; do if pgrep -f "$term.*--class dropdown" > /dev/null; then my_term="$term" break fi done # If none of the supported terminals are running, start the first available one if [ -z "$my_term" ]; then for term in "${supported_terminals[@]}"; do if command -v "$term" > /dev/null 2>&1; then my_term="$term" break fi done if [ -z "$my_term" ]; then echo "No supported terminal found." exit 1 fi # Start the terminal with dropdown class case "$my_term" in "wezterm") wezterm --class dropdown -e tmux new-session -A -s dropdown -e bash > /dev/null 2>&1 & ;; "kitty") kitty --class dropdown tmux new-session -A -s dropdown -e bash > /dev/null 2>&1 & ;; "alacritty") alacritty --class dropdown -e tmux new-session -A -s dropdown -e bash > /dev/null 2>&1 & ;; esac fi # Get the window ID of the dropdown terminal using either ydotool or xdotool id=$(get_window_id_by_class "dropdown") # Toggle the visibility of the dropdown terminal if [ -n "$id" ]; then if command -v ydotool > /dev/null; then mapped=$(ydotool windowmap --query "$id" | awk '{print $2}') if [ "$mapped" = "true" ]; then # The dropdown window is visible, so hide it ydotool windowunmap "$id" else # The dropdown window is hidden, so show it ydotool windowmap "$id" fi elif command -v xdotool > /dev/null; then if xdotool getwindowfocus | grep -q "$id"; then # The dropdown window is visible, so hide it xdotool windowunmap "$id" else # The dropdown window is hidden, so show it xdotool windowmap "$id" fi fi fi