i3expo
Overwiew
Expo is an simple and straightforward way to get a visual impression of all your i3 workspaces that many compositing window managers use. It's not a very powerful approach, but a very intuitive one and especially fits workflows that use lots of temporary windows or those in which the workspaces are mentally arranged in a grid.
i3expo emulates that function within the limitations of a non-compositing window manager. By listening to the IPC, it takes a screenshot whenever a window event occurs. Thanks to a fast C library, this produces negligible overhead in normal operation and allows the script to remember what state you left a workspace in.
The script is run as a background process and reacts to signals in order to open its UI in which you get an overview of the known state of your workspaces and can select another with the mouse or keyboard.
Example output:
Installation
pipx install i3expo
Usage
Launch i3expo from i3 config; alternatively you may prefer to run i3expo in a
terminal in order to catch any errors in this pre-alpha stage.
Default configuration is written into $XDG_CONFIG_HOME/i3expo/config. Color values
can be specified by using their PyGame names or in #fff or #ffffff hex.
Send SIGUSR1 to i3expo to toggle the Expo UI, for example by adding a bindsym
for killall -s SIGUSR1 i3expo to your i3 config. Send SIGHUP to have the
application reload its configuration.
Navigate the UI with the mouse or with they keyboard using hjkl, the arrow keys,
Return and Escape.
Recommended i3 config:
exec_always --no-startup-id i3expo
for_window [class="^i3expo$"] fullscreen enable
bindsym $mod1+e exec --no-startup-id killall -s SIGUSR1 i3expo
Note the script depends on pre-compiled i3expo/prtscn.so for screen-grabbing. If
it doesn't work you may need to compile prtscn.c yourself following the instruction
in the file header. In that case add screenshot_lib_path config item, pointing
to the compiled prtscn executable.
Limitations
Since it works by taking screenshots, the application cannot know workspaces it hasn't seen yet. Furthermore, the updates are less continuous than you might be used to if you're coming from a compositing WM where they can happen live and in the background.
Caution
This is pre-alpha software and some bugs are still around. It works for my own, single monitor and a common workflow. There is not much input validation and no protection against you screwing up the layout or worse.
Bugs
Stalled windows whose content i3 doesn't know cause interface bugs and could probably be handled better, but this needs more testing.
Daemon's cpu usage raises considerably upon first time UI gets rendered. Believe this has something to do with pygame not de-initing itself properly. Confirm this is still the case
Todo
- It's theoretically feasible to take the window information from i3's tree and allow for dragging of windows from one workspace to another or even from container to container. However, this would be massively complex (especially on the UI side) and it's not clear if it would be worth the effort.
multimonitor support- pause screenshotting while screen is locked, eg via i3lock
Credit
- original code from https://gitlab.com/d.reis/i3expo
- for a time this fork was developed under https://gitlab.com/layr89/i3expo
- Stackoverflow answer for the screenshot library
Metadata
Release files for i3expo 0.0.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| i3expo-0.0.7.tar.gz | 21.9 kB | Without provenance | Details for i3expo-0.0.7.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| i3expo-0.0.7-py3-none-any.whl | Python 3 | none | any | Details for i3expo-0.0.7-py3-none-any.whl |
Total release size: 40.0 kB
Release files / i3expo-0.0.7.tar.gz
| Download URL | i3expo-0.0.7.tar.gz |
|---|---|
| Size | 21.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
157d8ad428dcc0103c2e6e8722257c6046fdbbde94445926aeb38de2fe0e058c
|
|
BLAKE2b-256 checksum How to use checksums |
446064b37b351c4636fdd79a26089716033b6f710b61a2885097c2f2cdc5e03d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / i3expo-0.0.7-py3-none-any.whl
| Download URL | i3expo-0.0.7-py3-none-any.whl |
|---|---|
| Size | 18.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2a049e280374c1fe550b1a69ed6b31369a5c48271b51cd7fb3baabebbeef47cb
|
|
BLAKE2b-256 checksum How to use checksums |
68f7a163dc1f19ba0b104982257fa9b5d5f72fc13c7b5d3dc9d5f7b68e69bc05
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Security for i3expo 0.0.7
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.