2014-11-18 13 views
8

Trong chế độ org, một dòng bắt đầu bằng dấu hai chấm được định dạng dưới dạng mã nguồn. (http://orgmode.org/manual/Literal-examples.html)Emacs Org-Mode & Literate Haskell

Trong Haskell theo nghĩa đen, dòng mã nguồn bắt đầu bằng ký hiệu lớn hơn sau đó.

Tôi muốn viết Haskell theo nghĩa đen với đánh dấu chế độ org, định dạng ưa thích hiện tại của tôi.

Như tôi đã giả định rằng tôi không thể thay đổi trình biên dịch Haskell, câu hỏi của tôi là:

Tôi có thể bằng cách nào đó làm cho lớn hơn ký đánh dấu mã dòng trong chế độ org? (Tôi đã cố gắng tự tìm ra nó, nhưng vì org.el là một tệp 865k, 22k loc, tôi vẫn bị mất.)

Trả lời

0

Vì vậy, rõ ràng đây không phải là cách dự định để sử dụng tổ chức.

Vấn đề chính khi thực hiện điều này là cả hai chế độ org và chế độ haskell đều là các chế độ chính. Vì vậy, tôi không thể sử dụng chúng song song.

Tuy nhiên đây là cách nó hoạt động, nó là một hack, và tôi không chắc chắn về tác dụng phụ ..:

Khi xem một tập tin trong emacs, các (a) mã kích hoạt có vẻ là trong org-activate-code (org.el), nhưng điều này không được sử dụng để xuất. Đối với xuất HTML, tôi cũng phải chạm vào org-html.el.

tôi đã thay đổi:

Phù org.el 5378, hoạt động org-kích hoạt mã từ

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

để

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

Và trong dòng org-html.el 1508 và 1516, hàm org-export-as-html từ

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

để

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

và (dòng 1516)

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

Nhìn vào nó tôi cho rằng điều này đã được điều chỉnh cho mỗi kênh xuất khẩu một dự định sử dụng.

4

Không phải là câu trả lời chính xác cho câu hỏi của bạn, mà là một ví dụ về cách viết Haskell theo nghĩa đen org: https://github.com/haroldcarr/make-mp3-copies

README.org là chữ Haskell, MakeMP3Copies.hs là tệp haskell kết quả bị "rối" trong tệp .org.

tôi xuất khẩu sang HTML và công bố trên blog của tôi: http://haroldcarr.com/posts/2013-09-11-flac-to-mp3-via-haskell-shelly-and-ffmpeg.html

Các README.org cũng autorenders trên github (mặc dù có một số nội dung trong autorendering mà chỉ có nghĩa là cho HTML mà tôi đã không dành thời gian để sửa chữa).

+0

Điều này có vẻ là cách dự định, không phải loại hack mà tôi đã yêu cầu :-) – Falko

3

Tôi đã có động cơ cơ bản giống nhau, để sử dụng đánh dấu chế độ org cho các chương trình biết chữ Haskell (Bird style) của tôi.Tôi đã kết thúc bằng cách sử dụng multi-mode cho phép nhiều chế độ chính emacs được sử dụng cho các vùng khác nhau trong cùng một bộ đệm (có others nhưng đa chế độ phù hợp với yêu cầu của tôi). Tôi đã nấu haskell-org cho phép chế độ org và chế độ haskell được sử dụng trong một bộ đệm đơn thông qua chế độ đa.

Chi tiết khác trong số blog entry này. Các thiết lập hoạt động tốt, đủ để tôi sử dụng nó cho mã hóa Haskell của tôi.

2

Tôi hơi trễ một chút, nhưng gần đây tôi đã bắt đầu làm việc với 99 vấn đề Haskell và quyết định thu thập tác phẩm của tôi trong tệp chế độ tổ chức.

Cách mã hóa của lập trình biết chữ (như tôi hiểu), là đóng gói các khối mã nguồn trong khối BEGIN/END. Ví dụ,

#+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 

một tài liệu orgmode có cấu trúc như vậy thì có thể

  • xuất khẩu Xuất khẩu là việc chuyển đổi một tập tin orgmode đến một trong một số định dạng tập tin khác bằng phương tiện của một phụ trợ. Một số định dạng đó là PDF, LateX hoặc HTML.

  • rối Điều này đi theo hướng lập trình biết chữ và dệt. Các khối mã có thể được xuất sang các tệp nguồn thuần túy. Đây là những gì tôi làm trong tập tin 99 vấn đề của tôi.

  • được thực thi Các khối mã nguồn có thể được thực thi và kết quả của việc thực thi này có thể được đặt trực tiếp vào tệp orgmode. Tôi chưa thử cái này cho haskell.

Bạn có thể có một cái nhìn tại những cố gắng của tôi tại github: https://github.com/dischoen/H99 Ở đó tôi rối file orgmode đến hai tập tin Haskell, một mô-đun và khai thác thử nghiệm, sau đó có thể được kiểm tra trong GHC hoặc ghci.

+0

Đó là mục đích sử dụng, đúng :-) – Falko

Các vấn đề liên quan