{"id":13590641,"url":"https://github.com/prabirshrestha/dwm-win32","last_synced_at":"2025-04-05T02:12:20.194Z","repository":{"id":34236658,"uuid":"172430078","full_name":"prabirshrestha/dwm-win32","owner":"prabirshrestha","description":"dwm port of tiling manager to Window","archived":false,"fork":false,"pushed_at":"2024-03-09T07:28:17.000Z","size":7653,"stargazers_count":445,"open_issues_count":20,"forks_count":37,"subscribers_count":14,"default_branch":"master","last_synced_at":"2024-05-02T06:17:10.024Z","etag":null,"topics":["dwm","dwm-win32","tiling-managers","tiling-window-manager"],"latest_commit_sha":null,"homepage":"","language":"C","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/prabirshrestha.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2019-02-25T03:46:19.000Z","updated_at":"2024-08-01T16:35:47.432Z","dependencies_parsed_at":"2023-01-15T05:30:49.402Z","dependency_job_id":"72feb7d1-3611-43a6-aa92-e2cf81071609","html_url":"https://github.com/prabirshrestha/dwm-win32","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prabirshrestha%2Fdwm-win32","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prabirshrestha%2Fdwm-win32/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prabirshrestha%2Fdwm-win32/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prabirshrestha%2Fdwm-win32/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/prabirshrestha","download_url":"https://codeload.github.com/prabirshrestha/dwm-win32/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247276189,"owners_count":20912288,"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":["dwm","dwm-win32","tiling-managers","tiling-window-manager"],"created_at":"2024-08-01T16:00:49.078Z","updated_at":"2025-04-05T02:12:20.180Z","avatar_url":"https://github.com/prabirshrestha.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"dwm-win32 is a port of the well known X11 window manager dwm to Microsoft\nWindows.\n\nIt is recommended to run dwm-win32 as Administrator so it will catch all windows including those you ran as Administrator.\n\n![dwm-win32 screenshot](screenshot.png)\n\nDescription\n===========\n\ndwm is a dynamic window manager for Microsoft Windows. It manages windows\nin tiled, monocle and floating layouts. Either layout can be applied\ndynamically, optimising the environment for the application in use and\nthe task performed.\n\nIn tiled layouts windows are managed in a master and stacking area. The\nmaster area contains the window which currently needs most attention,\nwhereas the stacking area contains all other windows. In monocle layout\nall windows are maximised to the screen size. In floating layout windows\ncan be resized and moved freely. Dialog windows are always managed\nfloating, regardless of the layout applied.\n\nWindows are grouped by tags. Each window can be tagged with one or\nmultiple tags. Selecting certain tags displays all windows with these\ntags.\n\ndwm contains a small status bar which displays all available tags, the \nlayout and the title of the focused window. A floating window is indicated\nwith an empty square and a maximised floating window is indicated with a\nfilled square before the windows title. The selected tags are indicated\nwith a different color. The tags of the focused window are indicated with\na filled square in the top left corner.  The tags which are applied to\none or more windows are indicated with an empty square in the top left\ncorner.\n\ndwm draws a small border around windows to indicate the focus state.\n\nUsage\n=====\n\n ## Keyboard\n\n  dwm uses a modifier key by default this is `ALT`.\n\n\n  `MOD + Control + b`  Toggles bar on and off.\n\n  `MOD + e` Toogles windows explorer and taskbar on and off.\n\n  `MOD + t` Sets tiled layout.\n\n  `MOD + f` Sets floating layout.\n\n  `MOD + m` Sets monocle layout.\n\n  `MOD + Control + space` Toggles between current and previous layout.\n\n  `MOD + j` Focus next window.\n\n  `MOD + k` Focus previous window.\n\n  `MOD + h` Decrease master area size.\n\n  `MOD + l` Increase master area size.\n\n  `MOD + Control + Return` Zooms/cycles focused window to/from master area (tiled layouts only).\n\n  `MOD + Shift + c` Close focused window.\n\n  `MOD + Shift + a` Force rearrange.\n\n  `MOD + Shift + Space` Toggle focused window between tiled and floating state.\n\n  `MOD + n` Toggles border of currently focused window.\n\n  `Mod + i` Display classname of currently focused window, useful for writing\n     tagging rules.\n\n  `MOD + Tab` Toggles to the previously selected tags.\n\n  `MOD + Shift + [1..n]` Apply nth tag to focused window.\n\n  `MOD + Shift + 0` Apply all tags to focused window.\n\n  `MOD + Control + Shift + [1..n]` Add/remove nth tag to/from focused window.\n\n  `MOD + Shift + j` Move stack +1\n\n  `MOD + Shift + k` Move stack -1\n\n  `MOD + [1..n]`  View all windows with nth tag.\n\n  `MOD + 0` View all windows with any tag.\n\n  `MOD + Control + [1..n]` Add/remove all windows with nth tag to/from the view.\n\n  `MOD + Control + q`  Quit dwm.\n\n  `MOD + Control + l`  Log all window state.\n\n\n ## Mouse\n\n  `Left Button` click on a tag label to display all windows with that tag, click\n      on the layout label toggles between tiled and floating layout.\n\n  `Right Button` click on a tag label adds/removes all windows with that tag to/from\n      the view.\n\n  `Alt + Left Button` click on a tag label applies that tag to the focused window.\n\n  `Alt + Right Button` click on a tag label adds/removes that tag to/from the focused window.\n\n\nHow it works\n============\n\nA ShellHook is registered which is notified upon window creation and\ndestruction, however it is important to know that this only works for\nunowned top level windows. This means we will not get notified when child\nwindows are created/destroyed. Therefore we scan the currently active top\nlevel window upon activation to collect all associated child windows. \nThis information is for example used to tag all windows and not just \nthe toplevel one when tag changes occur.\n\nThis is all kind of messy and we might miss some child windows in certain\nsituations. A better approach would probably be to introduce a CBTProc \nfunction and register it with SetWindowsHookEx(WH_CBT, ...) with this we\nwould get notified by all and every windows including toolbars etc. \nwhich we would have to filter out.\n\nUnfortunately the SetWindowsHookEx thingy seems to require a separate\ndll because it will be loaded into each process address space.\n\nCOMPILING\n=========\n\nTo compile, dwm-win32 requires:\n- [Visual Studio C/C++ Build Tools and Windows SDK](https://visualstudio.microsoft.com/downloads/) (You can use the Visual Studio Installer to download only headless c/c++ build tools and windows sdk without the full IDE)\n- [zig](https://ziglang.org/)\n\nSource code for dwm-win32 is written in C and uses `zig cc` to compile C to native code.\nYou can install the Zig compiler by using [scoop](https://scoop.sh) as `scoop install zig`.\n\n```cmd\nbuild.cmd\n```\n\n* Remove `-DNDEBUG` and `-O2 -s` from `build.cmd` to build debug version.\n* Update version in build.cmd before release\n\nTODO\n====\n\n - support luajit\n - show/hide child windows upon tag switch, in theory this should already\n   work but in practice we need to tweak ismanageable() so that it\n   recognises child windows but doesn't generate false positives.\n - fullscreen windows, mstsc for example doesn't resize properly when\n   maximized.\n - Screensaver?\n - system dialogs from desktop window\n - urgent flag?\n - window border isn't yet perfect\n - status text via stdin or a separate tool\n - crash handler which makes all windows visible restores borders etc\n - use BeginDeferWindowPos, DeferWindowPos and EndDeferWindowPos\n - optimize for speed\n - code cleanups all over the place\n - multi head support?\n\n [ - introduce a CBTProc function and register it with\n     SetWindowsHookEx(WH_CBT, ...) to handle window events instead of the\n     current mechanism in WndProc which is based on the shellhookid and \n     WH_SHELL because this only works for toplevel windows. See also the\n     \"How it works\" section. ]\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprabirshrestha%2Fdwm-win32","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprabirshrestha%2Fdwm-win32","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprabirshrestha%2Fdwm-win32/lists"}