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

Убедитесь, что вы читали 'Ch F interactive' – 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' имеет код для чисел чтения, так что вы можете использовать '» nForward to line: "' – phils

+0

Это не работает для меня. Я получаю: «Неверное количество аргументов: (lambda (строка) (интерактивный) (командная оболочка (формат« bash -ic% s »(shell-quote-argument» latex -src J [HCI] *. Tex; для i в J [HCI] *. dvi; do xdvi -sourceposition \ "$ 1 $ {i/.dvi/.tex} \" $ i; done; ")))), 0' –

+0

@phils Right! Я должен был прочитать 'C-h f interactive' себя :-) Обновил код с вашим предложением. – juanleon

Смежные вопросы