我試圖添加一些設施到Emacs中的我的matlab環境。 基本上,我想要一個額外的緩衝區(* Matlab Whos *)來顯示我所有的變量。在之後,緩衝區應該自動更新matlab-shell完成評估表達式。換句話說,之後我按下了返回的shell,一個鉤子應該調用一個函數來更新* Matlab Whos *。跟蹤緩衝區更改並在Emacs事件後觸發一個鉤子
我想出了一個簡單的解決方案是:
(defvar matlab-whos-buffer-name "*Matlab Whos*")
(defun matlab-whos-buffer-update()
"Create Matlab Whos buffer if it doesn't exist.
If it exists, update its values."
(lambda)
(interactive)
(let ((doc-whos (matlab-shell-collect-command-output "whos")))
(with-current-buffer (get-buffer-create matlab-whos-buffer-name)
(erase-buffer)
(insert doc-whos))))
(add-hook 'matlab-shell-mode-hook
(lambda()
(define-key matlab-shell-mode-map (kbd "<return>")
(lambda()
(interactive)
(comint-send-input)
(matlab-whos-buffer-update)))))
matlab-whos-buffer-update
正常工作的功能。然而,這個解決方案的問題是我的鉤子在matlab shell完成評估之前調用函數(請求(comint-send-input)
)。因此,matlab-whos-buffer-update
返回一個錯誤說:
Matlab的殼收集命令輸出:MATLAB外殼必須是非忙着 做到這一點。
如何跟蹤我的Matlab shell緩衝區的更改,以便我的掛鉤知道在評估結果返回後它只能觸發matlab-whos-buffer-update
?
您是否嘗試過使用'COMINT輸出過濾函數'? – Drew
如何使用那個合適的ÿ?我只是嘗試'(加鉤'matlab-shell-mode-hook'(cons'matlab-whos-buffer-update'comint-output-filter-functions)',但那也不起作用。 – dangom
一般評論:一次添加一個函數到鉤子,比如'(add-hook'foo-hook'foo-func)'。在你的問題中沒有問題,但你的評論沒有問題。 – jpkotta