Last active
February 10, 2024 06:46
-
-
Save dsjt/24fa4e68637f7927b1b720f505109aec to your computer and use it in GitHub Desktop.
hideshow config for python
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
(require 'hideshow) | |
(define-key hs-minor-mode-map (kbd "C-^") 'hs-toggle-hiding) | |
(add-hook 'python-mode-hook 'hs-minor-mode) | |
(defun display-code-line-counts (ov) | |
(when (eq 'code (overlay-get ov 'hs)) | |
(overlay-put ov 'display | |
(format " ... [%d]" | |
(count-lines (overlay-start ov) | |
(overlay-end ov)))) | |
(overlay-put ov 'face '(:foreground "yellow green")))) | |
(setq hs-set-up-overlay 'display-code-line-counts) |
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
(defvar my/py-hide-show-keywords '("class" "def" "elif" "else" "except" | |
"for" "if" "while" "finally" "try" "with")) | |
(defun my/replace-hs-special () | |
(setq hs-special-modes-alist | |
(remove-if #'(lambda (x) (equal 'python-mode (car x))) | |
hs-special-modes-alist)) | |
(push (list | |
'python-mode | |
(mapconcat #'(lambda (x) (concat "^\\s-*" x "\\>")) | |
my/py-hide-show-keywords "\\|") | |
"^\\s-*" | |
"#" | |
#'(lambda (x) (python-nav-end-of-block)) | |
nil) | |
hs-special-modes-alist) | |
(hs-grok-mode-type)) | |
(add-hook 'python-mode-hook 'my/replace-hs-special) |
It seems correct.
In my environment, python-mode-hook invokes #'hs-minor-mode after #'my/replace-hs-special, so it works.
If not, it needs #'hs-grok-mode-type.
I added it. thx
python-mode-hook invokes #'hs-minor-mode after #'my/replace-hs-special
How do you know this, is there any tool to debug this?
It may not be accurate. I just confirmed that when I swapped the order of (add-hook 'python-mode-hook 'my/replace-hs-special)
and (add-hook 'python-mode-hook 'hs-minor-mode)
, it didn't work.
I didn't use any debugging tools.
That's where the problem lies. I actually didn't config (add-hook 'python-mode-hook 'hs-minor-mode)
at all.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Still doesn't work on newly added keyword like
if
,for
etc. It doesn't give any warning or error, it just doesn't fold on those keywords.The value of
hs-special-modes-alist
isHere is a workable script
https://github.com/braineo/fate-emacs/blob/93879b65dfa2c6459243d2dc3448c87bb2e86f7c/modules/fate-python.el#L27-L43
After comparison, it seems that the problem is the miss of
(hs-grok-mode-type)
.