5

Haskell ソース ファイルを編集しています。Inferior-haskell バッファー (既に別のフレームで開かれている) でメイン関数を実行し、ソース ファイルの編集を続けたいと考えています。これを行うために、私は

C-c C-l、フレームを変更、main<ret>、元のフレームに戻す

これはかなり非効率に思えます。ワンショットで実行できる emacs 関数/キーが欲しいです。

4

2 に答える 2

7

実際には、これを行う関数が : で既に定義されていinf-haskell.elますinferior-haskell-load-and-run。これにより、現在のファイルが読み込まれ、実行され:mainます。

フックを追加することで、Haskell モードでキーにバインドできます。

(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)

ただし、これを少しいじってみると、私のコンピューターには奇妙な問題があるようです。*haskell*バッファーにポップすると、ポイントが最後に移動しないことがあります。これはかなり面倒だと思います。ポイントを自分で最後に移動することで、簡単に修正できます。

(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))

sleep-forHaskell コマンドは非同期で実行され、戻るのに少し時間がかかるため、必要だと思います。この全体はハックのようなものですが、うまくいくようです。

また、 が何であるかを正確にカスタマイズすることもできますinferior-haskell-run-command。デフォルトでは、です:main。しかし、私にとっては、そうでないところに影響を受けるmainので、ちょうど良いと思います。main:set args ...:main

現在の Haskell バッファに留まりたい場合は、次のようにします。

(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)))
于 2012-11-03T21:50:38.597 に答える