Search This Blog

Friday, July 28, 2006

解压一大堆文件的脚本

#!/bin/bash
do_dir ()
{
cd $1
for i in *
do
if [[ -f $i ]]
then
decompress $i
elif [[ $i == "." ]] || [[ $i == ".." ]]
then
continue
elif [[ -d $i ]]
then
[[ $recue == 1 ]] && do_dir $i
fi
done
}


decompress ()
{
case $1 in

*.tar.bz2)
tar jxvf $1
;;
*.tar.gz)
tar zxvf $1
;;
*.rar)
rar x $1
;;
*.gz)
gzip -d $1
;;
*.bz2)
bzip2 -d $1
;;
*)
echo "$1:not a compressed file,do nothing"
return
;;
esac
[[ $del == 1 ]] && rm $1
}


get_help ()
{
echo "this bash script is written to get all the compressed files under a directory to be uncompressed."
echo "Usage:tarball.sh [OPTION] [DIR]"
echo "OPTION:"
echo -e "\t-r\trecursively"
echo -e "\t-d\tremove the file after decompress it"
}



if [[ $# == 0 ]]
then
echo "no arguments detected,do you want to continue or just get help?[c/H]:"
read help
fi


[[ $help != "c" ]] && get_help && exit 0

for arg in $@
do
case $arg in
-r)
recue=1
;;
-d)
del=1
;;
-h)
get_help
exit 0
;;
-*)
echo "unknown arg:$arg"
echo "type tarball.sh -h to get help"
get_help
exit 1
;;
*)
[[ $arg != $0 ]] && [ -d $arg ] && name=$arg
;;
esac
done



if [[ -n $name ]]
then
do_dir $name
else
do_dir "."
fi

Thursday, July 27, 2006

sawfish-ui

sawfish-ui我一直没怎么重视,今天才发现简直太有用了
直到今天之前我一直在纳闷,fvwm能够指定特定的程序map到特定的桌面,也能在聚焦的同时提升窗口,为什么sawfish都不行呢?
原来都可以在sawfish-ui里设置的
在Focus标签下有三个子标签:Focus,Window Cycling和Auto-Raise
第一个设置聚焦方式,第二个没兴趣,第三个设置聚焦的时候要不要自动提升
还有一个叫Matched Windows的标签,可以根据名字等匹配窗口,然后对窗口做特殊的设定,这样就可以让fvwm一样了,hoho

rxvt-unicode的问题

之前用得好好的,不知道怎么回事突然出问题了,具体表现为在有中文时CPU会占到100%好一会儿,然后才能把中文显示出来,而且中文变得奇丑无比。刚开 始判断可能是字体没找到,于是调整了.Xdefaults,字体是找到了,但是CPU100%的问题依旧。改了无数次,还是没用,google也没结果, 很是郁闷。
后来才知道原来是urxvtd的原因。要把urxvtd重启才能应用新设置。
顺便强烈推荐一下urxvtd和urxvtc的组合,开新term的速度那叫一个快呀
再顺便贴一下.Xdefaults
Xft.dpi:96
URxvt.background:black
URxvt.foreground:white
URxvt.scrollBar:False
URxvt.saveLines:3000
URxvt.color12:DodgerBlue
URxvt.font:7x14,xft:AR PL New Sung:antialias=false
URxvt.mfont:7x14,xft:AR PL New Sung:antialias=false
URxvt.boldFont:7x14,xft:AR PL New Sung:antialias=false
URxvt.italicFont:7x14,xft:Bitstream Vera Sans:antialias=true
URxvt.boldItalicFont:7x14,xft:Bitstream Vera Sans:sytle=Bold:antialias=true
URxvt.preeditType:Root

Wednesday, July 26, 2006

sawfish第一篇

换到sawfish以来第一次写关于它的东东,主要是sawfish的资料比起fvwm来少得多,而且它的那个文档也不怎么样,所以玩起来比较吃力啊,不过那个sawfish wiki还是不错的,扩展很多!
第一个,一个小函数:
(defun one-instance-exec (prog)
(interactive)
(if (= (ash (system (concat "ps -C" prog)) -8) 0)
()
(system (concat prog " &"))
))

这个函数先检查是不是有进程和要运行的程序同名,如果是就什么都不干,如果不是就运行这个程序,也就是说,它只运行某个程序的一个实例,这在某些场合是很有用的,尤其是程序自身并不检查是不是有自己在运行的时候
比如说,urxvtd,我让它在sawfish启动的时候运行,要是我重启一下sawfish,就会有两个urxvtd,虽然没什么危害,不过浪费总是不好的

我是忘了把学校的配置文件拷过来了,所以现在的配置文件都是重新写的,函数就写了这么一个,下面是一个变量
(setq viewport-dimensions '(2 . 2))
这个viewport-dimensions找了我好久,viewport是显示器上能显示的那一块,还有一个workspace其实就是桌面,如果 view-port-dimensions是1x1的话,viewport和workspace就是一样大的,如果是这里的2x2的话,那一个 viewport就是一个workspace的1/4

现在的bmpx搞个什么dbus,我不知道那是什么玩意儿,我只想听歌,但是没有dbus的话bmpx就罢工:(
bmpx官方网站上说要这样:
在.xinitrc里,把原本运行窗口管理器的那一行前面加上dbus-launch --auto-syntax --exit-with-session
这个暂时不关我的事,等我想知道了再去看它是怎么回事

Monday, July 24, 2006

拨号又有新玩法!

其实rp-pppoe挺好用的,不过我就是这么喜欢折腾
pppd说它把rp-pppoe变成它的一个module了,好呀,于是我决定不要rp-pppoe了
关键在于/etc/conf.d/net文件,更关键的在于/etc/conf.d/net.example,因为后者把前者的配置方法讲得特别特别详细
不过鉴于一些同胞不屑于看英文,我就啰索一下吧
先假设涉及到的设备名是eth0和ppp0

config_eth0=("null") #先把eth0弄成null,不要问我为什么,那个net.example教我的!

config_ppp0=("ppp")
link_ppp0="eth0" #这个表示其实我们还是要靠eth0来办事的,所以总得给它点面子
plugins_ppp0=("pppoe") #传说中的pppd的module啊,果然是百闻不如一见啊
username_ppp0='your_adsl_username' # 不要照搬啊,那就太傻了
password_ppp0='your_adsl_password' # 这个也是
pppd_ppp0=("debug" "defaultroute" "usepeerdns") #debug表示往系统日志里多写点东西,defaulteroute和usepeerdns都表示默认啊默认,把ppp设备做为默认route,dns 连接上了就有了,不用自己指定


好,这个关键性文件好了,然后ln -s /etc/init.d/net.lo /etc/init.d/net.ppp0
如果想开机就连接上的话:rc-update add net.ppp0 default
另外,如果原来runlevel里有net.eth0的话,就不要了:rc-update del net.eth0

另外我还折腾了一下动态域名
先去www.3322.org注册一个帐号,建一个域名,信息自己记住啊,我不负责的
emerge ez-ipupdate
然后在/etc/ez-ipupdate/下建立一个.conf文件,名字你自己随便起,假设是qdns.conf
内容如下

user=username:password #这是你在3322.org的帐号和密码
host=yourhost.3322.org #这是你申请的二级域名,当然,你要有钱,非要自己买顶级域名,那我只能膜拜了:)
interface=ppp0 #ppp设备名


运行一下ez-ipupdate -S qdns -c /etc/ez-ipupdate/qdns.conf
再ping一下那个域名,看看能不能解析出来

现在开机能自动拨号了,但是域名的指向还要手动,那就不理想了,于是:
把/etc/ppp/ip-up给翻出来
这个文件由三个if...fi组成,可以发现第一个if...fi是关于usepeerdns的,显然跟我们没关系,而第二个if...fi里有这么一句:/etc/init.d/net.$1 --quiet start
可以看到ppp0就是从这里启动的,那么如果它起动成功的话就可以跟3322.org建立连接了,所以在后面加上:&& ez-ipupdate -c /etc/ez-ipupdate/qdns.conf -S qdns
OK了

第二次装gentoo

这次比上次熟练了,不过也花了三天时间,总结一下:
先是gcc-config无法升级了,确切的症状是编译正常,但是旧版本无法删除,而且从这里开始以后不管装什么软件都出错,具体信息忘记了,好像说是什 么call back还是fall back之类的,反正不管装什么东西都是出来这么一屏,google了一晚上,无果,后来怀疑是portage的问题,于是把当前版本mask掉,退回去 后发现一切正常了
接着第二个问题是gmp,fortran依赖它,但是编译这个东西需要c++,而当时在stage1的情况下没有c++编译器,这个鸡啊蛋啊的问题真是麻 烦得很,具体解决办法:先把gcc的USE flag里的fortran关掉,编译,得到一个stage2的gcc,因为它现在已经有c++支持了,然后用gcc-config或者eselect compiler set xxx启用新的gcc,(gentoo说gcc-config马上要被抛弃了,所以还是eselect compiler吧),再用新的gcc可以编译gmp,有了gmp就可以进一步得到fortran enabled的gcc,造物的快感啊!我当时是这么想的,不过过程并没有这么顺利,事实上一旦我用了gcc-4.1.1,emerge的时候就会出现 crash,CPU100%,除非我把进程kill掉,否则它就一直卡在那里,但是退回3xx版本就没有问题,百思不得其解,后来无奈之下重新 emerge了一遍gcc-config,问题自己消失了,奇怪
之后我有了完整的编译器,剩下的问题就都是些散兵游勇了,不足为惧,主要都是一些包的依赖,出错的时候自己稍微看看就都能解决
不过grub的问题倒真是诡异了,不管我怎么弄,它始终是error15,而我手动启动的时候,命令都是跟grub.conf里写得一样的,却能顺利启 动,也换了版本,而且/boot是ext3的,而且配置文件就是以前debian的时候用的,就是改了一下title和kernel,它就是不肯启动,我 服了