Last active
November 15, 2025 11:02
-
-
Save beshrkayali/bea7596284e7a2025ce8ffa8996cfe7c to your computer and use it in GitHub Desktop.
Poly RaspberryPi PIO mode
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ;; Simple Polymode for RaspberryPi Pico PIO files that uses | |
| ;; both asm-mode as host-mode and c-mode for pass-through section | |
| (define-hostmode poly-pio-hostmode | |
| :mode 'asm-mode) | |
| (define-innermode poly-pio-c-innermode | |
| :mode 'c-mode | |
| :head-matcher "^% c-sdk {$" | |
| :tail-matcher "^%}$" | |
| :head-mode 'poly-head-tail-mode | |
| :tail-mode 'poly-head-tail-mode) | |
| (define-polymode poly-pio-mode | |
| :hostmode 'poly-pio-hostmode | |
| :innermodes '(poly-pio-c-innermode)) | |
| (add-to-list 'auto-mode-alist '("\\.pio$" . poly-pio-mode)) |
Author
@8dcc thanks for the tips!
Since then, I have written a pio-mode package, which contains a major mode that is derived from asm-mode but only with the instructions specified by Raspberry Pi in their datasheets. In case someone is interested: 8dcc/pio-mode.el.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
There is a bug in this code. The
poly-pio-c-innermodesymbol should be defined usingdefine-innermodeinstead ofdefine-auto-innermode, since the latter expects a:mode-matcherwhich isn't provided (nor necessary). See the documentation ofpm-inner-auto-chunkmode(used by the former), opposed topm-inner-chunkmode(used by the latter).Without this change, Emacs would print the following warnings:
Furthermore, I would edit the values of
:head-modeand:tail-modeso they are not highlighted usingasm-modesyntax; I changed it to'poly-head-tail-mode. The full definition is:For example: