EMACS & 程序 编程点滴...

天下难事必作于易,天下大事必作于细

Lastupdated: 2009-10-26

天天Emacs

TOPxml,html文件的代码折叠

利用 hs-minor-mode 可以方便地在编辑 xml, html 文件时折叠代码。

1
2
3
4
5
6
7
8
9
10
11
;; folding for sgml-mode
(add-hook 'sgml-mode-hook
          '(lambda()
             (hs-minor-mode 1)))
(add-to-list 'hs-special-modes-alist
             '(sgml-mode
               "<!--\\|<[^/>]>\\|<[^/][^>]*[^/]>"
               ""
               "<!--"
               sgml-skip-tag-forward
               nil))

TOPSQL自动对齐

利用 blancoSqlFormatter 库可以很方便地实现 SQL 文档对齐。

TOP首先下载,安装

1
2
% mkdir ~/opt
% unzip balcoSqlFormatter-0.1.0.src.zip -d ~/opt

因为是 Java 的代码,要写一部分 java 的客户端代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
~/opt/blancoSqlFormatter/SqlBeautify.java:
import java.io.InputStream;

import blanco.commons.sql.format.BlancoSqlFormatter;
import blanco.commons.sql.format.BlancoSqlRule;

public class SqlBeautify {
    public static void main(String[] args) throws Exception {
        InputStream is = System.in;
        StringBuilder sb = new StringBuilder();
        byte[] buffer = new byte[4096];
        int read;
        while ((read = is.read(buffer)) != -1) {
            sb.append(new String(buffer, 0, read));
        }
        System.out.println(new BlancoSqlFormatter(new BlancoSqlRule()).format(sb.toString()));
    }
}

编译,

1
2
% cd ~/opt/blancoSqlFormatter
% CLASSPATH=$CLASSPATH:blancosqlformatter-0.1.0.jar javac SqlBeautify.java

制作脚本,

1
2
3
4
5
6
7
~/bin/sqlbeautify:
#!/bin/sh

BSF_HOME=$HOME/opt/blancoSqlFormatter
BSF_LIB=$BSF_HOME/blancosqlformatter-0.1.0.jar

env CLASSPATH=$CLASSPATH:$BSF_HOME:$BSF_LIB java SqlBeautify
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 追加执行属性
% chmod +x ~/bin/sqlbeautify

# 测试
% echo ”SELECT name,value FROM v\$sysstat WHERE name IN ('db block gets','consistent gets', 'physical reads');” | sqlbeautify
SELECT
        name
        ,VALUE
    FROM
        v$sysstat
    WHERE
        name IN (
            'db block gets'
            ,'consistent gets'
            ,'physical reads'
        )

TOPEmacs中使用

在.emacs文件中追加以下代码:

1
2
3
4
5
6
7
8
9
10
(defun sql-beautify-region (start end)
  "Beautify SQL in region between START and END."
  (interactive "r")
  (save-excursion
    (shell-command-on-region start end "sqlbeautify" nil t)))

(defun sql-beautify-buffer ()
 "Beautify SQL in buffer."
 (interactive)
 (sql-beautify-region (point-min) (point-max)))

这之后,就可以用 M-x sql-beautify-buffer 或 M-x sql-beautify-region 来整理SQL代码了。

© www.yifeiyang.net
net tracking

                                                                                                 stats