LXR —— Linux Cross Refercence。Linux内核源码阅读和查询的利器之一,不用多介绍了。LXR安装后看到的源码是没有颜色的,用惯了语法高亮的编辑器,一下子看到满屏的黑白代码不免有点枯燥。于是给它装了个可以显示语法颜色的工具。

1、安装google-code-prettify

项目地址是:http://code.google.com/p/google-code-prettify/

$ wget http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.css
$ wget http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.js

我把它们放到lxr的安装目录下面,lxr我放在web服务器的根目录,所以就

2、修改lxr/http/template-head

这是lxr默认的html头,在<head></head>标签之间加上

1
2
<link href="/lxr/prettify.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="/lxr/prettify.js"></script>

注意文件路径,不在乎需要从远方服务器读取的话,也可以

1
2
<link href='http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.css' rel='stylesheet' type='text/css'/>
<script src='http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.js' type='text/javascript'></script>

这样也可以让google-code-prettify的维护者来自行维护这些脚本。

然后找到<body>标签:

1
<body bgcolor=white>

改为

1
<body bgcolor=white  onload='prettyPrint()'>

3、修改lxr/http/source

这是个perl脚本,查找字符串"<pre>",这有好几处,都在printfile这个子函数里面,改为

1
<pre class=\"prettyprint\">

已经好了,这样再看LXR里面的代码就可以看到漂亮的语法颜色了。效果图:

2009-05-01 Update:

上面的效果图有一个问题,就是代码的行号也被渲染高亮了。这个可以通过给行号标识加上"nocode"这个prettifier提供的class来解决。对lxr/http/lib/LXR/Common.pm进行如下修改即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
diff --git a/Common.pm b/Common.pm
index 9e23088..529d5a2 100755
--- a/Common.pm
+++ b/Common.pm
@@ -151,7 +151,7 @@ sub linetag {
     $tag .= ' ' if $_[1] < 10;
     $tag .= ' ' if $_[1] < 100;
     $tag .= &fileref($_[1], $_[0], $_[1]).' ';
-    $tag =~ s/<a/<a name=L$_[1]/;
+    $tag =~ s/<a/<a class="nocode" name=L$_[1]/;
 #    $_[1]++;
     return($tag);
 }

还可以在自己的css文件里面重写nocode这个class,例如加个方框啥的。