Zaphod mode (dual head) with Xfce 4.16?

Ralf Mardorf ralf.mardorf at alice-dsl.net
Mon Mar 6 04:45:41 CET 2023


On Mon, 2023-03-06 at 02:49 +0000, Jeffery Small wrote:
> Speaking of senseless loss of functionality, the Firefox browser (to take
> but one example) continues to honor the --geometry window size parameters,
> but will not honor the screen positioning values.  This is just plain
> nutty and incredibly frustrating.  Every time I open a browser, I have to
> manually reposition it!

Hi,

I'm using  xdotool  and  wmctrl  to automatically move windows, that
hide the title bar under a top panel, as for example  hdspmixer  does.

[rocketmouse at archlinux ~]$ grep HDSP .config/fbpanel/lcd-realignment -B1 -A3
    item {
      name = HDSPMixer
      icon = hdspmixer
      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

Regards,
Ralf


More information about the Xfce mailing list