Created
October 2, 2024 04:19
-
-
Save uriellberdeja/e7e18f5da301e3f711110fe66908de6e to your computer and use it in GitHub Desktop.
Set any terminal as quake, set kitty as quake, set alacritty as quake, set xterm as quake. Set pulldown terminal.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment