2010-08-04 159 views
43

是否可以使用Emacs自己的缓冲区文本格式功能在Emacs缓冲区中呈现Markdown?图形环境中的Emacs具有丰富的文本呈现功能(字体样式,颜色,链接甚至图像),因此应该很有可能。有没有现有的实现?在Emacs缓冲区中渲染Markdown

请注意,这个想法是让渲染的Markdown成为本地Emacs格式的文本,可以像Emacs中的任何其他文本一样进行导航和操作。因此,渲染到嵌入Emacs缓冲区中的图像的解决方案在此处不可取。

另外请注意,这是不是关于编辑 Markdown的模式,而是用于在Emacs缓冲区中呈现渲染的Markdown。它应该最好是一个纯Emacs Lisp解决方案,以实现可移植性。

+0

有什么具体要求?就像“标记”不代表HTML一样,“降价”也很模糊。 – phils 2010-08-04 21:17:00

+1

Markdown与任何Markdown方言一样,如果这就是你的意思! – 2010-08-05 05:43:56

回答

6

我想你可以使用源代码latex-preview来获取灵感,或者使用pretty-lambda(一个简单得多的软件)。

或者,您可以在后台进程中将markdown转换为html并预览html。

一切皆有可能在Emacs,但不是一切都容易:-)

+1

感谢提及乳胶预览。然而,我不想将Markdown作为嵌入Emacs缓冲区中的图像进行渲染,而是将其作为原生Emacs格式化的文本,这些文本可以像任何其他文本一样进行导航和操作。也许可以从pretty-lambda中学到一些东西。 – 2010-08-11 10:53:30

1

实现如果只是对渲染,去Bozhidar的建议,并做了降价到HTML的转换,然后在W3显示HTML缓冲。 markdown-mode有一些代码可以调用带有几个好东西的外部Markdown命令。

但是,如果你真的想在Emacs Lisp中做所有事情,你必须先编写一个Markdown解析器。

+1

谢谢,但我真的希望在Emacs Lisp中提供全部的可移植性。因此,我希望找到一个现有的Emacs Lisp Markdown解析器。 – 2010-08-05 16:49:39

3

由于我不知道任何基于emacs的Markdown解析器,我不得不说,你必须从头开始编写一个。也许this SO问题可以给你一些指示。

如果您选择通过仅Emacs的道路,那么Semantic是一个非常好的API(它为您提供了一个词法分析器,解析器生成器和解析器;它已经存在了十多年了,它有文件!)。拥有语言解析器之后,您必须为每个令牌类型制作一些渲染函数。这样你可以自定义一切。虽然这将是一个启发性的旅程,当然,我仍然选择在单独的后台进程中使用现有的Markdown-> html转换器,然后使用w3(m)进行emacs预览(如Bozhidar建议的那样)。它完成了工作,而且更简单。没有主要的性能问题,也没有 - 你应该很少运行这个工具,所以你可以轻松地节省一些额外的毫秒)。

混合的解决方案是让Markdown解析器直接生成HTML,并在w3(m)缓冲区上预览它(它从您的肩膀上带走渲染重量,只需要将markdown转换为html,并且这与Semantic看起来很直接)。

+0

感谢您提供有关解析Markdown和提及Semantic的问题的链接。 – 2010-08-11 10:49:16

0

我也是,我一直在寻找类似很长一段时间。尽管我能找到的最好的不是Emacs解决方案,但它是一个独立的伟大软件,名为ReText

+0

在Mac下,您有类似的选择:[MOU](http://mouapp.com/) – 2014-02-28 09:32:44

5

根据您希望看到呈现文本的上下文,您可以通过调整降价模式的字体锁定规则来获得您所需的内容。

+0

听起来像一个实效的方法,只需很少的努力(只是更新字体锁规则),它不依赖于任何外部工具或过程是好的。 – 2012-03-29 11:20:14

18

Personnaly,我用下面的工作流程:在C-c C-c m

  • 运行到当前缓冲区运行减价和预览在另一个缓冲区输出。
  • 举动html-mode这个其他缓冲区(M-x html-mode
  • 隐藏的HTML标记来显示一些靠近输出(M-x sgml-tags-invisible

然后要刷新渲染每一次,只需再运行C-c C-c m在降价缓冲区。

然而,我承认到现在为减价编辑/预览,没有什么比我Textmate和它的降价预览面板。实际上,从个人的角度来看,我更喜欢运行Textmate而不是Emacs的唯一情况是当我想编辑降价文件时。然而,在emacs上预览的质量并不那么难,我应该调查一下。在我看来,它只是:

  • 获得通过TextMate的内部使用的CSS渲染预览
  • 使用W3或者w3m的使用这个CSS
+0

谢谢,爱你如何结合所有这些功能:) – dolzenko 2013-06-12 10:35:33

+3

伟大的设置,但由于某种原因,我无法刷新。当我在渲染的缓冲区上运行'C-c C-c m'时,我得到'C-c C-c m是未定义的,当我在源缓冲区上运行它时,'Text is read-only'。我怎样才能解决这个问题? – 2014-05-18 19:10:50

+0

你在'markdown-mode'吗?也许你可以确保你的'markdown-mode'已经安装并且是最新的。您还可以运行'C-h k C-c C-c m'来检查'C-c C-c m'是否绑定到'markdown-other-window'函数。您也可以直接使用'M-x markdown-other-window'运行'markdown-other-window'功能。 – modulitos 2015-10-05 00:14:59

6

我有这个预览降价输出我的.emacs文件:

(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) 

它放大所有标题。 Markdown模式本身会将加星标的文本和粗体双星文字斜体显示出来,所以这会让你在那里。但是,它不会使控制字符不可见。

如果你想要的,你应该看看pretty-lambda的例子(如Bozhidar Batsov suggested

4

除了pretty-lambda(其中已经提出多次),你可以看看org-mode,它的语法highliting规则。特别是,org-hide-emphasis-markers变量或多或少会满足您的要求(请参阅org-do-emphasis-faces如何隐藏标记字符)。