Sunday, December 28, 2008

架了一个本地wikipedia镜像

1.前提
安装LAMP,安装wikidia。系统中要有可以实际运行的一个wikipedia。安装Java的
jre,
2.下载
下载镜像文件4G,
$wget http://download.wikimedia.org/enwiki/20081008/enwiki-20081008-pages-articles.xml.bz2
或者下载中文文件在120M(可以看出中文与英文的内容区别了吧):
$wget http://download.wikimedia.org/zhwikisource/20081223/zhwikisource-20081223-pages-articles.xml.bz2
下载转换工具
$wget http://download.wikimedia.org/tools/mwdumper.jar
3.转换前准备工作
(1)删除数据库中无用的表
$mysql -p wikidb
Password: ******
mysql> delete from page;
mysql> delete from revision;
mysql> delete from text;
(2)设置MySQL
sudo /etc/mysql/my.cnf
加如下内容:
[mysqld]
max_allowed_packet = 128M
innodb_log_file_size = 100M
[mysql]
max_allowed_packet = 128M
然后重启mysql,使设置生效
$/etc/init.d/mysql restart
4.导入数据
将转换工具与数据放入同一个目录,在该目录中运行如下命令:
$sudo java -Xmx600M -server -jar mwdumper.jar --format=sql:1.5 enwiki-20061130-pages-articles.xml.bz2 | mysql -u westnorth -p wikidb
会提示输入密码,要分别输入系统用户的密码及数据库的密码
5.善后工作
清理日志文件
$ mysql -u root reset master;
修复数据库
$ mysql -p wikidb
mysql> repair table pagelinks extended;
mysql> repair table page extended;
mysql> repair table templatelinks extended;
6.正常显示内容
现在,很多页面打开还不正常,需要扩展(Extension).在安装前需要知道wiki的
版本号.在站点名后加上"/index.php/Special:Version",得到wikipedia的版本号。
如44056。设wiki安装在"~/www/wiki"
$ mkdir ~/extensions
$ svn co -r 44056 http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions ~/extensions
安装扩展
$ cd ~/extensions
$ mkdir ~/www/wiki/extensions/ParserFunctions
$ cd ParserFunctions
$ cp * ~/www/wiki/extensions/ParserFunctions
$ cd ..
$ cd Cite
$ cp * ~/www/wiki/extensions/
$ cd ..
$ cp -a CategoryTree/ ~/www/wiki/extensions/
$ cp -a wikihiero ~/www/wiki/extensions/
然后编辑配置文件~/www/wiki/LocalSettings.php,添加以下内容
require_once("$IP/extensions/ParserFunctions
/ParserFunctions.php");
$wgUseTidy=true;
require_once("$IP/extensions/Cite.php");
$wgUseAjax = true;
require_once("$IP/extensions/CategoryTree
/CategoryTree.php");
require_once("$IP/extensions/wikihiero/wikihiero.php");
这时应该可以正常显示大部分的Wikipedia页面了。
如果要显示数学公式,需要安装Latex、ghostscript、imagemagick、
mediawiki-math
编辑配置文件~/www/wiki/LocalSettings.php,追加以下内容:
$wgUseTeX=true
这时所有的数学公式应该都可以正常显示了。
资料基本是参考
http://www.surftastic.info/index.php?q=uggc%3A%2F%2Fjjj.kkyvahk.pbz%2Fyvahk%2Fnegvpyr%2Fargjbex%2Ffreire%2F20070904%2F9623.ugzy
至于最原始的内容出自哪儿,就不得而知了

Saturday, December 27, 2008

一个批量转换pdf的好东西

刚在linux-wiki上看到一个很好的东西,叫unoconv,源中自带的。
可以批量转换pdf。速度也快,转换出的格式很好。
----------------分割线----------------------
以下为linux-wiki的内容
举一个例子:要转换一个doc文件为PDF格式,只需在命令中执行:
$ unoconv -f pdf myDoc.doc
即会生成一个名为myDoc.pdf的pdf文件。
批量转换
批量转换需要结合find命令或脚本使用,使用时需注意最好使用C/S模式以加快速度:
unoconv --listener &
unoconv -f pdf some-document.odt
unoconv -f doc other-document.odt
unoconv -f jpg some-image.png
unoconv -f xsl some-spreadsheet.csv
其它功能简介
支持的文件格式
可以执行unoconv --show查看截止到2008年3月11日,unoconv支持以下几种导出格式(见
本文末尾)^[1]
服务器/客户端模式
此模式使文档的集中处理成为可能。
附:支持的输出文件格式
bib - BibTeX [.bib]
doc - Microsoft Word 97/2000/XP [.doc]
doc6 - Microsoft Word 6.0 [.doc]
doc95 - Microsoft Word 95 [.doc]
docbook - DocBook [.xml]
html - HTML Document (OpenOffice.org Writer) [.html]
odt - Open Document Text [.odt]
ott - Open Document Text [.ott]
ooxml - Microsoft Office Open XML [.xml]
pdb - AportisDoc (Palm) [.pdb]
pdf - Portable Document Format [.pdf]
psw - Pocket Word [.psw]
rtf - Rich Text Format [.rtf]
latex - LaTeX 2e [.ltx]
sdw - StarWriter 5.0 [.sdw]
sdw4 - StarWriter 4.0 [.sdw]
sdw3 - StarWriter 3.0 [.sdw]
stw - Open Office.org 1.0 Text Document Template [.stw]
sxw - Open Office.org 1.0 Text Document [.sxw]
text - Text Encoded [.txt]
txt - Plain Text [.txt]
vor - StarWriter 5.0 Template [.vor]
vor4 - StarWriter 4.0 Template [.vor]
vor3 - StarWriter 3.0 Template [.vor]
xhtml - XHTML Document [.html]
图形格式:
bmp - Windows Bitmap [.bmp]
emf - Enhanced Metafile [.emf]
eps - Encapsulated PostScript [.eps]
gif - Graphics Interchange Format [.gif]
html - HTML Document (OpenOffice.org Draw) [.html]
jpg - Joint Photographic Experts Group [.jpg]
met - OS/2 Metafile [.met]
odd - OpenDocument Drawing [.odd]
otg - OpenDocument Drawing Template [.otg]
pbm - Portable Bitmap [.pbm]
pct - Mac Pict [.pct]
pdf - Portable Document Format [.pdf]
pgm - Portable Graymap [.pgm]
png - Portable Network Graphic [.png]
ppm - Portable Pixelmap [.ppm]
ras - Sun Raster Image [.ras]
std - OpenOffice.org 1.0 Drawing Template [.std]
svg - Scalable Vector Graphics [.svg]
svm - StarView Metafile [.svm]
swf - Macromedia Flash (SWF) [.swf]
sxd - OpenOffice.org 1.0 Drawing [.sxd]
sxd3 - StarDraw 3.0 [.sxd]
sxd5 - StarDraw 5.0 [.sxd]
tiff - Tagged Image File Format [.tiff]
vor - StarDraw 5.0 Template [.vor]
vor3 - StarDraw 3.0 Template [.vor]
wmf - Windows Metafile [.wmf]
xhtml - XHTML [.xhtml]
xpm - X PixMap [.xpm]
演示文稿:
bmp - Windows Bitmap [.bmp]
emf - Enhanced Metafile [.emf]
eps - Encapsulated PostScript [.eps]
gif - Graphics Interchange Format [.gif]
html - HTML Document (OpenOffice.org Impress) [.html]
jpg - Joint Photographic Experts Group [.jpg]
met - OS/2 Metafile [.met]
odd - OpenDocument Drawing (Impress) [.odd]
odg - OpenOffice.org 1.0 Drawing (OpenOffice.org Impress) [.odg]
odp - OpenDocument Presentation [.odp]
otp - OpenDocument Presentation Template [.otp]
pbm - Portable Bitmap [.pbm]
pct - Mac Pict [.pct]
pdf - Portable Document Format [.pdf]
pgm - Portable Graymap [.pgm]
png - Portable Network Graphic [.png]
pot - Microsoft PowerPoint 97/2000/XP Template [.pot]
ppm - Portable Pixelmap [.ppm]
ppt - Microsoft PowerPoint 97/2000/XP [.ppt]
pwp - PlaceWare [.pwp]
ras - Sun Raster Image [.ras]
sda - StarDraw 5.0 (OpenOffice.org Impress) [.sda]
sdd - StarImpress 5.0 [.sdd]
sdd3 - StarDraw 3.0 (OpenOffice.org Impress) [.sdd]
sdd4 - StarImpress 4.0 [.sdd]
sti - OpenOffice.org 1.0 Presentation Template [.sti]
stp - OpenDocument Presentation Template [.stp]
svg - Scalable Vector Graphics [.svg]
svm - StarView Metafile [.svm]
swf - Macromedia Flash (SWF) [.swf]
sxi - OpenOffice.org 1.0 Presentation [.sxi]
tiff - Tagged Image File Format [.tiff]
vor - StarImpress 5.0 Template [.vor]
vor3 - StarDraw 3.0 Template (OpenOffice.org Impress) [.vor]
vor4 - StarImpress 4.0 Template [.vor]
vor5 - StarDraw 5.0 Template (OpenOffice.org Impress) [.vor]
wmf - Windows Metafile [.wmf]
xhtml - XHTML [.xml]
xpm - X PixMap [.xpm]
电子表格:
csv - Text CSV [.csv]
dbf - dBase [.dbf]
dif - Data Interchange Format [.dif]
html - HTML Document (OpenOffice.org Calc) [.html]
ods - Open Document Spreadsheet [.ods]
ooxml - Microsoft Excel 2003 XML [.xml]
pdf - Portable Document Format [.pdf]
pts - OpenDocument Spreadsheet Template [.pts]
pxl - Pocket Excel [.pxl]
sdc - StarCalc 5.0 [.sdc]
sdc4 - StarCalc 4.0 [.sdc]
sdc3 - StarCalc 3.0 [.sdc]
slk - SYLK [.slk]
stc - OpenOffice.org 1.0 Spreadsheet Template [.stc]
sxc - OpenOffice.org 1.0 Spreadsheet [.sxc]
vor3 - StarCalc 3.0 Template [.vor]
vor4 - StarCalc 4.0 Template [.vor]
vor - StarCalc 5.0 Template [.vor]
xhtml - XHTML [.xhtml]
xls - Microsoft Excel 97/2000/XP [.xls]
xls5 - Microsoft Excel 5.0 [.xls]
xls95 - Microsoft Excel 95 [.xls]
xlt - Microsoft Excel 97/2000/XP Template [.xlt]
xlt5 - Microsoft Excel 5.0 Template [.xlt]
xlt95 - Microsoft Excel 95 Template [.xlt]
相关资料
1. ↑ http://dag.wieers.com/home-made/unoconv/
取自"http://www.linux-wiki.cn/index.php/
%E6%96%87%E6%A1%A3%E6%A0%BC%E5%BC%8F%E6%89%B9%E9%87%8F%E8%BD%AC%E6%8D%A2%28doc%2Ctxt%2Cpdf%E7%AD%89%29

"

about lftp

lftp的配置文件(如别名)应该写入"~/.lftp/rc"中。如
:alias getfile "cd /home/test;lcd;mirror -nRv"

Friday, December 26, 2008

郁闷

今天是个极其郁闷的一天。
稿子基本已经改好,我觉得今天就可以收工了。
but
下午,手贱
真是太贱了。要清理系统文件
我的稿子文档是从另一个用户目录中链接过来的
我却将那个用户的目录基本清空,而且是分几次清空的
这使得数据恢复都变为不可能的任务
没办法,
找旧稿子
从台式机的部分备份里找回一部分
从一个备份的ftp站点找回一部分
从邮件的发件箱里找回一部分
但这只是旧稿
这几天白辛苦了
血的教训,备份真的是很重要的一项工作
我这次备份时,实际的备份文件也在另一个用户目录
备份做得极其详细,每次发一回稿子,就做一回备份,
现在
Gone with the wind

Saturday, December 20, 2008

Audacious 无法播放mp3的处理方法

前两天升级的内核,有许多天没有听过音乐,昨天打开Audacious突然发现无法播 放任何音乐了。安装了解码器,重装了Audacious都无效。
最后,删除了~/.config/audacious目录,然后重新打开Audacious就又可以了。不 知道是怎么搞的。

Friday, December 19, 2008

linux secret disk

看到一篇不错的对系统进行加密的文章,进行了实践,发现确实不错,
所以修改了其中的部分错误,然后特意转一下。
///////////
原文似乎在51CTO站
////////////

linux之加密文件系统

【导读】本文将详细介绍利用dm-crypt来创建加密文件系统的方法
。与其它创建加密文件系统的方法相比,dm-crypt系统有着无可比
拟的优越性:它的速度更快,易用性更强。除此之外,它的适用面
也很广,能够运行在各种块设备上,即使这些设备使用了RAID和
LVM也毫无障碍。

当Ubuntu Linux使用加密文件系统后,数据的安全能得到很好的保
护。在这种情况下,即使把我们的机器送给黑客,只要他们没有密
钥,黑客看到的数据只会是一堆乱码,毫无利用价值可言。

本文将详细介绍利用dm-crypt来创建加密文件系统的方法。与其它
创建加密文件系统的方法相比,dm-crypt系统有着无可比拟的优越
性:它的速度更快,易用性更强。除此之外,它的适用面也很广,
能够运行在各种块设备上,即使这些设备使用了RAID和 LVM也毫无
障碍。dm-crypt系统之所以具有这些优点,主要得益于该技术是建
立在2.6版本内核的device-mapper特性之上的。device-mapper是设
计用来为在实际的块设备之上添加虚拟层提供一种通用灵活的方法
,以方便开发人员实现镜像、快照、级联和加密等处理。此外,
dm-crypt使用了内核密码应用编程接口实现了透明的加密,并且兼
容cryptloop系统。

一、配置内核

dm-crypt利用内核的密码应用编程接口来完成密码操作。一般说来
,内核通常将各种加密程序以模块的形式加载。对于256-bit AES来
说,其安全强度已经非常之高,即便用来保护绝密级的数据也足够
了。因此本文中我们使用256-bit AES密码,为了保证您的内核已经
加载AES密码模块,请利用下列命令进行检查:

$ cat /proc/crypto如果看到类似下面的输出的话,说明AES模块已
经加载:

name : aes

module : aes

type : cipher

blocksize : 16

min keysize : 16

max keysize : 32

否则,我们可以利用modprobe来手工加载AES模块,命令如下所示:

$ sudo modprobe aes

接下来安装dmsetup软件包,该软件包含有配置device-mapper所需
的工具:

$ sudo apt-get install dmsetup cryptsetup
为检查dmsetup软件包是否已经建立了设备映象程序,键入下列命令:

$ ls -l /dev/mapper/control
接下来加载dm-crypt内核模块:
$ sudo modprobe dm-cryptdm-crypt
加载后,它会用evice-mapper 自动注册。如果再次检验的话,device-mapper已能识别dm-crypt, 并且把crypt 添加为可用的对象:

$ sudo dmsetup targets如果一切顺利,现在你应该看到crypt的下
列输出:

crypt v1.1.0

striped v1.0.2

linear v1.0.1

error v1.0.1这说明我们的系统已经为装载加密设备做
好了准备。下面,我们先来建立一个加密设备。

二、建立加密设备

要创建作为加密设备装载的文件系统,有两种选择:一是建立一个
磁盘映像,然后作为回送设备加载;二是使用物理设备。无论那种
情况,除了在建立和捆绑回送设备外,其它操作过程都是相似的。

1.建立回送磁盘映象

如果你没有用来加密的物理设备(比如存储棒或另外的磁盘分区)
,作为替换,你可以利用命令dd来建立一个空磁盘映象,然后将该
映象作为回送设备来装载,照样能用。下面我们以实例来加以介绍


$ dd if=/dev/zero of=~/secret.img bs=1M count=100这里我们新
建了一个大小为100 MB的磁盘映象,该映象名字为secret.img。要
想改变其大小,可以改变count的值。

接下来,我们利用losetup命令将该映象和一个回送设备联系起来:

$ sudo losetup /dev/loop0 ~/secret.img现在,我们已经得到了
一个虚拟的块设备,其位于/dev/loop0,并且我们能够如同使用其
它设备那样来使用它。
2.设置块设备

准备好了物理块设备(例如/dev/sda1),或者是虚拟块设备(像前
面那样建立了回送映象,并利用device-mapper将其作为加密的逻辑
卷加载),我们就可以进行块设备配置了。

下面我们使用cryptsetup来建立逻辑卷,并将其与块设备捆绑:

$ sudo cryptsetup -y create myEncryptedFilesystem

/dev/DEVICENAME其中,myEncryptedFilesystem 是新建的逻辑卷的
名称。并且最后一个参数必须是将用作加密卷的块设备。所以,如
果你要使用前面建立的回送映象作为虚拟块设备的话,应当运行以
下命令:

$ sudo cryptsetup -y create myEncryptedFilesystem /dev/
loop/0无论是使用物理块设备还是虚拟块设备,程序都会要你输入
逻辑卷的口令,-y的作用在于要你输入两次口令以确保无误。这一
点很重要,因为一旦口令弄错,你就会把自己的数据锁住,这时谁
也帮不了您了!

为了确认逻辑卷是否已经建立,可以使用下列命令进行检查一下:

$ sudo dmsetup ls只要该命令列出了逻辑卷,就说明已经成功建立
了逻辑卷。不过根据机器的不同,设备号可能有所不同:

myEncryptedFilesystem (221, 0)device-mapper会把它的虚拟设
备装载到/dev/mapper下面,所以,你的虚拟块设备应该是/dev/
mapper/myEncryptedFilesystem ,尽管用起来它和其它块设备没什
么不同,实际上它却是经过透明加密的。

如同物理设备一样,我们也可以在虚拟设备上创建文件系统:

$ sudo mkfs.ext3 /dev/mapper/myEncryptedFilesystem现在为新
的虚拟块设备建立一个装载点,然后将其装载。命令如下所示:

$ sudo mkdir /mnt/myEncryptedFilesystem

$ sudo mount /dev/mapper/myEncryptedFilesystem /mnt/
myEncryptedFilesystem我们能够利用下面的命令查看其装载后的情
况:

$ df -h /mnt/myEncryptedFilesystem

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/myEncryptedFilesystem 97M 2.1M 90M 2%
/mnt/myEncryptedFilesystem
很好,我们看到装载的文件系统,尽管看起来与其它文件系统无异
,但实际上写到/mnt/myEncryptedFilesystem /下的所有数据,在
数据写入之前都是经过透明的加密处理后才写入磁盘的,因此,从
该处读取的数据都是些密文。

三、卸载方法

要卸载加密文件系统,和平常的方法没什么两样:

$ sudo umount /mnt/myEncryptedFilesystem即便已经卸载了块设
备,在dm-crypt中仍然视为一个虚拟设备。如若不信,你可以再次
运行命令sudo dmsetup ls来验证一下,你会看到该设备依然会被列
出。因为dm-crypt缓存了口令,所以机器上的其它用户不需要知道
口令就能重新装载该设备。为了避免这种情况发生,你必须在卸载
设备后从dm-crypt中显式的删除该设备。命令具体如下所示:

$ sudo cryptsetup remove myEncryptedFilesystem此后,它将彻
底清除,要想再次装载的话,你必须再次输入口令。为了简化该过
程,我们可以利用一个简单的脚本来完成卸载和清除工作:

#!/bin/sh

umount /mnt/myEncryptedFilesystem

cryptsetup remove myEncryptedFilesystem四、重新装载

在卸载加密设备后,我们很可能还需作为普通用户来装载它们。为
了简化该工作,我们需要在/etc/fstab文件中添加下列内容:

/dev/mapper/myEncryptedFilesystem /mnt/
myEncryptedFilesystem ext3 noauto,noatime 0 0此外,我们也
可以通过建立脚本来替我们完成dm-crypt设备的创建和卷的装载工
作,方法是用实际设备的名称或文件路径来替换/dev/DEVICENAME:

#!/bin/sh

cryptsetup create myEncryptedFilesystem /dev/DEVICENAME

mount /dev/mapper/myEncryptedFilesystem /mnt/
myEncryptedFilesystem如果你使用的是回送设备的话,你还能利用
脚本来捆绑设备:

#!/bin/sh

losetup /dev/loop/0 ~/secret.img

cryptsetup create myEncryptedFilesystem /dev/loop/0

mount /dev/mapper/myEncryptedFilesystem /mnt/
myEncryptedFilesystem如果你收到消息"ioctl: LOOP_SET_FD:
Device or resource busy",这说明回送设备很可能仍然装载在系
统上。我们可以利用sudo losetup -d /dev/loop/0命令将其删除。

五、加密主目录

如果配置了PAM(Pluggable Authentication Modules,即可插入式
鉴别模块)子系统在您登录时装载主目录的话,你甚至还能加密整
个主目录。因为libpam-mount模块允许PAM在用户登录时自动装载任
意设备,所以我们要连同openssl一起来安装该模块。命令如下所示


$ sudo apt-get install libpam-mount openssl接下来,编辑文件
/etc/pam.d/common-auth,在其末尾添加下列一行:

auth optional pam_mount.so use_first_pass然后在文
件/etc/pam.d/common-session末尾添加下列一行内容:

session optional pam_mount.so

现在,我们来设置PAM,告诉它需要装载哪些卷、以及装载位置。对
本例而言,假设用户名是Ian,要用到的设备是/dev/sda1,要添加
到/etc/security/pam_mount.conf文件中的内容如下所示:

volume Ian crypt - /dev/sda1 /home/Ian cipher=aes
aes-256-ecb /home/Ian.key如果想使用磁盘映象,你需要在此规定
回送设备(比如/dev/loop/0),并确保在Ian登录之前系统已经运
行losetup。为此,你可以将losetup /dev/loop/0 /home/
secret.img放入/etc/rc.local文件中。因为该卷被加密,所以PAM
需要密钥来装载卷。最后的参数用来告诉PAM密钥在/home/Ian.key
文件中,为此,通过使用OpenSSL来加密你的口令来建立密钥文件:

$ sudo sh -c "echo

'

YOUR PASSPHRASE

'

| openssl aes-256-ecb >

/home/Ian.key"这时,提示你输入密码。注意,这里的口令必需和
想要的用户登录密码一致。原因是当你登录时,PAM需要你提供这个
密码,用以加密你的密钥文件,然后根据包含在密钥文件中的口令
用dm-crypt装载你的主目录。

需要注意的是,这样做会把你的口令以明文的形式暴露在.history
文件中,所以要及时利用命令history -c清楚你的历史记录。此外
,要想避免把口令存放在加密的密钥文件中的话,可以让创建加密
文件系统的口令和登录口令完全一致。这样,在身份认证时,PAM只
要把你的密码传给dm-crypt就可以了,而不必从密钥文件中抽取密
码。为此,你可以在/etc/security/pam_mount.conf文件中使用下
面的命令行:

volume Ian crypt - /dev/sda1 /home/Ian cipher=aes - -最后,
为了保证在退出系统时自动卸载加密主目录,请编辑/etc/
login.defs文件使得CLOSE_SESSIONS项配置如下:

CLOSE_SESSIONS yes

六、小结

数据加密是一种强而有力的安全手段,它能在各种环境下很好的保
护数据的机密性。而本文介绍的Ubuntu Linux 下的加密文件系统就
是一种非常有用的数据加密保护方式,相信它能够在保护数据机密
性相方面对您有所帮助。

Wednesday, December 17, 2008

format

前两天用Emacs写的博客,但是发布后才发现,格式有点问题。也就是说其会超过
blogger的边界。在.emacs中设置了边界为80列。不知有没有改善。

outline mode of Emacs

如果要撰写大型文档,可以使用outline模式。outline模式是Emacs自带的一款处
理结构化文本的模式,可以按结构对文档进行折叠,展开等操作。
一共有两种模式,一种是outline-mode,这种模式下,文档会失去原有的模式,而
采用outline模式。
还有一种是outline的子模式,outline-minor-mode,这种模式下,文档会保持原
有的模式,但还是可以使用outline模式,所以比较常用。
进入两种模式分别用M-x outline-mode 与 M-x outline-minor-mode打开即可。
但outline-minor-mode原有的键绑定太过于复杂,所以可以使用下列的语句来更改
键绑定的前缀。
(setq outline-minor-mode-prefix [(control o)])
使用时,在标题前分别加上"*"即可。星号越多,说明文档的级别越低。
*一级标题
**二级标题
***三级标题
而且,星号要顶格填写。
然后就可使用C-o C-d折叠这些。其他的一些键绑定如下:
///////////////////////////////////////////
//转自ttp://docs.huihoo.com/homepage/shredderyin/emacs_outline.html
/////////////////////////////////////////////////
我们来把文档的各部分术语解释一下。

1. heading: 是指文档里的标题,比如 Chapter 1, Chapter 2, Section 1, ... 的
那些行。
2. branch: 是指一颗子树下所有 heading 的集合。想一想"树干"。
3. entry: 是指文档里不是 heading 的那些内容。比如,"Entry for topmost
level", "Entry for Chapter 1", "Entry for Chapter 2", ... 这些才是文档
的主要内容。
4. leaves: 是指一棵子树里的所有 entry。
5. body: 是指文档里所有 entry 的集合。注意这个概念跟 leaves 的区别是范围上
的区别。

启动 Outline

M-x outline-minor-mode 就可以启动 Outline。还有一个 outline-mode 是一个
major mode,一般都不用它。

全局隐藏操作

光标在任何位置,只要执行这些操作,文档的显示就会变化成需要的样子。

hide-sublevels(C-o C-q)

这个操作如果不带参数,隐藏所有文档子结构,只剩最上层。

[emacs-]

M-4 hide-sublevels(M-4 C-o C-q)

这是参数为4的操作,显示至文档第4层子结构。

[emacs-]

hide-body(C-o C-t)

文档的所有 Entry 都被隐藏。只显示主干。

[emacs-]

对一个子树(Chapter 1)的隐藏操作

hide-subtree(C-o C-d)

所有文档部分展开时,光标移动到 Chapter 1,执行 hide-subtree。整个 Chapter 1
的子树被折叠起来。

[emacs-]

hide-other(C-o C-o)

所有文档部分展开时,光标移动到 Chapter 1,执行 hide-other。除了 Chapter 1,
其它子树全部被折叠起来。这个操作正好与 hide-subtree 互补。

[emacs-]

hide-leaves(C-o C-l)

所有文档部分展开时,光标移动到 Chapter 1,执行 hide-leaves。所有 Chapter 1
子树下的所有级别的 entry 被隐藏。也就是说,Chapter 1 下,只显示 branch.

[emacs-]

hide-entry(C-o C-c)

所有文档部分展开时,光标移动到 Chapter 1,执行 hide-entry。Chapter 1 的
Entry 被隐藏,但是所有子树都不动。

[emacs-]

全局显示操作

show-all(C-o C-a)

显示所有文档。结果就是原文档。

对一个子树的显示操作

为了演示,我们从全部隐藏的情况开始:

[emacs-]

show-children(C-o C-i)

show-children 只显示直接的下一代子树,而不显示间接的下一代。这里, \begin
{document} 的直接的下一代就是 \chapter{...}。

[emacs-]

show-entry(C-o C-e)

把光标移动到 Chapter 1,执行 show-entry。Chapter 1 的 Entry 被显示,但是所
有子结构还是保持隐藏。 [emacs-]

show-branches(C-o C-k)

把光标移动到 Chapter 1,执行 show-branches。Chapter 1 这棵子树之下的各级"树
干"被显示,但是各级 entry 还是保持隐藏。Chapter 1 自己的 entry,由于我们上
一步已经显示,所以保持不变。

[emacs-]

show-subtree(C-o C-s)

把光标移动到 Chapter 1,执行 show-subtree。Chapter 1 及其所有子结构全部被扩
展。

[emacs-]

Outline mode 下的移动操作

在 outline 模式下,有几种特殊方便的移动方式。

1. C-o C-n (outline-next-visible-heading) 移动到下一个可见标题。
2. C-o C-p (outline-previous-visible-heading) 移动到上一个可见标题。
3. C-o C-f (outline-forward-same-level) 移动到下一个同级可见标题。
4. C-o C-b (outline-backward-same-level) 移动到上一个同级可见标题。
5. C-o C-u (outline-up-heading) 到上一级标题。

Saturday, December 13, 2008

女人与Emacs

用了一段时间后,爱上了Emacs。现在在想一个无聊的问题,有女人喜欢使用Emacs
的吗?
因为Emacs剥夺了一切美丽的外观,直接以赤裸裸的真相面对一切。浏览器是没有
图形界面的,无法显示美丽的CSS效果。mpg321播放音乐连文字界面也没有,irc频
道也是简单的文本滚动而已。这对于号称感性爱美的女性来说是否是一个巨大的阻
碍呢?
Emacs的强大,在于深入了解,在于花费心思。如果熟练记住常用的200个键组合,也许
任何人都会爱上Emacs,但是,这200个键组合每个可能就有3、4个按键,你记得住
吗?
Emacs的帮助界面做得很不好,很难查到想要的信息,这就是说,开始接触Emacs会
遇到巨大的阻碍,你会越过这个障碍吗?如果越不过,这个Emacs始终是丑陋的一
个癞蛤蟆。
现在,我用它来写书,用它来听音乐,上网,收邮件,看news,irc,越来越觉得
离不开了。

Thursday, December 11, 2008

mlnet

最近在使用mlnet,但是有一点不太舒服的是,这个东西似乎没有命令行,也就是
说不能在命令行中添加ed2k链接,也不能查看下载状态,找到Ubuntu中文论坛的EE
的一个脚本,但似乎却是无法运行。
比较遗憾。

在Emacs中收发sohu的信

原来一直在网页中写博客,但发现这样不得不再开一个浏览器。由于Emacs一直是
开着的,而且blogger也支持邮件发信,所以在Emacs中配置了一下Gnus用来收发信
件,这样,就可以在Emacs中写博客了。
这就是配置文件。
;;.gnus.el
(require 'smtpmail)
;;=======================配置收发信件========================================

(setq load-path (cons (expand-file-name "~/develop/gnus/lisp") load-path))
(require 'gnus-load)

;;in your .emacs file, or wherever you keep such things.

;;To enable reading the Gnus manual, you could say something like:

(require 'info)
(if (featurep 'xemacs)
(add-to-list 'Info-directory-list "~/develop/gnus/texi/")
(add-to-list 'Info-default-directory-list "~/develop/gnus/texi/"))

;;; ;;; .gnus.el --- gnus configure file

;;; ;; Copyright (C) 2007 fxl

;;; ;; Author: fxl <fxlzju@gmail.com>
;;; ;; Keywords: mail, news,

;;; ;; for newsgroup
(setq gnus-select-method '(nntp "news.cnusenet.org"))
;;; ;; for mail
(setq gnus-secondary-select-methods '((nnfolder "")))
(setq gnus-use-cache 'passive)
(gnus-add-configuration '(article
(vertical 1.0
(summary .4 point)
(article 1.0))))
(setq gnus-thread-sort-functions
'(
(not gnus-thread-sort-by-date)
(not gnus-thread-sort-by-number)
))
;;; ;; chinese font set
(setq gnus-default-charset 'chinese-iso-8bit
gnus-group-name-charset-group-alist '((".*" . chinese-iso-8bit))
gnus-summary-show-article-charset-alist
'((1 . chinese-iso-8bit)
(2 . gbk)
(3 . big5)
(4 . utf-8))
gnus-newsgroup-ignored-charsets
'(unknown-8bit x-unknown iso-8859-1))

;;; ;; only see the text plain if sended with html format
(eval-after-load "mm-decode"
'(progn
(add-to-list 'mm-discouraged-alternatives "text/html")
(add-to-list 'mm-discouraged-alternatives "text/richtext")))
; (setq gnus-default-subscribed-newsgroups
; '("cn.comp.os.linux"))
; '("gnu.emacs.help"

;;; (setq user-full-name "yourname") ;; 外发的邮件采用这个名字
;;; (setq user-mail-address "your@gmail.com")
;;; ;; save the mail on web server
;;; (setq pop3-leave-mail-on-server t)
;;; (setq mail-sources
;;; '((pop :server "pop.gmail.com"
;;; :port 995
;;; :user "your@gmail.com"
;;; :connection ssl
;;; :leave t)))


;;; (setq gnus-message-archive-group
;;; '((if (message-news-p)
;;; "nnfolder:mail.sent.news"
;;; "nnfolder:mail.sent.mail")))

;;; (setq message-send-mail-function 'smtpmail-send-it)
;;; (setq smtpmail-default-smtp-server "smtp.gmail.com")
;;; (setq smtpmail-smtp-service 587)
;;; (setq smtpmail-starttls-credentials
;;; '(("smtp.gmail.com"
;;; 587
;;; nil
;;; nil)))
;;; (setq smtpmail-auth-credentials
;;; '(("smtp.gmail.com"
;;; 587
;;; "your@gmail.com"
;;; nil)))

;;; (setq gnus-posting-styles
;;; '((".*"
;;; (name "name")
;;; (face "")
;;; (address "your@gmail.com")
;;; (organization "cesc")
;;; (signature-file "~/Mail/signature")
;;; )))


(setq gnus-select-method '(nntp "news.cn99.com")
gnus-secondary-select-methods
'((nnml "")
;; (nntp "news.individual.net")
;;(nntp "news.gmane.org")
(nntp "news.newsfan.net")
(nntp "news.yaako.com")))

(setq gnus-default-subscribed-newsgroups
'("gnu.emacs.help"
"cn.comp.os.linux"
"comp.os.linux.announce"
"comp.os.linux.development.apps"
"comp.os.linux.development.system"
"comp.os.linux.misc"
"comp.os.linux.answers"))


(setq mail-sources
'((pop :server "pop3.sohu.com" ;; 在这里设置pop3服务器
:user "mylazylifeblog" ;; 用户名
:port "pop3"
:password "******"))) ;; 密码

;然后我们还要告诉gnus如何存放接收来的邮件,gnus把这个叫做backend,最常用的方式是nnfolder,另外还有nnmbox, nnml等其它几种方式,我们选择其中一种就可以了:

(setq gnus-secondary-select-methods '((nnfolder "")))

;; 然后我们设置SMTP服务器,采用smtp方式发送邮件需要一个小程序smtpmail.el, 这个程序现在已被纳入了官方的Emacs,如果你用的是最新的CVS Emacs,比如 Emacs22, Emacs23等,就已经包含了这个程序。你可以检查一下emacs的安装目录中 lisp/mail/ 目录下有没有这个文件,如果没有的话,就只好自己下载、安装了。现在我们看看如何设置:

(setq user-full-name "westnorth") ;; 外发的邮件采用这个名字
(setq user-mail-address "westnorth@gmail.com") ;;外发的邮件采用这个地址
;(setq smtpmail-default-smtp-server "smtp.xxx.xx")
;(setq smtpmail-smtp-server "smtp.xxx.xx")
(setq user-full-name "Godfrey Ma")
(setq smtpmail-local-domain "sohu.com")
(setq smtpmail-sendto-domain "sohu.com")
(setq user-mail-address "mylazylifeblog@sohu.com")

;(setq smtpmail-auth-credentials
; '(("hostname" 25 "username" "password")))


; (setq smtpmail-starttls-credentials
(setq smtpmail-auth-credentials
'(("SMTP.sohu.com" ;; SMTP服务器
25
"mylazylifeblog" ;; 用户名
"******"))) ;; 密码
(setq smtpmail-default-smtp-server "SMTP.sohu.com")
(setq smtpmail-smtp-server "SMTP.sohu.com")
(setq message-send-mail-function 'smtpmail-send-it)

;中文设置

;中文!中文!永远都是头痛的事儿。把下面这些加在`.gnus.el'里面吧:

(set-language-environment 'Chinese-GB)
(setq gnus-default-charset 'chinese-iso-8bit
gnus-group-name-charset-group-alist '((".*" . chinese-iso-8bit))
gnus-summary-show-article-charset-alist
'((1 . chinese-iso-8bit)
(2 . gbk)
(3 . big5)
(4 . utf-8))
gnus-newsgroup-ignored-charsets
'(unknown-8bit x-unknown iso-8859-1))

;有关中文设置的更详细的说明参见拙文 Gnus的编码设定。

;另外,有些用web方式发出的邮件里有html,加入下面的设置,只看其中的 plain text部分:

(eval-after-load "mm-decode"
'(progn
(add-to-list 'mm-discouraged-alternatives "text/html")
(add-to-list 'mm-discouraged-alternatives "text/richtext")))