Add notes on rshell macros.

main
Peter Hinch 2021-02-27 18:05:53 +00:00
rodzic 761df2c73a
commit c87587d426
2 zmienionych plików z 68 dodań i 1 usunięć

Wyświetl plik

@ -423,7 +423,9 @@ of required frequency response to a filter implementation.
[rshell](https://github.com/peterhinch/rshell) is a fork of Dave Hylands'
excellent utility. My fork adds text macros to improve its power and
usability, notably when maintaining complex Python packages.
usability, notably when maintaining complex Python packages. The fork includes
documentation, but [these notes](./RSHELL_MACROS.md) provide a usage example
where each project has its own set of automatically loaded macros.__
## 5.10 Hard to categorise

65
RSHELL_MACROS.md 100644
Wyświetl plik

@ -0,0 +1,65 @@
# The rshell macro fork
These notes describe one of a number of possible ways to use the macro
facility.
The aim was to provide a set of generic macros, along with a project specific
set. The starting point is an alias, run before work is started on a given
project. The aliases are created in `~/.bashrc`. The example below is for two
projects, `mqtt` and `asyn`.
```bash
alias asyn='export PROJECT=ASYN;cd /MicroPython/micropython-async/'
alias mqtt='export PROJECT=MQTT; cd /MicroPython/micropython-mqtt'
```
The `PROJECT` environment variable is examined by the file `rshell_macros.py`
located in the `rshell` directory. An example is presented here:
```python
import os
proj = None
try:
proj = os.environ['PROJECT']
except KeyError:
print('Environment var PROJECT not found: only generic macros loaded.')
macros = {}
macros['..'] = 'cd ..'
macros['...'] = 'cd ../..'
macros['ll'] = 'ls -al {}', 'List any directory'
macros['lf'] = 'ls -al /flash/{}'
macros['lsd'] = 'ls -al /sd/{}'
macros['lpb'] = 'ls -al /pyboard/{}'
macros['mv'] = 'cp {0} {1}; rm {0}', 'Move/rename'
macros['repl'] = 'repl ~ import machine ~ machine.soft_reset()', 'Clean REPL'
macros['up'] = 'cd /MicroPython'
macros['asyn'] = 'cd /MicroPython/micropython-async'
macros['primitives'] = 'cd /MicroPython/micropython-async/v3; rsync primitives/ {}/primitives; cd -', 'Copy V3 primitives to dest'
if proj == 'MQTT':
print('Importing macros for MQTT')
macros['home'] = 'cd /MicroPython/micropython-mqtt/mqtt_as'
elif proj == 'ASYN':
print('Importing macros for ASYN')
macros['home'] = 'cd /MicroPython/micropython-async'
macros['v3'] = 'cd /MicroPython/micropython-async/v3'
macros['off'] = 'cd /MicroPython/micropython-async/official', 'official uasyncio'
macros['sync'] = 'cd /MicroPython/micropython-async/v3; rsync primitives/ {}/primitives', 'Copy V3 primitives to dest'
macros['demos'] = 'cd /MicroPython/micropython-async/v3; rsync as_demos/ {}/as_demos', 'Copy V3 demos to dest'
macros['drivers'] = 'cd /MicroPython/micropython-async/v3; rsync as_drivers/ {}/as_drivers', 'Copy V3 drivers to dest'
```
The first part of the script defines generic macros such as `ll` and `lsd`
available to any project, and if no project is defined.
Project specific macros are added in response to the environment variable.
Note the way args are passed: to update the SD card on a Pyboard the macro
`primitives` would be called with:
```
MicroPython > m primitives /sd
```
The `mv` macro, called with
```
MicroPython > m mv source_path dest_path
```
expands to
```
cp source_path dest_path; rm source_path
```