## Major Modes Guidelines In order for major modes to work well with polimodes major modes should abide the following rules: - Don't assume that there is no narrowing in place. If you retrieve text-properties or access a point in a buffer, make sure it's inside the accessible region of the buffer. Pay special attention to what happens at `point-max`. - Use `syntax-ppss` instead of `parse-partial-sexp`. - If your mode uses or defines some notion of a span or chunk, follow Emacs convention for text properties and consider spans as [left closed and right open) intervals. ## API All API classes and methods are named with `pm-` prefix. Buffer local objects: - `pm/polymode` - `pm/chunkmode` [!! don't rely on this one. Likely to change !!] Generics: - `pm-initialize` - `pm-get-buffer-create` - `pm-select-buffer` - `pm-get-span` - `pm-indent-line` - `pm-get-adjust-face` Utilities: - Spans: - `pm-innermost-span` - `pm-map-over-spans` - `pm-narrow-to-span` - Buffers - `pm-set-buffer` - `pm-switch-to-buffer` - Others - `pm-fun-matcher` ## Initialization of polymodes _TODO_ ## Poly Lock _TODO_ ## Debugging Polymodes You can visually inspect if the polymode does what you intended by activating globalized pm-debug minor mode with M-x pm-debug-mode. When `pm-debug-mode` is active the current span will be highlighted. Some useful commands defined in `pm-debug-mode-map`: Shortcut | Description ---------|------------- M-n M-f | Toggle font-locking (`pm-debug-toggle-fontification`) M-n M-h | Map through all spans and briefly blink each span (`pm-debug-map-over-spans-and-highlight`) M-n M-i | Highlight current span and display more info (`pm-debug-info-on-span`) M-n M-p | Print values of relevant variables in current buffer (`pm-debug-relevant-variables`) M-n M-t i | Toggle info messages (`pm-debug-toogle-info-message`) M-n M-t f | Toggle whether font-lock should be performed (`pm-debug-toggle-fontification`) M-n M-t p | Toggle post-command hook (`pm-debug-toggle-post-command`) M-n M-t c | Toggle after-change hook (`pm-debug-toggle-after-change`) M-n M-t a | Toggle all (`pm-debug-toggle-all`) M-n M-t t | Toggle tracing (`pm-toggle-tracing`) M-n M-t v | Toggle verbose messages from polymode (`pm-debug-toggle-verbose`) M-n M-f s | Fontify current span (useful for font-lock debugging when font-lock is off) (`pm-debug-fontify-current-span`) M-n M-f b | Fontify current buffer (`pm-debug-fontify-current-buffer`) `pm-toggle-tracing` and `pm-trace` are particularly useful to debug syntax and font-lock calls.