标签: linux

让urxvt支持256色

urxvt默认是不支持256色的,所以在urxvt里使作vim的时候,那些漂亮的配色方案就没有效果了。幸好,urxvt要加入256色的支持很简单,执行:

echo "x11-terms/rxvt-unicode 256-color" >> /etc/portage/package.use
emerge -av rxvt-unicode

要vim也支持256色,需要在~/.vimrc里加入:

set t_Co=256

最终效果:
urxvt with 256 color by hosanna_cn, on Flickr

VIM中为一个文件设置多种文件类型

VIM的很多插件功能都是根据文件类型来开启的,比如说代码高亮和自动补全等功能。而VIM又是根据文件扩展名来确定文件类型,有很多时候,在一个文件里可能要用到针对多种文件类型的功能,比如说在编辑php文件的时候,因为经常是要同时包含php和html代码,所以想同时打开snipMate针对php和html的自动补全功能。这个时候,单单是针对文件扩展名来确定文件类型是不够的,这样只能使用一种文件类型的特性。幸好,VIM是可以为一种文件扩展名定义多种文件类型的,只需要VIM的配置文件里加入如下配置:

if has("autocmd")
    autocmd BufRead,BufNewFile *.php set filetype=html.php
endif

这样在用VIM打开php文件时,就会同时应用html和php两种文件类型的特性,多个文件类型之间用“.”号连接。

为SCIM制作输入法

在Linux下我一直都是用SCIM输入平台下的五笔输入法,最近用的有点不太爽了,因为默认的五笔输入法只有GB2312字符集,很多字都打不出来,比如“囧”和一些粤语聊天中经常用到的字(“冇”……“嘢”等),所以就打算弄一个如Windows下极点五笔那样的支持GBK字符集的输入法。

首先,找一个现成的码表文件研究一下它的格式到底是怎么样的,SCIM的码表文件可以在/usr/share/scim/tables这个文件夹下面找到,先拿一个五笔的码表来看一下吧:

mkdir ~/wb-tables
cd ~/wb-tables
cp /usr/share/scim/tables/Wubi.bin ./

SCIM的码表文件是一个bin文件,还不可以直接编辑,所以要把它转换成文本文件。SCIM提供了码表制作的工具scim-make-table可以完成这个工作:

scim-make-table Wubi.bin -o Wubi.txt

现在可以使用文件编辑器打开Wubi.txt来看一下这码表文件到底是怎么组成的,一个码表文件大概是这样的:

SCIM_Generic_Table_Phrase_Library_TEXT
VERSION_1_0
### Begin Table definition.
BEGIN_DEFINITION
UUID = c584dfc8-c088-4908-9802-80eba0fb6ad9
SERIAL_NUMBER = 20040227
ICON = /usr/share/scim/icons/Wubi.png
NAME = Wubi
NAME.zh_CN = 五笔字型
NAME.zh_HK = 五筆字型
NAME.zh_TW = 五筆字型
LANGUAGES = zh_CN,zh_SG,zh_TW,zh_HK
### AUTHOR =
STATUS_PROMPT = 中
KEYBOARD_LAYOUT = US_Default
VALID_INPUT_CHARS = abcdefghijklmnopqrstuvwxy
### KEY_END_CHARS =
SINGLE_WILDCARD_CHAR = z
MULTI_WILDCARD_CHAR = *
SPLIT_KEYS = apostrophe
COMMIT_KEYS = space
FORWARD_KEYS = Return
SELECT_KEYS = 1,2,3,4,5,6,7,8,9
PAGE_UP_KEYS = Page_Up,comma,minus
PAGE_DOWN_KEYS = Page_Down,period,equal
MODE_SWITCH_KEYS = Shift+KeyRelease+Shift_L,Shift+KeyRelease+Shift_R
FULL_WIDTH_PUNCT_KEYS = Control+period
FULL_WIDTH_LETTER_KEYS = Shift+space
MAX_KEY_LENGTH = 4
SHOW_KEY_PROMPT = FALSE
AUTO_SELECT = TRUE
AUTO_WILDCARD = TRUE
AUTO_COMMIT = TRUE
AUTO_SPLIT = FALSE
AUTO_FILL = FALSE
DISCARD_INVALID_KEY = TRUE
DYNAMIC_ADJUST = FALSE
ALWAYS_SHOW_LOOKUP = TRUE
USE_FULL_WIDTH_PUNCT = TRUE
DEF_FULL_WIDTH_PUNCT = TRUE
USE_FULL_WIDTH_LETTER = TRUE
DEF_FULL_WIDTH_LETTER = FALSE
BEGIN_CHAR_PROMPTS_DEFINITION
a 工
b 子
c 又
d 大
e 月
f 土
g 王
h 目
i 水
j 日
k 口
l 田
m 山
n 已
o 火
p 之
q 金
r 白
s 木
t 禾
u 立
v 女
w 人
x 纟
y 言
END_CHAR_PROMPTS_DEFINITION
END_DEFINITION

### Begin Table data.
BEGIN_TABLE
a 工 戈
aa 式 戒
……
……
END_TABLE

由这个文件可以看到,SCIM的码表文件主要是由描述部分(BEGIN_DEFINITION……END_DEFINITION)和码表部分(BEGIN_TABLE……END_TABLE)两大块组成的。描述部分主要是输入法的一些基本的设置,如输入法的名字、输入法的图标等;码表部分就是各字、词对应的输入码,也是我们要修改的主要部分。

自己重新做一个码表这么艰难并重复制作轮子的事情当然不会做,只要在一个现成的码表上面添加上我们需要的部分就可以了。码表文件的获得方法有很多,可以使 用工具软件把windows下面的输入法码表转换成文本文件再拿来用就可以了。我使用的是for VIMIM的极点五笔字库,可以在这里下载。把下载的码表内容替换掉Wubi.txt文件中码表部分的内容就可以了。当然也可顺便改一下输入法的名字和图标,贴上自己的标志。接下来就是把Wubi.txt转换成SCIM的码表文件就可以了,还是使用scim-make-table:

scim-make-table Wubi.txt -b -o NWubi.bin

最后把生成的码表文件复制到/usr/share/scim/tables,如果有修改输入法的图标文件,把图标文件(48x48大小png图片)也复制到/usr/share/scim/icons下面,重新启动输入法,就可以在可用码表里选择启用自己生成的输入法了。

sudo cp NWubi.bin /usr/share/scim/tables
sudo cp NWubi.png usr/share/scim/icons

CHMSEE打开.chm文件显示空白问题的解决

Chmsee是Linux下用来查看chm帮助文件的一个软件,虽然同类的软件有不少,比如Xchm、Gnochm等,但在中文支持方面,Chmsee无疑是我用过的chm阅读器里做的最好的一个。自从不知道什么时候开始,我系统里的Chmsee打开.chm文件时,总是显示不了文件的内容,只是显示一片空白,偶尔还可以看得到目录,但点进去的时候还是空白。因为一直没有什么时间折腾,也没有频繁阅读chm文档,就算偶尔要看,还可以临时用户Xchm来应付着。

但是,昨天碰到一个问题,虽然以前知道在一个chm的电子书里有看到过解决的方法,但用Xchm打开的时候,中文全部成了乱码,根本看不了。只好求助于Google,结果是没有结果!就在我放弃的时候,ls 家目录的时候,看到了一个.chmsee的文件夹,敏感的神经使我感觉到问题可能就在这里,于是决定rm -r .chmsee 。完成后重新打开chm文档,可爱的文字终于出现了,看来真的是人品大爆发了!!

现在想想应该是Chmsee升级到某一个版本之后处理数据的方式发生了变化,但是我家目录.chmsee 下的Chmsee配置和缓存还是使用以前版本的内容,所以导致这个问题的出现,删掉后重新生成就OK了。

升级mpfr3.0和libpng1.4碰到的问题

有一两个月没有升级过系统了,昨天想升级一下,居然有一百多个包要升级!想想反正这两天可以先用公司的电脑来做事,再加上办公室里也有空调,本本应该可以撑得过去,于是就开着机让它自行升级,我就一边做我的事去。结果到到了下班发现还有GCC这个超巨型的没有升级,因为赶着回家,就Ctrl-C中止后把本本带回家了。

Gentoo下安装与配置Nginx

####1、安装Nginx

为Nginx加入fastcgi(用来支持PHP)和ssl(支持https加密链接)USE标记:

echo "www-servers/nginx fastcgi ssl" >> /etc/portage/package.use

然后emerge nginx:

emerge -av nginx

####2、配置Nginx

Nginx的配置文件位于 /etc/nginx/下。(/etc/nginx/nginx.conf是主要的配置文件)

通常需要修改的是服务器配置部分:

/etc/nginx/nginx.conf

server {
listen          80;
server_name     www.example.com;
access_log      /var/log/nginx/www.example.com.access_log main;
error_log       /var/log/nginx/www.example.com.error_log info;
root /var/www/www.example.com/htdocs;
}

####配置 Fast CGI

如果站点是只有html的静态文件,可以不用CGI支持,如果你想使用动态脚本(如PHP),则要通过CGI来实现。Nginx并不直接支持CGI,因此需要安装一个辅助程序将CGI的输出结果返回给Nginx,这里使用spawn-fcgi。

spawn-fcgi还未进入稳定分支,因此要先加入keywords

echo www-servers/spawn-fcgi ~amd64 >> /etc/portage/package.keywords

然后就可以emerge它了:

emerge spawn-fcgi

安装PHP并加入cgi和force-cgi-redirect支持。

echo dev-lang/php cgi force-cgi-redirect >> /etc/portage/package.use
emerge php

为Spawn-fcgi创建一个启动脚本链接

ln -sf /etc/init.d/spawn-fcgi /etc/init.d/spawn-fcgi.php

创建spawn-fcgi.php配置文件:

cp /etc/conf.d/spawn-fcgi /etc/conf.d/spawn-fcgi.php

配置文件内容:

/etc/conf.d/spawn-fcgi.php

# Copyright 1999-2004 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: /var/cvsroot/gentoo-x86/www-servers/lighttpd/files/spawn-fcgi.confd,v 1.1 2005/02/14 11:39:01 ka0ttic Exp
# $Configuration file for the FCGI-Part of /etc/init.d/lighttpd

## Set this to "yes" to enable SPAWNFCGI
ENABLE_SPAWNFCGI="yes"

## ABSOLUTE path to the spawn-fcgi binary
SPAWNFCGI="/usr/bin/spawn-fcgi"

## ABSOLUTE path to the PHP binary
FCGI_PROGRAM="/usr/bin/php-cgi"

## bind to tcp-port on localhost
FCGI_PORT="65532"

## number of PHP childs to spawn
PHP_FCGI_CHILDREN=5

## number of request server by a single php-process until is will be restarted
PHP_FCGI_MAX_REQUESTS=1000

## IP adresses where PHP should access server connections from
FCGI_WEB_SERVER_ADDRS="127.0.0.1"

# allowed environment variables sperated by spaces
ALLOWED_ENV="PATH USER"

# do NOT change line below
ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS"

## if this script is run as root switch to the following user
USERID=nginx
GROUPID=nginx

通常要配置的选项是 FCGI_PROGRAM, FCGI_PORT, USERID and GROUPID。

FCGI_PROGRAM : CGI程序的绝对路径。

FCGI_PORT : Nginx监听的端口,可以随便定义,注意不要和其它服务有冲突。

USERID 和 GROUPID :以什么用户和用户组来运行。

配置好后就可以启动这个服务和把它加入到开机自动运行。

/etc/init.d/spawn-fcgi.php start
rc-update add spawn-fcgi default

在Nginx的配置文件加入fastcgi支持,加入以下内容:

/etc/nginx/nginx.conf

index index.php index.html index.htm default.html default.htm
location ~ .*.php$ {
    include /etc/nginx/fastcgi.conf;
    fastcgi_pass  127.0.0.1:65532;
    fastcgi_index index.php;
}

fastcgi_pass 是设置监听 spawn-fcgi 的地址和端口,注意这里的端口应该跟刚才在/etc/conf.d/spawn-fcgi.php里设置的一致。

启动Nginx服务:

/etc/init.d/nginx start

或者把Nginx加入开机启动:

rc-update add nginx default

至此,Nginx的安装完成。

参考:
Gentoo wiki