Loading...
Loading...
This document collects ideas and instructions for implementing future improvements. Follow these when adding features or refactoring the code.
# Contributor Guidelines for the `ee` editor
This document collects ideas and instructions for implementing future improvements. Follow these when adding features or refactoring the code.
After reading this guide, consult `characters.md` for the current UTF-8 plan and progress.
Refer to the module outline in [modules.md](modules.md) when moving code out of `ee.c`.
## Repository Clean‑up
- Ensure `ee` and `*.o` remain ignored by `.gitignore`.
## Build & Testing
- Use the provided `Makefile` for builds. Run `make clean && make` before committing changes to confirm the editor builds without warnings.
- For future features, consider extending `make check` to run any new automated tests or lints.
## Suggested Feature Backlog
1. **Search and Replace**
- Implement an interactive search-and-replace command.
- Provide prompts similar to existing search functionality.
2. **Optional Line Numbers**
- Add a toggle to display line numbers in the text window.
3. **Syntax Highlighting**
- Investigate using `ncurses` color pairs to highlight keywords for common languages (shell scripts, C, Markdown).
- Make highlighting optional via the settings menu or a `.init.ee` option.
4. **Configurable Keybindings & Macros**
- Allow users to remap common commands via a config file.
5. **Extended Undo/Redo**
- Increase the undo stack depth and make it configurable.
- Consider persisting undo history per file during a session.
- *Configurable undo amount.*
6. **Color Themes**
- Use full ncurses color support (including 256-color) and allow theme selection.
7. **Command-line Options**
- Provide `-R` for read‑only mode and options to open at a specific line or to execute an initial command.
8. **Clipboard Integration**
- Implement basic copy/cut/paste buffers separate from the delete/undelete logic.
9. **Tabbed Editing (Multiple Files)**
- Add the ability to open and switch between multiple files in tabs.
10. **Testing**
- Create a minimal test script that launches `ee` in batch mode to verify key features (opening a file, running a command, saving). This can be invoked by `make test` in the future.
## Status
Undo support with grouped input chunks is complete for now. See `undo.md` for details.
File I/O routines now reside in `fileio.c` as part of the ongoing module split.
Screen drawing functions were moved to `screen.c` and the main editor loop now lives in `editor.c`.
## Coding Style
- The project uses C99. Stick to the existing lower‑case function naming and brace style.
- Address compiler warnings (mostly signedness issues) as you modify the code.
- Keep functions small and consider splitting `ee.c` into smaller source files as features grow.
- Address signedness warnings reported during compilation (e.g. in `next_word` calls). Standardize on `unsigned char` for textual data where appropriate.
---
This file serves as a to‑do list and style reference. Update it whenever a new feature is started or completed.
## Current Work
The priority is splitting the remaining logic in `ee.c` into dedicated modules.
`editor.c` and the core helpers have been separated. The search routines now
live in `search.c`. Continue moving menu handling and input processing next as
outlined in [modules.md](modules.md). UTF‑8 refactoring from `characters.md`
continues once the split is mostly done.
An AI client and API for WordPress to communicate with any generative AI models of various capabilities using a uniform API. Built on top of the [PHP AI Client](https://github.com/WordPress/php-ai-client), it provides a WordPress-native Prompt Builder, an Admin Settings Screen for credentials, automatic credential wiring, a PSR-compliant HTTP client, and a client-side JavaScript API.
> This file provides instructions for AI agents that read AGENTS.md (GitHub Copilot, Cursor, Windsurf, Cline, Aider, OpenCode, and others).
> This file must stay **in sync** with `CLAUDE.md`. Whenever you change one, mirror the same change in the other so both tools continue to work correctly.