如何在查找过程中显示文件

目前,我使用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

上一篇: How to display file while still in find

下一篇: GetAsync for fbcdn returns 403 forbidden?