2014-02-22 58 views
1

試圖在重新啓動後使用persp模式https://github.com/Bad-ptr/persp-mode.el/blob/master/persp-mode.el來檢索emacs窗口會話。無法讓它工作。在defun中調用表達式的順序*

所以試圖通過閱讀源代碼來了解用於存儲emacs狀態的數據結構。

以下是用於存儲會話狀態的函數。

(defun* persp-save-state-to-file (&optional (fname persp-auto-save-fname) 
              (phash *persp-hash*) 
              respect-persp-file-parameter) 
    (interactive (list (read-file-name "Save perspectives to file: " 
            persp-save-dir))) 

在上述函數的兩個不同尋常的事情是使用edebug(異常根據我的當前的elisp的理解)進行觀察。

  1. 評估可選參數表達式。

  2. 表達式「(互動......」第一次評估,然後可選參數表達式求值。

任何想法如何調試代碼。此外emacs的文件說,「defun定義*」與common-lisp有關,但沒有關於defun *與defun不同的更多信息可以在emacs文檔中找到。是否有快速教程噢defun *不需要學習common-lisp就可以做什麼

+0

>無法得到它的工作。 |什麼是錯誤的,不工作?任何錯誤消息? –

+0

@Bad_ptr:終於開始工作了。未找到錯誤的確切原因。但它與elc文件有關。 Persp模式依賴於「workspace」模式,我嘗試使用工作區包中的「wg-save」和「wg-load」命令,但它不起作用。但在workspace.el文件上使用(加載文件)工作。所以刪除workspace.el文件後,一切正常。 –

回答

1

看一看在this post一個簡單的片段解釋 如何可選作品。要點是例如如果沒有給出,那麼persp-auto-save-fname將是值fname

顯然interactive必須先運行,因爲它提供了參數。 因此,如果interactive不提供fname的值,它將是persp-auto-save-fname

3

Emacs的說:

定義名稱的功能。像普通的'defun'一樣,除了ARGLIST允許完整的Common Lisp約定,並且BODY隱含地被 (cl塊NAME ...)包圍。

Common Lisp arglists提供可選的rest,關鍵字和aux參數。歷史上來自Lisp Machine Lisp和Mumble--兩個較早的Lisp方言。

有關詳細信息,請參閱:http://www.gnu.org/software/emacs/manual/html_node/cl/Argument-Lists.html