启动和配置
配置文件
~/.gnus.el或~/.emacs
启动 M-x gnus
使用快捷键
订阅新闻组
- A A (连续两次大写A),进入新闻组列表
- 选择要订阅的新闻组主题,使用u键订阅
- 退出 q
刷新 g
阅读新闻组
- Server buffer 按 ^ 进入
- 回车进入定阅的新闻组
- 使用空格阅读主题,并且空格可以翻页
- 发新帖 a
- 跟贴 f
- 单独回信 r
- 标记所有的贴子为已读 Z C
- 获得旧贴子 / o
管理pop信箱
- 刷新 g
- 写信 m
- 发信 C-c C-c
- 保存草稿 C-x s
- 关闭信 C-c C-d
- 查看已读邮件 / o
Gnus 中的编码
gnus-default-charset
这个变量指定查看邮件所用编码的默认值(对于未指定编码的邮件)。但是这个 变量的会被下一个变量(gnus-group-charset-alist)覆盖。如果不设置这个变 量,它的值将由 `current-language-environment' 确定。例如:
(setq gnus-default-charset 'gbk)
gnus-group-charset-alist
这个变量根据组名确定本组的默认编码。设置这个变量时我们要给出一个 (regexp charset) 对,其中 regexp 是匹配组名的正则表达式,charset 是指 定的编码。在这个变量的默认设置中,我们可以查到如下内容:
("\\(^\\|:\\)hk\\>\\|\\(^\\|:\\)tw\\>\\|\\<big5\\>" cn-big5)
("\\(^\\|:\\)cn\\>\\|\\<chinese\\>" cn-gb-2312)
在 Gnus 启动的情况下,使用 C-h v gnus-group-charset-alist 可以查看它的 设置,我们可以自己定义它的值。
可以看出,对于以 hk 或 tw 开头(或者组名中包含 :hk 或 :tw)的组,采用 big5编码。而对于以 cn 开头或组名中包含 :cn 的组采用 cn-gb-2312 的编 码。
因为现在 gbk 比 gb2312 应用更广泛,所以我们需要更改这个变量的设置:
(add-to-list 'gnus-group-charset-alist
'("\\(^\\|:\\)cn\\>\\|\\<chinese\\>" gbk))
这个变量也可以在 group parameter 中以 (charset . gbk) 的方式指定。
gnus-summary-show-article-charset-alist
有时候,默认的编码还不能解决问题,例如,有人把 big5 编码的邮件投递到 了 cn 开头的组里,而且邮件头中又没有编码设定(插一句,这些邮件一般 都是垃圾 邮件),这时就需要手工指定编码。
(setq gnus-summary-show-article-charset-alist
'((1 . utf-8)
(2 . big5)
(3 . gbk)
(4 . utf-7)))
进行了这种设定以后,我们看到乱码邮件时就可以用 `1 g' 指定采用 utf-8, `2 g' 指定big5等等,不过能不能正确解码就要看你自己猜的对不对了。
gnus-group-name-charset-group-alist
通常组名都是英文的,都是也有其他非 ASCII 编码的组名。这个变量可以指定如 何显示这样的组名。这个变量根据组名确定组名采用的编码,默认值是`((".*" utf-8))',也就是 默认用 utf-8 处理所有组名。我们可以这样这样设置:
(setq gnus-group-name-charset-group-alist
'(("\\.com\\.cn:" . gbk)
("news\\.newsfan\\.net" . gbk)))
这样所有组名中含有 .com.cn 或 news.newsfan.net 的组,其名称都采用 gbk 解码。
不过如果我们把 news.newsfan.net 设置为 native method, 那么组名中就不会 出现 news.newsfan.net,那么这个变量就发挥不了作用,怎么办呢?可以采 用 下面这个变量。
gnus-group-name-charset-method-alist
还记得吗?我们选择新闻服务器时是怎么设定的?对了,我们是通过设置 method 来选择服务器的,比如:
(setq gnus-select-method '(nntp "news.newsfan.net"))
(setq gnus-secondary-select-methods '((nnml "")))
这个变量可以根据我们选择的 method,为来自这个 method 的组设置组名的 编 码。
(setq gnus-group-name-charset-method-alist
'(((nntp "news.newsfan.net") . gbk)))
这样,所有来自新帆服务器的组名都采用gbk来解码。
mm-coding-system-priorities
当我们向外发送邮件时,也可以指定编码,比如我们希望发出的邮件采用gb2312 编 码,就可以这样设置:
(setq mm-coding-system-priorities '(iso-8859-1 gb2312 utf-8))
这样,gnus将先试这采用 iso-8859-1 编码邮件,如果不行就采用 gb2312,实在 不行再采用 utf-8 编码。
这样如果你写了一封纯英文的信件,将会采用 iso-8859-1 发出;如果你写了一 封 中文信件,但其中的汉字都在 gb2312 的范围内,则采用gb2312发出;如果你 的信 件中含有gb2312以外的字符,则会被以utf-8编码发出。
那么如果想对不同的组采用不同的编码发信,有办法实现吗?可以,通过设置 posting-style 就可以实现。
(setq gnus-posting-styles
'((".*"
(name "Brep")
(address "brep@bogus.com")
(eval (setq mm-coding-system-priorities
'(iso-8859-1 utf-8))))
("^cn\\.comp"
(name "Brep")
(address "brep@smth.org")
(eval (setq mm-coding-system-priorities
'(iso-8859-1 gb2312 utf-8))))
("^tw\\.comp"
(name "Brep")
(address "brep@ptt.cc")
(eval (setq mm-coding-system-priorities
'(iso-8859-1 big5 utf-8))))))
这样对于 cn.comp 开头的组,gnus会先尝试采用gb2312发送邮件,不行再用 utf-8, 而对于 tw.comp 开头的组,会先尝试采用big5发送邮件,不行再用 utf-8。
gnus-newsgroup-ignored-charsets
有些客户端发出的邮件没有指定正确的MIME类型,例如本来这封邮件是用 gbk 编 码的,但是 MIME 类型却设置成了 x-gbk:
Content-Type: text/plain; charset=x-gbk
这时gnus解码时会遇到困难,我们可以把这种 MIME 类型加入到 gnus-newsgroup-ignored-charsets 列表中,让 gnus 采用默认的编码处理它。
再比如,有些邮件的 MIME 类型是 charset=gb18030, 对于 emacs23,这是没问 题 的,因为 Emacs23 支持 gb18030 编码。但是 emacs22+mule-gbk 根本就不支 持 gb18030,那么该怎么办呢?同样我们可以把 gb18030 加入 gnus-newsgroup-ignored-charsets 列表中:
(setq gnus-newsgroup-ignored-charsets
'(unknown-8bit x-unknown x-gbk gb18030))
ignored-charsets 也可以在 group parameters 中这样指定:
(ignored-charsets x-unknown iso-8859-1)
指定传输编码:gnus-group-posting-charset-alist
这个变量可以用来设置邮件头中的 Content-Transfer-Encoding 字段,为邮件指 定传输编码。这个变量的默认值已经设置的很好了,我从来没有遇到需要设置这 个 变量的情况。不要让自己发出乱码的邮件(指定附件文件名和subject的编码 方式)
gnus 默认采用 RFC2231 对附件文件名进行编码,有些 MUA 无法识别这种编码。 现 在比较流行的方式是采用 RFC2047 对附件文件名进行编码。可以采用如下设 定,让 gnus 也采用这种方式对文件名进行编码:
(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter)
<pre class"example"> (add-to-list 'rfc2047-charset-encoding-alist '(gbk . B)) (add-to-list 'rfc2047-charset-encoding-alist '(gb18030 . B))有很多差劲的邮件客户端无法解码 quoted-printable 编码(看到过 subject 中 有 很多 `
' 号的乱码邮件吗?就是由于这个原因产生的。)为了保证我们发出 的邮件 subject 采用 base64 编码,而不是采用quoted-printable 编码,最好 加上这两句:
一个示例
http://learn.tsinghua.edu.cn:8080/2002315162/gnus_coding.html ,适用于 Emacs22+mule-gbk 或者 Emacs23:
(setq gnus-default-charset 'gbk)
(add-to-list 'gnus-group-charset-alist
'("\\(^\\|:\\)cn\\>\\|\\<chinese\\>" gbk))
(setq gnus-summary-show-article-charset-alist
'((1 . utf-8)
(2 . big5)
(3 . gbk)
(4 . utf-7)))
(setq gnus-group-name-charset-group-alist
'(("\\.com\\.cn:" . gbk)
("news\\.newsfan\\.net" . gbk)))
(setq gnus-group-name-charset-method-alist
'(((nntp "news.newsfan.net") . gbk)))
(setq gnus-newsgroup-ignored-charsets
'(unknown-8bit x-unknown x-gbk gb18030))
(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter)
(add-to-list 'rfc2047-charset-encoding-alist '(gbk . B))
(add-to-list 'rfc2047-charset-encoding-alist '(gb18030 . B))
(setq gnus-posting-styles
'((".*"
(name "Brep")
(address "brep@bogus.com")
(eval (setq mm-coding-system-priorities
'(iso-8859-1 utf-8))))
("^cn\\.comp"
(name "Brep")
(address "brep@smth.org")
(eval (setq mm-coding-system-priorities
'(iso-8859-1 gb2312 utf-8))))
("^tw\\.comp"
(name "Brep")
(address "brep@ptt.cc")
(eval (setq mm-coding-system-priorities
'(iso-8859-1 big5 utf-8))))))
(add-hook 'gnus-startup-hook
'(lambda ()
(setq gnus-visible-headers
(concat "^User-Agent:\\|^Content-Type:\\|"
"Content-Transfer-Encoding:\\|"
"^X-mailer:\\|^X-Newsreader:\\|^X-Sender:\\|"
gnus-visible-headers))))
快捷键
一、buffer操作。 1、 C-k 删除目前的一个组 C-y 吐出最后删除的一个组 C-x C-t 交换两个组 C-w kill region中的group G n 新建一个group(加入新闻组较简单方法,但不能写入.gnus.el) G c 修改一个group的参数 G f 建立一个文件group(可以用来读取mbox文件或者读fetchmail的文件) G d 建立一个目录group # 标记一个group M-# 反标记一个group T n 新建一个topic(分组目录) T r 重命名一个topic g 检查是否有新的信息 M-g 检查当前组是否有新信息 二、Mark操作 !? 设置标志 d 删除标志 k 设置同一主题artical为已读 三、Limiting操作 /s 按主题 /a 按作者 /s 按headers /v 按分数 /t 按天数 /o 显示旧信息 四.邮件操作 C-c C-a 插入附件 K-o 保存附件 C-x i 插入文件
管理新闻组
退订
退订,在 Group buffer 里,将光标移动到要退订的新闻组上,按 u,就可以标 记为退订,下次用 g 或者其他方式更新就看不见这个组了。
列出所有的列表 (L)
使用 C-h k , 输入 L ,就可以看到绑定在 L 键上的函数。默认是 gnus-group-list-all-groups 。
联系人地址簿
bbdb
bbdb 很小,压缩包只有300多 k 。 bbdb 只是建立了一个~/.bbdb 文件,然后把 你的联系人每个一行地写在里面罢了,这是个纯文本文件,不过最好不要自己编 辑这个文件,可以用 bbdb 的命令往里添加联系人。
编译安装
# tar xf bbdb-2.35.tar.gz # cd bbdb-2.35 # ./configure --with-emacs=/usr/bin/emacs-snapshot --with-gnus-dir=/usr/share/emacs/23.0.91/lisp/gnus/ # make gnus # 拷贝 # cp -r lisp/ /usr/share/emacs/23.0.91/site-lisp/bbdb # 安装文档 $ cd texinfo/ && make $ cp bbdb.info /usr/share/info $ cd /usr/share/info $ install-info bbdb.info
开始我没有使用绝对路径,出现错误:
root@jianlee:~/tmp/bbdb-2.35# ./configure --with-emacs=emacs-snapshot --with-gnus-dir=/usr/share/emacs/23.0.91/lisp/gnus/ checking whether make sets $(MAKE)... yes checking for a BSD-compatible install... /usr/bin/install -c checking whether ln -s works... yes checking for rm... /bin/rm checking for grep... /bin/grep checking for my keys... not found Damn! I'm locked outside :-( checking for gtar... no checking for tar... tar checking that tar is GNU tar... yes checking for gzip... gzip checking for makeinfo... makeinfo checking for texi2dvi... texi2dvi checking for etags... etags configure: error: *** emacs-snapshot isn't executable.
把 emacs-snapshot 换成绝对路径即可。
使用
~/.gnus 配置
(require 'bbdb)
(bbdb-initialize 'gnus 'message)
;; bbdb 自己检查你填写的电话是否符合北美标准,
;; 如果你不是生活在北美,应该取消这种检查
(setq bbdb-north-american-phone-numbers-p nil)
;; 把你的 email 地址告诉 bbdb
(setq bbdb-user-mail-names
(regexp-opt '("brep@example.com"
"brep@newsmth.org")))
;; 补全 email 地址的时候循环往复
(setq bbdb-complete-name-allow-cycling t)
;; No popup-buffers
(setq bbdb-use-pop-up nil)
然后重新启动 Gnus, 或者是在 Group buffer 中用 r 键,让 Gnus 重新读 入~/.gnus.el
bbdb 使用起来很简单,第一次用的时候,要用"M-x bbdb-create"命令创建联系 人,此时 bbdb 会问你一些相关的问题,比如联系人的 Name, company, Network Address(这里要添 email 地址)等等,你如实回答就是了。然后 bbdb 会创建一个~/.bbdb 文件,并把你的联系人加进去。
以后你可以随时用"M-x bbdb-create"命令添加联系人,也可以用 `M-x bbdb RET RET' 命令让 bbdb 把所有联系人显示给你看。
不过, bbdb 最方便的地方在于你写信的时候,只要在 To: 面用 TAB 键, bbdb 就会把联系人替你填好,如果不对,就继续按 TAB 键, bbdb 会填下一 个,循环往复。
还有一个方便的地方,如果你在 Summary buffer 中的某个邮件或帖子上按 : 建, bbdb 将自动把发信人替你加到地址簿里,方便吧!
