|
用Emacs可以上新闻组,不过需要配合gnus来使用。gnus是一个类是插件的东
西,把它加入到Emacs里面就可以使用Emacs上新闻组。
最近在指导几个新闻组上的网友配置Emacs+gnus上新闻组,感觉到真的比较
难。一个是Emacs的门槛就比其他的Win32程序高,虽然作为一个编辑器,很多功
能都很人性化,设计充分考虑到使用的人用键盘做输入,所有操作都可以集中在
键盘上面,不用在键盘和鼠标之间不断的切换,但是我自己刚刚进来的时候也是
很别扭,原因是我以前在Win32平台上面也习惯了那种鼠标加键盘的操作方式,
相信其他人也一样有同样的感受。那时候下了很大的决心学这个,也是因为考虑
到日后会转移到Linux平台,而现在我确实在Linux下面用Emacs+gnus上新闻组。
我想任何人只要对一样东西感兴趣的话,都应该下点苦功去学习。如果连自己感
兴趣的东西都不能下工夫,那你还能对什么东西下苦功夫?
其实我很乐意尽自己所学去解答一些人在这方面遇到的问题,只是很多东西
都会是比较入门的,多了我就应该写点东西加进来,方便其他人参考查阅,我可
以减少对这些问题的回答。
建议刚刚开始,还是先习惯一下Emacs的操作方式,你可以用Emacs当一个普
通的编辑器那样使用,但是记得要使用Emacs那种组合键的操作方式,因为这一
段是磨合时期,你越快习惯这种操作方式,对你是有好处的。如果你现在还不熟
悉Emacs,就想直接用gnus,是有难度的。
用过Emacs的人都知道的强大功能,但是使用Emacs的门槛比较高,一般的初
学者需要经过一段时间的学习才能熟练的操作Emacs。Emacs可以在内部扩展各种
各样的功能与模式,例如:网页编辑模式,让你编辑起网页来更加方便快捷。这
篇教程就是要使用Emacs的Gnus扩展功能,用来上新闻组。
相对于现在很多流行的新闻组客户端(如:OE、Agent)来说,Gnus使用起
来跟Emacs一样难以驾驭。
要使用Gnus,首先你需要下载一个可用的Emacs,最好是比较新的版本,因为
可以有更多的功能的支持,还需要Gnus,虽然Emacs里面已经有了一个Gnus,但
是我们需要一个新版的,让Gnus的中文的支持更好一点。
- 软件下载:
- Emacs:
你可以从ftp.gnu.org上面下载到最新的Emacs。需要下载一个
emacs-xx.x-fullbin-i386.tar.gz的包,回来后用winrar解压缩。
或者从http://www.crasseux.com/emacs/这里寻找最新的Win32平台的
Emacs。
- Gnus:
Emacs本身已经包含了gnus的5.9.0版本,不过该版本对中文的支持
不太好,所以需要下载新版的gnus,如果你不使用上中文新闻组的话,不用下载
也行。
你需要从 my gnus上面下
载最新的gnus扩展功能。
同样把下载回来的gnus包解压缩到emacs所在的目录下面。
你可以把Gnus解压缩到 emacs's path\site-lisp\下面,接着你需要对
gnus进行编译,步骤如下:
- 方法一:
在Emacs里面用C-x d emacs's path\site-lisp\gnus\lisp
RET进入lisp目录。按% m 输入 \.el$ RET 标记所后的.el文
件,接着按B进行编译。
- 方法二:
把emacs's path\bin加入到路径变量PATH里面,打开命令窗口,
进入到解压缩gnus的目录里面cd
emacs'path\site-lisp\gnus\lisp,
输入: emacs -batch -q -f batch-byte-compile *.el进行编译。
通过编译.el文件可以使执行速度更快一点。
以上工作做好之后,你就需要设定一下emacs了,你需要设定一个系统变量
HOME,因为Emacs需要在这个目录下面读取Emacs的配置文件.emacs。
有两种方法:
- 在autoexec.bat里面加入:
set HOME=emacs's path
- 用右键点击我的电脑,选高级 - 环境变量 - 用户变量 - 新建,变
量名:HOME,变量值为:emacs's path
配置emacs,运行emacs,按C-f 输入 ~\.emacs,编辑.emacs,加入:
(add-to-list 'load-path "emacs's path/site-lisp/gnus/lisp")
(set-keyboard-coding-system 'chinese-iso-8bit)
(set-selection-coding-system 'chinese-iso-8bit)
附上Linux的两个强人关于gnus的安装方法
PktPp在Window$下的gnus安装方法
我的方法简单一些,比如说你用的是window$98(和我一样),就可以用这个土炮方法 :P win2000没试过不敢妄下定论 。。。。。
1. 修改你的Path变量,加入emacs的bin路径(这是早晚的事,加了吧就 :P)
2. 建立一个msdos方式的快捷方式(是不是很绕嘴?),然后修改这个快捷
方式的属性,把内存那一页的所有自动选项强制为最大!!(不然就会
在make.bat 执行中出现环境变量超出范围的错误)
3. 按照make.bat里面的要求运行它(就是运行的时候传入emacs所在路径,
并加上/copy参数),万事ok !!连info文档也一并搞定!!
进化的鱼的gnus安装方法
1. 解包,把 tar 包解压到一个地方。
2. 在你的 emacs-XX.Y/site-lisp 下建立 gnus 目录。
3. 把 gnus-5.10.2 下的两个目录 lisp 和 etc 复制到新建的目录:
emacs-XX.Y/site-lisp/gnus。
4. 把 emacs-XX.Y/site-lisp/gnus/lisp 下的所有 .el 文件 Byte-compile。
方法1:
在 Emacs 中 C-x d path/to/emacs-XX.Y/site-lisp/gnus/lisp RET 进入
lisp 目录,按 % m \.el$ RET 标记上所有 .el 文件,按 B。
方法2:
修改系统的 PATH 变量,加入 path/to/emacs-XX.Y/bin,打开一个命令窗
口,cd path/to/emacs-XX.Y/site-lisp/gnus/lisp,运行
emacs -batch -q -f batch-byte-compile *.el
两种方法都不用去管那些 warning 信息。
当然,不用这两种方法,自己些一个 .bat 文件也一样,一定要把 .el 文
件 byte-compile,不然速度影响很大。
5. 重新启动你的 Emacs,开始 M-x gnus,看看是不是新的 Gnus 了。如果不
是,在 .emacs.el 文件中加入以下内容:
(add-to-list 'load-path "/path/to/emacs-XX.Y/site-lisp/gnus/lisp")
并确定在这几行之前没有任何和Gnus有关的东西,在 MS Windows 上面使
用"C:/path/to/lisp"的路径(没错,是"/")。
6. 如果想在 Emacs 中的 info 中看,则需要编译 gnus-5.10.2/texi/中的
texi 文件,之后放入 emacs-XX.Y/info 目录下,并修改 dir 文件。
当然,安装位置不一定要在 site-lisp 目录下,哪里都可以,只要有第 5
步中的正确设置,但在 site-lisp 下,可以不用这个。
gnus的配置
gnus需要使用一个.gnus.el文件进行配置,所以在你的HOME目录下建立一个.gnus.el文件。在Emacs下的操作是C-x C-f回车,输入~/.gnus.el就可以了。
HOME其实由一个变量,如果是Window$系统的话,可以在桌面的我的电脑上点
击右键->属性->高级->环境变量->用户变量部分新建一个变量HOME,其值为你自己的HOME目录,也就是~/
你可以把下面的配置复制到你的.gnus.el文件里面,把一些配置改成自己的。不要问我为什么要这样配置,自己看文档比较好(e.g: C-h i m gnus <tab>),基本上文档就很全面了。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;; NewBlue 的 .gnus.el文件
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;
;; 用户资料设定
;;;;;;;;;;;;;;;;;;;;
(setq user-full-name "NewBlue")
;;;;;;;;;;把NewBlue改成你自己名字
(setq user-mail-address "
")
;;;;;;;;;;用户电子邮件地址的配置,一般这里我都不填入真是地址,因为现在有通过新闻组
;;;;;;;;;;搜索电子邮件地址的工具,被那些无耻的广告商用来发送垃圾邮件。
(setq message-signature-file "~/signature.file")
;;;;;签名文件
;;;;;;;;;;;;;;;;;;;;
;;;;服务器的设定
;;;;;;;;;;;;;;;;;;;;
(setq gnus-select-method '(nntp "news.yaako.com"))
;;;;; 雅科!
(add-to-list 'gnus-secondary-select-methods '(nntp "news.newsfan.net"))
;;;;;新帆
;;(add-to-list 'gnus-secondary-select-methods '(nntp "news.xxx.xxx"))
;;其他的自己根据这个格式自己配置
(gnus-agentize)
;;;;;开启代理功能,为了能让gnus支持离线浏览,gnus 5.10.x会自动开启该功能。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;; 自动换行功能,比起其他的工具要好得多。
(add-hook 'message-mode-hook
(lambda ()
(setq fill-column 72);;这里的72是等一行到了72个字符后开始换行
(turn-on-auto-fill)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;
(setq message-cite-function 'message-cite-original-without-signature)
;;;;;;;;;;;;;;;;
;;;;我的随机签名
;;;;根据网友的反馈,我的签名会导致不能发帖,而我这边缺没有发现
;;;;如果有发现因为我的签名而不能发帖的话,请关掉我的随机签名,
;;;;如果你有更多的发现,敬请告知谢谢newblue#at#gmail.com
(defvar random-signature-head "自从你离开了以后,我一直等待着你回来\n")
(defvar random-signature-foot "\n我的网页:[http://newblue.at.3322.org/]")
(defvar random-signature-list
'("快乐并痛苦着,人生真无奈"
"我等着你回来,我等着你回来~~"
"人生得一知己足已"
"郁闷的时候,要郁闷到底(置之死地而后生,就是这样用的)"
"人活着,多无聊阿,好在有新闻组,可以不用无聊至死"
"“生亦何欢,死亦何惧”,虽然这样说没错,可是也不用三天两头的学人自杀"
"世人笑我懵懂,我笑世人不懂"
"我知道寻找你需要经历很多的困难,但我会努力的"
"心痛的时候,真是好辛苦"
"无尽的等待催人老!"
"不是我不想说,只是不愿意带着借口过日子"
"汝不可因惰而随心所睡"
"汝不可移志而半途而废"
"汝不可随性而追哥泡妹"
"汝不可因苦而哭天抹泪"
"汝不可为闷而夜夜买醉"
"汝不可求闲而叫苦喊累"
"汝不可因难而妄自薄菲"
"汝不可推考而功亏一篑"
"汝不可省钱而资料不备"
"汝不可因败而万念具灰"
"伟人之所以为伟人,只不过他克服惰性多一点"
"用仇人的血洗刷自己的耻辱,用自己的眼泪洗刷自己的软弱"
"我很丑,但我不懂温柔,也不会浪漫,更不会说甜言蜜语,因为我是一个很丑的流氓"
"关心你的技术,然后你的技术才会关心你"
"百般都有命,半点不由人"
"我希望我这一生,陪着你开心、哄你开心"
"这辈子就用心去当一个坏人"
))
(defun random-signature ()
(let ((random-count-num (random (list-length random-signature-list))))
(concat
(if (null random-signature-head)
""
random-signature-head)
(nth (random (list-length random-signature-list)) random-signature-list)
(if (null random-signature-foot)
""
random-signature-foot))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 自己写的另一个东西,其实也没什么用处,
;; 就是贪好玩而已,刚开始还是不要打开这个东西。
;;要使用就把前面的;去掉就行了。
;(setq message-citation-line-function 'newblue-citation-fun)
(setq friend-list (list
'("进化的鱼" . "帅哥")
'("流星99" . "风流倜傥的")
'("小虫子" . "英俊的")
'("梅梅" . "越长越漂亮的")
'("飞" . "满脚黑毛的")
'("真真" . "天真活泼的")
'("清桦" . "性别不明,但高深莫测的")
'("Bear老熊" . "cn.fan组的镇山之熊")
'("StXh" . "帅帅的")
'("逍遥狂客" . "疯狂的")
'("电冰箱" . "一台很有幽默感的")
'("生于70年代" . "正在努力奋斗中的")
'("悟尘" . "让我很费解的")
'("艾宾浩斯" . "MM杀手")
'("思斯" . "绝色尤物")
))
(defun newblue-citation-fun ()
"Insert NewBlue's citation line."
(when message-reply-headers
(let
(from (mail-header-from message-reply-headers))
(from (replace-regexp-in-string "[ ]*<.*>" "" from nil nil))
(from (replace-regexp-in-string "\"" "" from nil nil))
(from (replace-regexp-in-string "[((].*[))]" "" from nil nil))
(Tstart (cdr (assoc from friend-list)))
)
(if (null Tstart)
(setq Tstart "人见人爱,车见车撞的"))
(insert "<<<<< " Tstart from " 写到:\n\n")
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;各种发送设置,也得根据自己的需要设定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq gnus-posting-styles
'((".*"
(name "NewBlue")
(address "
")
(User-Agent "Emacs+gnus")
(signature random-signature);;使用随机签名
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;邮件发送方式的发送配置
((message-mail-p)
(name"newblue")
(address "
")
(User-Agent "Don't be you known,haha")
(signature "NewBlue\n自从你离开了以后,我一直等待着你回来\n")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;发送到新帆的帖子的设定
(".*newsfan.*"
(name "NewBlue")
(address "
")
(organization "潮汕功夫茶")
(User-Agent "Emacs+gnus")
(signature "NewBlue\n自从你离开了以后,我一直等待着你回来\n")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;发送的雅科的帖子的设定
(".*yaako.com.*"
(name "NewBlue")
(address "
")
(organization "潮汕功夫茶")
(User-Agent "Emacs+gnus")
(signature "NewBlue\n自从你离开了以后,我一直等待着你回来\n")
)
))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;; 设定帖子的字符集
(setq gnus-summary-show-article-charset-alist '((1 . cn-gb-2312) (2 . big5)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;设定要显示的头信息
(setq gnus-visible-headers
"^\\(^From:\\|^Subject:\\|^Date:\\|^Followup-To:
\\|^X-Newsreader:\\|^User-Agent:\\|^X-Mailer:
\\|Line:\\|Lines:\\|Content-Type:\\|NNTP-Posting-Host\\)")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; 设定屏幕的分割比例
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(gnus-add-configuration '(article (vertical 1.0
(summary .40 point) (article 1.0))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; 开启记分功能
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq gnus-use-adaptive-scoring t)
(setq gnus-save-score t)
(add-hook 'mail-citation-hook 'sc-cite-original)
(add-hook 'message-sent-hook 'gnus-score-followup-article)
(add-hook 'message-sent-hook 'gnus-score-followup-thread)
(defvar gnus-default-adaptive-score-alist
'((gnus-kill-file-mark (from -10))
(gnus-unread-mark)
(gnus-read-mark (from 10) (subjnnect 30))
(gnus-catchup-mark (subject -10))
(gnus-killed-mark (from -1) (subject -30))
(gnus-del-mark (from -2) (subject -15))
(gnus-ticked-mark (from 10))
(gnus-dormant-mark (from 5))))
(setq gnus-score-find-score-files-function
'(gnus-score-find-hierarchical gnus-score-find-bnews bbdb/gnus-score)
gnus-use-adaptive-scoring t)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq gnus-confirm-mail-reply-to-news t
message-kill-buffer-on-exit t
message-elide-ellipsis "[...]\n"
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;; .gnus.el文件配置结束!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Gnus的环境
按照上面的配置,如果配置完成的的话,应该能看到一下一个界面,这里就
是Group buffer了,只不过你那边就没有订阅那么多组,所以没有我这边那么壮
观。因为你还没订阅任何组,请继续看下去。
这里有一个概念需要跟你说一下的,就是你看图片下面是不是有Group
Unplugged的字眼,那就是离线状态,要进入离线状态,需要用M-x
gnus-unplugged让gnus以离线状态启动,这样你就可以离线浏览帖子了。
gnus的操作
你现在还没有订阅任何组,你要在Group Buffer,就是上图那个界面里面按
^进入Server Buffer
因为你是刚刚进入Gnus,所以还需要做点事情,就是把上面的服务器设定为
agent,这样这些收相关新闻组的时候,帖子才会被取回来。移动到第一个服务
器,按J a两键,使每个服务器后面都出现(agent)的字眼,就如下面的图片一样
接着你就可以在每个组上面用"O"将服务器变为打开状态。如下图:
这些操作完成之后,就应该订上几个组了,用J j,让gnus变为在线模式,界
面最下面会出现Gnus plugged的字样,把你的电脑连上网,之后移动到
news.yaako.com那一行,按Enter(回车),gnus会去读该服务器的组列表。读完
之后,就会有下图出现:
在这里你可以上下移动寻找你想要订阅的新闻组,但是yaako是全球性的服务
器,所以列表比较长,如果你想订阅cn.fan组的话,可以用搜索功能找出这个组,
按C-s进入搜索状态,输入cn.fan,第一个出现的会是alt.cn.fan,cn.fan的前
身。再按一次C-s,就会找到cn.fan组,你也可以直接定位到cn.fan组,但是需
要在用C-s搜索的时候,输入cn.fan时,在cn.fan前面加多一个空格。找到
cn.fan组之后,按回车,一下就好,这是告诉Emacs,自己找到想要的东西了,
在cn.fan上面按u就可以订阅这个组,等你回到Group buffer的时候,就可以看
到这个组了。
其他组也照这种方式订阅。当然不要学我一样订几十个组,这不是一件理智
的事情。
订阅你想订阅的组之后,你也可以订阅几个新闻组式的中文论坛,例如新帆,用l返回到Server Buffer,移动到新帆的服务器那行,照前面那样做
你可以像前面一样操作,效果一样,你就可以退出这里回到,Server Buffer,
再按q,退回Group Buffer,你应该可以看到像我那么壮观的组列表了,前面你
已经看过了。
现在你还不能看到帖子,接下来的操作就是取回帖子,现在按g,让gnus取回
新帖的信息,然后每个组前面就会出现,每个组的帖子数,如果订阅了一些聊天
组的话,建议你在那个组上面按c,不要取回那些水帖,不然按照我这种规模的
组数,是7百多MB的帖子量,你可要量力而行。
选出不要收回旧帖的组,用c操作完之后,就可以离线了,如果你已经没什么
事情需要连接网络的话,现在离线了。回到gnus里面,你看到很多个组。你用J a让gnus变为离线状态,就像没上线之前那样。现在
进入你喜欢的组,我通常都会先把cn.fan组里面的帖子处理掉,再去其他组的。
你可以先进来看看,因为你可能收回这个组的旧帖,而这个组可能有几千帖,所
以移动到cn.fan组,按回车之后gnus会寻问你到底要看多少,你可以输入500帖,
这个数量差不多是这里一般的帖子数量。
可能你只看到上面部分,没看到下面部分,你可以再按一次回车,就可以看
到下面那部分了。上面部分是帖子列表,下面部分是帖子内容。
按n阅读下一帖,按d,标识光标所在的那一帖为已读,在已读的帖子按M-u就
会取消已读。你还以对你所关注的帖子做标识按u。按空格是翻页。
如果你想发新贴,按a,编辑好你的内容之后按C-c c发送出去。 看到自己感
兴趣的帖子,可以按F或f来回复,两种的区别是,F会附带原帖的 内容,f是不
会附带原帖的内容。编辑好了之后,按C-c C-c,发出新帖。帖子会 先保存在本
地硬盘,等下一次上网的时候,切换到在线模式,按J S把帖子发 送到服务器上
面。
暂时就写到这里,所有操作都可以在refcard(pdf格式)文档里面找
到,里面很详细的介绍了各个Buffer里面的操作,值得一读。里面已经讲解得很
清楚,我多说无益。
gnus的文档
(pdf格式) 。如果你能看懂,根本不用再看这个网页。 |