Other Expose-like behavior in window managers

It seems the options for window managers are numerous.

Given that, just why is expose-like behavior in these window managers so uncommon? Is there anyone who has yet enumerated those window managers that can do this behavior properly? (When I say 'properly' I mean no more than a second before the button press tiles all the open windows?) I know of: compiz (extinct), KWin (crashes randomly). Any one care to list any others?

Thanks in advance.
 
Good question. I don't know why. If I had to guess, I would say because most window managers have virtual desktops, or some similar functionality, and perhaps the devs thought it wasn't needed. I have only ever seen expose like functionality on a desktop environment. I have also never used it because I alt-tab switch and virtual desktop, tag or group switch, all with the keyboard. For my use case, I don't need to see all of my windows because I know exactly where they are already, having put them on a specific virtual desktop, tag or group. That's just me though, I am sure some folks can use something like expose.
 
skippy-xd with brightside or just a simple script to launch skippy-xd when you move the mouse into a corner works well IMO.
Code:
#!/bin/sh
#
# Script to monitor mouse position and run skippy-xd (assumed to already be installed)
# whenever the mouse is moved into the bottom left corner (like a hot corner)
#
# Requires xdotool
#
# if script is called /home/user/corner then run it in your .xinitrc as
# /home/user/corner >/dev/null 2>&1 &

# Retreive screen height
SCREEN_HEIGHT=`xwininfo -root|sed '/Height/!d;s/.* //'`
# subtract 1 as 0..899 for 900 xwininfo height screen
SCREEN_HEIGHT=`expr ${SCREEN_HEIGHT} - 1` 
BOTTOM_LEFT="0x${SCREEN_HEIGHT}"

while : ;do
   CURRENT_MOUSE_POSITION=`xdotool getmouselocation | sed 's/ sc.*//; s/.://g; s/ /x/'`
   if [ $CURRENT_MOUSE_POSITION = $BOTTOM_LEFT ]; then
    skippy-xd
   fi
   sleep 0.1
done
 
For my use case, I don't need to see all of my windows because I know exactly where they are already, having put them on a specific virtual desktop, tag or group.

I would like to know more about how to do this kind of thing. It would be nice to pop up a set of windows (e.g. editor, shell, browser) in the same place with the same content each time via some hot key or command. I've tried this in the (distant) past but I've never seen these ideas work well. How do you know exactly where your windows are?

Maybe cause they are WMs and not DEs? But yo should take a look at x11-wm/skippy-xd to get exposé like behaviour.

I'm not understanding the relevance of the distinction. I have only found expose-like behavior to work as the result of using a specific window manager. I use the desktop environment Xfce currently with the window manager KWin (sigh) and I get the expose behavior I want. What am I missing?

Looking at the DE side, there's been an open bug about this for some years and this bug even got turned into a bounty at some point. If there was a DE other than Gnome or KDE that actually has this feature, I'd love to know about it. Otherwise, this might help illustrate why I resist the idea of looking at a DE for this feature (and why I'm crazy enough to use KWin and Xfce).

I did look at something called "skippy" several years ago and it wasn't usable, reliable, or fast for my use case. Looking at the github for skippy-xd, I see the last commit was almost 3 years ago. Looking at freshports it seems it was abandoned for 6 years but very recently someone has resurrected this port. So ... maybe? :) I think I'd much prefer this functionality to be built into the window manager for performance sake, but since I'm not coding anything I'll use what is available.
 
I would like to know more about how to do this kind of thing. It would be nice to pop up a set of windows (e.g. editor, shell, browser) in the same place with the same content each time via some hot key or command. I've tried this in the (distant) past but I've never seen these ideas work well. How do you know exactly where your windows are?

It's not software related, I only open certain windows on certain virtual desktops/groups and so I know which virtual desktop/group has the windows I put there. There is never a use case where I have to look at all my windows to find one. For example: I know I put a browser and my email on group 1, file manager on group 2, password database, and music player on group 3 and a bunch of xterms on group 4 for admin purposes. I never change this layout so I know exactly where everything is.

Make sense?

I do also have a very large monitor so I can minimize the number of virtual desktops/groups I use. Also, my window manager tells me which windows are open by left clicking on the "desktop" or root window. Expose` might be handy for a laptop or something with limited screen real estate but for me, it serves no purpose other than "eye candy".
 
It's not software related, I only open certain windows on certain virtual desktops/groups and so I know which virtual desktop/group has the windows I put there. There is never a use case where I have to look at all my windows to find one.

There's the difference. I use virtual desktops to group windows for the same project together, since I swap between many different projects during a day. So each virtual desktop may have a browser window, an editor window, several terminal windows...etc. Additionally, sticky windows (those that are always there regardless of virtual desktop) are things I use over all projects (e.g. a mail reader).

Our use cases are sufficiently different that I suspect you cannot help me. :)

Just the same, thanks for the input.
 
I'm not understanding the relevance of the distinction. I have only found expose-like behavior to work as the result of using a specific window manager. I use the desktop environment Xfce currently with the window manager KWin (sigh) and I get the expose behavior I want. What am I missing?

My point was that most of the windowmanagers (for X) outside are lightweight and by default lack a lot of features you expect from a DE. Exceedly few came with a dock or a panel or even a filemanager that characterizes a DE.

But all applications of a DE needs memory and running something like Gnome can take up a large amount of system memory. It can still be a problem for some users and they might prefer using lightweight WMs and add those apps and features they really need.
So most WMs lack something Expose like, maybe KWin does (Im not really familar with KDE). Even the gnome-dashboard is part of the gnome-shell and not of Mutter. Don't know exactly how macOS and Aqua handle things. Xfwm lacks that feature. x11-wm/openbox has a window-switcher but thats probably not what you are looking for, its more like a task list and its appearance might be not attractive although its a matter of taste.
As far as I know skippy-xd is one of few applications that bring you Expose like behaviour to WMs. You could take a look at xfdashboard which tries to bring a gnome like dashboard to Xfce. But it is not in the ports so you could try installing from source.
 
Hi knightjp, I use x11-wm/skippy-xd for Expose like task/window switcher in Openbox.

6264


Here is my ~/.config/skippy-xd/skippy-xd.rc
Code:
[general]
distance = 50
useNetWMFullscreen = true
ignoreSkipTaskbar = true
updateFreq = 10.0
lazyTrans = false
pipePath = /tmp/skippy-xd-fifo
movePointerOnStart = true
movePointerOnSelect = true
movePointerOnRaise = true
switchDesktopOnActivate = true
useNameWindowPixmap = false
forceNameWindowPixmap = false
includeFrame = true
allowUpscale = false
showAllDesktops = true
showUnmapped = true
preferredIconSize = 48
clientDisplayModes = thumbnail icon filled none
iconFillSpec = orig mid mid #404040
fillSpec = orig mid mid #FFFFFF
background =

[xinerama]
showAll = true

[normal]
tint = black
tintOpacity = 0
opacity = 200

[highlight]
tint = #101020
tintOpacity = 64
opacity = 255

[tooltip]
show = true
followsMouse = true
offsetX = 20
offsetY = 20
align = left
border = #ffffff
background = #404040
opacity = 128
text = #ffffff
textShadow = black
font = roboto-9:weight=medium

[bindings]
Tab = focus
miwMouse1 = focus
miwMouse2 = close-ewmh
miwMouse3 = iconify

Then you can use keybindings for skippy-xd in your openbox's rc.xml.
 
Hi knightjp, I use x11-wm/skippy-xd for Expose like task/window switcher in Openbox.

View attachment 6264

Here is my ~/.config/skippy-xd/skippy-xd.rc
Code:
[general]
distance = 50
useNetWMFullscreen = true
ignoreSkipTaskbar = true
updateFreq = 10.0
lazyTrans = false
pipePath = /tmp/skippy-xd-fifo
movePointerOnStart = true
movePointerOnSelect = true
movePointerOnRaise = true
switchDesktopOnActivate = true
useNameWindowPixmap = false
forceNameWindowPixmap = false
includeFrame = true
allowUpscale = false
showAllDesktops = true
showUnmapped = true
preferredIconSize = 48
clientDisplayModes = thumbnail icon filled none
iconFillSpec = orig mid mid #404040
fillSpec = orig mid mid #FFFFFF
background =

[xinerama]
showAll = true

[normal]
tint = black
tintOpacity = 0
opacity = 200

[highlight]
tint = #101020
tintOpacity = 64
opacity = 255

[tooltip]
show = true
followsMouse = true
offsetX = 20
offsetY = 20
align = left
border = #ffffff
background = #404040
opacity = 128
text = #ffffff
textShadow = black
font = roboto-9:weight=medium

[bindings]
Tab = focus
miwMouse1 = focus
miwMouse2 = close-ewmh
miwMouse3 = iconify

Then you can use keybindings for skippy-xd in your openbox's rc.xml.
I'm not quite sure how to get skippy working. I'm quite new to this.. I just got Openbox working the way I want it to.
 
Would it be possible for you to provide the delay time from when you press the button to when the windows all tile and stop moving?
 
Would it be possible for you to provide the delay time from when you press the button to when the windows all tile and stop moving?
Wow! x11-wm/skippy-xd works well with fluxbox and helps improve my workflow -- indirect action controls like taskbars and pulldown menus (invented for the original Macintosh computer when the entire operating system and gui toolbox had to fit in 128K of ROM and cpu cycles were very precious) are not needed anymore. They were a necessity at the time but direct manipulation of "objects", such as directly seeing and manipulating windows with skippy, has been feasible for a long time now and I agree that the workflow with window managers is improved. Glad the OP asked his question!

Thanks to Lanakus for sharing a config file for skippy-xd -- I've tested with fluxbox and with cwm, but changed to
Code:
showAllDesktops = false
. Like other commenters I know what to expect on each workspace, but tend to get many windows open on each workspace and it's nice to have a fast way to see them all and directly select/minimize/close them. Windows on "other" desktops, "unmapped" windows, do not show any content but only their frames in the skippy overview in my tested window managers, so including all workspaces' windows in the overview may not be useful.

To answer the delay time question: with six maximized firefox windows, an xterm, and mpv playing a lecture on The Fall of the Roman Empire, and skippy tied to fluxbox shortcut Meta-w, the eight windows were completely tiled and drawn (seemingly) by the time I had released the "w" key (and the lecture still proceeding in its small window and firefox windows still updating). Estimate 300 or 400 ms. I could quickly navigate the windows by arrow keys with the mouse "instantly" pointing at the selected window and the full window title shown as a tooltip below the pointer.
 
I'm not quite sure how to get skippy working. I'm quite new to this.. I just got Openbox working the way I want it to.

Simply install x11-wm/skippy-xd and start it via skippy-xd with its default configuration.
If you want to change the default behaviour copy the config example file to your ~/.config folder and change it to your needs
Code:
cp /usr/local/etc/xdg/skippy-xd.rc.sample ~/.config/skippy-xd/skippy-xd.rc

If you want skippy-xd running at startup add a line like this to your ~/.config/openbox/autostart:
Code:
(sleep 5 && skippy-xd --config ~/.config/skippy-xd/skippy-xd.rc --start-daemon) &
 
...If you want skippy-xd running at startup add a line like this to your ~/.config/openbox/autostart:
Code:
(sleep 5 && skippy-xd --config ~/.config/skippy-xd/skippy-xd.rc --start-daemon) &
or for those of using x11/slim one could add a line to ~/.xinitrc
Code:
skippy-xd --start-daemon &
but I did not find it necessary to run skippy-xd in the daemonized mode. The smooth and fast response that I reported in my previous post was obtained by just installing the skippy-xd package, adding a line to ~/.fluxbox/keys
Code:
Mod4 w  :Exec  skippy-xd
and then hitting the Win-w key whenever I want to expose all windows.
 
but I did not find it necessary to run skippy-xd in the daemonized mode.
Sometimes the simple program start produces a brief flicker so I run it in the background and activate it with skippy-xd --toggle-window-picker which I could also bind to a key.

or for those of using x11/slim one could add a line to ~/.xinitrc
Cause knightjp is using x11-wm/openbox it makes sense to start programs via openbox's autostart cause then it doesn't matter which method or DM you use to start the X server.
 
I'm glad you all have found a solution. :) There's a deeper issue for me since I use x11/xfce4.

My goal is to use one of the extra buttons on the mouse to trigger the expose behavior. This is dead simple in Apple's Expose or if I replace xfwm4 with KWin (which is what I've done on other desktop boxes for now).

Apparently, xfce4 cannot bind mouse buttons to program execution. It can bind keyboard buttons, but not mouse buttons.

Attempts to remedy this with xbindkeys can't detect the mouse at all despite it's man pages asserting that it can. Trying to fix that issue with
xmodmap fails because xmodmap doesn't recognize mouse buttons greater than 5 (the extra mouse button is 8). Even if I get xbindkeys working, there's this chain ... mouse button 8 pressed -> xbindkeys -> skippy-xd. This proved to be unusably slow in the past.

This issue has gotten in the way enough that I'm even willing to switch DEs to something that is a) lightweight and b) has this feature.
 
Interesting, I am swapping buttons 2 and 8 on my Logitech laser mouse:

Code:
paul@whiteforest:~$ cat .Xmodmap
pointer = 1 8 3 4 5 6 7 2 9 10
 
The issue with xmodmap appears to be lack of keysyms for any buttons other than 5...I tried this:
Code:
xmodmap -e "keycode 0xffc8 = Pointer_Button8"
 
I can't remember what I did, I have used that .Xmodmap for so long. Oh yeah, I used xev, captured the mouse key # then swapped them in the sequence I showed in my earlier post. I was trying to map the center button to a side button for paste in the terminal. Works fine. Not sure it will do the same for you because it just changes the button mapping, not assigning it to an executable.
 
xlunch program launcher works well with skippy-xd.

I have skippy-xd launch when I mouse into the bottom left corner, or use WIN+space key combination. xlunch launch when I mouse into top left corner or alt+space

xlunch.png

I also use tilda terminal as I like its Quake like drop-down functionality ... Press F1 an it toggles show/hide (I have it set to full screen when visible). Multiple tabs added easily, cut and paste is simple, and mouse over a url and it underlines it, clicking that opens the link in your browser. I run a ncurses menu as my first tilda tab/window, with shortcut launchers across the top that when clicked open up a new tilda tab/window with that program running (htop ...etc.).

tilda.png

I also start gkrellm and have it set to show the date, time, cpu, cpu temperature and battery percentage remaining. Set to quite a large size, so when skippy-xd is running that's visible. And skippy-xd windows are all live, so you see the actual video being played or changes in gkrellm values.

skippy.png

That combination works well whether you're using predominately mouse or predominately keyboard. For file manager I use mc, that include a text editor, but I also use via and/or geany. I've set mc file associations to launch videos/music in Chromium. I'm doing much less in the way of documentation and spreadsheets nowadays, so I also use chromium to access/use googledocs. Sometimes however I'll go old-school style and just bash text into a text editor and format it afterwards and print to pdf for storage/sharing.
 
xlunch program launcher works well with skippy-xd.

I'm afraid I had to revert back to my frankenstein XFCE with KWin (plasma5's) as my window manager. Skippy-xd has a tendancy to crash and/or not die properly ... leaving me with either tons of skippy-xd processes or nothing. The way I work I absolutely need fast and reliable expose behavior. 😐

I'm certainly open to trying other "cleaner" solutions, but what I have right now works well so ... if it ain't broke...

[EDIT: In 2021 on or around ports quarterly Q12021, KWin started crashing constantly. There's a bug there but tracking it down to post the correct details on the correct githubs (only to be told WONTFIX) will likely take many hours. I have moved back to xfwm4 and xfdashboard.]
 
Last edited:
Just a new development for those who follow this entire thread. Check this commit in xfdashboard. Xfdashboard is now capable of only displaying non minimized-windows, which is one step closer to expose behavior. Note that this is very fresh and almost certainly not in the ports tree yet, but will likely land soon.
 
… no more than a second before the button press tiles all the open windows …

KWin …

… KWin (crashes randomly) …

I don't recall that in 2019.

… In 2021 on or around ports quarterly Q12021, KWin started crashing constantly. There's a bug there but tracking it down to post the correct details on the correct githubs (only to be told WONTFIX) will likely take many hours. …

Do you mean that you found a bug report but lost track of it?

KWin has never been so crash-prone for me as it has for you. Here: latest packages, FreeBSD 14.0-CURRENT.
 
Back
Top