All Projects → prabirshrestha → dwm-win32

prabirshrestha / dwm-win32

Licence: MIT license
dwm port of tiling manager to Window

Programming Languages

c
50402 projects - #5 most used programming language
CMake
9771 projects
lua
6591 projects

Projects that are alternatives of or similar to dwm-win32

axyl-iso
Axyl is a Linux distro centered on tiling window managers. Choose from i3, bspwm, dwm and more.
Stars: ✭ 348 (+87.1%)
Mutual labels:  dwm, tiling-window-manager
uniblocks
Status bar agnostic module generator
Stars: ✭ 40 (-78.49%)
Mutual labels:  dwm
dotfiles
My dotfiles - Emacs centric OSX Big Sur
Stars: ✭ 29 (-84.41%)
Mutual labels:  tiling-window-manager
dotfiles
Salonia Matteo's dotfiles (GNU/Linux configuration)
Stars: ✭ 19 (-89.78%)
Mutual labels:  dwm
i3monkit
The toolkit to create customized I3 status bar
Stars: ✭ 31 (-83.33%)
Mutual labels:  tiling-window-manager
shod
mouse-based window manager that can tile windows inside floating containers
Stars: ✭ 126 (-32.26%)
Mutual labels:  tiling-window-manager
awesome
my Awesome(window management) configuration for Arch/Ubuntu
Stars: ✭ 34 (-81.72%)
Mutual labels:  tiling-window-manager
Win32Acrylic
Acrylic demo applications based on different technology stack
Stars: ✭ 35 (-81.18%)
Mutual labels:  dwm
shod-old
hybrid (floating and tiling) tabbed window manager
Stars: ✭ 56 (-69.89%)
Mutual labels:  tiling-window-manager
cfg
my dotfiles
Stars: ✭ 26 (-86.02%)
Mutual labels:  dwm
dwm-vanitygaps
My dwm vanitygaps build (incl. individual patches)
Stars: ✭ 26 (-86.02%)
Mutual labels:  dwm
sdorfehs
A tiling window manager
Stars: ✭ 219 (+17.74%)
Mutual labels:  tiling-window-manager
dotfiles
Current dotfiles and scripts
Stars: ✭ 35 (-81.18%)
Mutual labels:  dwm
i3altlayout
i3wm efficient screen real estate
Stars: ✭ 40 (-78.49%)
Mutual labels:  tiling-window-manager
Goblocks
Status bar for dwm
Stars: ✭ 50 (-73.12%)
Mutual labels:  dwm
dotfiles
.foos for foos & more
Stars: ✭ 21 (-88.71%)
Mutual labels:  dwm
torjail
🔒 download, verify & run torbrowser in a sandbox
Stars: ✭ 14 (-92.47%)
Mutual labels:  dwm
gtile
No description or website provided.
Stars: ✭ 12 (-93.55%)
Mutual labels:  tiling-window-manager
patches
Collection of patches for dwm, st and dmenu
Stars: ✭ 202 (+8.6%)
Mutual labels:  dwm
dmenu-hotkeys
View for your hotkeys in rofi/dmenu style
Stars: ✭ 51 (-72.58%)
Mutual labels:  tiling-window-manager

dwm-win32 is a port of the well known X11 window manager dwm to Microsoft Windows.

It is recommended to run dwm-win32 as Administrator so it will catch all windows including those you ran as Administrator.

dwm-win32 screenshot

Description

dwm is a dynamic window manager for Microsoft Windows. It manages windows in tiled, monocle and floating layouts. Either layout can be applied dynamically, optimising the environment for the application in use and the task performed.

In tiled layouts windows are managed in a master and stacking area. The master area contains the window which currently needs most attention, whereas the stacking area contains all other windows. In monocle layout all windows are maximised to the screen size. In floating layout windows can be resized and moved freely. Dialog windows are always managed floating, regardless of the layout applied.

Windows are grouped by tags. Each window can be tagged with one or multiple tags. Selecting certain tags displays all windows with these tags.

dwm contains a small status bar which displays all available tags, the layout and the title of the focused window. A floating window is indicated with an empty square and a maximised floating window is indicated with a filled square before the windows title. The selected tags are indicated with a different color. The tags of the focused window are indicated with a filled square in the top left corner. The tags which are applied to one or more windows are indicated with an empty square in the top left corner.

dwm draws a small border around windows to indicate the focus state.

Usage

Keyboard

dwm uses a modifier key by default this is ALT.

MOD + Control + b Toggles bar on and off.

MOD + e Toogles windows explorer and taskbar on and off.

MOD + t Sets tiled layout.

MOD + f Sets floating layout.

MOD + m Sets monocle layout.

MOD + Control + space Toggles between current and previous layout.

MOD + j Focus next window.

MOD + k Focus previous window.

MOD + h Decrease master area size.

MOD + l Increase master area size.

MOD + Control + Return Zooms/cycles focused window to/from master area (tiled layouts only).

MOD + Shift + c Close focused window.

MOD + Shift + Space Toggle focused window between tiled and floating state.

MOD + n Toggles border of currently focused window.

Mod + i Display classname of currently focused window, useful for writing tagging rules.

MOD + Tab Toggles to the previously selected tags.

MOD + Shift + [1..n] Apply nth tag to focused window.

MOD + Shift + 0 Apply all tags to focused window.

MOD + Control + Shift + [1..n] Add/remove nth tag to/from focused window.

MOD + Shift + j Move stack +1

MOD + Shift + k Move stack -1

MOD + [1..n] View all windows with nth tag.

MOD + 0 View all windows with any tag.

MOD + Control + [1..n] Add/remove all windows with nth tag to/from the view.

MOD + Control + q Quit dwm.

MOD + Control + l Log all window state.

Mouse

Left Button click on a tag label to display all windows with that tag, click on the layout label toggles between tiled and floating layout.

Right Button click on a tag label adds/removes all windows with that tag to/from the view.

Alt + Left Button click on a tag label applies that tag to the focused window.

Alt + Right Button click on a tag label adds/removes that tag to/from the focused window.

How it works

A ShellHook is registered which is notified upon window creation and destruction, however it is important to know that this only works for unowned top level windows. This means we will not get notified when child windows are created/destroyed. Therefore we scan the currently active top level window upon activation to collect all associated child windows. This information is for example used to tag all windows and not just the toplevel one when tag changes occur.

This is all kind of messy and we might miss some child windows in certain situations. A better approach would probably be to introduce a CBTProc function and register it with SetWindowsHookEx(WH_CBT, ...) with this we would get notified by all and every windows including toolbars etc. which we would have to filter out.

Unfortunately the SetWindowsHookEx thingy seems to require a separate dll because it will be loaded into each process address space.

COMPILING

dwm-win32 requires cmake, make, clang and Visual Studio 2019. You can install the tools by using scoop as scoop install cmake make llvm.

To compile debug version of dwm-win32 use the following command:

configure.cmd
build.cmd

Other examples:

cmake -G "Visual Studio 16 2019" -A Win32 -S . -B "build\32bit" -DCMAKE_BUILD_TYPE=Release
cmake -G "Visual Studio 16 2019" -A x64 -S . -B "build\64bit" -DCMAKE_BUILD_TYPE=Release
cmake --build build\32bit --config Release
cmake --build build\64bit --config Release

TODO

  • support clang compiler
  • support luajit
  • show/hide child windows upon tag switch, in theory this should already work but in practice we need to tweak ismanageable() so that it recognises child windows but doesn't generate false positives.
  • fullscreen windows, mstsc for example doesn't resize properly when maximized.
  • Screensaver?
  • system dialogs from desktop window
  • urgent flag?
  • window border isn't yet perfect
  • status text via stdin or a separate tool
  • crash handler which makes all windows visible restores borders etc
  • use BeginDeferWindowPos, DeferWindowPos and EndDeferWindowPos
  • optimize for speed
  • code cleanups all over the place
  • multi head support?

[ - introduce a CBTProc function and register it with SetWindowsHookEx(WH_CBT, ...) to handle window events instead of the current mechanism in WndProc which is based on the shellhookid and WH_SHELL because this only works for toplevel windows. See also the "How it works" section. ]

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].