對於那些不知道的人來說,imenu是emacs中的一個東西,它允許一個模式在菜單欄中插入一個或多個菜單項。最常見的用法是從下拉菜單中訪問「目錄」,以便用戶可以快速跳轉到文檔中的功能或類或部分的聲明等。如何異步運行elisp函數?
imenu有一對不同的工作方式 - 在第一種和更常用的方式中,主要模式爲imenu提供了正則表達式,imenu使用這些正則表達式執行緩衝區掃描並構建索引。主要模式通過將正則表的列表放入imenu-generic-expression
來設置它。第二種方式是讓主要模式執行自己的掃描。它可以通過將變量imenu-create-index-function
設置爲由mode定義的函數的名稱來實現,它返回一個包含目錄表的列表。
我正在做後者 - imenu-create-index-function
- 但有時fn需要一段時間才能運行,比如說3或4秒或更長時間,這會凍結用戶界面。如果我使操作異步,那就可以解決這個問題。
我瞭解異步流程。掃描邏輯在elisp中實現。是否有可能在異步過程中運行elisp?如果是這樣,怎麼樣?
或者,有沒有辦法在emacs中異步運行常規elisp,而不訴諸於異步進程?
我認爲字體鎖的方式,它閒置閒置。它一次保持狀態和小小的形象,永遠記住它停留的地方,還有什麼需要被建立,自從上一次分身運行以來發生了什麼變化,等等。我的理解是否正確?也許我可以使用這種漸進式方法。
建議?