由于我这一段对Emacs很有兴趣,发了不少关于这玩意儿的文章。但博客园的代码高亮并不支持Emacs Lisp,之前一直也没怎么管,前几天看见李杀的这篇 Syntax Coloring with Google-Code-Prettify,想试试博客园上面能不能折腾出来,于是开始折腾这个Google Code Prettify,最后又发现博客园的语法高亮插件SyntaxHighlighter也可以搞定。

方法一: 基于博客园自带的SyntaxHighlighter

博客园自带的代码动态高亮插件是SyntaxHighlighter,但博客园没有提供用于lisp的刷子(brush)——毕竟这个语言在博客园毕竟小众 :-),但我在网上找了一圈也没有找到,只找到一个clojure的,略微改了改,凑合着可以用上。示例效果如下:

(defun iedit-symbol-in-defun ()"Enter `iedit-mode' to rename the symbol in current function, or exit it."(interactive)(if iedit-mode(progn(iedit-mode -1)(widen))(progn(if (thing-at-point 'symbol)(progn(narrow-to-defun)(iedit-mode t)(message "When done, run `epy-iedit-in-defun' again to quit."))(error "You need to put cursor on identifier.")))))

下面说一下方法:

1. 在网上找该语言的SyntaxHighlighter刷子代码,这里有一个不错的第三方刷子列表: All Syntax Highlighter 2.0 brushes collected, described and downloadable

2. 打开博客园管理后台,找到“设置”一栏,在“公告”或者“页首html代码”一栏填入刚才找到的刷子代码(当然,前后得加<script>标签);

3. 写文章时,点击第二个“插入代码”按钮(第一个按钮不是用JS代码来动态着色,而是由博客园后台着色产生对应的HTML代码,然后再插入编辑器的。它只适合博客园后台能支持的语言类型);

4. 在弹出的对话框中贴上代码,“编程语言”一项随便选一个即可;

5. 回到博文编辑器,点击那个"HTML"按钮(就在刚才“插入代码”按钮的右边),找到刚才贴入的代码,修改代码语言名称(也就是把<pre class="brush:xxxxx"...改为<pre class="brush:elisp", 这里的语言名称由上面刷子代码里面的SyntaxHighlighter.brushes.Lisp.aliases提供)

方法二:采用Google Code Prettify

1. 类似地,在后台“设置”中,将如下代码插入到在“公告”或者“页首html代码”一栏

<link href="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.css" type="text/css" rel="stylesheet" /><script type="text/javascript" src="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.js"></script><script type="text/javascript" src="http://google-code-prettify.googlecode.com/svn/trunk/src/lang-lisp.js"></script><script type="text/javascript">window.setTimeout(prettyPrint, 2000);</script>

(如果你担心用户们访问googlecode网站存在问题(万恶的G_F-W),可以将这几个文件传到博客园后台,然后用http://files.cnblogs.com/bamanzi/prettify.js 这样的路径来引用)

2. 在编辑文章的时候,同样,也是用第二个“插入代码”按钮来贴代码,“编程语言”一项任选;

3. 回到博文编辑器,点击那个"HTML"按钮(就在刚才“插入代码”按钮的右边),找到刚才贴入的代码,将

<pre class="brush:delphi;gutter:false;">

改为:

<pre class="prettyprint lang-lisp">

为什么这么改:prettyprint是Google Code Prettify的识别符号,而lang-lisp则是标明语言类型,具体说明可参看它的README文档(里面也有各类语言的扩展链接,比如F#, YAML等; 还说明了如何添加行号等)

效果示例:

(defun iedit-symbol-in-defun ()"Enter `iedit-mode' to rename the symbol in current function, or exit it."(interactive)(if iedit-mode(progn(iedit-mode -1)(widen))(progn(if (thing-at-point 'symbol)(progn(narrow-to-defun)(iedit-mode t)(message "When done, run `epy-iedit-in-defun' again to quit."))(error "You need to put cursor on identifier.")))))

两种方法的比较

总的来说,第一种方法比较好,因为除了正文,用户评论的代码也是用SyntaxHighlighter来高亮的,只要评论时写[code=elisp]....[/code]就可以了。

但就Clojure/Lisp的实现而言,我找的SyntaxHighlighter刷子有点问题:它会把(defun ....)和(narrow-to-defun)里面的defun都着色,这是由于它的核心代码在正则表达式中用\b来识别关键字的边界,但"-"这个字符偏偏是Lisp中非常常用的字符,所以得修改刷子里面的this.getKeywords()实现才行,我暂时还没有找到比较简单的修正办法。

所以,目前我倾向于两者都用,前者用在正文里面,后者留给评论使用。

在博客园添加Lisp(或其它)代码高亮相关推荐

  1. zbbz的lisp_在博客园添加Lisp(或其它)代码高亮

    由于我这一段对Emacs很有兴趣,发了不少关于这玩意儿的文章.但博客园的代码高亮并不支持Emacs Lisp,之前一直也没怎么管,前几天看见李杀的这篇 Syntax Coloring with Goo ...

  2. 博客园Markdown模式的MATLAB代码高亮方案

    前言 博客园随笔写作可以使用 Markdown 进行编辑,当展示代码时,可以使用下面的语法来对代码块进行展示: ​```language code-content ​``` 一般来说,指明了 lang ...

  3. 为博客园添加github跳转链接

    一般程序员都会有自己的github仓库,在博客园添加跳转链接,可以很方便的进行访问查看. 添加html 首先,需要在设置中添加一段html,用于跳转链接 <a class="git-l ...

  4. 博客园添加鼠标粒子吸附特效

    本文从以下三个方面, 阐述在博客园添加鼠标粒子吸附特效: 一. 效果展示 二. 权限申请 三. 设置步骤 一. 效果展示 在博客园的页面, 出现鼠标粒子吸附的特效, 如图所示: 二. 权限申请 点击博 ...

  5. css文件插入背景音乐,博客园添加背景音乐,背景效果!

    博客园添加背景音乐,背景效果 申请博客园js权限 申请话术 实例 尊敬的博客园管理员: 请求申请开通js权限,希望能够把自己的博客修饰的漂亮点,点缀自定义js插件效果,希望管理员可以批准,谢谢! 开通 ...

  6. 博客园添加live2D看板娘和樱花飘落背景

    写在前面 本文主要描述了怎么给博客园添加看板娘和樱花飘落特效,文章可能还有很多不足,请大家谅解,欢迎大佬提意见. 本文使用的东西 live2d(看板娘) 樱花飘落 博客园 文章目录 写在前面 本文使用 ...

  7. 【分享】给自己的博客园添加一个板娘(可选)

    全部样式分享 更换模型的话只需要更换jsonpath中的模型名称即可 https://unpkg.com/live2d-widget-model-模型名称/assets/模型名称.model.json ...

  8. 给自己的博客园添加网抑云音乐播放器

    1. 申请权限 首先给自己的博客园设置,申请js权限,这个教程可以去搜. 2. 打开网页版网抑云音乐 点击一首你喜欢的歌进入 , 然后点击生成外链播放器 然后复制代码: 进入到自己的博客园设置页面 我 ...

  9. 博客园添加动态背景效果

    背景动画 先直接看效果吧,还是挺有趣的 (来自官网上的一张图) 使用食用 食用方法 先良心安利js写的动画库.其原理就是基于 HTML5 新特性 canvas,渲染的动画效果.有兴趣可以访问一下:动画 ...

最新文章

  1. springMVC 前后台日期格式传值解决方式之一(共二) @DateTimeFormat的使用和配置...
  2. 一个NPOI导出到excel文件的范例记录
  3. CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构区别...
  4. 工厂模式三部曲之工厂方法模式
  5. CLR via C# 3rd - 07 - Constants and Fields
  6. lacp静态和动态区别_LACP基础
  7. 2021最新城市人才引进计划!硕博满满的福利!
  8. 关于职业发展:一篇不错的文章分享
  9. LeetCode455分发饼干
  10. Jrebel最新激活破解方式(持续更新) 转
  11. jq onclick 定义_jquery onclick函数未定义(jquery onclick function not defined)
  12. HAUT 1262 魔法宝石 (最短路变形 or 暴力)
  13. UCF101数据集的处理问题
  14. WAP手机上的问卷调查系统的构建
  15. How To Ask Questions The Smart Way
  16. Android开发天气预报自我记录
  17. php提示Notice: Undefined index解决方法
  18. win10网上邻居无法访问0x80004005
  19. 数字化商业模式研究——基于LTD(lead to deal)从引导到成交的方法论思想
  20. libevent 学习文档-翻译

热门文章

  1. 《人工智能标准化白皮书(2018版)》发布|附下载
  2. “因为这 4 个回答,我决定录用这位软件工程师!”
  3. python装饰器简单理解
  4. mac下开启docker API远程调用
  5. .gitignore 无效及解决办法
  6. Oracle优化之表连接方式
  7. (转)如何禁用Windows 10系统的触摸屏
  8. 为所有PHP-FPM容器构建单独的NGinx Dock镜像
  9. 赛门铁克《勒索软件与企业2016》调查报告:企业将面临更多勒索软件威胁
  10. 汇编试验六:实践课程中的程序