如何在查找过程中显示文件
目前,我使用find-file-hook
来调用冗长的编译/检查该文件。 因此,我需要等待一段时间才能看到文件。 我想要做的是在检查器运行时能够查看(不编辑)文件,从而创建即时编译的错觉。 我怎样才能做到这一点?
使用find-file-hook
意味着您的代码将在您打开的每个文件上运行; 你确定你想要这个吗? 为要运行验证的文件类型创建新的主要或次要模式,然后使用相应的模式钩子可能更有意义。 例如,如果您想检查所有的.chk文件(使用从prog-mode
继承的新主prog-mode
):
(define-derived-mode check-mode prog-mode "Checker")
(add-to-list 'auto-mode-alist '(".chk'" . check-mode))
(add-hook 'check-mode-hook 'check-mode-computation-hook)
至于实际的钩子,这个代码(去掉phils的评论)适用于我:
;;; -*- lexical-binding: t -*-
(defun slow-computation ()
(dotimes (i 10000000)
(+ i 1)))
(defun check-mode-computation-hook ()
(let ((cb (current-buffer))
(ro buffer-read-only))
(setq-local buffer-read-only t)
(run-at-time .1 nil
(lambda ()
(with-current-buffer cb
(message "Loading...")
(slow-computation)
(setq-local buffer-read-only ro)
(message "Loaded!"))))))
但请注意,虽然这将显示文件,但emacs仍会冻结,直到它完成处理,因为emacs实际上不支持多线程。 为了解决这个问题,你可能必须使用像异步,延迟或并发这样的库。
您应该考虑使用Flycheck,它为大多数编程语言提供异步语法检查,并为实现新/定制检查程序提供了一个很好的API。
链接地址: http://www.djcxy.com/p/93899.html