Reformat README as markdownmaster
authorMarc André Tanner <[email protected]>
Thu, 27 Feb 2020 08:23:14 +0000 (27 09:23 +0100)
committerMarc André Tanner <[email protected]>
Thu, 30 Apr 2020 13:14:24 +0000 (30 15:14 +0200)
README.md [new file with mode: 0644]
README.txt [deleted file]

diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..aafa8f7
--- /dev/null
+++ b/README.md
@@ -0,0 +1,191 @@
+# dwm-win32 - a Microsoft Windows port of the X11 dwm(1)
+
+dwm-win32 is a port of the well known [X11](https://www.x.org) window
+manager [dwm](https://dwm.suckless.org/) to the Microsoft Windows
+platform.
+
+It tries to bring the [suckless philosophy](https://suckless.org/philosophy/)
+and the principle of [dynamic window management](https://suckless.org/philosophy/)
+to Windows systems.
+
+![dwm-win32 screenshot](https://www.brain-dump.org/projects/dwm-win32/screenshot.png#center)
+
+## News
+
+**Warning: I no longer actively use and develop dwm-win32.**
+
+ - [dwm-win32-alpha2](https://lists.suckless.org/dwm/0904/7891.html) (21.04.2009)
+   [tar.gz](https://www.brain-dump.org/projects/dwm-win32/dwm-win32-alpha2.tar.gz)
+   [zip](https://www.brain-dump.org/projects/dwm-win32/dwm-win32-alpha2.zip)
+   [exe](https://www.brain-dump.org/projects/dwm-win32/dwm-win32-alpha2.exe)
+
+ - [dwm-win32-alpha1](https://lists.suckless.org/dwm/0903/7775.html) (21.03.2009)
+   [tar.gz](https://www.brain-dump.org/projects/dwm-win32-alpha1.tar.gz)
+   [zip](https://www.brain-dump.org/projects/dwm-win32-alpha1.zip)
+   [exe](https://www.brain-dump.org/projects/dwm-win32-alpha1.exe)
+
+## Description
+
+dwm 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.
+
+## Installation
+
+Either use the pre compiled exe files or download the source
+and compile it with [MinGW](http://www.mingw.org/) and
+[MSYS](http://www.mingw.org/wiki/MSYS).
+
+    $EDITOR config.mk
+    $EDITOR config.h
+    make
+    make install
+
+You should now be able to start `dwm-win32`, redirect stderr to a file
+if you want to see when something goes wrong.
+
+## Configuration
+
+The configuration of dwm-win32 is done by creating a custom `config.h` and
+(re)compiling the source code. See the default `config.h` as an example,
+adapting it to your preference should be straightforward. You basically
+define a set of layouts and keys which dwm-win32 will use. There are
+some pre defined macros to ease configuration.
+
+Because this is all pretty similar to X11 dwm you might find it's
+[customization page](https://dwm.suckless.org/customisation/) useful.
+
+## Usage
+
+### Keyboard
+
+dwm uses a modifier key (denoted by `MOD`) which defaults to `CTRL + ALT`.
+
+ - `MOD + Shift + Return` Start `cmd.exe`.
+
+ - `MOD + 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 + 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 + 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 wiriting 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 + [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 + q` Quit dwm.
+
+### 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 window, including toolbars etc. 
+which we would have to filter out.
+
+Unfortunately the `SetWindowsHookEx` thingy seems to require a separate
+DLL which will be loaded into each process address space.
+
+## Development
+
+You can always fetch the current code base from the git repository
+located at [Github](https://github.com/martanne/dwm-win32/) or
+[Sourcehut](https://git.sr.ht/~martanne/dwm-win32).
+
+If you have comments, suggestions, ideas, a bug report, a patch or
+something else related to dwm-win32 then write to the
+[suckless developer mailing list](https://suckless.org/community)
+or contact me directly.
+
+## Related
+
+Below are some links which are in one way or another related to dwm-win32.
+
+ - [dwm](https://dwm.suckless.org/) the original for X11
+ - [bblean](http://bb4win.sourceforge.net/bblean/) another free software
+   window manager for win32
+
+## License
+
+dwm-win32 obviously reuses some code of dwm and is released under the same
+[MIT/X11 license](https://raw.githubusercontent.com/martanne/dwm-win32/master/LICENSE.txt).
diff --git a/README.txt b/README.txt
deleted file mode 100644 (file)
index 6457001..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-dwm-win32 is a port of the well known X11 window manager dwm to Microsoft\r
-Windows.\r
-\r
-Description\r
-===========\r
-\r
-dwm is a dynamic window manager for Microsoft Windows. It manages windows\r
-in tiled, monocle and floating layouts. Either layout can be applied\r
-dynamically, optimising the environment for the application in use and\r
-the task performed.\r
-\r
-In tiled layouts windows are managed in a master and stacking area. The\r
-master area contains the window which currently needs most attention,\r
-whereas the stacking area contains all other windows. In monocle layout\r
-all windows are maximised to the screen size. In floating layout windows\r
-can be resized and moved freely. Dialog windows are always managed\r
-floating, regardless of the layout applied.\r
-\r
-Windows are grouped by tags. Each window can be tagged with one or\r
-multiple tags. Selecting certain tags displays all windows with these\r
-tags.\r
-\r
-dwm contains a small status bar which displays all available tags, the \r
-layout and the title of the focused window. A floating window is indicated\r
-with an empty square and a maximised floating window is indicated with a\r
-filled square before the windows title. The selected tags are indicated\r
-with a different color. The tags of the focused window are indicated with\r
-a filled square in the top left corner.  The tags which are applied to\r
-one or more windows are indicated with an empty square in the top left\r
-corner.\r
-\r
-dwm draws a small border around windows to indicate the focus state.\r
-\r
-Usage\r
-=====\r
-\r
- Keyboard\r
-\r
-  dwm uses a modifier key by default this is CTRL + ALT.\r
-\r
-  MOD + Shift + Return\r
-   - start cmd.exe.\r
-\r
-  MOD + b\r
-   - Toggles bar on and off.\r
-\r
-  MOD + e\r
-   - Toogles windows explorer and taskbar on and off.\r
-\r
-  MOD + t\r
-   - Sets tiled layout.\r
-\r
-  MOD + f\r
-   - Sets floating layout.\r
-\r
-  MOD + m\r
-   - Sets monocle layout.\r
-\r
-  MOD + space\r
-   - Toggles between current and previous layout.\r
-\r
-  MOD + j\r
-   - Focus next window.\r
-\r
-  MOD + k\r
-   - Focus previous window.\r
-\r
-  MOD + h\r
-   - Decrease master area size.\r
-\r
-  MOD + l\r
-   - Increase master area size.\r
-\r
-  MOD + Return\r
-   - Zooms/cycles focused window to/from master area (tiled layouts only).\r
-\r
-  MOD + Shift + c\r
-   - Close focused window.\r
-\r
-  MOD + Shift + Space\r
-   - Toggle focused window between tiled and floating state.\r
-\r
-  MOD + n\r
-   - Toggles border of currently focused window.\r
-\r
-  Mod + i\r
-   - Display classname of currently focused window, useful for wiriting\r
-     tagging rules.\r
-\r
-  MOD + Tab\r
-   - Toggles to the previously selected tags.\r
-\r
-  MOD + Shift + [1..n]\r
-   - Apply nth tag to focused window.\r
-\r
-  MOD + Shift + 0\r
-   - Apply all tags to focused window.\r
-\r
-  MOD + Control + Shift + [1..n]\r
-   - Add/remove nth tag to/from focused window.\r
-\r
-  MOD + [1..n]\r
-   - View all windows with nth tag.\r
-\r
-  MOD + 0\r
-   - View all windows with any tag.\r
-\r
-  MOD + Control + [1..n]\r
-   - Add/remove all windows with nth tag to/from the view.\r
-\r
-  MOD + q\r
-   - Quit dwm.\r
-\r
-\r
- Mouse\r
-\r
-  Left Button\r
-    - click on a tag label to display all windows with that tag, click\r
-      on the layout label toggles between tiled and floating layout.\r
-\r
-  Right Button\r
-    - click on a tag label adds/removes all windows with that tag to/from\r
-      the view.\r
-\r
-  Alt + Left Button\r
-    - click on a tag label applies that tag to the focused window.\r
-\r
-  Alt + Right Button\r
-    - click on a tag label adds/removes that tag to/from the focused window.\r
-\r
-\r
-How it works\r
-============\r
-\r
-A ShellHook is registered which is notified upon window creation and\r
-destruction, however it is important to know that this only works for\r
-unowned top level windows. This means we will not get notified when child\r
-windows are created/destroyed. Therefore we scan the currently active top\r
-level window upon activation to collect all associated child windows. \r
-This information is for example used to tag all windows and not just \r
-the toplevel one when tag changes occur.\r
-\r
-This is all kind of messy and we might miss some child windows in certain\r
-situations. A better approach would probably be to introduce a CBTProc \r
-function and register it with SetWindowsHookEx(WH_CBT, ...) with this we\r
-would get notified by all and every windows including toolbars etc. \r
-which we would have to filter out.\r
-\r
-Unfortunately the SetWindowsHookEx thingy seems to require a separate\r
-dll because it will be loaded into each process address space.\r
-\r
-TODO\r
-====\r
-\r
- - show/hide child windows upon tag switch, in theory this should already\r
-   work but in practice we need to tweak ismanageable() so that it\r
-   recognises child windows but doesn't generate false positives.\r
- - fullscreen windows, mstsc for example doesn't resize properly when\r
-   maximized.\r
- - Screensaver?\r
- - system dialogs from desktop window\r
- - urgent flag?\r
- - window border isn't yet perfect\r
- - status text via stdin or a separate tool\r
- - crash handler which makes all windows visible restores borders etc\r
- - use BeginDeferWindowPos, DeferWindowPos and EndDeferWindowPos\r
- - optimize for speed\r
- - code cleanups all over the place\r
- - multi head support?\r
-\r
- [ - introduce a CBTProc function and register it with\r
-     SetWindowsHookEx(WH_CBT, ...) to handle window events instead of the\r
-     current mechanism in WndProc which is based on the shellhookid and \r
-     WH_SHELL because this only works for toplevel windows. See also the\r
-     "How it works" section. ]\r