Added README.md
Added a README file to the project. Information regarding what AWM is, how to install it, how to use it and more are outlined in the file.
This commit is contained in:
parent
7b377f1f9e
commit
6fafed8993
122
README.md
Normal file
122
README.md
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
# awm – Alacritty Window Manager
|
||||
A simple WM to manage your Alacritty terminal windows.
|
||||
|
||||
## What is AWM?
|
||||
Alacritty Window Manager (AWM) is a Window Manager (WM) akin to software like DWM
|
||||
which is responsible for tiling windows open on the desktop into appropriate
|
||||
layout configurations. It differs from conventional window tiling acheived by
|
||||
dragging window tabs into different regions of a desktop environment, simply
|
||||
because WMs are used in non-DEs whereby this mechanic does not exist. Windows
|
||||
which also lack decoration frames to allow them to be moved via dragging benefit
|
||||
from WMs correctly arranging them.
|
||||
|
||||
Now, AWM does not take any inspiration from DWM, more than what DWM takes from
|
||||
general WMs. AWM works with the Win32 API, whereas DWM works with X11, so
|
||||
everything within the APIs will be completely different. DWM is also a general WM
|
||||
for tiling all windows on a system, and AWM works only for Alacritty terminals.
|
||||
|
||||
## Why Does AWM Exist?
|
||||
Why do WMs exist in general? They're sleek-looking, organise windows in an easy
|
||||
fashion, do better jobs than DEs, amongst many more reason. The main reason is
|
||||
that if a window GUI is created without a frame, there's no easy way to then
|
||||
move that window, let alone to a specific location on a screen.
|
||||
|
||||
AWM achieves all of this. It allows for no decoration on Alacritty windows, whilst
|
||||
being able to organise up to four windows Alacritty creates for terminal sessions.
|
||||
And this is all for Windows to make life much easier for users, whilst still
|
||||
looking like novice ricers.
|
||||
|
||||
## How Does AWM Work?
|
||||
Well, AWM is heavily documented in the code base, which consists of a single C++
|
||||
file. But the short version is as followed:
|
||||
|
||||
- When `awm` is executed, it will go and find all windows associated with
|
||||
Alacritty (up to 4 at most).
|
||||
- Once it has found the windows, it organise them based on a set of predefined
|
||||
configurations depending on the number of windows found.
|
||||
- This occurs simultaneously to give a smooth organisation transition for any
|
||||
number of Alacritty terminal windows.
|
||||
|
||||
It's that simple. No additional event listeners/hooks, no spawning new processes.
|
||||
|
||||
For a more in-depth, and technically explanation where applicable, consult the
|
||||
`main.cpp` found in the root directory of the project's workspace.
|
||||
|
||||
## How to Install AWM
|
||||
Currently, the only way to install AWM is by manually compiling the binary and
|
||||
placing it somewhere in your local user-space and adding that to your path. You
|
||||
may wish to keep the compiled binary in the repo and have your path point to that
|
||||
location.
|
||||
|
||||
Compiling can be performed with any compiler. There's no linking of other libries
|
||||
or C++ source files, assuming that the appropriate header files are installed to
|
||||
the system, it should just compile.
|
||||
|
||||
However, the only compiler that has been used for AWM is the `g++` compiler by
|
||||
GNU. If you have this compiler installed, the following command will compile the
|
||||
binary on your system (CWD set to the awm repo):
|
||||
|
||||
```cmd
|
||||
mkdir bin
|
||||
g++ -O3 -std=c++11 main.cpp -o bin\awm.exe
|
||||
```
|
||||
|
||||
_Compilation should compile without any errors, and any such which are reported
|
||||
might be due to missing header files. Please consult the `main.cpp` file for the
|
||||
relavent header files and/or libraries._
|
||||
|
||||
Afterwards, you can add the `bin` directory to your local Path (or system-wide
|
||||
with appropriate pivilage levels). Something as followed in PowerShell will allow
|
||||
AWM to be ran anywhere on the system:
|
||||
|
||||
```ps
|
||||
$env:Path += ';\path\to\awm\bin'
|
||||
```
|
||||
|
||||
## How to Use AWM
|
||||
AWM can simply be called directly as a program, and will attempt to organise any
|
||||
Alacritty windows it identifies. However, a more useful usage would be via
|
||||
Alacritty keybindings. This can be simply achieved in the `alacritty.yml`
|
||||
configuration file using the `command` action.
|
||||
|
||||
The following is an example keybinding configuration which can be used in
|
||||
Alacritty (with respect to potential conflicts with other bindings). Open the
|
||||
YAML file in an editor (typically located at `%APPDATA%\alacritty\alacritty.yml`)
|
||||
and add the following line:
|
||||
|
||||
```yaml
|
||||
key_bindings:
|
||||
- { key: O, mods: Control|Shift, command: { program: "awm", args: [] } }
|
||||
```
|
||||
|
||||
This will then call AWM wherever its located on the system via Path and organise
|
||||
Alacritty windows accordingly.
|
||||
|
||||
**Note:** AWM does not listen for when Alacritty windows are created or destroyed.
|
||||
It simply organises windows it's able to collect in a tiled manner when told to.
|
||||
|
||||
## Known Issues & Limitations
|
||||
As discussed in the note above, and elsewhere, AWM **does not** add event hooks
|
||||
to the system, or listen to any event hooks that might trigger when an Alacritty
|
||||
window is created or destroyed. For this reason, AWM must be manually told when
|
||||
to organise windows on the desktop. If this feature is to be required, a separate
|
||||
executable should be created to handle these hook events and compile AWM into its
|
||||
binary to then call the existing WM source code.
|
||||
|
||||
Another known issue is with Task Manager and not compiling with at least `-O3`.
|
||||
Put simply, if the binary is compiled without this optimisation flag, and Task
|
||||
Manager is open, AWM will fail to organise the windows due to Task Manager. It's
|
||||
currently unknown why this bug exists without `-O3`, and doesn't with the flag,
|
||||
but it can be easily avoided with the `-O3` flag using `g++`. A future patch may
|
||||
be applied to this in the future.
|
||||
|
||||
## Licence
|
||||
This project is licenced until the GNU GPLv3+ licence agreement, which can be
|
||||
viewed in the `LICENCE.txt` file in the root directory of the repository.
|
||||
|
||||
## Author
|
||||
Ethan Smith-Coss (ethan.sc@closedless.xyz)
|
||||
|
||||
## Bug Tracker
|
||||
To report a bug, or feature of the program, an Issue can be created with the
|
||||
relavent information.
|
||||
Loading…
Reference in New Issue
Block a user