2014-11-18 2 views
8

В org-mode строка, начинающаяся с двоеточия, отформатирована как исходный код. (http://orgmode.org/manual/Literal-examples.html)Emacs Org-Mode & Literate Haskell

В грамотном Haskell строки исходного кода начинаются с знака большего размера.

Я хочу написать грамотный Haskell с уценкой org-mode, моим текущим предпочтительным форматом.

Как я предполагаю, что я не могу изменить компилятор Haskell, мой вопрос:

Могу ли я каким-то образом сделать больше, чем подписать маркер кода строки в орг режиме? (Я пытался найти его сам, но поскольку org.el - это файл 865k, 22k loc, я все еще теряюсь.)

ответ

0

Таким образом, очевидно, что это не предназначенные способы использования org.

Основная проблема при этом заключается в том, что оба режима org-mode и haskell-mode являются основными режимами. Поэтому я не могу использовать их параллельно.

Тем не менее, это, как это работает, это хак, и я не уверен, о побочных эффектах ..:

При просмотре файла в Emacs, то (? А) триггер код, кажется, в org-activate-code (org.el), но это не используется для экспорта. Для экспорта HTML мне пришлось прикоснуться к org-html.el тоже.

Я изменил:

В org.el линии 5378, функция орг-Activate-код из

"^[ \t]*\\(:\\(?: .*\\|$\\)\n?\\)" 

в

"^[ \t]*\\([:>]\\(?: .*\\|$\\)\n?\\)" 

И в орг-html.el линии 1508 и 1516, функция org-export-as-html от

(string-match "^[ \t]*:\\(\\([ \t]\\|$\\)\\(.*\\)\\)" line) 

к

(string-match "^[ \t]*[:>]\\(\\([ \t]\\|$\\)\\(.*\\)\\)" line) 

и (линия 1516)

(string-match "^[ \t]*[:>]\\(\\([ \t]\\|$\\)\\(.*\\)\\)" 

Глядя на него я предполагаю, что это должно быть адаптировано для каждого экспортного канала один намеревается использовать.

4

Неточный ответ на ваш вопрос, но пример того, как я пишу грамотную Haskell, используя org: https://github.com/haroldcarr/make-mp3-copies

README.org - это грамотный Haskell, MakeMP3Copies.hs - это полученный файл haskell, «запутанный» из файла .org.

экспортировать в HTML и публиковать на своем блоге: http://haroldcarr.com/posts/2013-09-11-flac-to-mp3-via-haskell-shelly-and-ffmpeg.html

README.org также autorenders на GitHub (хотя есть некоторые вещи в авторендеринг, что предназначен только для HTML, что я не взял время на исправить).

+0

Кажется, это намеченный путь, а не такой взлом, который я просил :-) – Falko

3

У меня была по существу такая же мотивация, чтобы использовать разметку org-mode для моих грамотных программ Haskell (Bird style).В итоге я использовал multi-mode, который позволяет использовать несколько основных режимов emacs для разных регионов в одном буфере (есть others, но многорежим соответствует моим требованиям). Я приготовил haskell-org, который позволяет использовать режим org-mode и haskell-mode в одном буфере через многорежимный режим.

Подробнее об этом blog entry. Настройка работает достаточно хорошо, и я использую ее для кодирования Haskell.

2

Я немного опоздал, но недавно я начал работать над проблемами 99 Haskell и решил собрать свою работу в файле режима org.

Оргмод способ грамотного программирования (как я понимаю) заключается в инкапсуляции блоков исходного кода в блоки BEGIN/END. Например,

#+BEGIN_SRC hs :tangle yes 
myReverse :: [a] -> [a] 
myReverse l = myReverse' l [] 
myReverse' [] accu = accu 
myReverse' (x:xs) accu = myReverse' xs (x:accu) 
#+END_SRC 

Такой структурированный документ orgmode может затем быть

  • экспортируется Экспортные является преобразованием файла orgmode к одному из нескольких других форматов файлов с помощью внутреннего интерфейса. Некоторые из этих форматов - PDF, LateX или HTML.

  • запутанный Это идет в направлении грамотного программирования и ткачество. Блоки кода могут быть экспортированы в файлы с чистым исходным кодом. Это то, что я делаю в моем 99 проблемах.

  • выполнено Блоки исходного кода могут быть выполнены, и результат этого выполнения может быть помещен непосредственно в файл orgmode. Я еще не пробовал это для haskell.

Вы можете посмотреть на мои попытки на GitHub: https://github.com/dischoen/H99 Там я запутать файл orgmode до двух Haskell файлов, модуль и тестового жгута проводов, которые затем могут быть проверены в GHC или GHCI.

+0

Это намеренное использование, прямо :-) – Falko

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