You might try a gnome tweak: Overview All Windows
That gives you a list in the top bar of all windows in all workspaces. You can then select from that.
It needs a mouse to activate first though.
A further refinement would be a keyboard shortcut to use xdotool
to do the mouse click. It's not easy as that moves when the normal window max/min/fullscreen is showing to the right of it
Edit: additional
xdotool getmouselocation
Mine was:
x:1910 y:16 screen:0 window:0
xdotool mousemove 1910 16 && xdotool click 1
for multi monitors a refinement would be to focus the primary screen and execute it or find a way to get the top bar in both monitors and make the script get the coordinates of the currently focused screen.
my script which works ok for me when on primary monitor
#!/bin/bash
xdotool mousemove 1910 16
sleep 1
xdotool click 1
managed to get the primary screen focused.#bin/bash - need to inquire which is the primary screen as I change it around. alternatively do a different shortcut key for a different setup.
Get screen id from xrandr
.
xdotool mousemove 1910 16 --screen HMDI-A-0
sleep 1
xdotool click 1
and execute it with keyboard shortcut.
bash "/home/<yourplace>/<yourscriptname>.sh"
the issue I had with the showallwindows icon being not in the top right corner was the gnome tweak Unite, and I had show window buttons in top bar, which I have disabled.
Got it to select the primary display
xrandr | grep primary | cut -d " " -f1
so the hotkeyed script it now
#!/bin/bash
primaryscreen=$(xrandr | grep primary | cut -d " " -f1)
echo "$screen"
xdotool mousemove 1910 16 --screen $primaryscreen
sleep 1
xdotool click 1
next step is to get those screen top left coordinates automatically
got it now only took 2 hours finds the primary screen's resolution, gets the coordinate of max x less 10, and takes 10 as the y coordinate which equates with the top left corner of the primary screen which has the top bar, and is the location of the showallwindows tweak icon.
#!/bin/bash
primaryscreen=$(xrandr | grep primary | cut -d " " -f1)
coords=$(xrandr --current | sed -n 's/.* connected \([0-9]*\)x\([0-9]*\)+.*/\1x\2/p' )
xcoords=$(echo $coords | cut -d 'x' -f1)
ycoords=$(echo $coords | cut -d 'x' -f2)
xcoords=`expr $xcoords - 10`
# not used as only needs to be 10 ycoords=`expr $ycoords - 10`
xdotool mousemove --sync $xcoords 10 --screen $primaryscreen
sleep 1
xdotool click 1