I would really appreciate any contributing to this crate. However there are some things that are handy to know.
How it works
Crossterm is using ANSI escape codes by default for both Unix and Windows systems. But for Windows, it is a bit more complicated since Windows versions 8 or lower are not supporting ANSI escape codes. This is why we use WinApi for those machines.
Here I will discuss the architecture of crossterm. Crossterm wraps 5 crates: cursor, input, style, terminal, screen.
The different crates
If you would like to contribute to Crossterm, than please design the code as it is now. For example, a module like cursor has the following file structure:
This file contains some trait, in this case,
ITerminalCursor, for other modules to implement. So that it can work at a specific platform.
The end user will call this module to access the cursor functionalities. This module will decide which implementation to use based on the current platform.
This is the cursor trait (located in mod.rs) implementation with WinApi.
This is the cursor trait (located in mod.rs) implementation with ANSI escape codes.
contains platform specific logic.
The above structure is the same for the other modules.
Why I have chosen for this design:
- Because you can easily extend to multiple platforms by implementing the trait int the mod.rs.
- You keep the functionalities for different platforms separated in different files.
- Also, you have one API the user can call like in the
cursor.rsabove. This file should be avoided to change that much. All the other code could change a lot because it has no impact on the user side.