在muse中用source-highlight高亮显示代码

本文介绍如何在Emacs的Muse模式中实现代码片段的语法高亮显示。通过自定义函数muse-publish-source-tag,可以为不同编程语言的代码块添加高亮样式,并在Muse文档中直接展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在你的.emacs中加入下列代码

;; add a <source> tag, which use source-highlight
(defun muse-publish-source-tag (beg end attrs)
  (let ((lang (cdr (assoc "lang" attrs)))
        (style (muse-style-element :base))
        hcodes)
    (if (string-equal style "pdf") (setq style "latex"))
    (if lang
        (progn
          (muse-publish-command-tag
           beg end
           (cons (cons "interp" (format "echo /"<literal><pre class=/"example/">
$(source-highlight -s %s -f %s)
</pre></literal>/"" lang style))
                 attrs))
          (muse-publish-mark-read-only beg (point)))
      (error "No lang attribute specified in <source> tag"))))

(add-to-list
 'muse-publish-markup-tags '("source" t t nil muse-publish-source-tag))

然后即可在你的muse文件中高亮代码了

 
#include <stdlib.h>

const char so_interp[] __attribute__((section(".interp")))
  = "/lib/ld-linux.so.2";

int soso(int i){
  return i*i;
}

void so_start(void){
  int argc;
  __asm__ (
  "movl 0x14(%%esp), %%eax/n"
        : "=a" (argc));
  exit(argc);hcodes))
}

上面效果的muse源文件:

* 使用source-highlightMuse中高亮代码

** 在你的.emacs中加入下列代码
<example>
;; add a <source> tag, which use source-highlight
(defun muse-publish-source-tag (beg end attrs)
  (let ((lang (cdr (assoc "lang" attrs)))
        (style (muse-style-element :base))
        hcodes)
    (if (string-equal style "pdf") (setq style "latex"))
    (if lang
        (progn
          (muse-publish-command-tag
           beg end
           (cons (cons "interp" (format "echo /"<literal><pre class=/"example/">
$(source-highlight -s %s -f %s)
</pre></literal>/"" lang style))
                 attrs))
          (muse-publish-mark-read-only beg (point)))
      (error "No lang attribute specified in <source> tag"))))

(add-to-list
 'muse-publish-markup-tags '("source" t t nil muse-publish-source-tag))
</example>

** 然后即可在你的muse文件中高亮代码了
<source lang="c">
#include <stdlib.h>

const char so_interp[] __attribute__((section(".interp")))
  = "/lib/ld-linux.so.2";

int soso(int i){
  return i*i;
}

void so_start(void){
  int argc;
  __asm__ (
  "movl 0x14(%%esp), %%eax/n"
        : "=a" (argc));
  exit(argc);hcodes))
}
</source>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值