#!/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 [ "$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 [ "$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 [ "$id" != "" ]; then # if command -v ydotool >/dev/null; then # if ydotool windowvisible "$id"; 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 # 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 # Check if wmctrl is available if command -v wmctrl > /dev/null 2>&1; then # Get the window ID of the dropdown terminal id="$(wmctrl -l | grep "dropdown" | awk '{print $1}')" # Toggle the visibility of the dropdown terminal if [ -n "$id" ]; then state="$(wmctrl -l -G -p -x | grep "$id" | awk '{print $4}')" if [ "$state" = "-1" ]; then # The dropdown window is hidden, so show it wmctrl -i -r "$id" -b remove,hidden else # The dropdown window is visible, so hide it wmctrl -i -r "$id" -b add,hidden fi fi else echo "Window manipulation requires wmctrl. Install it and try again." exit 1 fi