I wrote: > This code solves many problems of `hs-hide-block' mentioned in the > first mail, but it breaks `hs-hide-level'. It seems that current > MDATA-SELECTOR support is limited and needs some fixes if we want to > do something like above. I will look into this a little bit more. There are some problems in this approach. The biggest one is the way of processing in `hs-hide-level-recursive'. It basically repeats: 1. hs-hide-block-at-point 2. forward-comment 3. re-search-forward hs-block-start-regexp Let me explain with the following code: #+begin_src python class C: def a(): pass def b(): pass #+end_src Let's assume that point is at the beginning of the line "def a():". The first step hides the method "a" and moves the point to the end of the block. The second step moves the point to the position "d" of "def b():", not the beginning of the line. Therefore, if hs-block-start-regexp contains rx line-start, it fails to match "def b():". Although this can be solved by adding a flag or a mode specific forward-comment function to hs-special-modes-alist, I'm not sure if it is the right approach. So I think the following setting is best at this moment. #+begin_src elisp (add-to-list 'hs-special-modes-alist `(python-mode ,(python-rx (seq (* (syntax ?-)) block-start)) ;; Use the empty string as end regexp so it doesn't default to ;; "\\s)". This way parens at end of defun are properly hidden. "" "#" python-hideshow-forward-sexp-function nil)) #+end_src (* (syntax ?-)) corresponds to "\\s-*" of the current regexp. It allows the point to be located before the block start symbols. Another idea to improve the behavior of hiding a block is to provide a wrapper function of `hs-hide-block' as follows and remap the key bindings to this function like `python-mark-defun'. With this approach, C-c @ C-d and C-c @ C-h work as expected with the example shown in the first mail. #+begin_src elisp (defun python-hideshow-hide-block (&optional end) "Python specific `hs-hide-block' function for `hs-minor-mode'. Argument END is passed to `hs-hide-block'." (interactive "P") (python-nav-beginning-of-block) (hs-hide-block end)) #+end_src Attached is a PoC level patch of this approach. What do you think of this approach? Regards,