通过emacs使用gtalk聊天

标题真不好起,我用emacs来写代码,写博客,看twitter,为什么不能聊天呢,当然哪,像qq这种大牌是不会为你做什么的,不过,我也很少用QQ了,在调查为什么emacs打开cedet插件之后一个源代码文件为什么会出现为什么的问题的时候【不好意思,我忘了当时调查什么问题了】。一个jabber的插件引起了我的注意。在emacswiki的地址是:http://www.emacswiki.org/cgi-bin/wiki/JabberEl
插件是jabber服务器的emacs客户端,安装之后,可以让emacs和jabber服务器进行通讯,jabber服务好像是个开源即时通讯协议。而google得gtalk,也好像是基于jabber的,于是,我们就可以通过emacs来和gtalk进行聊天,传文件了。
将下面的语句添加到emacs的加载里面:

       (add-to-list 'load-path "~/.emacs.d/plugin/emacs-jabber-0.8.0")
(require 'jabber-autoloads)
(setq jabber-account-list '(
                            ("yourname@gmail.com"
                            (:password . "*******")
                            (:network-server . "talk.google.com")
                            (:port . 443)
                            (:connection-type . ssl))
                            ))
(add-hook 'jabber-chat-mode-hook 'goto-address)
(require 'autosmiley)
(add-to-list 'smiley-regexp-alist '("\\(:-?]\\)\\W" 1 "forced"))
(add-to-list 'smiley-regexp-alist '("\\s-\\(:-?/\\)\\W" 1 "wry"))
(add-to-list 'smiley-regexp-alist '("\\(:-?(\\)\\W" 1 "sad"))
(add-to-list 'smiley-regexp-alist '("\\((-?:\\)\\W" 1 "reverse-smile"))
(add-to-list 'smiley-regexp-alist '("\\(:-?D\\)\\W" 1 "grin"))
(add-to-list 'smiley-regexp-alist '("\\(:-?P\\)\\W" 1 "poke"))
(add-hook 'jabber-chat-mode-hook 'autosmiley-mode)
(setq abber-vcard-avatars-retrieve nil)

(defun jabber-start ()
  "Handle the jabber connection startup. If it's call and there
  isn't a buffer named *-jabber-* lunchs jabber-connect,
  otherwise opens a new frame named with *-jabber-* as the
  buffer. In the case there's alredy the byffer and the frame, it
  doesn't do anything"
  (interactive)
  (if (not (member "*-jabber-roster-*" (mapcar (function buffer-name) (buffer-list))))
      (jabber-connect-all)
    (if (not (member "jabber" (mapcar '(lambda(x) (frame-parameter x 'name)) 
				      (frame-list))))
	(progn
	  (select-frame (make-frame '((name . "jabber")
				      (minibuffer . t))))
	  (switch-to-buffer "*-jabber-roster-*"))
      )))

(defun jabber-stop ()
  "Disconnect from jabber doing some cleaning"
  (interactive)
  (jabber-disconnect)
  (switch-to-buffer "*-jabber-roster-*")
  (kill-buffer nil))

(setq jabber-history-enabled t)
(setq jabber-activity-query-unread t)
(setq jabber-roster-line-format "  %c %-25n %u %-8s  %S
")
       

将yourname替换为你的gmail账号的@前的部分;password中的**替换为你的密码,如果你不想这么干,想每次都输入密码的话,就把它注释掉;load-path修改为你解压缩后的jabber的目录;上面的配置使用了图像文字的插件,所以需要插件autosmiley;同时添加了两个小的函数:
jabber-start是启动jabber的。jabber-stop是停止jabber的。嗯,好像废话。
我将这两个函数绑定在了f8和Ctrol+f8键上:

       (global-set-key (kbd "") 'jabber-start)
       (global-set-key [C-f8] 'jabber-start)
       

这样会很方便的。
其实,jabber下载完之后,你可以对里面的脚本进行编译,这样可以加载更快些,我没有这么做,因为在我这边运行的时候有些小错误。
当我要退出emacs的时候,如果启动了jabber,则没办法退出了。出现什么lambda什么的错误,所幸的是我通过下面的方法打开调试模式,找到了原因:

       M-x toggle-debug-on-error
       

经过查找,是由于jabber-activity.el中的

       (add-to-list 'kill-emacs-query-functions
		     'jabber-activity-kill-hook)
       

引起的,我曾经尝试修改jabber-activity-kill-hook函数来修复它,但我可怜的一些lisp知识不足以修复,只好将上面的语句注释掉。如果你有好的修改办法,请告诉我。
刚才又看到了通过emacs来使用google的wave服务,貌似不错的,改天试试。

发布者

rix

如果连自己都不爱自己,哪还有谁来爱你