-
-
Save alphapapa/54761d6d507553f5a399 to your computer and use it in GitHub Desktop.
(defun python-mode-outline-hook () | |
(setq outline-level 'python-outline-level) | |
(setq outline-regexp | |
(rx (or | |
;; Commented outline heading | |
(group | |
(* space) ; 0 or more spaces | |
(one-or-more (syntax comment-start)) | |
(one-or-more space) | |
;; Heading level | |
(group (repeat 1 8 "\*")) ; Outline stars | |
(one-or-more space)) | |
;; Python keyword heading | |
(group | |
;; Heading level | |
(group (* space)) ; 0 or more spaces | |
bow | |
;; Keywords | |
(or "class" "def" "else" "elif" "except" "for" "if" "try" "while") | |
eow))))) | |
(defun python-outline-level () | |
(or | |
;; Commented outline heading | |
(and (string-match (rx | |
(* space) | |
(one-or-more (syntax comment-start)) | |
(one-or-more space) | |
(group (one-or-more "\*")) | |
(one-or-more space)) | |
(match-string 0)) | |
(- (match-end 0) (match-beginning 0))) | |
;; Python keyword heading, set by number of indentions | |
;; Add 8 (the highest standard outline level) to every Python keyword heading | |
(+ 8 (- (match-end 0) (match-beginning 0))))) | |
(add-hook 'python-mode-hook 'python-mode-outline-hook) |
Thanks. I'm not that interested in this kind of language-specific folding anymore, because it can be somewhat brittle and confusing at times, so I think I'll let you take this from here. :)
Update, it works but it is not the best abstraction. Python code is not an outline in the sense of emacs outlines.
I'm trying @tarsius bicycle that combines outline-minor-mode with hideshow.
Also trying selective-display from suggestions here
fwiw
Update 2: wait, yafolding seems best yet. But I tried it earlier and rejected it??? oh well.
Thanks, this works well with outline-minor-mode.
Would it be possible to do something similar with outshine ? I tried without success.
Thanks, this works well with outline-minor-mode. Would it be possible to do something similar with outshine ? I tried without success.
Generally, Outshine isn't designed to be terribly extensible or customizeable, but you might be able to customize the corresponding outshine
variables to achieve a similar effect.
Simple seems best, this works in all test cases
ADD: almost, not exact. it matches 3 or more contiguous " . I am happy with this already but I'll try and get it exact.
ADD2: oh, finding the gist was just googling around. It was really frustrating, there were no good solutions anywhere and I'm surprised since docstrings can get quite large and are a real annoyance for code readability.
I think your 2 gists for python folding and my docstring one should be posted somewhere; I will bring it up for spacemacs as well.