异步评估整个python或perl缓冲区

时间:2014-09-01 01:55:49

标签: python perl emacs elisp

我已经写了一些附加到我的F5和F6键的函数,这样当按下时,这些函数会评估perl或python的缓冲区内容。

;; F5 = perlevaluatie
(defun perl-eval ()
  "Run whole buffer as Perl code"
  (interactive)
  (shell-command-on-region (point-min) (point-max) "perl") ; feeds the region to perl on STDIN
)
(global-set-key (kbd "<f5>") 'perl-eval)

;; F6 = pythonevaluatie
(defun python-eval ()
  "Run whole buffer as Python code"
  (interactive)
  (shell-command-on-region (point-min) (point-max) "python")
)
(global-set-key (kbd "<f6>") 'python-eval)

但是,当我将这些函数用于长时间运行的脚本时,emacs会挂起。附加&amp;对shell-command函数没有帮助。有人知道让shell-command-on-region异步的方法吗?

提前致谢,

1 个答案:

答案 0 :(得分:0)

我使用compileM-x compileperl <file-name>。第一次运行后,您可以使用重新编译来重新运行它。

稍微多一点时间来输入文件的名称,但你获得了许多好东西,当然它也是异步的。

编辑:Bonus helper函数在第一次自动使用编译然后重新编译:

(defun my-recompile ()
  "Recompile if possible, otherwise compile current buffer."
  (interactive)
  ;; If recompile exists do it, else compile
  (if (fboundp 'recompile) (recompile)
    (compile "make -k")))

并在适当的钩子绑定类似

的东西
(local-set-key (kbd "<f5>") 'my-recompile)
(local-set-key (kbd "<C-f5>") 'compile)