Skip to content

Instantly share code, notes, and snippets.

@dsjt
Last active February 10, 2024 06:46
Show Gist options
  • Save dsjt/24fa4e68637f7927b1b720f505109aec to your computer and use it in GitHub Desktop.
Save dsjt/24fa4e68637f7927b1b720f505109aec to your computer and use it in GitHub Desktop.
hideshow config for python
(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)
@Ynjxsjmh
Copy link

Ynjxsjmh commented Jul 4, 2021

python-mode-hook invokes #'hs-minor-mode after #'my/replace-hs-special

How do you know this, is there any tool to debug this?

@dsjt
Copy link
Author

dsjt commented Jul 4, 2021

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.

@Ynjxsjmh
Copy link

Ynjxsjmh commented Jul 4, 2021

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