Other Expose-like behavior in window managers

Nasrudin

New Member

Reaction score: 1
Messages: 11

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.
 

Sevendogsbsd

Well-Known Member

Reaction score: 201
Messages: 407

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.
 

rufwoof

Active Member

Reaction score: 71
Messages: 222

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
 
OP
OP
N

Nasrudin

New Member

Reaction score: 1
Messages: 11

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.
 

Sevendogsbsd

Well-Known Member

Reaction score: 201
Messages: 407

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".
 
OP
OP
N

Nasrudin

New Member

Reaction score: 1
Messages: 11

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.
 

Lanakus

Active Member

Reaction score: 113
Messages: 175

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.
 

knightjp

Active Member

Reaction score: 27
Messages: 164

I'm currently using Openbox as window manager. What is the port that I need for this?
 

Lanakus

Active Member

Reaction score: 113
Messages: 175

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.
 

knightjp

Active Member

Reaction score: 27
Messages: 164

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.
 
OP
OP
N

Nasrudin

New Member

Reaction score: 1
Messages: 11

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?
 

garry

Member

Reaction score: 30
Messages: 44

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.
 

Lanakus

Active Member

Reaction score: 113
Messages: 175

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) &
 

garry

Member

Reaction score: 30
Messages: 44

...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.
 

Lanakus

Active Member

Reaction score: 113
Messages: 175

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.
 
Top