<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>右舷</title>
	<atom:link href="http://www.laihj.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.laihj.net</link>
	<description>list(linux,emacs,旅行,读书,andriod)</description>
	<lastBuildDate>Wed, 10 Mar 2010 05:34:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>编辑器的学习曲线</title>
		<link>http://www.laihj.net/2010/03/editors-learning-curves/</link>
		<comments>http://www.laihj.net/2010/03/editors-learning-curves/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 07:34:53 +0000</pubDate>
		<dc:creator>laihj</dc:creator>
				<category><![CDATA[负暄琐话]]></category>
		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://www.laihj.net/?p=650143</guid>
		<description><![CDATA[
Related Posts[elisp]用elisp编译解释当前的buffer(0)
[elisp]针对Emacs中文本编辑的编程简介(0)
[elisp]EmacsLisp 基础(0)
Emacs的orgmode [remember](0)
Emacs的orgmode [tags］(0)
emacs代码补完－yasnippet(1)
Emacs的orgmode [归档］(0)
Emacs的org-mode [agenda view](0)
Emacs的org-mode [日期与时间](1)
Emacs的org-mode［TODO］(0)
Recent Comments]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-650142 aligncenter" title="curves" src="http://www.laihj.net/wp-content/uploads/2010/03/curves.jpg" alt="curves" width="600" height="400" /></p>
<h3>Related Posts</h3><ul><li><a href="http://www.laihj.net/2010/02/execute-compile-current-file/" title="[elisp]用elisp编译解释当前的buffer 2010.02.12">[elisp]用elisp编译解释当前的buffer</a>(0)</li>
<li><a href="http://www.laihj.net/2010/02/elisp-emacs-editing-basics/" title="[elisp]针对Emacs中文本编辑的编程简介 2010.02.3">[elisp]针对Emacs中文本编辑的编程简介</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/elipsemacslisp-basi/" title="[elisp]EmacsLisp 基础 2010.01.31">[elisp]EmacsLisp 基础</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/emacs-orgmode-remember/" title="Emacs的orgmode [remember] 2010.01.20">Emacs的orgmode [remember]</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/emacs-orgmode-tags/" title="Emacs的orgmode [tags］ 2010.01.15">Emacs的orgmode [tags］</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/code-complete-yasnippet/" title="emacs代码补完－yasnippet 2010.01.8">emacs代码补完－yasnippet</a>(1)</li>
<li><a href="http://www.laihj.net/2010/01/emacs-orgmode-archieved/" title="Emacs的orgmode [归档］ 2010.01.2">Emacs的orgmode [归档］</a>(0)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode-agenda-view/" title="Emacs的org-mode [agenda view] 2009.12.29">Emacs的org-mode [agenda view]</a>(0)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode-%e6%97%a5%e6%9c%9f%e4%b8%8e%e6%97%b6%e9%97%b4/" title="Emacs的org-mode [日期与时间] 2009.12.26">Emacs的org-mode [日期与时间]</a>(1)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode%ef%bc%bbtodo%ef%bc%bd/" title="Emacs的org-mode［TODO］ 2009.12.25">Emacs的org-mode［TODO］</a>(0)</li>
</ul><h3>Recent Comments</h3><ul></ul>]]></content:encoded>
			<wfw:commentRss>http://www.laihj.net/2010/03/editors-learning-curves/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>回乡絮语</title>
		<link>http://www.laihj.net/2010/02/something-abluthometown/</link>
		<comments>http://www.laihj.net/2010/02/something-abluthometown/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 15:35:10 +0000</pubDate>
		<dc:creator>laihj</dc:creator>
				<category><![CDATA[负暄琐话]]></category>

		<guid isPermaLink="false">http://www.laihj.net/?p=650139</guid>
		<description><![CDATA[每年回家过年只有一个感觉，人去楼空，一年一年也习惯了。
回来几天，就是被不同的亲戚叫来叫去吃饭，作为有战斗力的人型饭桶。
每年回家最爱的一碗菜就是清蒸虾，只放一点点姜，在北京吃不到的美味，就是也很贵。
家乡完全要以用十室九空来形容，没有青壮年，有的只是妇孺，青壮年只都在美利坚。于是家乡被称为桥乡，华桥的桥。
我上大学的时候，回来过年，还能招呼着踢一两场球，现在怕是连羽毛球都招呼不起了。
我娘前几天还思路很清晰地跟我说：你其实不明白出国（务工）这件事害了多少人。我觉得我是知道的，就是知道得没有他们那一辈清楚。出国与去大城市当民工主要区别有二：赚钱更多，多好多倍，回家更少，少很多倍。我外婆过世只时只有大舅舅和两个姨妈在家，她老人家生了七个。
我娘跟我说，如果大家都不出国，她也不出国，都是出国的人多了，觉得自己的生活实在比不过人家。
小时候家里过年，是舞龙，显神和放鞭炮，现在是放鞭炮。小时候过中秋是烧塔，现在什么也没有。因为没有人了。
今年回家，发现福州三套推出一档叫攀讲的节目。攀讲在福州话中是聊天的意思。这个节目的主打就是完全使用福州话，前两天还用福州话给新龙门客栈配音。据说原因是现在能讲福州话的福州人越来越少了。早知如此，何必当初。
@laihj

Related Posts0Recent Comments]]></description>
			<content:encoded><![CDATA[<p>每年回家过年只有一个感觉，人去楼空，一年一年也习惯了。</p>
<p><span><span id="twit_text_9049071856">回来几天，就是被不同的亲戚叫来叫去吃饭，作为有战斗力的人型饭桶。</span></span></p>
<p><span><span id="twit_text_9049927731">每年回家最爱的一碗菜就是清蒸虾，只放一点点姜，在北京吃不到的美味，就是也很贵。</span></span></p>
<p><span><span id="twit_text_9049944471">家乡完全要以用十室九空来形容，没有青壮年，有的只是妇孺，青壮年只都在美利坚。于是家乡被称为桥乡，华桥的桥。</span></span></p>
<p><span><span id="twit_text_9049954850">我上大学的时候，回来过年，还能招呼着踢一两场球，现在怕是连羽毛球都招呼不起了。</span></span></p>
<p><span><span id="twit_text_9050667250">我娘前几天还思路很清晰地跟我说：你其实不明白出国（务工）这件事害了多少人。我觉得我是知道的，就是知道得没有他们那一辈清楚。出国与去大城市当民工主要区别有二：赚钱更多，多好多倍，回家更少，少很多倍。我外婆过世只时只有大舅舅和两个姨妈在家，她老人家生了七个。</span></span></p>
<p><span><span id="twit_text_9050686566">我娘跟我说，如果大家都不出国，她也不出国，都是出国的人多了，觉得自己的生活实在比不过人家。</span></span></p>
<p><span><span id="twit_text_9050711977">小时候家里过年，是舞龙，显神和放鞭炮，现在是放鞭炮。小时候过中秋是烧塔，现在什么也没有。因为没有人了。</span></span></p>
<p><span><span id="twit_text_9050760396">今年回家，发现福州三套推出一档叫攀讲的节目。攀讲在福州话中是聊天的意思。这个节目的主打就是完全使用福州话，前两天还用福州话给新龙门客栈配音。据说原因是现在能讲福州话的福州人越来越少了。早知如此，何必当初。</span></span></p>
<p><span><span><a href="http://twitter.com/laihj">@laihj</a><br />
</span></span></p>
<h3>Related Posts</h3><ul><li>0</li></ul><h3>Recent Comments</h3><ul></ul>]]></content:encoded>
			<wfw:commentRss>http://www.laihj.net/2010/02/something-abluthometown/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[elisp]用elisp编译解释当前的buffer</title>
		<link>http://www.laihj.net/2010/02/execute-compile-current-file/</link>
		<comments>http://www.laihj.net/2010/02/execute-compile-current-file/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 13:58:43 +0000</pubDate>
		<dc:creator>laihj</dc:creator>
				<category><![CDATA[善其事]]></category>
		<category><![CDATA[elisp]]></category>
		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://www.laihj.net/?p=650132</guid>
		<description><![CDATA[运行当前的buffer，就是说编译或解释当前的buferr。比如在编辑的是python文件&#8221;hello.py&#8221;，那么运行它的命令就是&#8221;python hello.py&#8221;，一般的python-mode用&#8221;C-c C-c&#8221;来处理这个问题，在编辑过程中可以调用这个快捷键来运行。当然你也可以使用&#8221;M-!&#8221;来打开shell command的mini buffer来输入命令。
诚然，很多语言的mode里面实际上都内置了这一功能，但我觉得，一方面不同的mode可能定义不同快捷键，造成了额外的记忆负担，另一方面并不能要求所有的mode都提供这一功能，在mode不完整的情况下你大概也需要自己定义的能力。
要做这事儿，当然是自定义一个函数。那么最直观的想法，就是在elisp里面写一行调用shell来执行命令的代码。是的，有这种东西，示例如下:

  (shell-command "python hello.py")


这一行代码的相当于在终端中执行&#8221;python hello.py&#8221;。
我们的目的是执行当前buffer,所以下一步要做的是得到当前buffer所对应的文件名。在上一篇blog中介绍过相关方法，就是&#8221;buffer-file-name&#8221;。
于是代码就变成了这样。

  (shell-command (concat "python " (buffer-file-name)))


用concat把&#8221;python &#8220;和当前buffer的文件名连起来作为要执行的命令。
至此，就完成了.py文件的执行函数，那推广之，需要对不同的文件进行编译/解释时，就需要扩展这个命令。
我们知道对.sh文件要用bash命令执行，对.py要用python，对.htm要调用firefox。现在要做的就是让机器知道这件事。很明显的，我们需要一个map，把它们对应地存下来。
完整的代码和注释如下:

(defun run-current-file ()
(interactive)
(let (ext-map file-name file-ext prog-name cmd-str
(setq ext-map
         '(
            ("py" . "python")
        [...]]]></description>
			<content:encoded><![CDATA[<p>运行当前的buffer，就是说编译或解释当前的buferr。比如在编辑的是python文件&#8221;hello.py&#8221;，那么运行它的命令就是&#8221;python hello.py&#8221;，一般的python-mode用&#8221;C-c C-c&#8221;来处理这个问题，在编辑过程中可以调用这个快捷键来运行。当然你也可以使用&#8221;M-!&#8221;来打开shell command的mini buffer来输入命令。</p>
<p>诚然，很多语言的mode里面实际上都内置了这一功能，但我觉得，一方面不同的mode可能定义不同快捷键，造成了额外的记忆负担，另一方面并不能要求所有的mode都提供这一功能，在mode不完整的情况下你大概也需要自己定义的能力。</p>
<p>要做这事儿，当然是自定义一个函数。那么最直观的想法，就是在elisp里面写一行调用shell来执行命令的代码。是的，有这种东西，示例如下:</p>
<p><pre name="code" class="py">
  (shell-command "python hello.py")
</pre>
</p>
<p>这一行代码的相当于在终端中执行&#8221;python hello.py&#8221;。</p>
<p>我们的目的是执行当前buffer,所以下一步要做的是得到当前buffer所对应的文件名。在<a href="http://www.laihj.net/2010/02/elisp-emacs-editing-basics/">上一篇blog</a>中介绍过相关方法，就是&#8221;buffer-file-name&#8221;。</p>
<p>于是代码就变成了这样。</p>
<p><pre name="code" class="py">
  (shell-command (concat "python " (buffer-file-name)))
</pre>
</p>
<p>用concat把&#8221;python &#8220;和当前buffer的文件名连起来作为要执行的命令。</p>
<p>至此，就完成了.py文件的执行函数，那推广之，需要对不同的文件进行编译/解释时，就需要扩展这个命令。</p>
<p>我们知道对.sh文件要用bash命令执行，对.py要用python，对.htm要调用firefox。现在要做的就是让机器知道这件事。很明显的，我们需要一个map，把它们对应地存下来。</p>
<p>完整的代码和注释如下:</p>
<p><pre name="code" class="py">
(defun run-current-file ()
(interactive)
(let (ext-map file-name file-ext prog-name cmd-str
(setq ext-map
         '(
            ("py" . "python")
            ("sh" . "bash")
            ("htm" . "firefox")
            )
          );定义命令－文件类型映身表.
    (setq file-name (buffer-file-name));得到当前的buffer名
    (setq file-ext (file-name-extension file-name));得到后缀
    (setq prog-name (cdr (assoc file-ext ext-map)))；根据后缀得到执行的命令，通过对ext-map的查找
    (setq cmd-str (concat prog-name " " file-name));拼出一个命令
    (shell-command cmd-str)))；执行
  </pre>
</p>
<p>完毕，为这个函数绑定一个键，在编辑相应文件的时候调用，就可以对其进行需要的操作了，不仅限于编译和解释，实际上很容易看出来，只要shell能支持的，你可以玩。当然，要有权限。</p>
<p>Have Fun!</p>
<h3>Related Posts</h3><ul><li><a href="http://www.laihj.net/2010/02/elisp-emacs-editing-basics/" title="[elisp]针对Emacs中文本编辑的编程简介 2010.02.3">[elisp]针对Emacs中文本编辑的编程简介</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/elipsemacslisp-basi/" title="[elisp]EmacsLisp 基础 2010.01.31">[elisp]EmacsLisp 基础</a>(0)</li>
<li><a href="http://www.laihj.net/2010/03/editors-learning-curves/" title="编辑器的学习曲线 2010.03.3">编辑器的学习曲线</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/emacs-orgmode-remember/" title="Emacs的orgmode [remember] 2010.01.20">Emacs的orgmode [remember]</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/emacs-orgmode-tags/" title="Emacs的orgmode [tags］ 2010.01.15">Emacs的orgmode [tags］</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/code-complete-yasnippet/" title="emacs代码补完－yasnippet 2010.01.8">emacs代码补完－yasnippet</a>(1)</li>
<li><a href="http://www.laihj.net/2010/01/emacs-orgmode-archieved/" title="Emacs的orgmode [归档］ 2010.01.2">Emacs的orgmode [归档］</a>(0)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode-agenda-view/" title="Emacs的org-mode [agenda view] 2009.12.29">Emacs的org-mode [agenda view]</a>(0)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode-%e6%97%a5%e6%9c%9f%e4%b8%8e%e6%97%b6%e9%97%b4/" title="Emacs的org-mode [日期与时间] 2009.12.26">Emacs的org-mode [日期与时间]</a>(1)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode%ef%bc%bbtodo%ef%bc%bd/" title="Emacs的org-mode［TODO］ 2009.12.25">Emacs的org-mode［TODO］</a>(0)</li>
</ul><h3>Recent Comments</h3><ul></ul>]]></content:encoded>
			<wfw:commentRss>http://www.laihj.net/2010/02/execute-compile-current-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[elisp]针对Emacs中文本编辑的编程简介</title>
		<link>http://www.laihj.net/2010/02/elisp-emacs-editing-basics/</link>
		<comments>http://www.laihj.net/2010/02/elisp-emacs-editing-basics/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 11:25:05 +0000</pubDate>
		<dc:creator>laihj</dc:creator>
				<category><![CDATA[负暄琐话]]></category>
		<category><![CDATA[elisp]]></category>
		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://www.laihj.net/?p=650125</guid>
		<description><![CDATA[
Elisp是Emacs下的Lisp方言，而Emacs是一款编辑器。那么针对于Emacs，Lisp要做的很重要一部分工作当然就是对编辑的自动化支持。比如移动鼠标，输入句子，查找替换，代码高亮等等，简单地说，就是为更好更方便地支持文本编辑提供支持。而把这些函数都重合起来，就起成了Emacs mode。如我们常用的C++ mode,python mode。还有之前我一直在介绍的org-mode等，都是由Elisp拼成的。
学习Elisp，可以满足对Emacs进行定制的需求，你可以把想要的功能写在.el文件里面，让Emacs来调用。一方面可以实现一些简单的轻量级的功能，而不需要为此寻找和安装一个完整的mode。另一方面，可以修改现有的mode，使得更符合自己的习惯。这符合开源的作法，不爽即改。
Elisp函数的简单例子
光标位置

?View Code LISP ;返回当前光标的位置
  &#40;point&#41;
  ;region的头跟尾
  &#40;region-beginning&#41;
  &#40;region-end&#41;
  ;最大光标位置（即文件尾），elisp还提供最小光标位置(point-min)，不过我觉得那应该都是1吧。
  &#40;point-max&#41;
  ;返回buffer结尾的绝对位置，无视narrow-to-region
  &#40;buffer-end 1&#41;

移动光标和搜索

?View Code LISP;移动光标到392
&#40;goto-char 392&#41;
&#160;
; 向前/向后移动n字符
&#40;forward-char n&#41;
&#40;backward-char n&#41;
&#160;
; 跳过所有\n\t,即把光标移动第一个不是换行或制表符那里
; 返回移动的字符数
&#40;skip-chars-forward &#34;\n\t&#34;&#41;
&#40;skip-chars-backward &#34;\n\t&#34;&#41;
&#160;
;移动光标到myStr后面，向前和向后
;返回新的光标位置
&#40;search-forward myStr&#41;
&#40;search-backward myStr&#41;
&#160;
; 同上，但是参数是正则表达式，myRegex
; 返回新的光标位置
&#40;re-search-forward myRegex&#41;
&#40;re-search-backward myRegex&#41;

文本编辑

?View Code LISP; 删除光标后的九个字符
&#40;delete-char 9&#41;
&#160;
; 删除选中的两点之前的文本
&#40;delete-region mystartpos myendpos&#41;
&#160;
; 在当前光标位置插入一字符串
&#40;insert &#34;Forza Inter&#34;&#41;
&#160;
; 从buffer中获得一个字符串并赋给mystr
&#40;setq Mystr &#40;buffer-substring mystartpos myendpos&#41;&#41;
&#160;
; [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-650126" title="emacs" src="http://www.laihj.net/wp-content/uploads/2010/02/images.jpg" alt="emacs" width="91" height="91" /></p>
<p>Elisp是Emacs下的Lisp方言，而Emacs是一款编辑器。那么针对于Emacs，Lisp要做的很重要一部分工作当然就是对编辑的自动化支持。比如移动鼠标，输入句子，查找替换，代码高亮等等，简单地说，就是为更好更方便地支持文本编辑提供支持。而把这些函数都重合起来，就起成了Emacs mode。如我们常用的C++ mode,python mode。还有之前我一直在介绍的org-mode等，都是由Elisp拼成的。</p>
<p>学习Elisp，可以满足对Emacs进行定制的需求，你可以把想要的功能写在.el文件里面，让Emacs来调用。一方面可以实现一些简单的轻量级的功能，而不需要为此寻找和安装一个完整的mode。另一方面，可以修改现有的mode，使得更符合自己的习惯。这符合开源的作法，不爽即改。</p>
<h3>Elisp函数的简单例子</h3>
<h4>光标位置</h4>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p650125code8'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6501258"><td class="code" id="p650125code8"><pre class="lisp" style="font-family:monospace;"> <span style="color: #808080; font-style: italic;">;返回当前光标的位置</span>
  <span style="color: #66cc66;">&#40;</span>point<span style="color: #66cc66;">&#41;</span>
  <span style="color: #808080; font-style: italic;">;region的头跟尾</span>
  <span style="color: #66cc66;">&#40;</span>region-beginning<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>region-end<span style="color: #66cc66;">&#41;</span>
  <span style="color: #808080; font-style: italic;">;最大光标位置（即文件尾），elisp还提供最小光标位置(point-min)，不过我觉得那应该都是1吧。</span>
  <span style="color: #66cc66;">&#40;</span>point-<span style="color: #b1b100;">max</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #808080; font-style: italic;">;返回buffer结尾的绝对位置，无视narrow-to-region</span>
  <span style="color: #66cc66;">&#40;</span>buffer-end <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<h4>移动光标和搜索</h4>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p650125code9'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6501259"><td class="code" id="p650125code9"><pre class="lisp" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;移动光标到392</span>
<span style="color: #66cc66;">&#40;</span>goto-char <span style="color: #cc66cc;">392</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 向前/向后移动n字符</span>
<span style="color: #66cc66;">&#40;</span>forward-char n<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>backward-char n<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 跳过所有\n\t,即把光标移动第一个不是换行或制表符那里</span>
<span style="color: #808080; font-style: italic;">; 返回移动的字符数</span>
<span style="color: #66cc66;">&#40;</span>skip-chars-forward <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>skip-chars-backward <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;移动光标到myStr后面，向前和向后</span>
<span style="color: #808080; font-style: italic;">;返回新的光标位置</span>
<span style="color: #66cc66;">&#40;</span>search-forward myStr<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>search-backward myStr<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 同上，但是参数是正则表达式，myRegex</span>
<span style="color: #808080; font-style: italic;">; 返回新的光标位置</span>
<span style="color: #66cc66;">&#40;</span>re-search-forward myRegex<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>re-search-backward myRegex<span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<h4>文本编辑</h4>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p650125code10'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p65012510"><td class="code" id="p650125code10"><pre class="lisp" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">; 删除光标后的九个字符</span>
<span style="color: #66cc66;">&#40;</span>delete-char <span style="color: #cc66cc;">9</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 删除选中的两点之前的文本</span>
<span style="color: #66cc66;">&#40;</span>delete-region mystartpos myendpos<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 在当前光标位置插入一字符串</span>
<span style="color: #66cc66;">&#40;</span>insert <span style="color: #ff0000;">&quot;Forza Inter&quot;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 从buffer中获得一个字符串并赋给mystr</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> Mystr <span style="color: #66cc66;">&#40;</span>buffer-substring mystartpos myendpos<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 改变字符大小写</span>
<span style="color: #808080; font-style: italic;">;这个例子是指当前光标之前的20个字符</span>
<span style="color: #66cc66;">&#40;</span>rapitalize-region <span style="color: #66cc66;">&#40;</span>- <span style="color: #66cc66;">&#40;</span>point<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">20</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>point<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<h4>字符串</h4>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p650125code11'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p65012511"><td class="code" id="p650125code11"><pre class="lisp" style="font-family:monospace;">  <span style="color: #808080; font-style: italic;">; 长度</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">length</span> <span style="color: #ff0000;">&quot;abc&quot;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">; returns 3</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 获取一个子串</span>
<span style="color: #66cc66;">&#40;</span>substring myStr startIndex endIndex<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 替换，以正则方式</span>
<span style="color: #66cc66;">&#40;</span>replace-regexp-in-string myRegex myReplacement myStr<span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<h4>Buffers</h4>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p650125code12'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p65012512"><td class="code" id="p650125code12"><pre class="lisp" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">; 当前buffer的名字</span>
<span style="color: #66cc66;">&#40;</span>buffer-<span style="color: #b1b100;">name</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 文件名（全路径)</span>
<span style="color: #66cc66;">&#40;</span>buffer-file-<span style="color: #b1b100;">name</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 设定一个buffer名</span>
<span style="color: #66cc66;">&#40;</span>set-buffer myBufferName<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 保存</span>
<span style="color: #66cc66;">&#40;</span>save-buffer<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 关闭指定的buffer</span>
<span style="color: #66cc66;">&#40;</span>kill-buffer myBuffName<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 关闭当前buffer</span>
<span style="color: #66cc66;">&#40;</span>kill-this-buffer<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 临时指定一个buffer作为当前buffer</span>
<span style="color: #66cc66;">&#40;</span>with-current-buffer myBuffer
  <span style="color: #808080; font-style: italic;">; do something here ...</span>
<span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<h4>Files</h4>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p650125code13'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p65012513"><td class="code" id="p650125code13"><pre class="lisp" style="font-family:monospace;">  <span style="color: #808080; font-style: italic;">; 打开一个文件</span>
<span style="color: #66cc66;">&#40;</span>find-file myPath<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 另存</span>
<span style="color: #808080; font-style: italic;">; 会关闭当前的buffer，打开另存好的文件</span>
<span style="color: #66cc66;">&#40;</span>write-file myPath<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 把一个文件内容插入到当前位置</span>
<span style="color: #66cc66;">&#40;</span>insert-file-contents myPath<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 将选中的评论文本加到某个文件后面</span>
<span style="color: #66cc66;">&#40;</span>append-to-file myStartPos myEndPos myPath<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 重命名</span>
<span style="color: #66cc66;">&#40;</span>rename-file fileName newName<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 复制</span>
<span style="color: #66cc66;">&#40;</span>copy-file oldName newName<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 删除</span>
<span style="color: #66cc66;">&#40;</span>delete-file fileName<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 获取路径</span>
<span style="color: #66cc66;">&#40;</span>file-name-directory myFullPath<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 获取文件名(不含路径)</span>
<span style="color: #66cc66;">&#40;</span>file-name-nondirectory myFullPath<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 得到文件名后缀</span>
<span style="color: #66cc66;">&#40;</span>file-name-extension myFileName<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 获得不含后缀的文件名。</span>
<span style="color: #66cc66;">&#40;</span>file-name-sans-extension <span style="color: #ff0000;">&quot;abc.htm&quot;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<h4>简单的例子</h4>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p650125code14'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p65012514"><td class="code" id="p650125code14"><pre class="lisp" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> insert-p-tag <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #ff0000;">&quot;Insert
&nbsp;
 at cursor point.&quot;</span>
  <span style="color: #66cc66;">&#40;</span>interactive<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>insert <span style="color: #ff0000;">&quot;
&nbsp;
&quot;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>backward-char <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>在当前光标处插入一个p tag。做法是插放一个串，然后将光标移回4位。</p>
<h3>编写一个mode</h3>
<p>理论上来讲，知道上面这些东西，你就有能力编写一个mode了。但是，编写mode毕竟是一个复杂的工作，需要编写者对elisp编程具有&#8221;hello world&#8221;以上很多级的熟练度。</p>
<p>在李杀网，作者有<a href="http://xahlee.org/emacs/elisp_syntax_coloring.html">一个系列文章来讨论如何为一个编程语言编写mode</a>。</p>
<p>The End. Have fun!</p>
<h3>Related Posts</h3><ul><li><a href="http://www.laihj.net/2010/02/execute-compile-current-file/" title="[elisp]用elisp编译解释当前的buffer 2010.02.12">[elisp]用elisp编译解释当前的buffer</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/elipsemacslisp-basi/" title="[elisp]EmacsLisp 基础 2010.01.31">[elisp]EmacsLisp 基础</a>(0)</li>
<li><a href="http://www.laihj.net/2010/03/editors-learning-curves/" title="编辑器的学习曲线 2010.03.3">编辑器的学习曲线</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/emacs-orgmode-remember/" title="Emacs的orgmode [remember] 2010.01.20">Emacs的orgmode [remember]</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/emacs-orgmode-tags/" title="Emacs的orgmode [tags］ 2010.01.15">Emacs的orgmode [tags］</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/code-complete-yasnippet/" title="emacs代码补完－yasnippet 2010.01.8">emacs代码补完－yasnippet</a>(1)</li>
<li><a href="http://www.laihj.net/2010/01/emacs-orgmode-archieved/" title="Emacs的orgmode [归档］ 2010.01.2">Emacs的orgmode [归档］</a>(0)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode-agenda-view/" title="Emacs的org-mode [agenda view] 2009.12.29">Emacs的org-mode [agenda view]</a>(0)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode-%e6%97%a5%e6%9c%9f%e4%b8%8e%e6%97%b6%e9%97%b4/" title="Emacs的org-mode [日期与时间] 2009.12.26">Emacs的org-mode [日期与时间]</a>(1)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode%ef%bc%bbtodo%ef%bc%bd/" title="Emacs的org-mode［TODO］ 2009.12.25">Emacs的org-mode［TODO］</a>(0)</li>
</ul><h3>Recent Comments</h3><ul></ul>]]></content:encoded>
			<wfw:commentRss>http://www.laihj.net/2010/02/elisp-emacs-editing-basics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[elisp]EmacsLisp 基础</title>
		<link>http://www.laihj.net/2010/01/elipsemacslisp-basi/</link>
		<comments>http://www.laihj.net/2010/01/elipsemacslisp-basi/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 06:48:42 +0000</pubDate>
		<dc:creator>laihj</dc:creator>
				<category><![CDATA[善其事]]></category>
		<category><![CDATA[elisp]]></category>
		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://www.laihj.net/?p=650122</guid>
		<description><![CDATA[来源:李杀网
李杀网有一枚elisp教程我很喜欢，原因是它不解释太多的名词，而从实际动作方面入手，对我的胃口。
以下是相关的笔记。
运行方式：
作为一个实践的手册，第一件事当然是告诉如果运行一行代码，让你在看指南的过程中可以方便地动手尝试。

eval-last-sexp
输入后把光标移到表达式后面，如“(+ 3 4)”后面，然后输入&#8221;Alt+x eval-last-sexp&#8221;或者使用快捷键&#8221;C-x C-e&#8221;，就可以在mini buffer看到这一句的运行结果&#8221;7&#8243;。
eval-region
解释选中的区域。
ielm
打开一个交互式的elips命令行解释器。

寻找帮助:
可以使用&#8221;Alt + x describe-function&#8221;(快捷键&#8221;C-h f&#8221;)来查找一个函数的用法。也可以使用&#8221;Alt+x elisp-index-search&#8221;在手参考手册中查询。
常用函数
打印

  (message "hi")
  (message "her age is:%d" 16) ;%d 数字
  (message "her name is: %s" "Vicky") ;%s 字符串
  (message "her min init is: %c" 86) ;%c 字符

注意：你可以在*message* buffer中看到打印出来的结果。
运算函数

(+ 4 5 1 )  ;=10
(- 9 2)     ;=7
(* [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://xahlee.org/emacs/elisp_basics.html">来源:李杀网</a></p>
<p>李杀网有一枚elisp教程我很喜欢，原因是它不解释太多的名词，而从实际动作方面入手，对我的胃口。</p>
<p>以下是相关的笔记。</p>
<h4>运行方式：</h4>
<p>作为一个实践的手册，第一件事当然是告诉如果运行一行代码，让你在看指南的过程中可以方便地动手尝试。</p>
<ul>
<li>eval-last-sexp</li>
<p>输入后把光标移到表达式后面，如“(+ 3 4)”后面，然后输入&#8221;Alt+x eval-last-sexp&#8221;或者使用快捷键&#8221;C-x C-e&#8221;，就可以在mini buffer看到这一句的运行结果&#8221;7&#8243;。</p>
<li>eval-region</li>
<p>解释选中的区域。</p>
<li>ielm</li>
<p>打开一个交互式的elips命令行解释器。</p>
</ul>
<h4>寻找帮助:</h4>
<p><P>可以使用&#8221;Alt + x describe-function&#8221;(快捷键&#8221;C-h f&#8221;)来查找一个函数的用法。也可以使用&#8221;Alt+x elisp-index-search&#8221;在手参考手册中查询。</p>
<h3>常用函数</h3>
<h4>打印</h4>
<pre name="code" class="py">
  (message "hi")
  (message "her age is:%d" 16) ;%d 数字
  (message "her name is: %s" "Vicky") ;%s 字符串
  (message "her min init is: %c" 86) ;%c 字符
</pre>
<p>注意：你可以在*message* buffer中看到打印出来的结果。</p>
<h4>运算函数</h4>
<pre name="code" class="py">
(+ 4 5 1 )  ;=10
(- 9 2)     ;=7
(* 2 3)     ;=6
(* 2 3 4)   ;=24
(/ 7 2)     ;=3  结果的整数部分
(/ 7 2.0)   ;=3.5
(% 7 4)     ;=3 余数
</pre>
<p>注意，如果你的操作数是小数，必须把后面的0带上。就是说你应该写2.0，而不是2.。</p>
<pre name="code" class="py">
  (integerp 3.)  ;T
  (floatp 3.)    ;nil
  (floatp 3.0)   ;T
</pre>
<p>以字符p结尾的函数通常意味着它的返回值是True或者False。p意味着&#8221;predicate&#8221;(判定)。</p>
<h4>True和False</h4>
<p>在elisp中，标识&#8221;nil&#8221;代表false，其它的一切都是true,包括0。&#8221;nil&#8221;是空链表&#8221;()&#8221;的同义词。所以&#8221;()&#8221;也是false。</p>
<p>按惯例，标识&#8221;t&#8221;用来表示true。</p>
<pre name="code" class="py">
  (and t nil) ; nil
  (or t nil)  ; t
</pre>
<p>在elisp中没有布尔型，只需记住&#8221;nil&#8221;和&#8221;()&#8221;是false，其它一切都是true。</p>
<h4>比较函数</h4>
<p>比较数字</p>
<pre name="code" class="py">
  (< 3 4) ;小于
  (<= 3 4)  ;小于等于
  (> 3 4)  ;大于
  (>= 3 4) ;大于等于
  (= 3 3)  ;等于
</pre>
<p>比较字符串</p>
<pre name="code" class="py">
  (string= "this" "thiS")
  (string< "a" "b")
  (string< "B" "b")
</pre>
<p>在字符串比较中大小写是敏感的。比较依据是字典顺序。</p>
<p>要比较两个sysbols是否有相同的数据类型和值，使用"equal"。</p>
<pre name="code" class="py">
(equal "abc" "abc") ;t
(equal 3 3)         ;t
(equal 3 3.0)       ;nil.类型不同
(equal '(3 4 5) '(3 4 5))  ; t
(equal '(3 4 5) '(3 4 "5"))  ;nil
</pre>
<p>在Elisp中并没有"!="或者“not-equal”。判断不等，可以在对整个等式取非。</p>
<pre name="code" class="py">
  (not (= 3 4))  ;t
</pre>
<h4>全局和局部变量</h4>
<p>"setq"用于给变量赋值。格式一般为"setq 变量1 值1 变量2 值2..."</p>
<p>在lisp中，变量不需要声时，并且是全局的。</p>
<pre name="code" class="py">
  (setq a 3 b 2 c 7)  ;三个变是，a=3 b=2 c=7
</pre>
<p>定义局部变量，使用let。格式为"(let (变量1 变量2) body)"。"body"代表其它的表达式。其中最后一个表达式的取值是整个语句块的返回值。</p>
<pre name="code" class="py">
  (let (a b)
  (setq a 3)
  (setq b 4)
  (+ a b)
  )
</pre>
<p>a和b都是这个语句块的局部变量，返值是最后一个表达式"(+ a b)"的取值。</p>
<p>另一种格式是"(let ((变量1 值1)(变量2 值2)) body )"。例如：</p>
<pre name="code" class="py">
  (let ((a 3) (b 4))
  (+ a b)
  )
</pre>
<p>如果你的变量很少，并且值都是已经确定的，可以用这种方法。</p>
<h4>表达式块</h4>
<p>有时需要把一些表达式括起来。这时可以使用"progn"。</p>
<pre name="code" class="py">
  (progn (message "hi"))
</pre>
<p>它相当于</p>
<pre name="code" class="py">
  (message "hi")
</pre>
<p>"progn"类似于C语言中的"{...}"。它使用于某些需要把语句合并起来的场合，其实这跟C语言中也是一样的。比如："(if something (progn this that))"。这里，如果把progn去掉，变成"(if somethong this that"，在lisp中表示如果something,那么this,否则that。在有progn把this和that括真情 为情况下，表示的是如果something，那么执行this和that。</p>
<h4>If then else</h4>
<p>格式为"(if test then <else>)"。"else"是可选的。例：</p>
<pre name="code" class="py">
  (if (< 3 2) (message "yes")))
  (if (< 3 2) (message "yes") (message "no")))
</pre>
<h4>迭代循环</h4>
<p>使用while。</p>
<pre name="code" class="py">
  (setq x 0)
  (while (< x 4)
     (princ (format "yay %d." x))
     (setq x (+ 1 x)))
</pre>
<p>在elisp中，并没有for语句。</p>
<h4>Lists</h4>
<p>在lisp中的List是这样的：“'(x y z)”。括号前面那个单引号是很重要的。不需要太在意它的含义，把它当成句法的一部份即可。</p>
<pre name="code" class="py">
  (message "%S" '(a b c))
  (setq mylist '(a b c))  ;定义
  (let ((x 3) (y 4) (z 5))
      (message "%S" (list x y z))
  )
</pre>
<p>以下是List的一些函数：</p>
<table border="1">
<tr>
<th>Function</th>
<th>目的</th>
</tr>
<tr>
<td>(car mylist)</td>
<td>取第一个元素</td>
</tr>
<tr>
<td>(nth n mylist)</td>
<td>最第n个元素</td>
</tr>
<tr>
<td>(car (last mylist))</td>
<td>取最后一个元素</td>
</tr>
<tr>
<td>(cdr mylist)</td>
<td>从第二个到最后一个</td>
</tr>
<tr>
<td>(nthcdr n mylist)</td>
<td>从第n个到最后一个元素</td>
</tr>
<tr>
<td>(butlast mylist n)</td>
<td>不包含n到最后一个元素</td>
</tr>
</table>
<p>这里所说的n，都是从0开始的。</p>
<p>下列是一些例子。</p>
<pre name="code" class="py">
  (car (list "a" "b" "c"))
  (nth 2 (list "a" "b" "c"))
  (last (list "a" "b" "c"))
</pre>
<table border="1">
<caption>Basic List Functions</caption>
<tr>
<th>Function</th>
<th>目的</th>
</tr>
<tr>
<td>(length mylist)</td>
<td>List长度</td>
</tr>
<tr>
<td>(cons x mylist)</td>
<td>把x加到list前面</td>
</tr>
<tr>
<td>(append mylist1 mylist2)</td>
<td>连接两个List</td>
</tr>
</table>
<p>例如:</p>
<pre name="code" class="py">
  (length (list "a" "b" "c"))
</pre>
<table border="1">
<tr>
<th>Function</th>
<th>Purpose</th>
</tr>
<tr>
<td>(pop mylist)</td>
<td>删除第一个元素并返回</td>
</tr>
<tr>
<td>(nbutlast mylist n)</td>
<td>删除第n个元素，返回删除后的list.</td>
</tr>
<tr>
<td>(setcar mylist x)</td>
<td>替换第一个元素，并返回</td>
</tr>
<tr>
<td>(setcdr mylist x)</td>
<td>替换除第一个之外的所有元素 </tr>
</table>
<h4>遍历运算数组</h4>
<pre name="code" class="py">
  (mapcar '1+ '(1 2 3 4))
</pre>
<p>上例的做所是遍历list中的每一个元素，并对它进行"1+"的操作。</p>
<p>当然，也可以用while循环来完成这件事。</p>
<h4>定义函数</h4>
<p>基本的函数定义方式是"defun <name> (param) "doc" <body>"。</p>
<pre name="code" class="py">
  (defun myFunction () "testing" (message "Yay!"))
</pre>
<p>myFunction是函数名，这个函数无参，函数注释"testing"，后面是函数体。</p>
<p>可以在doctsing后面加一个"interactive"来使得函数能跟环境进行交互（在emacs中，就呆以可用"Alt + x"来调用）</p>
<p>interactive的一些常用语法:</p>
<ul>
<li>(interactive) 无参</li>
<li>(interactive "n") 一个数字参数</li>
<li>(interactive "s") 一个字符串参数</li>
</ul>
<h3>Related Posts</h3><ul><li><a href="http://www.laihj.net/2010/02/execute-compile-current-file/" title="[elisp]用elisp编译解释当前的buffer 2010.02.12">[elisp]用elisp编译解释当前的buffer</a>(0)</li>
<li><a href="http://www.laihj.net/2010/02/elisp-emacs-editing-basics/" title="[elisp]针对Emacs中文本编辑的编程简介 2010.02.3">[elisp]针对Emacs中文本编辑的编程简介</a>(0)</li>
<li><a href="http://www.laihj.net/2010/03/editors-learning-curves/" title="编辑器的学习曲线 2010.03.3">编辑器的学习曲线</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/emacs-orgmode-remember/" title="Emacs的orgmode [remember] 2010.01.20">Emacs的orgmode [remember]</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/emacs-orgmode-tags/" title="Emacs的orgmode [tags］ 2010.01.15">Emacs的orgmode [tags］</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/code-complete-yasnippet/" title="emacs代码补完－yasnippet 2010.01.8">emacs代码补完－yasnippet</a>(1)</li>
<li><a href="http://www.laihj.net/2010/01/emacs-orgmode-archieved/" title="Emacs的orgmode [归档］ 2010.01.2">Emacs的orgmode [归档］</a>(0)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode-agenda-view/" title="Emacs的org-mode [agenda view] 2009.12.29">Emacs的org-mode [agenda view]</a>(0)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode-%e6%97%a5%e6%9c%9f%e4%b8%8e%e6%97%b6%e9%97%b4/" title="Emacs的org-mode [日期与时间] 2009.12.26">Emacs的org-mode [日期与时间]</a>(1)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode%ef%bc%bbtodo%ef%bc%bd/" title="Emacs的org-mode［TODO］ 2009.12.25">Emacs的org-mode［TODO］</a>(0)</li>
</ul><h3>Recent Comments</h3><ul></ul>]]></content:encoded>
			<wfw:commentRss>http://www.laihj.net/2010/01/elipsemacslisp-basi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>这就是乔不死同学的ipad?</title>
		<link>http://www.laihj.net/2010/01/is-this-jobs-ipad/</link>
		<comments>http://www.laihj.net/2010/01/is-this-jobs-ipad/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 02:08:58 +0000</pubDate>
		<dc:creator>laihj</dc:creator>
				<category><![CDATA[负暄琐话]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[ipod]]></category>

		<guid isPermaLink="false">http://www.laihj.net/?p=650117</guid>
		<description><![CDATA[
私人表示有点失望。
从规格上来讲，这就是一枚大号的iPhone，乔不死同学敢不敢给它加一个打电话的功能？
乔不死同学之前放话说这是他迄今最重要的事，如果只是把iPhone加大的话，这确实让人失望得多。
凭心而论，iPad是一款很好的产品，操作感应该没得说，这点我们不需要亲自上手就可以信任苹果。
只不过，我觉得，大伙儿的失望，从某种意义上来说是对苹果公司的高期望引起的。如果是微软，我们觉得他们把我们想得到的东西实现就了不得了，而苹果不同，我们对苹果的期望是这样的：“告诉我，这玩意比你想得更酷。你想不到机器还可以这样操作吗？”
乔布斯带来了一个大玩具，可惜我们觉得不是太新鲜。
Related Posts0Recent Comments]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-650119" title="hardware" src="http://www.laihj.net/wp-content/uploads/2010/01/hardware.jpg" alt="hardware" width="400" height="233" /></p>
<p>私人表示有点失望。</p>
<p>从规格上来讲，这就是一枚大号的iPhone，乔不死同学敢不敢给它加一个打电话的功能？</p>
<p>乔不死同学之前放话说这是他迄今最重要的事，如果只是把iPhone加大的话，这确实让人失望得多。</p>
<p>凭心而论，iPad是一款很好的产品，操作感应该没得说，这点我们不需要亲自上手就可以信任苹果。</p>
<p>只不过，我觉得，大伙儿的失望，从某种意义上来说是对苹果公司的高期望引起的。如果是微软，我们觉得他们把我们想得到的东西实现就了不得了，而苹果不同，我们对苹果的期望是这样的：“告诉我，这玩意比你想得更酷。你想不到机器还可以这样操作吗？”</p>
<p>乔布斯带来了一个大玩具，可惜我们觉得不是太新鲜。</p>
<h3>Related Posts</h3><ul><li>0</li></ul><h3>Recent Comments</h3><ul></ul>]]></content:encoded>
			<wfw:commentRss>http://www.laihj.net/2010/01/is-this-jobs-ipad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>G3入手</title>
		<link>http://www.laihj.net/2010/01/g3inmyhand/</link>
		<comments>http://www.laihj.net/2010/01/g3inmyhand/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 13:42:28 +0000</pubDate>
		<dc:creator>laihj</dc:creator>
				<category><![CDATA[负暄琐话]]></category>

		<guid isPermaLink="false">http://www.laihj.net/?p=650112</guid>
		<description><![CDATA[
G3入手，花了约六分之一平米房子的钱。感觉1.5的固件在重力感应横竖屏切换的时候慢得难受。其它一切都好
Related Posts0Recent Comments]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-650113" title="G3" src="http://www.laihj.net/wp-content/uploads/2010/01/G3.png" alt="G3" width="700" height="520" /></p>
<p>G3入手，花了约六分之一平米房子的钱。感觉1.5的固件在重力感应横竖屏切换的时候慢得难受。其它一切都好</p>
<h3>Related Posts</h3><ul><li>0</li></ul><h3>Recent Comments</h3><ul></ul>]]></content:encoded>
			<wfw:commentRss>http://www.laihj.net/2010/01/g3inmyhand/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>新人在团队中应该问什么样的问题</title>
		<link>http://www.laihj.net/2010/01/question-to-ask-in-team/</link>
		<comments>http://www.laihj.net/2010/01/question-to-ask-in-team/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 12:47:21 +0000</pubDate>
		<dc:creator>laihj</dc:creator>
				<category><![CDATA[善其事]]></category>

		<guid isPermaLink="false">http://www.laihj.net/?p=650107</guid>
		<description><![CDATA[最近团队中来一个外包，一起搞一个要得很急的项目，大概是年底发。
新人最近提的问题，让我总是忍不住想扔给他一篇《提问的智慧》，砸砸他的脑袋。
此君动不动就咬死了原来的代码行不通，这倒没什么，问题是在此基础上，他并不会提出自己的办法，而是拼命地问你怎么办怎么办怎么办，要求你给出一个方案来实行。
我觉得这样的问题不如不问，对谁都没有好处。
那么刚到团队的新人应该怎么问问题呢？
我个人觉得，如果团队有文档，那当然最重要的是先RTFM，没文档的团队免不了要问问题，其实我们喜欢新人问问题多过新人把代码弄得一团糟。但要注意的是，新人应该问的是老人能够几十秒之内回答的问题。
比如说，作为新人，不应该直接问为什么调用这个功能是为什么弹出提示说“没有权限”，而应该跟代码跟到相关的数据表，然后问在这种情况下为什么这个数据库表的值不对。
因为，一个团队，加进一个程序员，本质上来说目的只有一个：加快团队开发的效率，而前少项目交付的时间。
新人来问我问题，如果这个问题我知道，很好，我乐意告诉你。这样节省了走弯路的时间，有利于整个团队的效率。如果我不知道，那么这个问题应该打住，请君自己去看代码，而不是要求我帮忙看代码，或者要求我去思考出一个方案由你来执行。
因为不管是让我去帮忙读代码或让我出方案，都是一个时间浪费的问题。一方面，我得停下手头的工作，另一方面，在我帮忙的这段时间，新人实际上是闲着的。
并且，团队招一个新人，并不是为了写代码，而是为了解决问题。我们招一个人来，应该是看中其独立思考解决问题的能力，而不是为了得到一个编写代码的工具。如果只是一个按给定方案来写代码的工具的话，相比于人类，某些二进制代码组成的工具说不定是更好的选择。
而且，这样的问题并不能培养一个人的编码能力，天天从天上掉下来大鱼的话，人是会懒地，他必然学不会渔的能力。
Related Posts0Recent Comments]]></description>
			<content:encoded><![CDATA[<p>最近团队中来一个外包，一起搞一个要得很急的项目，大概是年底发。</p>
<p>新人最近提的问题，让我总是忍不住想扔给他一篇《提问的智慧》，砸砸他的脑袋。</p>
<p>此君动不动就咬死了原来的代码行不通，这倒没什么，问题是在此基础上，他并不会提出自己的办法，而是拼命地问你怎么办怎么办怎么办，要求你给出一个方案来实行。</p>
<p>我觉得这样的问题不如不问，对谁都没有好处。</p>
<p>那么刚到团队的新人应该怎么问问题呢？</p>
<p>我个人觉得，如果团队有文档，那当然最重要的是先RTFM，没文档的团队免不了要问问题，其实我们喜欢新人问问题多过新人把代码弄得一团糟。但要注意的是，新人应该问的是老人能够几十秒之内回答的问题。</p>
<p>比如说，作为新人，不应该直接问为什么调用这个功能是为什么弹出提示说“没有权限”，而应该跟代码跟到相关的数据表，然后问在这种情况下为什么这个数据库表的值不对。</p>
<p>因为，一个团队，加进一个程序员，本质上来说目的只有一个：加快团队开发的效率，而前少项目交付的时间。</p>
<p>新人来问我问题，如果这个问题我知道，很好，我乐意告诉你。这样节省了走弯路的时间，有利于整个团队的效率。如果我不知道，那么这个问题应该打住，请君自己去看代码，而不是要求我帮忙看代码，或者要求我去思考出一个方案由你来执行。</p>
<p>因为不管是让我去帮忙读代码或让我出方案，都是一个时间浪费的问题。一方面，我得停下手头的工作，另一方面，在我帮忙的这段时间，新人实际上是闲着的。</p>
<p>并且，团队招一个新人，并不是为了写代码，而是为了解决问题。我们招一个人来，应该是看中其独立思考解决问题的能力，而不是为了得到一个编写代码的工具。如果只是一个按给定方案来写代码的工具的话，相比于人类，某些二进制代码组成的工具说不定是更好的选择。</p>
<p>而且，这样的问题并不能培养一个人的编码能力，天天从天上掉下来大鱼的话，人是会懒地，他必然学不会渔的能力。</p>
<h3>Related Posts</h3><ul><li>0</li></ul><h3>Recent Comments</h3><ul></ul>]]></content:encoded>
			<wfw:commentRss>http://www.laihj.net/2010/01/question-to-ask-in-team/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>R.I.P Sun</title>
		<link>http://www.laihj.net/2010/01/r-i-p-sun/</link>
		<comments>http://www.laihj.net/2010/01/r-i-p-sun/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 01:11:50 +0000</pubDate>
		<dc:creator>laihj</dc:creator>
				<category><![CDATA[负暄琐话]]></category>
		<category><![CDATA[sun]]></category>

		<guid isPermaLink="false">http://www.laihj.net/?p=650105</guid>
		<description><![CDATA[
Related Posts0Recent Comments]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.laihj.net/wp-content/uploads/2010/01/20100122-033941-pic1.jpg" alt="RIP,SUN" title="RIP,SUN" width="700" height="547" class="aligncenter size-full wp-image-650104" /></p>
<h3>Related Posts</h3><ul><li>0</li></ul><h3>Recent Comments</h3><ul></ul>]]></content:encoded>
			<wfw:commentRss>http://www.laihj.net/2010/01/r-i-p-sun/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emacs的orgmode [remember]</title>
		<link>http://www.laihj.net/2010/01/emacs-orgmode-remember/</link>
		<comments>http://www.laihj.net/2010/01/emacs-orgmode-remember/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 10:42:57 +0000</pubDate>
		<dc:creator>laihj</dc:creator>
				<category><![CDATA[善其事]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[orgmode]]></category>
		<category><![CDATA[remember]]></category>

		<guid isPermaLink="false">http://www.laihj.net/?p=650098</guid>
		<description><![CDATA[

Inbox,在GTD的定义里面是收集材料的工具。最好的Inbox工具是纸和笔。而Remember在Orgmode里面算是较好的Inbox工具。它比每次打开org文件来写好非常非常多。它提供的是在emacs启动的情况下，快速的录入工具。如果你的emacs没启动，那用便箋或纸笔会好得多。原因很简单，emacs什么都好，就是启动太龟了。
配置和基本使用
remember.el在emacs23以上版本是自带的，emacs22及以下版本如果发现没有自带，请自行放狗搜。

    (setq org-default-notes-file "~/.notes")
  

在.emacs中作如上设置，表示你希望将remember产生的note存放在~/.notes中，要我说这可一点也不重要，重要的是下面这一行：

  (define-key global-map [f12] 'org-remember)

快键键。当然，快捷键从来很重要。不过在remember模式中，它显得尤其重要。因为本身remember是随时需要的东西，用完后又应该随时忘掉。所以调用remember应该越不影响当前的思路又好。一个要键入&#8221;M-x org-remember&#8221;这么多字符才能调出来的remember又有什么用？
我觉得remeber的用法应该是这样的：
现在我想起来晚上海贼王的汉化应该出新的了，接F12调出remember,输入OP，然后“C-c C-c”保存(C-c C-k是取消)，remember buffer自动消失，整个emacs又恢复成写这篇blog的界面。
现在的问题是，我一天可能乱七八糟的出现不少想法，每次都按F12来记录是好的，晚上回家一看，~/.noet里面充满了记录，一条一条分门另类地复制了不同的org文件中。我承认这是重要的工作，无可避免。可是有些想法我在记录的时候就知道它应该是todo还是普通的笔记，能不能让它们自动归位呢？
于是我们应该开始介绍：
模版
模版的配置文件如下：

  (setq org-remember-templates
      '(("TODO" ?t "* TODO %?\n %x\n %a" "~/doc/org/home.org" "Tasks")
	("IDEA" ?i "* IDEA %?\n %i\n %a" "~/doc/org/home.org" "Idea")
	))

它的参数是这样的，&#8221;TODO&#8221;是这个模版的名,&#8221;?t&#8221;是快捷键，&#8221;* TODO %?\n %x\n %a&#8221;是整个模版体，然后是该模版要保存的文件，保存后的项目在文件中处于哪个父节点下面(如果没有会自动新建)。
我们以第一个模版为例说一下使用中会发生什么？
当你按下F12（这是我的快捷键）时，会看到buffer被切分成两块，下面出现一个rememeber fuffer。以及一个输入提示，按我们之前的设定，出现两个快捷提示。

这时按下“t”,在remember buffer中，会自动接模版体的格式显示出补好的TODO,第一行是“* TODO”，第二行是%x，%x是你触发remember时kill ring（类似于剪贴板）中的内容。最后一行是%a，一个指向你触发remember的地方的link。
这时如果你按下&#8221;C-c C-c&#8221;保存，这一条TODO项目将会被送到&#8221;~/doc/org/home.org&#8221;文件中的&#8221;Tasks&#8221;条目下面。
模版还有一些好玩的用法，比如说写日记。
关于模版参数的更详细说明，可以在这里找到
参考资料
org手册remember
Remembering to Org and [...]]]></description>
			<content:encoded><![CDATA[<h3></h3>
<p><img src="http://www.laihj.net/wp-content/uploads/2010/01/remember1.png" alt="remember1" title="remember1" width="645" height="482" class="aligncenter size-full wp-image-650100" /></p>
<p>Inbox,在GTD的定义里面是收集材料的工具。最好的Inbox工具是纸和笔。而Remember在Orgmode里面算是较好的Inbox工具。它比每次打开org文件来写好非常非常多。它提供的是在emacs启动的情况下，快速的录入工具。如果你的emacs没启动，那用便箋或纸笔会好得多。原因很简单，emacs什么都好，就是启动太龟了。</p>
<h3>配置和基本使用</h3>
<p>remember.el在emacs23以上版本是自带的，emacs22及以下版本如果发现没有自带，请自行放狗搜。</p>
<p><pre name="code" class="css">
    (setq org-default-notes-file "~/.notes")
  </pre>
</p>
<p>在.emacs中作如上设置，表示你希望将remember产生的note存放在~/.notes中，要我说这可一点也不重要，重要的是下面这一行：</p>
<pre name="code" class="css">
  (define-key global-map [f12] 'org-remember)
</pre>
<p>快键键。当然，快捷键从来很重要。不过在remember模式中，它显得尤其重要。因为本身remember是随时需要的东西，用完后又应该随时忘掉。所以调用remember应该越不影响当前的思路又好。一个要键入&#8221;M-x org-remember&#8221;这么多字符才能调出来的remember又有什么用？</p>
<p>我觉得remeber的用法应该是这样的：</p>
<p>现在我想起来晚上海贼王的汉化应该出新的了，接F12调出remember,输入OP，然后“C-c C-c”保存(C-c C-k是取消)，remember buffer自动消失，整个emacs又恢复成写这篇blog的界面。</p>
<p>现在的问题是，我一天可能乱七八糟的出现不少想法，每次都按F12来记录是好的，晚上回家一看，~/.noet里面充满了记录，一条一条分门另类地复制了不同的org文件中。我承认这是重要的工作，无可避免。可是有些想法我在记录的时候就知道它应该是todo还是普通的笔记，能不能让它们自动归位呢？</p>
<p>于是我们应该开始介绍：</p>
<h3>模版</h3>
<p>模版的配置文件如下：</p>
<pre name="code" class="css">
  (setq org-remember-templates
      '(("TODO" ?t "* TODO %?\n %x\n %a" "~/doc/org/home.org" "Tasks")
	("IDEA" ?i "* IDEA %?\n %i\n %a" "~/doc/org/home.org" "Idea")
	))
</pre>
<p>它的参数是这样的，&#8221;TODO&#8221;是这个模版的名,&#8221;?t&#8221;是快捷键，&#8221;* TODO %?\n %x\n %a&#8221;是整个模版体，然后是该模版要保存的文件，保存后的项目在文件中处于哪个父节点下面(如果没有会自动新建)。</p>
<p>我们以第一个模版为例说一下使用中会发生什么？</p>
<p>当你按下F12（这是我的快捷键）时，会看到buffer被切分成两块，下面出现一个rememeber fuffer。以及一个输入提示，按我们之前的设定，出现两个快捷提示。</p>
<p><img src="http://www.laihj.net/wp-content/uploads/2010/01/remembertemp.png" alt="remembertemp" title="remembertemp" width="622" height="425" class="alignnone size-full wp-image-650099" /></p>
<p>这时按下“t”,在remember buffer中，会自动接模版体的格式显示出补好的TODO,第一行是“* TODO”，第二行是%x，%x是你触发remember时kill ring（类似于剪贴板）中的内容。最后一行是%a，一个指向你触发remember的地方的link。</p>
<p>这时如果你按下&#8221;C-c C-c&#8221;保存，这一条TODO项目将会被送到&#8221;~/doc/org/home.org&#8221;文件中的&#8221;Tasks&#8221;条目下面。</p>
<p>模版还有一些好玩的用法，比如说<a ref="">写日记</a>。</p>
<p>关于模版参数的更详细说明，可以在<a href="http://orgmode.org/manual/Remember-templates.html#Remember-templates">这里</a>找到</p>
<h3>参考资料</h3>
<p><a href="http://orgmode.org/manual/Remember.html#Remember">org手册remember</a></p>
<p><a href="http://sachachua.com/wp/2007/10/remembering-to-org-and-planner/">Remembering to Org and Planner</a></p>
<h3>Related Posts</h3><ul><li><a href="http://www.laihj.net/2010/01/emacs-orgmode-tags/" title="Emacs的orgmode [tags］ 2010.01.15">Emacs的orgmode [tags］</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/emacs-orgmode-archieved/" title="Emacs的orgmode [归档］ 2010.01.2">Emacs的orgmode [归档］</a>(0)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode-agenda-view/" title="Emacs的org-mode [agenda view] 2009.12.29">Emacs的org-mode [agenda view]</a>(0)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode-%e6%97%a5%e6%9c%9f%e4%b8%8e%e6%97%b6%e9%97%b4/" title="Emacs的org-mode [日期与时间] 2009.12.26">Emacs的org-mode [日期与时间]</a>(1)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode%ef%bc%bbtodo%ef%bc%bd/" title="Emacs的org-mode［TODO］ 2009.12.25">Emacs的org-mode［TODO］</a>(0)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode%ef%bc%bb%e5%88%9d%e6%8e%a2%ef%bc%bd/" title="Emacs的org-mode［初探］ 2009.12.24">Emacs的org-mode［初探］</a>(0)</li>
<li><a href="http://www.laihj.net/2010/03/editors-learning-curves/" title="编辑器的学习曲线 2010.03.3">编辑器的学习曲线</a>(0)</li>
<li><a href="http://www.laihj.net/2010/02/execute-compile-current-file/" title="[elisp]用elisp编译解释当前的buffer 2010.02.12">[elisp]用elisp编译解释当前的buffer</a>(0)</li>
<li><a href="http://www.laihj.net/2010/02/elisp-emacs-editing-basics/" title="[elisp]针对Emacs中文本编辑的编程简介 2010.02.3">[elisp]针对Emacs中文本编辑的编程简介</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/elipsemacslisp-basi/" title="[elisp]EmacsLisp 基础 2010.01.31">[elisp]EmacsLisp 基础</a>(0)</li>
</ul><h3>Recent Comments</h3><ul></ul>]]></content:encoded>
			<wfw:commentRss>http://www.laihj.net/2010/01/emacs-orgmode-remember/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
