2010-08-04 31 views
43

Có thể trình bày Markdown được hiển thị trong bộ đệm Emacs bằng cách sử dụng các khả năng định dạng văn bản đệm của Emacs không? Emacs trong môi trường đồ họa có khả năng trình bày văn bản phong phú (kiểu phông chữ, màu sắc, liên kết và thậm chí cả hình ảnh) vì vậy nó sẽ khá tốt. Có bất kỳ triển khai hiện có nào không?Render Markdown trong bộ đệm Emacs

Lưu ý rằng ý tưởng là để hiển thị Markdown là văn bản được định dạng Emac gốc có thể được điều hướng và hoạt động trên bất kỳ văn bản nào khác trong Emacs. Do đó các giải pháp đưa ra một hình ảnh được nhúng trong bộ đệm Emacs không được mong muốn ở đây.

Cũng lưu ý rằng đây là không phải về một chế độ để chỉnh sửa Đánh dấu, nhưng để hiển thị Markdown được hiển thị trong bộ đệm Emacs. Tốt nhất nên là giải pháp Emacs Lisp thuần khiết cho tính di động.

+0

Bất kỳ yêu cầu cụ thể nào? Cũng giống như "đánh dấu" không có nghĩa là HTML, "markdown" là khá mơ hồ. – phils

+1

Đánh dấu như trong bất kỳ phương ngữ Markdown nào, nếu đó là ý của bạn! –

Trả lời

6

Tôi đoán bạn có thể sử dụng mã nguồn của latex-preview để lấy cảm hứng hoặc pretty-lambda (một phần mềm đơn giản hơn nhiều).

Hoặc bạn có thể chuyển đổi đánh dấu thành html trong quá trình nền và xem trước html.

Mọi thứ đều có thể trong Emacs, nhưng không phải tất cả mọi thứ có thể dễ dàng đạt được :-)

+1

Cảm ơn bạn đã đề cập đến latex-preview. Tuy nhiên, tôi không muốn hiển thị Markdown dưới dạng hình ảnh được nhúng trong bộ đệm Emacs, nhưng dưới dạng văn bản được định dạng Emac gốc có thể được điều hướng và hoạt động trên bất kỳ văn bản nào khác. Có lẽ một cái gì đó có thể được học từ khá lambda mặc dù. –

1

Nếu nó chỉ là về vẽ, đi với đề nghị Bozhidar và làm một Markdown để chuyển đổi HTML, sau đó hiển thị HTML trong một W3 đệm. markdown-mode có mã để gọi lệnh Markdown bên ngoài với một vài tính năng.

Nhưng nếu bạn thực sự muốn làm mọi thứ trong Emacs Lisp, trước tiên bạn sẽ phải viết trình phân tích cú pháp Markdown.

+1

Cảm ơn bạn, nhưng tôi thực sự muốn có tất cả trong Emacs Lisp cho tính di động. Vì vậy, tôi hy vọng sẽ tìm thấy một trình phân tích cú pháp Emacs Lisp Markdown hiện có. –

3

Vì tôi không biết về bất kỳ trình phân tích cú pháp Markdown dựa trên emacs nào, tôi phải nói rằng bạn phải mã hóa một từ đầu. Có lẽ this SO câu hỏi có thể ném một số con trỏ vào bạn.

Nếu bạn chọn đi qua con đường chỉ Emacs, thì Semantic là một API tuyệt vời cho công việc đó (nó cung cấp cho bạn một trình phân tích cú pháp, trình phân tích cú pháp và trình phân tích cú pháp; có tài liệu!). Sau khi có trình phân tích cú pháp ngôn ngữ, bạn sẽ phải thực hiện một số chức năng hiển thị cho từng loại mã thông báo. Và theo cách này, bạn có thể tùy chỉnh mọi thứ.

Mặc dù đây sẽ là một chuyến đi khai sáng, chắc chắn tôi vẫn chọn sử dụng công cụ chuyển đổi Markdown-> html hiện có trên một quy trình nền riêng và sau đó sử dụng w3 (m) để xem trước emacs (như Bozhidar gợi ý). Nó hoàn thành công việc và đơn giản hơn nhiều. Không có vấn đề hiệu suất lớn, không - bạn nên chạy công cụ này khá hiếm, vì vậy bạn có thể dễ dàng phụ tùng thêm một số mili giây).

Một giải pháp hỗn hợp là làm cho trình phân tích cú pháp Markdown tạo HTML trực tiếp và xem trước nó trên bộ đệm w3 (m) (nó lấy đi trọng lượng hiển thị từ vai của bạn, bạn chỉ cần chuyển đổi đánh dấu thành html và có vẻ khá thẳng về phía trước với Semantic).

+0

Cảm ơn bạn đã liên kết đến câu hỏi về phân tích cú pháp Đánh dấu và để đề cập đến Ngữ nghĩa. –

0

Tôi cũng vậy, tôi đã tìm kiếm một cái gì đó như thế này cho thời gian dài rất. Tốt nhất tôi có thể tìm thấy, tuy nhiên, không phải là giải pháp Emacs, nó là một phần tuyệt vời độc lập của phần mềm được gọi là ReText.

+0

Trong Mac, bạn có phương án tương tự: [MOU] (http://mouapp.com/) –

5

Tùy thuộc vào ngữ cảnh mà bạn muốn xem văn bản được hiển thị, bạn có thể nhận được khá gần với những gì bạn cần bằng cách chỉ chỉnh quy tắc khóa phông của chế độ đánh dấu.

+0

Nghe như một cách tiếp cận thực dụng với nỗ lực nhỏ (chỉ cập nhật quy tắc khóa chữ) và nó không phụ thuộc vào bất kỳ công cụ bên ngoài nào hoặc quá trình tốt. –

18

Personnaly, tôi sử dụng các quy trình làm việc như sau:

  • chạy trên một C-c C-c m để chạy Markdown trên đệm hiện tại và xem trước kết quả trong bộ đệm khác.
  • chuyển sang html-mode trên đệm khác này (M-x html-mode)
  • ẩn các thẻ html để hiển thị một cái gì đó gần với đầu ra (M-x sgml-tags-invisible)

Sau đó, mỗi khi bạn muốn làm mới vẽ, chỉ cần chạy lại C-c C-c m trên bộ đệm đánh dấu.

Tuy nhiên, tôi thú nhận cho đến bây giờ để chỉnh sửa/xem trước Markdown, không có gì nhịp đập đối với tôi Textmate và bảng điều khiển xem trước đánh dấu của nó. Trên thực tế, ở góc độ cá nhân, trường hợp duy nhất mà tôi thích chạy Textmate hơn là Emacs là khi tôi muốn chỉnh sửa các tệp đánh dấu. Tuy nhiên, con đường để có cùng chất lượng xem trước trên emacs không phải là quá khó khăn và có lẽ tôi nên điều tra nó. Như tôi đã nhìn thấy nó, nó chỉ đơn giản là:

  • lấy css nội bộ được sử dụng bởi Textmate cho rendering xem trước
  • w3 sử dụng hoặc w3m để xem trước sản lượng markdown sử dụng css này
+0

Cảm ơn, hãy yêu cách bạn kết hợp tất cả các chức năng này :) – dolzenko

+3

Thiết lập tuyệt vời, nhưng vì một lý do nào đó tôi không thể làm mới. Khi tôi chạy 'C-c C-c m' trên bộ đệm kết xuất, tôi nhận được' C-c C-c m là không xác định', và khi tôi chạy nó trên bộ đệm nguồn, tôi nhận được 'Văn bản là chỉ đọc'. Làm sao để tôi có được xung quanh này? –

+0

Bạn có đang ở chế độ 'markdown-mode' không? Có lẽ bạn có thể đảm bảo rằng 'chế độ markdown' của bạn đã được cài đặt và cập nhật.Bạn cũng có thể chạy 'C-h k C-c C-c m' để kiểm tra xem' C-c C-c m' có bị ràng buộc với hàm 'markdown-other-window' hay không. Bạn cũng có thể chạy trực tiếp chức năng 'markdown-other-window' bằng' M-x markdown-other-window'. – modulitos

6

Tôi có điều này trong tệp .emacs của tôi:

(custom-set-faces 
;; custom-set-faces was added by Custom. 
;; If you edit it by hand, you could mess it up, so be careful. 
;; Your init file should contain only one such instance. 
;; If there is more than one, they won't work right. 
'(markdown-header-delimiter-face ((t (:inherit font-lock-function-name-face :underline t :weight bold))) t) 
'(markdown-header-face-1 ((t (:inherit markdown-header-face :height 1.5))) t) 
'(markdown-header-face-2 ((t (:inherit markdown-header-face :height 1.3))) t) 
'(markdown-header-face-3 ((t (:inherit markdown-header-face :underline t :height 1.2))) t) 
'(markdown-header-face-4 ((t (:inherit markdown-header-face :underline t :height 1.1))) t) 
'(markdown-header-face-5 ((t (:inherit markdown-header-face :underline t))) t) 
'(markdown-header-face-6 ((t (:inherit markdown-header-face :underline t))) t)) 
(put 'set-goal-column 'disabled nil) 

để phóng to tất cả dòng tiêu đề. Bản thân chế độ đánh dấu sẽ in nghiêng văn bản có gắn dấu sao và văn bản được gắn dấu sao đậm, do đó, điều này sẽ đưa bạn đến đó. Tuy nhiên, nó sẽ không làm cho các nhân vật điều khiển vô hình.

Nếu bạn muốn điều đó, có lẽ bạn nên nhìn vào pretty-lambda cho ví dụ (như Bozhidar Batsov suggested)

4

Ngoài pretty-lambda (mà đã được đề nghị nhiều lần), bạn có thể nhìn vào org-mode và quy tắc cú pháp highliting của nó. Cụ thể, biến số org-hide-emphasis-markers thực hiện nhiều hơn hoặc ít hơn những gì bạn muốn (xem ví dụ: cách org-do-emphasis-faces ẩn các ký tự đánh dấu).

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