~martanne/dwm-win32

a11c0faa672839745239c5024e3114c6915a1989 — Marc André Tanner 8 years ago 78b68fd
Reindent README to make github happy
1 files changed, 57 insertions(+), 46 deletions(-)

M README.txt
M README.txt => README.txt +57 -46
@@ 1,32 1,36 @@
dwm-win32 is a port of the well known X11 window manager dwm to Microsoft Windows.
dwm-win32 is a port of the well known X11 window manager dwm to Microsoft
Windows.

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, the 
title of the focused window, and the text read from the root window name property. 
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 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
=====



@@ 80,7 84,8 @@ Usage
   - Toggles border of currently focused window.

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

  MOD + Tab
   - Toggles to the previously selected tags.


@@ 110,11 115,12 @@ Usage
 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.
    - 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.
    - 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.


@@ 126,27 132,31 @@ Usage
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.
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.
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.
Unfortunately the SetWindowsHookEx thingy seems to require a separate
dll because it will be loaded into each process address space.

TODO
====
 - 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.

 - 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?


@@ 158,7 168,8 @@ TODO
 - 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. ]
 [ - 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. ]