diff --git a/README.md b/README.md index 97ac19ed1b..2363dde36e 100644 --- a/README.md +++ b/README.md @@ -151,9 +151,3 @@ correct permissions. Try then: $ sudo dfu-util -a 0 -d 0483:df11 -D build-PYBV10/firmware.dfu -Documentation -------------- - -You can find information about the documentation in the -[docs/README.md](https://github.com/micropython/micropython/blob/master/docs/README.md) file. - diff --git a/docs/reference/index.rst b/docs/reference/index.rst index fae0a219a2..35030b65dd 100644 --- a/docs/reference/index.rst +++ b/docs/reference/index.rst @@ -9,6 +9,11 @@ documentation at Differences to standard Python as well as additional features of MicroPython are described in the sections here. +.. toctree:: + :maxdepth: 1 + + repl.rst + .. only:: port_pyboard .. toctree:: diff --git a/docs/reference/repl.rst b/docs/reference/repl.rst new file mode 100644 index 0000000000..c03cbfd388 --- /dev/null +++ b/docs/reference/repl.rst @@ -0,0 +1,207 @@ +The MicroPython Interactive Interpreter Mode (aka REPL) +======================================================= + +This section covers some characteristics of the MicroPython Interactive +Interpreter Mode. A commonly used term for this is REPL (read-eval-print-loop) +which will used to refer to this interactive prompt. + +Auto-indent +----------- + +When typing python statements which end in a colon (for example if, for, while) +then the prompt will change to three dots (...) and the cursor will be indented +by 4 spaces. When you press return, the next line will continue at the same +level of indentation for regular statements or an additional level of indentation +where appropriate. If you press the backspace key then it will undo one +level of indentation. + +If your cursor is all the way back at the beginning, pressing RETURN will then +execute the code that you've entered. The following shows what you'd see +after entering a for statement (the underscore shows where the cursor winds up): + + >>> for i in range(3): + ... _ + +If you then enter an if statement, an additional level of indentation will be +provided: + + >>> for i in range(30): + ... if i > 3: + ... _ + +Now enter ``break`` followed by RETURN and press BACKSPACE: + + >>> for i in range(30): + ... if i > 3: + ... break + ... _ + +Finally type ``print(i)``, press RETURN, press BACKSPACE and press RETURN again: + + >>> for i in range(30): + ... if i > 3: + ... break + ... print(i) + ... + 0 + 1 + 2 + 3 + >>> + +Auto-completion +--------------- + +While typing a command at the REPL, if the line typed so far corresponds to +the beginning of the name of something, then pressing TAB will show +possible things that could be entered. For example type ``m`` and press TAB +and it should expand to ``machine``. Enter a dot ``.`` and press TAB again. You +should see something like: + + >>> machine. + __name__ info unique_id reset + bootloader freq rng idle + sleep deepsleep disable_irq enable_irq + Pin + +The word will be expanded as much as possible until multiple possibilities exist. +For example, type ``machine.Pin.AF3`` and press TAB and it will expand to +``machine.Pin.AF3_TIM``. Pressing TAB a second time will show the possible +expansions: + + >>> machine.Pin.AF3_TIM + AF3_TIM10 AF3_TIM11 AF3_TIM8 AF3_TIM9 + >>> machine.Pin.AF3_TIM + +Interrupting a running program +------------------------------ + +You can interupt a running program by pressing Ctrl-C. This will raise a KeyboardInterrupt +which will bring you back to the REPL, providing your program doesn't intercept the +KeyboardInterrupt exception. + +For example: + + >>> for i in range(1000000): + ... print(i) + ... + 0 + 1 + 2 + 3 + ... + 6466 + 6467 + 6468 + Traceback (most recent call last): + File "", line 2, in + KeyboardInterrupt: + >>> + +Paste Mode +---------- + +If you want to paste some code into your terminal window, the auto-indent feature +will mess things up. For example, if you had the following python code: :: + + def foo(): + print('This is a test to show paste mode') + print('Here is a second line') + foo() + +and you try to paste this into the normal REPL, then you will see something like +this: + + >>> def foo(): + ... print('This is a test to show paste mode') + ... print('Here is a second line') + ... foo() + ... + Traceback (most recent call last): + File "", line 3 + IndentationError: unexpected indent + +If you press Ctrl-E, then you will enter paste mode, which essentially turns off +the auto-indent feature, and changes the prompt from ``>>>`` to ``===``. For example: + + >>> + paste mode; Ctrl-C to cancel, Ctrl-D to finish + === def foo(): + === print('This is a test to show paste mode') + === print('Here is a second line') + === foo() + === + This is a test to show paste mode + Here is a second line + >>> + +Paste Mode allows blank lines to be pasted. The pasted text is compiled as if +it were a file. Pressing Ctrl-D exits paste mode and initiates the compilation. + +Soft Reset +---------- + +A soft reset will reset the python interpreter, but tries not to reset the +method by which you're connected to the MicroPython board (USB-serial, or Wifi). + +You can perform a soft reset from the REPL by pressing Ctrl-D, or from your python +code by executing: :: + + raise SystemExit + +For example, if you reset your MicroPython board, and you execute a dir() +command, you'd see something like this: + + >>> dir() + ['__name__', 'pyb'] + +Now create some variables and repeat the dir() command: + + >>> i = 1 + >>> j = 23 + >>> x = 'abc' + >>> dir() + ['j', 'x', '__name__', 'pyb', 'i'] + >>> + +Now if you enter Ctrl-D, and repeat the dir() command, you'll see that your +variables no longer exist: + +.. code-block:: python + + PYB: sync filesystems + PYB: soft reboot + MicroPython v1.5-51-g6f70283-dirty on 2015-10-30; PYBv1.0 with STM32F405RG + Type "help()" for more information. + >>> dir() + ['__name__', 'pyb'] + >>> + +The special variable _ (underscore) +----------------------------------- + +When you use the REPL, you may perfom computations and see the results. +MicroPython stores the results of the previous statment in the variable _ (underscore). +So you can use the underscore to save the result in a variable. For example: + + >>> 1 + 2 + 3 + 4 + 5 + 15 + >>> x = _ + >>> x + 15 + >>> + +Raw Mode +-------- + +Raw mode is not something that a person would normally use. It is intended for +programmatic use. It essentially behaves like paste mode with echo turned off. + +Raw mode is entered using Ctrl-A. You then send your python code, followed by +a Ctrl-D. The Ctrl-D will be acknowledged by 'OK' and then the python code will +be compiled and executed. Any output (or errors) will be sent back. Entering +Ctrl-B will leave raw mode and return the the regular (aka friendly) REPL. + +The ``tools/pyboard.py`` program uses the raw REPL to execute python files on the +MicroPython board. +