Skip to content

Instantly share code, notes, and snippets.

@kcsongor
Last active November 20, 2020 12:32
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kcsongor/2a3cff5f1392d0ab96f2c760a0a2af03 to your computer and use it in GitHub Desktop.
Save kcsongor/2a3cff5f1392d0ab96f2c760a0a2af03 to your computer and use it in GitHub Desktop.
Automatically reload interactive haskell-mode buffers (Doom emacs)
(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