HICK 者,乡巴佬也

Muse - Emacs 纯粹主义者日常文档工具

Posted in: Emacs&Elisp — Hick @ 2008/11/29 22:30:45 Comments (0)

看了两天 Emacs Muse ,感觉 Muse 跟 Emacs 结合紧密;用于写文档的话,跟我一直用的 Asciidoc 相比,各有所长。对我来说,更合适的道路是学习下 elisp ,把 Muse 文档在 Emacs 上的一些优秀表现应用到 Asciidoc 的 emacs mode: doc-mode 中去。 Muse 语法比 AsciiDoc 还要简单,简单到有些遗憾,不支持 NOTE 等。在 Emacs 上的表现能力(以可视化效果显示特殊标记、链接回车访问等)占优,另外能够让多个文档结合更紧密。转换格式差不多,只不过一个用 python 一个用 elisp 。但是对我来说,熟悉 Python 比 elisp 更有价值,asciidoc 比 muse 更具备可改造的空间。这几天的学习文档整理如下:

(more…)

windows 下 Emacs 最新版下载

Posted in: Emacs&Elisp — Hick @ 2008/11/27 21:14:39 Comments (2)

以前一直在 windows 下用 NTEmacs 22, http://ntemacs.sourceforge.net ,有一年多不见更新了。找了个最近更新比较勤快,版本也切换到 Emacs 23:

http://www.ourcomments.org/cgi-bin/emacsw32-dl-latest.pl

(081217 补记)这几天看到 brep@水木社区也发了个编译最新 windows 版 Emacs 23 ,放在 Google Code: http://code.google.com/p/emacs-for-windows/

另外,cybergene@水木社区编译了一个比较新的 Emacs23 版,据说还支持 xpm/jpg/png/gif 等图片的显示。介绍参见 http://www.newsmth.net/bbscon.php?bid=573&id=70514&ftype=1&num=541

下载地址1:
http://www.fileqube.com/shared/TmjcTkc104198

下载地址2:
http://www.filefactory.com/file/e65f75/n/emacs-cvs-20080916-win32-bin_7z

顺便记下修改 .emacs 文件以后不需要重启的方法: M-x M-x eval-buffer

Emacs 转换文件编码成 utf8

Posted in: Emacs&Elisp — Hick @ 2008/07/07 13:02:57 Comments (0)

之前都是笨笨的打开 ultraedit 来转换文件编码,刚才突然想起来 Emacs 应该有这个功能,搜索了一下,有人写 “C-x f utf-8 C-x C-s” 可以,但是实际上至少在 Emacs 22 中无效。跑到 Emacs Wiki 上搜索了下,找到正解了: C-x C-m f utf-8-unix RET 即可把当前文件转换为 utf-8 编码。
另外另存为指定编码的操作(会提示当前文件编码): “C-x C-m c RET C-x C-w RET”。

更多信息参考 http://www.emacswiki.org/cgi-bin/wiki/ChangingEncodings
http://www.emacswiki.org/cgi-bin/wiki/UnicodeEncoding

yasnippet-mode

Posted in: Emacs&Elisp — Hick @ 2008/07/06 12:40:24 Comments (0)

补记:看了下 Emacs Wiki 上 MsfAbbrev-mode 的介绍好象是同样的结构。

跟 snippet-mode 一样是模仿 TextMate 的自动完成功能的 emacs mode ,smart-snippet 和 yasnippet 的作者都是 http://pluskid.lifegoo.com 的 pluskid ,好象也是 ann@emacs@smth 。

snippet-mode 的信息可以在 http://www.emacswiki.org/cgi-bin/wiki/SnippetMode 看到并找到下载地址,源文件中有详细的使用说明。之前使用 snippet 做的 doc-mode 下的定义:

(add-hook 'doc-mode-hook
  '(lambda ()
     (setq-default abbrev-mode t)
     (snippet-with-abbrev-table
       'local-abbrev-table
       ("xh1" . "= $${文章标题} =\nHick <HickWu@qq.com>\n\n$.")
     )
     (snippet-with-abbrev-table
       'local-abbrev-table
       ("xh2" . "== $${一级标题} ==\n\n$.")
     )
     (snippet-with-abbrev-table
       'local-abbrev-table
       ("xh3" . "=== $${二级标题} ===\n\n$.")
     )
     (snippet-with-abbrev-table
       'local-abbrev-table
       ("xc" . "------------\n$$\n------------\n")
     )
))

在一个 buffer 中进入 doc-mode 以后,通过输出xh1后按 tab 即可展开相应 snippet 。

yasnippet 可以文件形式定义 snippet ,http://code.google.com/p/yasnippet/ 下到源代码以后,然后把压缩包中的 snippet 放到用户 HOME 目录以后这样设置 .emacs 文件:

(require 'yasnippet)
(yas/initialize)
(yas/load-directory "~/snippets/")

snippet 目录下的 text-mode 下定义各个模块的 snippet ,比如 html-mode 下有一个文件 div ,也就是该模式下 div 的 snippet 定义,进入 html-mode 以后按 div + TAB 即可扩展为 div 的 snippet 。具体定义语法比较简单,参见 http://pluskid.lifegoo.com/upload/project/yasnippet/doc/define_snippet.html 。下面是语法的示例和摘要:

#contributor : pluskid <pluskid@gmail.com>
#name : __...__
# --
= ${1:文章标题} =
`(format-time-string "%y/%m/%d")`

. 通过目录层级关系来共享 snippet 定义,text-mode 目录下的 time 的定义在所有子目录对应 mode 中都可以使用。

. 字符 # 开头的为一些 snippet 的辅助 meta 信息,name 定义 snippet 的简短描述,contributor 定义作者, — 为注释 ,condition 中可以定义简单的 elisp 代码

. 通过 yas/define-snippets 可以以 elisp 代码的方式直接定义 snippet

. 同一组键可以对应多个 snippet (内置 dropdown-list.el 实现选择提示)

. 通过反引号可以嵌入 elisp 代码

. TAB 和 S-TAB 的切换

. 对 snippet 输入内容可以定义 elisp 函数进行再处理, 比如首字母大写

刚才也初步试了下 windows 下模仿 TextMate 的另外两个软件 E-texteditor 和 intype ,除了 snippet 功能也没有特别出彩的,两个软件都不怎么稳定,前者没用几分钟就报错,后者中文支持不太好。

vim 下也有类似的 snippet 功能(去 vim 官方或者 google 搜索 snippet),没有试过,看了几个 demo 效果都不是十分满意。

DIY 了一个 Emacs 小技巧, 爽 YY

Posted in: Emacs&Elisp — Hick @ 2007/09/22 23:20:02 Comments (2)

用 AsciiDoc 格式来写文档, 没有 Emacs 还真不好下手!暗自庆幸我同时遇到了它俩儿, 偶然和必然再次碰撞… 嘿嘿

通常在 Emacs 中执行系统(linux/unix/windows等)命令, 需要 M-! 后在 mini-buffer 中输入需要执行的命令. 而我转换 AsciiDoc 格式为 html 的时候, 需要执行”a2h + 无路径和后缀的 AsciiDoc 文件名”命令来转换(其中有我用 php 写的脚本的封装). 整个操作过程还是比较麻烦的, 而且有时候容易输错文件名. 想到应该可以通过 M-! 对应的命令/函数, 获得当前 buffer 名来得到 AsciiDoc 文件名作为参数的方式, 绑定到一个键操作即可自动完成这个过程, 摸索着把 .emacs 设置如下:

(more…)

Next Page »