Fixing where windows come up on RHEL 9
Ralf Mardorf
ralf.mardorf at alice-dsl.net
Mon Jan 22 23:31:09 CET 2024
Hi,
years ago I wrote a script to ensure that windows that open with the
title bar (or more) below a top panel, get moved below the panel.
When using X it's possible to automatically move windows wherever you
want by using a combination of xdotool and wmctrl.
The script at the end of this email isn't well written and the
combination of xdotool and wmctrl has it's pitfalls as well, but it at
least works for me to move the extcalc and hdspmixer windows. I also
wrote several other scripts using a combination of xdotool and wmctrl.
It's usually easy to get what you want, even with quickly typed, clumsy
scripts that you actually wanted to rewrite, but since they do what they
are supposed to do, you never did it.
You are unlikely using fbpanel too, so you likely need to override the
desktop file of each application or you need to find another workaround.
FWIW the below script does reposition the script, but you need to edit
the values to position a window in the middle of the screen and one of
the already mentioned pitfalls is, that there might be a drift, the
windows might not open exactly where they should open.
Regards,
Ralf
• rocketmouse at archlinux ~
$ grep window2unhide\ \" ~/.config/fbpanel/lcd-realignment
action = window2unhide "extcalc"
action = window2unhide "hdspmixer"
• rocketmouse at archlinux ~
$ cat /usr/local/bin/window2unhide
#!/bin/dash
# window2unhide 2017-08-25 Ralf Mardorf
# To configure window2unhide you could use /etc/profile.d/window2unhide.sh
#
# values of the wanted x and y position of the window
# export WINDOW2UNHIDE_X_POS=hold
# export WINDOW2UNHIDE_Y_POS=141
#
# delay required to ensure that a launched application's window is active
# export WINDOW2UNHIDE_SLEEP=1
#
# values to eliminate x and y drift of the window
# this fix is needed for all windows
# export WINDOW2UNHIDE_X_FIX=2
# export WINDOW2UNHIDE_Y_FIX=54
#
# offset required to eliminate x and y drift of the window if x and/or y do/does not change
# this offset is needed for windows that open under the top panel
# but its unfavorable for windows that don't open under the top panel
# export WINDOW2UNHIDE_X_OFF=1
# export WINDOW2UNHIDE_Y_OFF=25
unhide_window ()
{
# values of the wanted x and y position of the window
case $WINDOW2UNHIDE_X_POS in
""|hold)
WINDOW2UNHIDE_X_POS=$X
;;
esac
case $WINDOW2UNHIDE_Y_POS in
"")
WINDOW2UNHIDE_Y_POS=141
;;
hold)
WINDOW2UNHIDE_Y_POS=$Y
;;
esac
# value to eliminate x drift of the window
case $WINDOW2UNHIDE_X_FIX in
"")
WINDOW2UNHIDE_X_FIX=2
;;
esac
# calculate value for x position of the window...
case $WINDOW2UNHIDE_X_POS in
$X) # ...if the x position doesn't change subtract the value to eliminate x drift and add an offset
case $WINDOW2UNHIDE_X_OFF in
"")
WINDOW2UNHIDE_X_OFF=1
;;
esac
X_POS=$(expr $WINDOW2UNHIDE_X_POS - $WINDOW2UNHIDE_X_FIX + $WINDOW2UNHIDE_X_OFF)
;;
*) # ...if the x position does change subtract the value to eliminate x drift
X_POS=$(expr $WINDOW2UNHIDE_X_POS - $WINDOW2UNHIDE_X_FIX)
;;
esac
# value to eliminate y drift of the window
case $WINDOW2UNHIDE_Y_FIX in
"")
WINDOW2UNHIDE_Y_FIX=54
;;
esac
# calculate value for y position of the window...
case $WINDOW2UNHIDE_Y_POS in
$Y) # ...if the y position doesn't change subtract the value to eliminate y drift and add an offset
case $WINDOW2UNHIDE_Y_OFF in
"")
WINDOW2UNHIDE_Y_OFF=25
;;
esac
Y_POS=$(expr $WINDOW2UNHIDE_Y_POS - $WINDOW2UNHIDE_Y_FIX + $WINDOW2UNHIDE_Y_OFF)
;;
*) # ...if the x position does change subtract the value to eliminate x drift
Y_POS=$(expr $WINDOW2UNHIDE_Y_POS - $WINDOW2UNHIDE_Y_FIX)
;;
esac
# move the window to new position
wmctrl -i -r $WINDOW -b remove,maximized_vert,maximized_horz
wmctrl -i -r $WINDOW -e "0,$X_POS,$Y_POS,$WIDTH,$HEIGHT"
}
case $1 in
"") # unhide active window
eval $(xdotool getwindowgeometry --shell $(xdotool getactivewindow))
unhide_window
;;
*) # launch an application and unhide its window
case $WINDOW2UNHIDE_SLEEP in
"")
WINDOW2UNHIDE_SLEEP=1
;;
esac
$@ &
sleep $WINDOW2UNHIDE_SLEEP # ensure that the window of the launched application...
eval $(xdotool getwindowgeometry --shell $(xdotool getactivewindow))
wmctrl -l | grep $(printf '%x\n' $WINDOW) | grep -qi $1 # ...is the active window
case $? in
0)
unhide_window
;;
esac
;;
esac
exit
More information about the Xfce
mailing list