In realtà esiste una funzione già definita in inf-haskell.el
: inferior-haskell-load-and-run
. Carica il tuo file corrente e viene eseguito :main
.
È possibile associare ad un tasto in modalità Haskell con l'aggiunta di un gancio:
(defun my-haskell-mode-hook()
(local-set-key (kbd "C-x C-r") 'inferior-haskell-load-and-run))
(add-hook 'haskell-mode-hook 'my-haskell-mode-hook)
Tuttavia, giocare con questo per un po ', sembra avere un problema strano sul mio computer: a volte , quando si apre sul buffer *haskell*
, non sposta il punto verso la fine. Trovo questo piuttosto fastidioso. Si può facilmente risolvere il problema spostando il punto fino alla fine da soli:
(defun my-haskell-load-and-run()
"Loads and runs the current Haskell file."
(interactive)
(inferior-haskell-load-and-run inferior-haskell-run-command)
(sleep-for 0 100)
(end-of-buffer))
Credo che il sleep-for
è necessaria perché il comando Haskell viene eseguito in modo asincrono e prende un po 'di tempo per tornare. Tutta questa faccenda è qualcosa di un hack, ma sembra funzionare.
Inoltre, è possibile personalizzare esattamente ciò che è inferior-haskell-run-command
. Per impostazione predefinita, è :main
. Tuttavia, per me, penso che solo main
sarebbe meglio perché main
è interessato da :set args ...
dove non lo è :main
.
Se si vuole rimanere nella vostra buffer di Haskell corrente, è possibile solo fare questo:
(defun my-haskell-load-and-run()
"Loads and runs the current Haskell file."
(interactive)
(let ((start-buffer (current-buffer)))
(inferior-haskell-load-and-run inferior-haskell-run-command)
(sleep-for 0 100)
(end-of-buffer)
(pop-to-buffer start-buffer)))
fonte
2012-11-03 21:50:38
Ciò funziona grande tranne il mio focus è sul telaio inferiore-Haskell alla fine. Mi piacerebbe che fosse sul file sorgente che stavo modificando. –
La soluzione più semplice sarebbe quella di tornare al buffer in cui hai iniziato. Lo modificherò nella mia risposta. –
Grazie. Per catturare tutte le eccezioni nel registro di Inf-Haskell, nel mio caso ho aumentato un po 'il tempo di attesa. (sleep-for 1 750) – Hartmut