2013-07-16 54 views
0

我有了這個功能在我.bash_rc:調用帶有參數的自定義功能的Emacs

function ForwardSearchXdvi {
latex -src *.tex;
for i in *.dvi; do xdvi -sourceposition "$1 ${i/.dvi/.tex}" $i; done ;
}

它的工作......我通過命令行調用它用$ 1參數(我的file.tex中的目標行號),並沒有問題。

我想直接從Emacs中運行它,所以我做這個命令:

(defun ForwardXdviSearch()
(interactive)
(shell-command (format "bash -ic %s" (shell-quote-argument "latex -src J[HCI]*.tex; for i in J[HCI]*.dvi; do xdvi -sourceposition \"$1 ${i/.dvi/.tex}\" $i; done ;")))
)

我如何能在參數$ 1個行程的功能時,我用「Mx Function」調用它?

+0

請務必閱讀'章˚Finteractive' – phils

回答

2

您需要使用特殊形式interactive來閱讀參數。事情是這樣的未經測試的代碼:

(defun forward-xdvi-search (line-number) 
    (interactive "nForward to line: ") 
    (shell-command 
    (format "bash -ic %s" 
      (shell-quote-argument 
      (format "latex -src J[HCI]\*.tex; for i in J[HCI]\*.dvi; do xdvi -sourceposition \"%d ${i/.dvi/.tex}\" $i; done ;" 
        line-number))))) 

編輯與@phils建議的改進

+1

'interactive'有閱讀數字的代碼,所以你可以使用'」 n前進行:「' – phils

+0

它不適用於我。我得到:'錯誤的參數數目:(lambda(line)(interactive)(shell-command(format'bash -ic%s'(shell-quote-argument「latex -src J [HCI] *。tex; for i在J [HCI] *。dvi; do xdvi -sourceposition \「$ 1 $ {i/.dvi/.tex} \」$ i; done;「)))),0' –

+0

@phils正確!我應該自己閱讀'C-h f interactive':-)用你的建議更新代碼。 – juanleon