{"id":13683085,"url":"https://github.com/morrolinux/i3expo-ng","last_synced_at":"2025-04-30T12:33:20.190Z","repository":{"id":46567676,"uuid":"326761131","full_name":"morrolinux/i3expo-ng","owner":"morrolinux","description":"Exposè for i3 WM. Fork of https://gitlab.com/d.reis/i3expo to fix crashes and improve features/usability","archived":false,"fork":false,"pushed_at":"2024-04-20T00:15:57.000Z","size":1036,"stargazers_count":157,"open_issues_count":7,"forks_count":14,"subscribers_count":8,"default_branch":"main","last_synced_at":"2024-08-02T13:34:52.413Z","etag":null,"topics":["expose","i3","i3wm","linux","mission-control","overview","workspaces"],"latest_commit_sha":null,"homepage":"https://morrolinux.it","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/morrolinux.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-01-04T17:39:01.000Z","updated_at":"2024-06-27T10:24:33.000Z","dependencies_parsed_at":"2024-08-02T13:23:21.368Z","dependency_job_id":"0d19da22-88e5-45c5-8501-fbc5a9c12d53","html_url":"https://github.com/morrolinux/i3expo-ng","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morrolinux%2Fi3expo-ng","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morrolinux%2Fi3expo-ng/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morrolinux%2Fi3expo-ng/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morrolinux%2Fi3expo-ng/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/morrolinux","download_url":"https://codeload.github.com/morrolinux/i3expo-ng/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224211935,"owners_count":17274346,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["expose","i3","i3wm","linux","mission-control","overview","workspaces"],"created_at":"2024-08-02T13:01:59.881Z","updated_at":"2024-11-12T03:30:19.816Z","avatar_url":"https://github.com/morrolinux.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# Overview\n\nExpo is a simple and straightforward way to get a visual impression of all your\ncurrent virtual desktops that many compositing window managers use.  It's not a\nvery powerful approach, but a very intuitive one and especially fits workflows\nthat use lots of temporary windows or those in which the workspaces are mentally\narranged in a grid.\n\ni3expo emulates that function within the limitations of a non-compositing window\nmanager. By listening to the IPC, it takes a screenshot whenever a window event\noccurs. Thanks to an extremely fast C library, this produces negligible\noverhead in normal operation and allows the script to remember what state you\nleft a workspace in.\n\nThe script is run as a background process and reacts to signals in order to open\nits UI in which you get an overview of the known state of your workspaces and\ncan select another with the mouse or keyboard.\n\n# This fork\n\nThis fork adds:\n- Dynamic workspace grid (changes size depending on how many workspaces you have)\n- Multi-monitor support\n- Vertical monitor support\n- Compact view for better use of screen real estate \n- Drag focused window to a new or different workspace \n- Create a new workspace on any monitor with one click\n- Bugfixes and performance improvements (via cache)\n- Visual/Aesthetic perks \n- Zero configuration service with reasonable default settings\n\n\nExample output:\n\n![Sample](img/ui.png)\n\n# Dependencies\n\n- Python 3\n- PyGame\n- i3ipc\n- pillow\n- xdg\n- pyxdg\n# Usage\n\n## Compile and install\n\nCompile with `make` and install with `make install`.\n\n### Manual compilation\n\nCompile the package with `make` or manually as follows:\n\n```\npython3 setup.py sdist\n```\n\nInstall with:\n```\npip install .\n```\n\nCopy the default config to your `.config` folder like so:\n```\nmkdir -p ~/.config/i3expo\ncp defaultconfig ~/.config/i3expo/config\n```\n\n### Install in Ubuntu\n\n```\napt-get install python3-pip python-setuptools libx11-dev make gcc x11-xserver-utils\nmake install\n```\n\n### Install in Arch Linux\n\n```\npacman -S libx11 python-pip make gcc xorg-xrandr\nmake install\n```\n### Install in Slackware Linux with sbopkg\n\n```\nsqg -p i3expo-ng\nsbopkg -i i3expo-ng\n```\n\n### Manual compile python extension\n\nYou can compile the `prtscn.c` manually with:\n\n```gcc -shared -O3 -Wall -fPIC -Wl,-soname,prtscn `pkg-config --cflags --libs python3` -o prtscn.so prtscn.c -lX11```\n\n( not needed if you use `python setup.py` or `make` )\n\n## Configuration\n\nColors can be specified by using their PyGame names or in #fff or #ffffff hex.\n\nDisplay output names can be unpleasant to read but you can alias them in the config file if you wish.\nHere's an example:\n\n```\n[OUTPUT_ALIASES]\n\nDVI-D-0 = Center\nHDMI-A-0 = Right\nDisplayPort-0 = Left\n\n```\n\n### Update the configuration\n\nWhen installing with `make install`, an existing configuration file would be maintained.\n\nIf the program crashes due to missing fields in the config file (e.g. after an update), you can force the copy of the default config with `make install FORCE=1`.\nThe old one will be maintained as `config.old`.\n\n## Startup\n\nAdd this to your `i3` config:\n`exec_always --no-startup-id ~/.local/bin/i3expod -f -w /home/user/Images/wallpapers/14.jpg`\n\n`-f` is for fullscreen (causes pygame to crash on a black screen on some distros)\n\n`-w` is for wallpaper. Should match your i3 wallpaper\n\n**All parameters are optional.**\n\nSend `SIGUSR1` to `i3expod.py` to show the Expo UI, for example by adding \n`bindsym $mod+Tab exec --no-startup-id \"killall -s SIGUSR1 i3expod\"` to your i3 `config`. Send `SIGHUP`\nto have the application reload its configuration.\n\n\nNavigate the UI with the mouse or with they keyboard using `hjkl`, the arrow\nkeys, Return and Escape.\n\n# Known issues\n\nOn some distros (or hardware? has to be investigated more) fullscreen mode will crash pygame on a black screen.\nSimple workaround is to remove `-f` flag and use the program windowed\n\n# Limitations\n\nSince it works by taking screenshots, the application cannot know workspaces it\nhasn't seen yet. Furthermore, the updates are less continuous than you might be\nused to if you're coming from a compositing WM where they can happen live and in\nthe background.\n\nWhen you drag the active window to a new or another workspace, \nthe screenshot of the current workspace won't be updated until the workspace isn't \nvisited back again, and will continue to show the window you moved. \nThere's no clean way to handle this as it would require taking a screenshot of the workspace\nafter you changed it and before jumping to the new/other workspace you dragged your window to.\n\n~~Empty workspaces don't technically exist to i3 and are thus inaccessible in the\ndefault config because it's not possible to handle named inexistant workspaces.\nIf you still want to access them, you will have to set\n`switch_to_empty_workspaces` to `True` and define your names under `Workspaces`\nlike e. g. `workspace_1 = 1:Firefox`.~~\n\n# Bugs\n\nStalled windows whose content i3 doesn't know cause interface bugs and could\nprobably be handled better, but this needs more testing.\n\n# Todo\n\n~~It's theoretically feasible to take the window information from i3's tree and\nallow for dragging of windows from one workspace to another or even from\ncontainer to container. However, this would be massively complex (especially on\nthe UI side) and it's not clear if it would be worth the effort.~~  **\u003c-- Kind of did it. It was worth it :)**\n\n~~And getting it into a publishable state, obviously.~~\n\n# Credit\n\nStackoverflow user JHolta for the screenshot library to be found in this thread:\nhttps://stackoverflow.com/questions/69645/take-a-screenshot-via-a-python-script-linux\n\nGitLab/Reddit user d.reis for the idea and initial implementation which got me started :)\nhttps://www.reddit.com/r/i3wm/comments/8at5dv/i_wrote_an_expolike_script_for_i3/\n\nhttps://gitlab.com/d.reis/i3expo\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmorrolinux%2Fi3expo-ng","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmorrolinux%2Fi3expo-ng","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmorrolinux%2Fi3expo-ng/lists"}