最近花了点时间通读了一下 An Introduction to Emacs Lisp Programming。这个本书上说 emacs lisp 和c++一样是一个正是的语言,可是就它的内容上来说怎么看都是专门为emacs定制的(没有看到有效的输入输出等能力)。难道说elisp 是 common lisp 的阉割版? 有没有办法让这个阉割版重振雄风(我是说能不能让elisp有正常语言的能力,比如从std in 读入数据 std out输出数据 ,或者能显示jpeg什么的,还有连接数据库什么的)?
那位达人能出来解惑一下?
读完了elisp 感觉很迷茫-_-||
-
- 帖子: 26
- 注册时间: 2007-08-25 7:42
-
- 帖子: 142
- 注册时间: 2005-11-05 23:18
-
- 帖子: 45
- 注册时间: 2007-01-27 14:11
Re: 读完了elisp 感觉很迷茫-_-||
elisp 是有 std in 和 std out 的。举例来说,你可以使用 standard-input 和 standard-output 的值。但是要注意,作为一个实时的交互式编辑器,除非用 noninteractive 方式启动 Emacs,否则 Emacs 会把它们分别绑定到 mini buffer 和 echo area 上。如果用 emacs -batch 方式运行 Emacs,你就可以像其他程序一样从标准输入读入,并从标准输出输出了。试试这个:maskisland 写了:最近花了点时间通读了一下 An Introduction to Emacs Lisp Programming。这个本书上说 emacs lisp 和c++一样是一个正是的语言,可是就它的内容上来说怎么看都是专门为emacs定制的(没有看到有效的输入输出等能力)。难道说elisp 是 common lisp 的阉割版? 有没有办法让这个阉割版重振雄风(我是说能不能让elisp有正常语言的能力,比如从std in 读入数据 std out输出数据 ,或者能显示jpeg什么的,还有连接数据库什么的)?
那位达人能出来解惑一下?
代码: 全选
emacs -batch -eval "(print (read standard-input) standard-output)"
像显示 jpeg 或连接数据库这样的功能需要 elisp 直接或者间接地与用 C 写成的函数库通信。通常,Lisp 系统里这样的部分是用 C 写成的。这叫做 Foreign Function Interface (FFI)。就 elisp 来说,打开 jpeg 文件和连接数据库都是有实现的,不过 GNU Emacs 只包含了前者。在 XEmacs 中,elisp 可以与一些数据库后端通信。XEmacs 甚至可以装载动态链接库。
你可以看一下 Emacs 源代码中 src/image.c 里的内容,这是一个用 C 写的 Lisp 接口,提供了对多种图形文件格式的支持(包括 jpeg)。