forked from twmru/scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdropdown_terminal.sh
executable file
·87 lines (74 loc) · 2.34 KB
/
dropdown_terminal.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/bin/bash
# Controls a dropdown terminal for use in i3wm
DISPLAY_WIDTH=1366
DISPLAY_HEIGHT=768 # May be usefull...
TERMINAL_WIDTH=600
TERMINAL_HEIGHT=200
TERMINAL_X=$(( (DISPLAY_WIDTH - TERMINAL_WIDTH)/2 ))
TERMINAL_Y=550
TERMINAL=alacritty # Change this to whatever terminal emulator you want
# Temporary file to record the terminal state
TERMINAL_STATE=/tmp/dropdown_terminal_state
# Adjust the sleep time and step size as necessary to make the animation smooth
STEP_SIZE=10
STEP_DIRECTION_OP="up" # Swap these two to reverse direction.
STEP_DIRECTION_CL="down"
SLEEP_TIME=0.0002
usage() {
echo "Open/closes a dropdown terminal"
echo "Usage: ./dropdown_terminal <start|open|close|toggle>"
}
term_launch() {
$TERMINAL &
local term_pid=$!
# Wait for terminal to open
xdotool search --sync --pid $term_pid > /dev/null
i3-msg -q mark dropdown # Mark the terminal so we can identify it
i3-msg -q [con_mark=dropdown] move scratchpad
echo "closed" > $TERMINAL_STATE
}
term_open() {
if [ "$(cat $TERMINAL_STATE)" == "closed" ]; then
echo "animating" > $TERMINAL_STATE
i3-msg -q [con_mark=dropdown] scratchpad show
i3-msg -q resize set $TERMINAL_WIDTH $TERMINAL_HEIGHT
i3-msg -q move absolute position $TERMINAL_X $TERMINAL_Y
i3-msg -q move $STEP_DIRECTION_CL $(( TERMINAL_HEIGHT - 1 ))
for i in `seq 1 $STEP_SIZE $TERMINAL_HEIGHT`; do
i3-msg -q [con_mark=dropdown] move $STEP_DIRECTION_OP $STEP_SIZE
sleep $SLEEP_TIME
done
echo "open" > $TERMINAL_STATE
fi
}
term_close() {
if [ "$(cat $TERMINAL_STATE)" == "open" ]; then
echo "animating" > $TERMINAL_STATE
i3-msg -q [con_mark=dropdown] focus
for i in `seq 1 $STEP_SIZE $TERMINAL_HEIGHT`; do
i3-msg -q [con_mark=dropdown] move $STEP_DIRECTION_CL $STEP_SIZE
sleep $SLEEP_TIME
done
i3-msg -q [con_mark=dropdown] scratchpad show
echo "closed" > $TERMINAL_STATE
fi
}
term_toggle() {
case "$(cat $TERMINAL_STATE)" in
open) term_close;;
closed) term_open;;
*) ;;
esac
}
if [ $# != 1 ]; then
usage
exit 1
else
case $1 in
start) term_launch;;
open) term_open;;
close) term_close;;
toggle) term_toggle;;
*) usage; exit 1;;
esac
fi