Raw REPL mode is generally used as a command channel where all stdio
traffic is related directly to the raw commands and responses sent.
For this to work in aiorepl we need to ensure background tasks don't sent/
receive anything on stdio else the command channel will be corrupted.
The simplest way to achieve this is to make the raw commands blocking and
atomic rather than asyncio, assuming the user wont leave the device in raw
mode for too long at any one time.
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>