私はこれがどのように動作するか見当もつかないので、私はちょうど1コードを読み取ることによって、それを把握することができますどのように文書化:
openwith.elで重要なコードはインプロセスを開始するための呼び出しです:
(dolist (oa openwith-associations)
(let (match)
(save-match-data
(setq match (string-match (car oa) (car args))))
(when match
(let ((params (mapcar (lambda (x)
(if (eq x 'file)
(car args)
(format "%s" x))) (nth 2 oa))))
(apply #'start-process "openwith-process" nil
(cadr oa) params))
(kill-buffer nil)
(throw 'openwith-done t))))
ザ・あなたのケースでOAは次のような構造を持っているでしょうし、CADRは「xfigの」です:
(cadr '("\.fig\'" "xfig" (file))) ;; expands to => xfig
これは、開始プロセスの定義、およびドキュメントです:
機能:起動プロセス名のバッファまたは名プログラム&残りの引数http://www.gnu.org/software/emacs/elisp/html_node/Asynchronous-Processes.html
args, are strings that specify command line arguments for the program.
例 :
(start-process "my-process" "foo" "ls" "-l" "/user/lewis/bin")
は、今、私たちはparamsを構築する方法を把握する必要があります。あなたの例ではでmapcarの引数は次のとおりです。あなたがで、このような行を書くことができところで
(nth 2 '("\.fig\'" "xfig" (file))) ;=> (file)
は、Emacsでバッファを傷つけるとC-M-Xでそれらを実行します。
(car args)は、openwith-associationに与えたパラメータを参照しています。「ファイルin(nth 2 oa)」がどのように置き換えられているかに注意してください。私はここでそれを "ここに置き換えます。今のTXT」:
(mapcar (lambda (x)
(if (eq x 'file)
"here.txt"
(format "%s" x))) (nth 2 '("\.fig\'" "xfig" (file)))) ;=> ("here.txt")
さて、今私たちは、引数を構築する方法を参照してください。あなたがシングルとして各単語を供給する必要が
(setq openwith-associations
'(("\\.fig\\'" "xfig" ("-specialtext" "-latexfont" "-startlatexFont" "default" file))))
:
(mapcar (lambda (x)
(if (eq x 'file)
"here.txt"
(format "%s" x)))
(nth 2 '("\.fig\'" "xfig"
("-specialtext" "-latexfont" "-startlatexFont" "default" file))))
; => ("-specialtext" "-latexfont" "-startlatexFont" "default" "here.txt")
はこれを試してみてくださいパラメータのリストの文字列。
Noufal Ibrahimは編集しました(正しくは、openwith.elの文字列には常に2つのバックスラッシュがあります)。あなたの質問にはスラッシュ。私の答えの最後の例は正しいはずです。 – whoplisp
ありがとう、それは動作しますが、私はゆっくりと方法を理解します。 – anonymous