用 Emacs Lisp 开发 CGI 程序

简介: Emacs Lisp 作为编程语言也是非常强大的。尤其 Emacs 作为一款编辑器,自带了很多处理文本的函数,用起来很方便。我一直希望用 Emacs Lisp 作为服务端脚本语言来开发 Web 程序。在网上搜索了很久,还真有人做过类似的事情:http://www.emacswiki.org/emacs/cgi.el。但他封装的还不够彻底,用起来还是挺麻烦,于是自己动手写了一个。目前支持:

Emacs Lisp 作为编程语言也是非常强大的。尤其 Emacs 作为一款编辑器,自带了很多处理文本的函数,用起来很方便。

我一直希望用 Emacs Lisp 作为服务端脚本语言来开发 Web 程序。在网上搜索了很久,还真有人做过类似的事情:http://www.emacswiki.org/emacs/cgi.el。但他封装的还不够彻底,用起来还是挺麻烦,于是自己动手写了一个。目前支持:

  1. script-let,即可在 <% %> 或 <%= %> 之中插入 lisp 代码;
  2. 原生 s-exp 生成 html 文档;
  3. GET/POST 请求支持;
  4. 存取 Cookie。

程序作为 CGI 运行于 Apache 下,这里提供一个简单的求斐波那契数的例程作为演示。

BTW,这也是我第一次使用 Github 托管代码:https://github.com/redraiment/emacs-cgi

#!/usr/local/bin/emacs --script

(require 'cgi)

(cgi/cookie "n"
 (or (cgi/param "n")
     (cgi/cookie "n")
     "15"))

(html
 (head
  (title "Fabonacci 1 -> n")
  (meta (http-equiv . "Content-Type")
        (content . "text/html; charset=UTF-8")))
 (body
  (form (method . post)
   (span "n = ")
   (input (type . text) (name . n))
   (button (type . submit) "Submit"))
  (table (border . 1) (width . "100%")
   (thead
    (caption "Fabonacci")
    (tr
     (th "#")
     (th "Value")))
   (tbody
    <%
    (let ((a 0) (b 1) x)
      (dotimes (i (string-to-number
                   (cgi/cookie "n")))
        (tr
         (td <%= (1+ i) %>)
         (td <%= (setq x a a b b (+ x b)) %>))))
    %>))))

运行效果:

目录
相关文章
|
5月前
|
Shell Linux Apache
|
11天前
|
应用服务中间件 Apache nginx
深入探索研究Ruby CGI方法
【10月更文挑战第2天】
27 4
|
1月前
|
SQL 自然语言处理 安全
探索研究Ruby CGI 编程
【9月更文挑战第1天】
44 6
|
12天前
|
SQL 网络安全 UED
深入探索研究Ruby CGI 编程
【10月更文挑战第1天】
24 0
|
1月前
|
开发框架 应用服务中间件 Apache
探索研究Perl CGI编程
【9月更文挑战第19天】
23 8
|
1月前
|
应用服务中间件 Apache nginx
探索研究Ruby CGI方法
【9月更文挑战第2天】
38 4
|
4月前
|
存储 Unix Linux
Python CGI编程
Python CGI编程
|
5月前
|
Ruby
|
5月前
|
Ruby
|
5月前
|
Ruby