冗長性を持たない1つのファイルで複数のコードを生成するorg-modeを取得するにはどうすればよいですか?

org-modeを使用して生成されたコードをレンダリングする方法はありますか?へのフォローアップ)

#+BEGIN_SRC sh :exports results :results output :wrap SRC haskell
sed '/^elts/,$p' -n Heap03.hs
#+END_SRC

orgモードのエクスポートで表示するファイルからHaskellコードを抽出することができます。私が思いついたハックの事実上、より安全でより慣れ親しんだバージョンです:

#+BEGIN_SRC sh :exports results :results output verbatim raw
echo '#+BEGIN_SRC haskell'
sed '/^elts/,$p' -n Heap03.hs
echo '#+END_SRC'
#+END_SRC

今私はもっと抽象化したい。例えば:

#+NAME: inline
#+BEGIN_SRC sh :exports none :results output verbatim raw
echo '#+BEGIN_SRC haskell'
echo "[[./$FILE][$FILE]]"
sed '/^elts/,$p' -n $FILE
echo '#+END_SRC'
#+END_SRC

#+CALL: inline(FILE="Heap01.hs")
#+CALL: inline(FILE="Heap02.hs")

私が満足しようとしている(そして問題を抱えている)2つの基準は次のとおりです。

  1. Haskellコードの上に自動的に挿入されたファイルへのリンクが必要です。
  2. 可能な限り最小限に抑える必要があります。

私は:wrap を使って第1の基準を満たす方法を考え出していません。第2の基準に向かってできることは、#+ CALL:inline(FILE = "Heap01.hs "):SRC haskellをラップしてください。これは私の好みのためにちょっと重すぎます。

ありがとう!

0

1 答え

方法について(注意:after nameと:varの定義):

#+name: inline
#+BEGIN_SRC sh :exports none :results output verbatim raw :var FILE=""
echo "[[./$FILE][$FILE]]"
echo '#+BEGIN_SRC haskell'
sed '/^elts/,$p' -n $FILE
cat $FILE
echo '\n#+END_SRC'
#+END_SRC

そして(生の結果が)

#+CALL: inline(FILE="Heap01.hs") :results raw
1
追加された
(コロンの欠如は私の部分では単なる転写エラーでした)Haskellファイルに抽出されたセクションに "#+ END_SRC"が含まれていれば、これは破損します。 org-mode 関数を呼び出す org-mode 関数を記述しようとしましたが、動作させることができませんでした。私はちょうど問題にいくつかのelispをスローする必要がありますかと思います。
追加された 著者 jasonwryan,
いい理由はない。部分的には、私は org-mode の機能を探求しています。部分的には、私の最初の本能は、プログレッションを示すために同じようなHaskellファイルを作成することでしたが、インラインの部分だけを表示していました。
追加された 著者 jasonwryan,
#+ END_SRCとして#+ END_SRCをエスケープしたいと考えています。 * as、*で始まる行もエスケープしてください。あなたは絡み合っているのとは反対の方向に向かっているようです。なぜあなたのhaskellコードをorgに入れて、逆ではなく出かけるためにもつれを使うのですか?
追加された 著者 Maximus Minimus,