-
-
Save dsjt/24fa4e68637f7927b1b720f505109aec to your computer and use it in GitHub Desktop.
(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) |
(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) |
Currently I use a different code. I modified 11th line at `hs-config-for-python.el' (and typo). Try it.
I have no idea without any information about your situaion such as error message.
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
is
Here is a workable script
After comparison, it seems that the problem is the miss of (hs-grok-mode-type)
.
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.
I have tried it, but it seems it doesn't work. Any idea?