2013-07-16 24 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