• Stars
    star
    439
  • Rank 98,844 (Top 2 %)
  • Language
    C
  • License
    MIT License
  • Created over 5 years ago
  • Updated 7 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

dwm port of tiling manager to Window

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 + a Force rearrange.

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 zig to compile. Source code for dwm-win32 is written in C and uses zig cc to compile C to native code. You can install the compiler by using scoop as scoop install zig.

build.cmd
  • Remove -DNDEBUG and -O2 -s from build.cmd to build debug version.
  • Update version in build.cmd before release

TODO

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

More Repositories

1

vim-lsp

async language server protocol plugin for vim and neovim
Vim Script
3,098
star
2

asyncomplete.vim

async completion in pure vim script for vim8 and neovim
Vim Script
893
star
3

async.vim

normalize async job control api for vim and neovim
Vim Script
275
star
4

asyncomplete-lsp.vim

Vim Script
122
star
5

hn-react

Hacker News Client built using ReactJS
JavaScript
119
star
6

quickpick.vim

experimental quick picker for vim
Vim Script
79
star
7

FluentHttp

a light weight library aimed to ease the development for your rest client
C#
48
star
8

dotfiles

There is no place like ~
Lua
48
star
9

asyncomplete-buffer.vim

provides buffer autocomplete for asyncomplete.vim
Vim Script
43
star
10

reactive-cocoa-playground

Objective-C
40
star
11

asyncomplete-file.vim

provides file autocomplete for asyncomplete.vim
Vim Script
39
star
12

rblog

super fast blog engine written in rust. live demo @ https://blog.prabir.me
Rust
36
star
13

asyncomplete-ultisnips.vim

provides ultisnips autocomplete for asyncomplete.vim
Vim Script
33
star
14

FacebookSharp

Facebook Graph API for .Net
C#
30
star
15

callbag.vim

Vim Script
27
star
16

typescript-language-server

Language Server Protocol implementation for Typescript via tsserver
TypeScript
25
star
17

asyncomplete-tags.vim

provides tag auto completion for asyncomplete.vim via vim tagfiles
Vim Script
23
star
18

simple-ubuntu-installer

simple encrypted zfs ubuntu installer
Shell
22
star
19

simple-arch-installer

Shell
19
star
20

synology-nomad

Shell
19
star
21

FB-CSharp-SDK-First-FB-Application

Facebook C# SDK - Writing your first facebook application
C#
19
star
22

asyncomplete-gocode.vim

provides go autocomplete for asyncomplete.vim via gocode
Vim Script
18
star
23

nji

NodeJs (Package) Installer
C#
17
star
24

async-vfs

async vfs for rust
Rust
13
star
25

asyncomplete-flow.vim

provides javascript autocomplete for asyncomplete.vim via flow
Vim Script
13
star
26

asyncomplete-necovim.vim

provides syntax autocomplete for asyncomplete.vim via neco-vim
Vim Script
13
star
27

writing-an-os-from-scratch

This is a tutorial that teaches you how to write a bootloader/os from scratch
Assembly
12
star
28

simple-owin

simple owin implementation examples
C#
12
star
29

mq

Rust
11
star
30

asyncomplete-emoji.vim

provides emoji autocomplete for asyncomplete.vim
Vim Script
10
star
31

njake

node.js jakefile helper tasks for .net developers
JavaScript
10
star
32

asyncomplete-neosnippet.vim

provides neosnippet autocomplete for asyncomplete.vim
Vim Script
10
star
33

quickpick-colorschemes.vim

Colorscheme picker for quickpick.vim
Vim Script
10
star
34

asyncomplete-tscompletejob.vim

provides typescript autocomplete for asyncomplete.vim via tscompletejob
Vim Script
9
star
35

lua-callbag

Lua
8
star
36

surrealdb-migrator

Rust
8
star
37

nuget-button

javascript helper for generating nuget button
JavaScript
8
star
38

lua-eventbus

Lua
8
star
39

writing-vim-plugins-in-lua

7
star
40

asyncomplete-emmet.vim

Vim Script
6
star
41

asyncomplete-necosyntax.vim

provides syntax autocomplete for asyncomplete.vim via necosyntax
Vim Script
6
star
42

win32-c-boilerplate

boilerplate code for win32 c binaries
Makefile
6
star
43

universal-typescript-boilerplate

TypeScript
5
star
44

Facebook.Extensions.Task

C# v5 async extensions for Facebook C# SDK
C#
5
star
45

gitignore

common gitignore files for .net development
5
star
46

opengraph.net

C# Facebook OpenGraph.NET library fork from http://opengraph.codeplex.com
C#
5
star
47

rax

middleware for .net (trying to make owin better)
C#
4
star
48

quickpick-lsp.vim

Vim Script
4
star
49

sprockets-dotnet

Sprockets style dependency resolver for .NET
JavaScript
4
star
50

dark-themes

Dark themes for various text editors - Visual Studio, Notepad++, Vim, Eclipse
Vim Script
4
star
51

Facebook.Moq

Moq helpers for Facebook C# SDK
C#
4
star
52

linqtofacebook

Linq Provider for Facebook Graph API
C#
4
star
53

typescript-webpack-umd-boilerplate

JavaScript
4
star
54

NancyFacebookSample

NancyFx + Facebook C# SDK
C#
4
star
55

winzsh

Fork of https://sourceforge.net/projects/zsh-nt/
C
4
star
56

azure-sdk-for-net-tasks

TPL extensions for Azure SDK for .NET
C#
4
star
57

quickpick-npm.vim

Vim Script
3
star
58

dwm-win32-6

C
3
star
59

ProfilesAndSettings

Stores my profile and settings for PowerShell, gitconfig, hgrc, irbc
Vim Script
3
star
60

hn-react-mobx

HackerNews + MobX + React
JavaScript
3
star
61

socket-io-net

socket.io server implemented in .net and owin
JavaScript
3
star
62

github

github api wrapper for .net
C#
3
star
63

backbone-js-on-nancy

Sample demonstrating Single Page App using Backbone JS and NancyFX
JavaScript
3
star
64

SimpleFx

SimpleFX is a list of .NET libraries that match the Simple ethos and does its job well.
3
star
65

vs-erc

C#
3
star
66

synology-package-template

Shell
3
star
67

ctrlp-env

ctrlp extension to view environment variables
Vim Script
2
star
68

Unity.Wcf

unity di for wcf
C#
2
star
69

js-namespace

Javscript Namespace Library
JavaScript
2
star
70

wilo

Rust
2
star
71

zcloud

Shell
2
star
72

moonrepo-rust-vite-template

CSS
2
star
73

vim-fz-extras

Vim Script
2
star
74

go-coreutils

coreutils written in go
Go
2
star
75

tsearch

Rust
2
star
76

quickpick-filetypes.vim

filetype picker for quickpick.vim
Vim Script
2
star
77

my-sublimetext-settings

My Sublime Text 2 settings for Mac and Windows
2
star
78

vsnip-snippets

My snippets for https://github.com/hrsh7th/vim-vsnip
2
star
79

reactjs-typescript-boilerplate

JavaScript
2
star
80

trillium-send-file

Rust
1
star
81

expressjs-boilerplate

expressjs/backbone boilerplate
JavaScript
1
star
82

dwmjs

C
1
star
83

cowsay.rs

Rust
1
star
84

hapijs-sample

JavaScript
1
star
85

my-node-playground

JavaScript
1
star
86

TaskExtensions

Helper Extensions methods for Task Parallel Library
C#
1
star
87

Prabir.CocoR

Coco/R plugin for Visual Studio
C#
1
star
88

NuGetPowerShellScripts

helpers powershell scripts for nuget
1
star
89

salvo-template

Rust
1
star
90

ELMAH.MySql

MySql provider for ELMAH
1
star
91

docker-static-site

HTML
1
star
92

vfs-s3

Amazon S3 backend for @c9/vfs
JavaScript
1
star
93

StyleCopCmd

Fork of StyleCopCmd from http://nichesoftware.co.nz/page/373/stylecop-cmd-version-history
Ruby
1
star
94

Nancy.Facebook.RealtimeSubscription

C#
1
star
95

objstor

object store
Rust
1
star
96

reactjs-boilerplate

ReactJS boilerplate code with WebPack
JavaScript
1
star
97

dotnet-in-python

C#
1
star
98

SimpleBlog

Simple .NET Blog written in OWIN
C#
1
star
99

python-sdk

This SDK is deprecated. It does not support the new cookie format that we rolled out as part of the OAuth Migration. In short, it doesn't work. We currently have no plans to update it. Feel free to clone this repository and modify.
Python
1
star