Last active
November 20, 2020 12:32
-
-
Save kcsongor/2a3cff5f1392d0ab96f2c760a0a2af03 to your computer and use it in GitHub Desktop.
Automatically reload interactive haskell-mode buffers (Doom emacs)
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
(add-hook 'interactive-haskell-mode-hook 'haskell-auto-reload-minor-mode) | |
(defvar haskell-auto-reload-every-n-sec 1 | |
"When non-nil, automatically reloads haskell buffers after Emacs has been idle for N seconds.") | |
(defvar haskell-reload-timer nil | |
"Variable used to store the idle timer.") | |
(define-minor-mode haskell-auto-reload-minor-mode | |
"Minor mode for automatically reloading interactive haskell buffers." | |
:lighter "HR" | |
(when haskell-reload-timer (cancel-timer haskell-reload-timer)) | |
(if haskell-auto-reload-minor-mode | |
(progn | |
;; don't trim whitespace in the buffer | |
(when (featurep 'ws-butler) | |
(setq ws-butler-keep-whitespace-before-point t)) | |
(add-hook 'after-save-hook 'try-reload-haskell nil t) | |
(add-hook 'evil-normal-state-entry-hook 'try-save-haskell nil t) | |
(when haskell-auto-reload-every-n-sec | |
(setq haskell-reload-timer | |
(run-with-idle-timer | |
haskell-auto-reload-every-n-sec t | |
'try-save-haskell)))) | |
(progn | |
(remove-hook 'after-save-hook 'try-reload-haskell t)))) | |
(defun try-reload-haskell () | |
(when (and | |
(derived-mode-p 'haskell-mode) | |
(haskell-session-maybe)) | |
(haskell-process-reload))) | |
(defun try-save-haskell () | |
(when (and | |
(evil-normal-state-p) | |
(buffer-modified-p) | |
(derived-mode-p 'haskell-mode) | |
(haskell-session-maybe)) | |
(save-buffer))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment