2009-12-06

ntemacs

把XP上的ntemacs更新到23.1.50.1后发现以前写在 site-list/default.el 中的配置似乎不起作用了。比如,我在其中写了:
(setq default-directory "C:\Documents and Settings\liqun\Desktop\")


现在这个设置楞是变得不起作用,枉我号称Emacs达人,折腾来折腾去都搞不定,传到江湖上岂不是丢大了。不过既然敢写出来,那一定是搞定啦!右击emacs的快捷方式图标,选择"Properties",然后进"Shortcut"标签,下面有个设置是"start in",一眼瞅过去,写的是"C:\Program Files\ntemacs23\bin\",怪不得现在每次C-x C-f都用这个目录,应该是它捣的鬼啦!改回去后重启emacs,果然OK了。

另外,一个起作用的配置文件:"C:\Documents and Settings\liqun\Application Data\.emacs",把default.el直接重命名过去就得了。最后,"start in"中的设置会覆盖.emacs中对default-directory的设置。

标签:

2009-09-09

Elisp to Rescue!

这些日子开始做一个简单的代码生成工具 -- 听着很炫,其实很思想简单 -- 就是用一些(脚本)程序修改老的C头文件,并自动在源代码中修改相应的实现。修改头文件相对简单,用sed就可以了,因为现有API的名字有明显的模式可寻,而修改C源代码则相对困难,这是因为大家的实现方式并不一致。姑且不论对代码的解析,仅仅是用sed/awk之类的工具去做块编辑便很难得心应手。

生活中总有一些事情可以激发一点点灵感。昨天因为写错了一个自定义类型的名字,一段代码花费了我半个多小时的调试时间(为了通用,它藏在两层macro之中),于是想如果能把这些自定义类型加入vim/emacs的语法高亮,这样可以比较方便的看出来。接着便配置了vim/emacs去做这些事,配置emacs很简单,在c-mode-hook里面设置一下c-font-lock-extra-types即可。

我突然想到,为什么不重用cc-mode来做代码生成呢?Emacs提供了编辑功能,cc-mode提供了足够的c/c++语法解析,而lisp天生便用于符号操作,用elisp去操纵c/c++代码实在是再适合不过了!

另外,如果我们的代码能做到简单一致(Simple & Consistent)那该多么美妙!可惜这已经是奢望了。

标签:

2009-07-18

Display Chinese TXT File in Vim/Emacs

For Vim, put the following line in ~/.vimrc:
set fileencodings=utf-8,cp936


For Emacs, add the following to ~/.emacs:
(custom-set-variables
'(current-language-environment "Chinese-GB"))

标签: ,

2009-05-20

你推我也推!

看见邮箱里又躺着一封Twitter的入伙信,心想,“算了,也随个大流吧!”于是点击了连接上了贼船。

用Emacs连Twitter比较方便,我试用了两个twitter.el和twittering-mode.el,感觉上更喜欢后者,其配置也很简单:
(require 'twittering-mode)

(setq twitter-username "live4thee")

(setq twitter-password "blabla")

值得注意的是,里面有个快捷键C-c C-l绑定到函数twittering-update-lambda,它会post一串貌似韩文的东西到你的twitter页面。于是我把它从我的twittering-mode.el里删掉了。

另外,firefox的扩展ubiquity里面有twitter命令,用它也post消息也很方便。但它也仅仅只能post而已。

http://twitter.com/live4thee

标签: ,

2009-04-16

ERC技巧一则

所谓“来电提醒”。


(add-hook 'erc-insert-pre-hook

          '(lambda (msg-str)


             (if (and (string= erc-session-server "127.0.0.1")

                      (string-match "^<" msg-str)


                      (not (string-match "^<root>"

                                         (propertize msg-str 'face nil))))

                 (play-sound-file "~/.emacs.d/hi.au"))


             t))

标签:

2009-01-06

贡献一段代码

如果你用Gnus订阅新闻组和管理邮件,如果你恰好又没有时间每天耗费一点时间去阅读它们,当你某天满怀欣喜地连上NNTP去看文章时才发现,其中很多文章都已经expire了,枉费了按N次n键才有可读的文章。这时候,我们不妨考虑让计算机做这些脏活累活,让它自己跳到第一篇可读的文章。
(defun do-goto-first-available ()
(gnus-summary-next-article t)
(move-beginning-of-line 1)
(when (= 71 (following-char)) ; begin with 'G'?
(do-goto-first-available)))

(defun goto-first-available ()
"Skip those expired/canceled articles."
(interactive)
(do-goto-first-available))

(add-hook 'gnus-summary-mode-hook
'(lambda ()
(global-set-key [f12] 'goto-first-available)))

标签:

2008-09-05

Org-mode

下一段开发工作已经在紧锣密鼓的张罗之中,昨天大家讨论曾经的经验教训的时候谈到了如何规范并有效跟踪各种流程。GMail有个GTD插件,Outlook里有Calendar,老大们也都用Ms Project,而Bugzilla,Wiki等也似乎都可以用来完成很多工作。不过我却想到了Emacs的Org-mode。

Org-mode基于纯文本,可以用来记笔记,做计划,甚至还内置了小巧的speadsheet。这里有一些教程。我的想法是,如果把它和Git/Hg等结合在一起,那实在太酷了。

标签: ,

2008-07-09

Emacs Tip -- 2

利用windmove进行快速窗口切换:
;; windmove keybindings
(if (<= emacs-major-version 21)
(progn
(global-set-key [?\e left] 'windmove-left)
(global-set-key [?\e right] 'windmove-right)
(global-set-key [?\e up] 'windmove-up)
(global-set-key [?\e down] 'windmove-down))
(windmove-default-keybindings 'alt))
下面一行加了个键绑定:``C-c v''用于切换view-mode:
(global-set-key "\C-cv" 'view-mode)
``view-mode''可以方便的浏览代码,比如:d/u两个键分别用来向前/后翻半页,该模式下缓冲区变为只读,避免误写。

标签:

2008-06-28

Emacs Tip -- 1

;; F11 to toggle fullscreen
(defun fullscreen ()
 (interactive)
 (set-frame-parameter nil 'fullscreen
  (if (frame-parameter nil 'fullscreen)
    nil
    'fullboth)))

(global-set-key [f11] 'fullscreen)

标签:

2008-06-14

ERC + Bitlbee = All-in-one Emacs

一直想找出GNU/Linux下简单的IM解决方案,它需要小巧、快速而可靠。以前gtalk用emacs-jabber,而MSN用emesene,后者常常宕机,而且没有Emacs下的键绑定。今天终于找到了大一统的方法:ERC + bitlbee.

ERC 是个Emacs/XEmacs下的IRC客户端,而bitlbee则是一个IM和IRC间的gateway。我们可以通过网络上的公共bitlbee服务 器去连接各种IM,包括XMPP/Jabber, MSN, Yahoo, AIM和ICQ。于是我终于可以在Emacs里面连上我注册的那些IM,其中oscar便是ICQ的协议名了。

<live4thee> account list
<root> 0. msn, royalfer@msn.com (connected)
<root> 1. jabber, live4thee@gmail.com (connected)
<root> 2. yahoo, liqun_yz
<root> 3. oscar, 195110836
<root> End of account list

打开Emacs,M-erc进入ERC,它会提示输入IRC服务器名和端口号,默认是freenode:6667,我们需要登录im.bitlbee.org:6667,网上有现成的教程,不再赘述。下面是添加IM帐号的命令:
account add <protocol> <username> <password> [<server>]

MSN:account add msn royalfer@msn.com PASSWORD
Gtalk:account add jabber live4thee@gmail.com PASSWORD talk.google.com:5223:ssl
Yahoo:account add yahoo liqun_yz PASSWORD
ICQ:account add oscar 195110836 PASSWORD login.icq.com

第 一个帐号添加以后会自动连接上,其它可以通过命令account来打开或者关闭,比如,可以用``account on 1''来打开gtalk等等。``help account''可以查看详细语法,另外一个比较有用的命令是``blist'',就是查看所有在线的buddy。要选择一个buddy聊天,设其 nickname是Nick,则:/msg Nick message而且这是个private conversation.

最后,``set private on''是个很有用的命令,它为每个private conversion单独开一个Emacs buffer.

标签: ,

2008-06-12

autotoolset

Autotoolset: http://autotoolset.sourceforge.net/

(setq user-mail-address "email@your.domain")
(setq user-full-name "fullname")
(require 'gpl)

很久以前便知道它的存在,只是一直没有好好看看上面的文档。20号我们的产品就要GA,这两天比较忙的是各位老大们和QE/QA。不知道今天怎么写自己的daily report -- 自从RC以来,我们就保持着。

我很庆幸当初选择以``程序员''作为自己的职业。我可以在工作的时候堂而皇之地上网,搜索感兴趣的技术或者言论。这给了我相当大的乐趣,并且免于通过CCAV打发时间。我想,大概任何一个有理智的人都不能忍受自己的耳朵遭受三十分钟的折磨。

这个``人民当家做主的国家''很奇怪:在这里public opinion is zero,其子民只能感恩戴德却很难实施有效的问责。想起小学的第一首歌,歌词的第一句似乎是这样的:``我们的祖国是花园,花园的花朵真鲜艳。''

标签: ,

2008-05-02

Emacs窗口快速切换

一直用C-x o和C-x b来切换窗口和buffer,这显然没有Vim里用C-w [hjkl]切换到指定窗口来得快捷。对于习惯于多窗口编辑的俺来讲,颇有点不爽。某天xiang哥问怎么在Emacs下快速切换窗口,我也只有很不好意思的说C-x o -- 说实在的,正因此我写C代码的时候更多的会用vim。

不过从今天开始,一切有所改观啦,只要在.emacs里加上这一行:
(windmove-default-keybindings 'alt)

这样就能用alt-[up|down|left|right]来切换窗口。

标签:

2008-04-28

emacs-jabber (2)

老大从米国过来督阵,于是上班时不再看Google Reader,回家一顿恶补,没注意到终端上的Emacs-Jabber有朋友发来gtalk消息,罪过。总不能alt-tab换来换去不时地瞅瞅终端,于是乎试着设一个``来电提醒''。

M-x play-sound-file,给了个mp3文件,提醒文件格式不支持。从win32下的msn安装文件里找了个online.wav,还是不支持。搜了一下源代码,发现只支持两种格式:
enum sound_type { RIFF, SUN_AUDIO };

于是装了个sox(Swiss army knife of sound processing)想把该.wav文件转换成.au文件,却被提示该.wav文件太短。无奈只有到/usr/share下搜索之,幸好装了sun-java6-demo,所获颇丰。

有了下面的设置,来消息的时候除了在mode-line有提示,还会播放hi.au。
;; play alert when comesnew message
(setq jabber-alert-message-hooks '(jabber-message-wave jabber-message-echo))
(setq jabber-alert-message-wave "~/.emacs.d/hi.au")

此外,每个朋友一个单独记录文件,人人平等:
;; store chat history for each user in per-contact files
(setq jabber-history-enabled t)
(setq jabber-use-global-history nil)
(setq jabber-history-dir "~/.emacs.d")

呃,去掉大头照,文本比较实惠哈:
;; do'not display avatars
(setq jabber-vcard-avatars-retrieve nil)

标签:

2008-04-27

用Emacs连gtalk

% sudo apt-get install emacs-jabber

配置文件中加上:
;; use emacs-jabber to connect Google Talk
(require 'jabber)
(setq jabber-username "live4thee")
(setq jabber-nickname "David.Lee")
(setq jabber-connection-type 'ssl)
(setq jabber-port 5223)
(setq jabber-network-server "talk.google.com")
(setq jabber-server "gmail.com")

(defun jabber ()
  "Connect to Google Talk with Jabber"
  (interactive)
  (jabber-connect)
  (switch-to-buffer "*-jabber-*"))

启动Emacs,然后M-x jabber

标签: