I’m finding that defining outline-regexp
does not do for me in python-mode
what it does for me in other language modes. Someone else on Stack Exchange ran into the same problem, and a suggested answer to their question makes it clear that python-mode
preconfigures some definitions for outline-minor-mode
. But what those preconfigurations are, and more importantly how to use them, is not documented anywhere I can find.
M-x find-library python
, followed byC-s outline-
shows what’s happening:python-base-mode
sets the local outline variables locally, in its mode body. Since mode hooks always run after the body of their mode definitions, you could add a bit of code to thepython-base-mode-hook
(or a parent of it, likeprog-mode-hook
) setting your desired outline config there (i.e. overwriting what python mode did).I do that using outli simply (in a use-package stanza):
:hook ((prog-mode text-mode) . outli-mode))
BTW, here’s a handy guide (from this epic answer) to what runs in which order upon invoking a derived major mode like
python-ts-mode
:So when we call (child-mode), the full sequence is: (run-hooks 'change-major-mode-hook) ;; actually the first thing done by (kill-all-local-variables) ;; <-- this function ,@grandparent-body ,@parent-body ,@child-body (run-hooks 'change-major-mode-after-body-hook) (run-hooks 'grandparent-mode-hook) (run-hooks 'parent-mode-hook) (run-hooks 'child-mode-hook) (run-hooks 'after-change-major-mode-hook)
Beyond an overview in the manual. I’m not aware of any documentation outside of the source in outline.el which defines
outline-regexp
to match the beginning of a heading,outline-heading-end-regexp
to match the end of a heading,outline-search-function
to advance to the next heading, andoutline-level
to figure out the level of the heading which can be used withoutline-heading-alist
.python.el provides values for
outline-regexp,
outline-heading-end-regexp,
andoutline-level
which mostly work for me except for decorators and parametrized test cases.The Stack Exchange discussion gives an example of customizing the values using a hook into
python-mode
.