首页 arrow 网络 arrow 新闻组 arrow Emacs+Gnus上新闻组
2005-09-12
首页
Blog风格
网站链接
联系我们
留言板
网站建设工作流程
新闻组服务器
网页制作
联系方式
联系人:NewBlue
联系方式:
职位:网页设计总监
Email:
beyooo@gmail.com
QQ:67724343
联系人:真真
联系方式:
职位:网页设计师
Email:
li.beijun@gmail.com
MSN:fanbinger6@msn.com
QQ:236517647
文章分类
电子技术
网络
Linux
网页制作
个人专栏
通过Google搜索本站
Google
 
搜索WWW 搜索我的网页
搜索本网站广告版
Google
搜索全部网页广告版
Google
Emacs+Gnus上新闻组
作者: newblue   
2005-07-15

用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的中文的支持更好一点。

  • 软件下载:
    1. Emacs:
      你可以从ftp.gnu.org上面下载到最新的Emacs。需要下载一个 emacs-xx.x-fullbin-i386.tar.gz的包,回来后用winrar解压缩。
      或者从http://www.crasseux.com/emacs/这里寻找最新的Win32平台的 Emacs。
    2. 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。

有两种方法:

  1. 在autoexec.bat里面加入:
    set HOME=emacs's path
  2. 用右键点击我的电脑,选高级 - 环境变量 - 用户变量 - 新建,变 量名: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里面的操作,值得一读。里面已经讲解得很 清楚,我多说无益。

假如其中有什么问题,可以到cn.comp.os.linux组 提出,该组的兄弟会尽力回答

gnus的文档 (pdf格式) 。如果你能看懂,根本不用再看这个网页。

< 上一篇   下一篇 >
友情链接
进化的鱼的网页 郑州大学网络安全园 Fktpp的个人网页 思斯
CN.* Usenet 小虫子的网页 生于70年代 RBF & ADSE/DESE
真真的个人主页 白狐的Blog 笑脸个人网 安全焦点
phrack 哥舒的主页 maddog's blog Eric's blog
肚朝前的Blog SunGe的个人主页 LINUXFIRE Live in Emacs
China Linux Forum China Unix 驾驶资讯网 LinuxSir
访问量: 13795
苏ICP备05066772号
现在有 1 位访客 在线
Top of page