blob: 596d426be483be0b5a12e8cf9db9f53f4fbd9a96 (
plain)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
#!/bin/bash
# Lock file for preventing multiple instances
lockfile="/tmp/title-bar.lock"
# Check if the lock file exists and obtain the PID
if [ -e "$lockfile" ]; then
# If the lock file exists, check if the process is still running
lock_pid=$(cat "$lockfile")
if ps -p "$lock_pid" >/dev/null; then
echo "title-bar is already running. Exiting."
exit 1
else
# If the process is not running, remove the stale lock file
rm "$lockfile"
fi
fi
# Create a new lock file with the current PID
echo "$$" >"$lockfile"
# Debug log file
DEBUG_LOG="/tmp/title-bar_debug.log"
# Debug function
debug_echo() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >>"$DEBUG_LOG"
}
debug_echo "Script execution started."
# Background image path
bg_path="/tmp/bg_${bgw}.png"
# Function to create background images
create_background_image() {
echo -e "\e[48;2;255;165;0m" # Orange color
}
# Kill existing lemonbar instances and update script
pkill -f "lemonbar"
pkill -f "update-title"
# Get the focused window information
focused_info="$(bspc query -T --names -M)"
# Get the focused window ID
focused_id="$(bspc query -N -n focused)"
# Check if the window ID is empty
if [ "$focused_id" = "" ]; then
echo "No focused window found."
exit
fi
# Check if the focused window is in fullscreen mode
if bspc query -T -n "$focused_id" | grep -q '"state":"fullscreen"'; then
echo "Focused window is in fullscreen mode. Exiting."
rm -f "$lockfile" # Remove the lock file
exit
fi
# Get the WM_CLASS of the focused window
focused_class="$(xprop WM_CLASS -id "$focused_id" | awk -F '"' '{print $2}')"
debug_echo "Focused Class: $focused_class"
# Exclude certain window classes
case "$focused_class" in
"Nwg-menu" | "nwg-menu" | "Steam" | "Qmmp" | "Wrapper-1.0" | "xfce4-panel")
debug_echo "Excluded window class: $focused_class. Exiting script."
rm -f "$lockfile" # Remove the lock file
exit
;;
esac
# Get focused window geometry
read -r x y w h < <(xwininfo -id "$focused_id" |
awk '/Absolute upper-left X:/ { x=$4 }
/Absolute upper-left Y:/ { y=$4 }
/Width:/ { w=$2 }
/Height:/ { h=$2 }
END { print x, y, w, h }')
#geoBar=$(echo "$w 13 $x $y" | awk '{print $1+4"x13+"$3"+"$4-8}')
#geoBar=$(echo "$w 13 $x $y" | awk '{print $1-7"x10+"$3+5"+"$4-4}')
geoBar=$(echo "$w 13 $x $y" | awk '{print $1+7"x10+"$3"+"$4}')
# Create background image based on window width
create_background_image
# Launch lemonbar with consistent background color
echo -e "%{c}%{I:${bg_path}:}%{l}%{I#FF000000:$HOME/.scripts/assets/corner.png:}%{r}%{I:$HOME/.scripts/assets/corner.png:}" |
lemonbar -d -p -B "#000000" -U "#FFFFFF" -F "#FFFFFF" -f "Jetbrains Mono:bold:size=10" -g "$geoBar" &
#lemonbar -d -p -B "#FFFFFF" -U "#000000" -F "#000000" -f "Jetbrains Mono:bold:size=10" -g "$geoBar" &
#lemonbar -d -p -B "$HOME/.scripts/assets/trans.png" -U "#77dd77" -F "#4e585d" -f "Terminus:size=1" -g "$geoBar" &
sleep 0.05
# Launch update-title for the focused window
~/.scripts/update-title "$focused_id" | lemonbar -d -g "$geoBar" -f "Jetbrains Mono:bold:size=6" -f "Jetbrains Mono:bold:size=6" -p | bash &
# Wait for lemonbar to start
sleep 0.1
# Adjust stacking order for the focused window
barinfos="$(xwininfo -tree -root | grep "$focused_id")"
bgid="$(echo "$barinfos" | tail -n 1 | awk '{print $1}')"
xdo below -t "$focused_id" "$bgid"
xdo above -t "$bgid" "$(echo "$barinfos" | head -n 1 | awk '{print $1}')"
debug_echo "Script execution completed."
# Function to handle updates triggered by BSPWM events
handle_bspwm_events() {
while read -r line; do
event_type=$(echo "$line" | jq -r '.type')
case "$event_type" in
focus_changed)
focused_node=$(echo "$line" | jq -r '.node')
~/.scripts/update-title "$focused_node" | lemonbar -p -g "$geoBar" -f "Jetbrains Mono:size=6" -f "Jetbrains Mono:size=6" | bash &
;;
node_add | node_remove | node_flag | node_geometry)
# Handle other node-related events
;;
*)
# Handle other events as needed
;;
esac
done
}
# Subscribe to BSPWM events and pass them to the handler function
bspc subscribe | handle_bspwm_events &
# Remove the lock file when the script exits
trap 'rm -f "$lockfile"; pkill -f "title-bar"; exit 0' EXIT
|