+- macaw ------------------------------------------------- 2024 -+ | _ __ ___ __ _ ___ __ ___ __ | | | '_ ` _ \ / _` |/ __/ _` \ \ /\ / / | | | | | | | | (_| | (_| (_| |\ V V / | | |_| |_| |_|\__,_|\___\__,_| \_/\_/ | | | | | | C | | | | [Repository] | | | +----------------------------------------------------------------+ [001] Introduction __________________________________________________________________ Macaw is a minimalist text editor currently being developed, drawing heavily from the core functionality of Vim. It is written entirely in C and leverages the ncurses library for handling text-based user interfaces. [002] Overview __________________________________________________________________ Key Features: - Written in C: chosen for performance and find control memory. - Uses ncurses: ensures compatibility across various OS's. - Minimalistic: focused on simplicity over complexity. [003] Architecture __________________________________________________________________ 1. File Structure +------------------------------------------------------+ | | | macaw/ | | |-- src/ | | | |- buffer.c | | | |- buffer.h | | | |- color.c | | | |- color.h | | | |- editor.c | | | |- editor.h | | | |- input.c | | | |- input.h | | | |- render.c | | | |- render.h | | |-- main.c | | | +------------------------------------------------------+ 2. Components - Entrypoint (main.c): The entry point of the application, where the editor component is called and started. - Editor Module (editor.c): The heart of Macaw, the editor module manages text buffers, cursor movement and operations on text. - Input Handling (input.c): Processes user inputs by reading the keystrokes. This module manages Vim-like key bindings and interprets inputs based on the current mode. - Rendering (render.c): Module responsible for rendering the whole interface to the terminal using ncurses. - Buffer Management (buffer.c): Manages the text buffer, which is is the in-memory representation of the file being edited. - Colors (color.c): Module responsible for initializing and managing custom colors within the terminal interface.