Handle both CR (0x0D) and LF (0x0A) for command execution to ensure
compatibility with raw terminal mode where Enter sends CR instead of LF.
This fixes the issue where aiorepl required Ctrl+Enter instead of
just Enter to execute commands when used with MicroPython ports that
put stdin in raw mode (such as the updated unix port using pyexec).
Also improves handling of various newline sequences (CRLF, double-LF,
double-CR) to prevent double-execution of commands.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
Allows modifying current line, adding/deleting characters in the middle
etc. Includes home/end keys to move to start/end of current line.
Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
- Add config for [tool.ruff.format] to pyproject.toml.
- Update pre-commit to run both ruff and ruff-format.
- Update a small number of files that change with ruff's rules.
- Update CI.
- Simplify codeformat.py just forward directly to "ruff format"
This work was funded through GitHub Sponsors.
Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
f-strings aren't enabled on all builds (e.g. low-flash ESP8266).
This work was funded through GitHub Sponsors.
Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
Duplicate Ctrl-C and LF detection requires this, but it was incorrectly
saving the current value, not the previous.
Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
The regular REPL uses the uncooked input, but aiorepl reads from sys.stdin
which is cooked. The result is that if the client sends a CRLF, aiorepl
will see LFLF.
This ignores a second LF in quick succession from the first.
Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
This provides an async REPL with the following features:
- Run interactive REPL in the background.
- Execute statements using await.
- Simple history.
Signed-off-by: Jim Mussared <jim.mussared@gmail.com>