为x-windows自定义一种session管理方案
摘要:本文提供了一种用shell来实现手工保存要打开的文件列表的方法和思路,并不是像kde那样死板地打开上次保存的session,作者本人觉得这种方法更灵活更使用。前言
本文提供了一种用shell来实现手工保存要打开的文件列表的方法和思路,并不是像kde那样死板地打开上次保存的session,作者本人觉得这种方法更灵活更使用。
本文适用于任何方式启动x,但是为了具体操作,本文选种了默认不带session保存功能,但是可扩展性极强又不失易用性的fluxbox来作为wm。使用startx来启动x。
本文直接引导读者怎么做,也许深入的内容,要自己去思考。另外,本文用到的软件,都是开源,并且,都假设您已经安装好了,如果没有,请自行解决。
我们开始
~/.xinitrc的内容:exec ~/.fluxbox/startup
我的设置编码等等工作是在.profile里面做的,如果你喜欢在.xinitrc里面放也行。
下面就看~/.fluxbox/startup的内容:
# 屏幕保护xscreensaver 这个也是要另外安装的fluxbox的pagerfbpager 下面这个是自定义的startup文件,本文的重点shelltools/./xstartup 下面正式启动fluxboxexec /usr/bin/fluxbox# 如果需要记录,打开下面的注释# exec /usr/bin/fluxbox -log “~/.fluxbox/log”
开始自定义session的加载,我把这个存在一个shell文件里面。
下面是这个脚本~/shelltools/xstartup的内容:
#!/bin/sh# file: ~/shelltools/xstartup# function: starts applications when startx# Items below for gedit startup# 静态的打开常用的软件# input methodfcitx applicationsgaim &gkrellm opera9 能自动保存session,很方便opera &rhythmbox &stardict 下面红色部分,已经有更好的方案来实现,见本文末尾增改部分# Open editing files with gedit# 下面开始用gedit打开正在编辑的文件gedit 从~/shelltools/xstartup-editing-files.list读取文件列表,并且用gedit打开,“#”开头的是注释,不过我的grep写的不好,读者可以自己改善for openfile in `cat ~/shelltools/xstartup-editing-files.list | grep -v “#”`doeval gedit “$openfile”done# 上面用gedit打开文件的方法,当然也适用于打开其他session# Popup a dialog# 这里的警告是我个人留待其他用途的zenity –info –text=”Startup finished.”
下面是我的~/shelltools/xstartup-editing-files.list:
# editing-file list# acm~/acm/pku1010.cpp~/acm/pku1010.in# comment~/clipboard.txt~/.fluxbox/startup# shell tools# 打开这两个文件,是为了方便动态维护session列表~/shelltools/xstartup~/shelltools/xstartup-editing-files.list
后记
希望本文对一些人有用,作者本人并没有很深的经验,如果有写错的地方,请包涵,欢迎指点。
Fluke — http://blog.ospattern.net
Mon Aug 16 23:xx:xx CST 2006
增改部分
对于用gedit打开文件列表部分,原来的处理有些漏洞,如果,gedit打开的速度不够快,会造成后面的进程先打开,这样的话,一次只能编辑一个文件,因为打开文件列表的时候,gedit并没有被设置在后台运行,而是独占了父进程,解决的方法可以是在执行了gedit &之后,sleep一下。
不过这里有更好的办法,gedit支持从命令行参数打开所有参数表示的文件。所以,我们只需把文件列表join到一个变量上,调用gedit打开就好了,具体代码如下:
# Open editing files with geditfilelist=”"for onefile in `cat ~/shelltools/xstartup-editing-files.list | grep -v “#”`dofilelist=$filelist” “$onefiledoneeval gedit $filelist
以上修改于Thu Aug 17 14:44:36 CST 2006 on Archlinux