在 Ubuntu 9.04 上安装 Kscope

Kscope 是我很喜欢的 Linux 平台上的代码查看工具,因为我不会用 Emacs,vim + ctags 又用得不熟,看看小程序还可以,看大项目就傻眼了。以前也尝试过 Source-Navigator(这个项目N年没更新,06年时候我装都装不上,08年底居然又复活了,有空了再去试试)、Eclipse、Kdevelop、CodeBlocks,总之都没有 Kscope 用着最舒服。Kscope 让我欣赏的特点主要有:

1. 它号称是代码编辑环境(source-editing environment),而不是IDE。我不用在建立 Kscope 项目时烦心地去选择项目类型、编译器、编译选项等等。编译我有 Makefile,我就是找个工具看看代码,用得着那么麻烦吗。 建立 Kscope 项目时只需要干两件事:选择项目名、项目保存地址和添加源文件。

2. 它不会在源文件目录下建立一堆乱七八糟的文件,影响市容。我记得 Eclipse、CodeBlocks 等都会把项目信息保存在源文件目录下,而 Kscope 的项目保存位置可以自己选,比如我一般都保存在 workspace/kscope 目录下面,这样对要查看的源文件目录没有任何影响。因此 Kscope 的项目和源文件基本没关系,我可以添加任何位置的源文件到某个项目中去。

3. 它不会去读非指定类型的文件。这是针对 Eclipse 来说的,每次在 Eclipse 项目中搜索时,一堆 .svn 目录中文件的结果让我感觉非常闹心,两年没用不知道现在的 Eclipse 是不是更智能点儿了,但是 Eclipse 改不了的毛病就是慢和吃内存。

4. 它支持代码查看的基本功能。其实我最常用的也就那么几个功能:语法高亮、同时打开多文件、整个项目中搜索字符串、查找函数定义位置和引用、项目文件列表+搜索。在这些条上据说 Windows 下的 SourceInsight 做得更好,但我没用过没有发言权。

简而言之,Kscope 与其它工具比就是快、简单、省心。但是时代在变革呀,转眼到了 KDE4 的时代,而 Kscope 仍然停留在 KDE3.5 上。现在的 Ubuntu 9.04 的依赖关系里,居然已经撤掉了 Kscope,在 9.04 上 sudo apt-get install kscope,会得到这样的消息:E: Couldn't find package kscope,真是让人丧气。

其实 Kscope 之所以不能安装,主要原因是它依赖于 Kate 的两个库:libkateinterfaces.so.0 和 libkateinterfaces.so.0,只需要从 KDE3.5 的 Kate 中提取出来这两个库安装到系统中后,Kscope 就可以正常运行了。Ubuntu 9.04 的依赖关系中虽然找不到 Kscope,但是 Ubuntu 的软件仓库中还有 Kscope 的包,我们可以手动下载安装。下面这个脚本的功能就是自动安装 kscope 到 Ubuntu 9.04,稍微修改一下也可以用于在其它 KDE4 桌面系统中安装 Kscope,或者解决 Kscope 无法运行的问题。您也可以从这里下载到该脚本:

#!/bin/bash
# This script helps you install Kscope on Ubuntu 9.04.
# You can also use it to fix "Kscope doesn't run in KDE4" bug.

echo "Determining machine hardware name... "
MACHINE=`uname -m`
case "$MACHINE" in
  i386 | i586 | i686)
    ARCH="i386"
    ;;
  x86_64)
    ARCH="amd64"
    ;;
  *)
    ARCH="i386"
    ;;
esac

# If Kscope is not installed, install it.
which kscope &> /dev/null
if [ $? -ne 0 ]; then
  echo "Installing kscope..."
  sudo apt-get install kscope || \
  wget http://archive.ubuntu.com/ubuntu/pool/universe/k/kscope/kscope_1.6.0-1_${ARCH}.deb && \
  sudo dpkg -i kscope_*.deb || \
  sudo apt-get -fy install || \
  echo "Oops, some error happens..."
fi

kscope -v &> /dev/null
if [ $? -eq 0 ]; then
  echo "Kscope works fine."
  exit
fi

echo "Downloading KDE3 libraries needed by kscope..."
wget http://ftp.debian.org/debian/pool/main/k/kdebase/kate_3.5.9.dfsg.1-6_${ARCH}.deb
dpkg -x kate_3*.deb kate

echo "Installing KDE3 libraries..."
sudo cp kate/usr/lib/libkateinterfaces.so.0.0.0 /usr/local/lib/
sudo cp kate/usr/lib/libkateutils.so.0.0.0 /usr/local/lib
sudo ln -s /usr/local/lib/libkateinterfaces.so.0.0.0 /usr/local/lib/libkateinterfaces.so.0
sudo ln -s /usr/local/lib/libkateutils.so.0.0.0 /usr/local/lib/libkateutils.so.0
sudo ldconfig

echo "Finished."

Linux 下 Firefox 变身 Google Chrome

几乎可以达到以假乱真的效果,屏幕截图请看:

Linux 下 Firefox 变身 Chrome

要求:
1. KDE 4 ---> Gnome 的窗口无法隐藏标题栏,影响变身效果(这也是目前我觉得 KDE 更好玩的原因之一)
2. Firefox 3.5 以上 ---> 3.5 以下无法使用 Chromifox Extreme 主题,只能使用 Basic Chromifox Extreme 主题
3. Chromifox Companion 扩展 ---> 配合 Chromifox Extreme 主题修改工具栏图标
4. Hide Menubar 扩展 ---> 隐藏菜单栏,可以使用 alt 呼出

步骤:
1. 安装 Firefox 3.5。下载 tar.bz 包之后解压到 /opt 目录下,比如目录名为 /opt/firefox,修改 /usr/bin/firefox 软链接到 /opt/firefox/firefox。
2. 安装 Flash 插件。在 /opt/firefox/plugins 目录下建立软链接 libflashplayer.so 到 /usr/lib/flashplugin-installer/libflashplayer.so。
3. 打开 Firefox,查看版本是否 3.5,安装 Chromifox Extreme 主题
4. 安装 Chromifox Companion 扩展
5. 安装 Hide Menubar 扩展
6. 设置隐藏标题栏。右击标题栏,Advanced->Special Application Settings->Preferences->No border,下拉选择 Apply Initially,勾上后面的复选框。
7. 重启 Firefox。

Update:在 Ubuntu 下安装 Google Chrome (开发者版)和 Google Earth

$ echo "deb http://dl.google.com/linux/deb/ stable main" > google-chrome.list
$ sudo mv google-chrome.list /etc/apt/sources.list.d/
$ wget https://dl-ssl.google.com/linux/linux_signing_key.pub -O - | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install google-chrome googleearth

遗憾的是,Chrome4Linux 目前还不支持中文。

使用 kdiff3 进行 svn 版本比较

svn diff 命令的效果总的来说还是不错的。因为它是基于行的比较,在比较格式规范的程序代码文件时候也足够了,尤其是每行不超过 termial 宽度的时候。但是在比较那些单行长度比较长的文件时,比如 HTML, TEX 等,仅仅修改一个字母也会引起两行不同,用 svn diff 查看被修改的地方时就比较痛苦了。

Linux 下有一些比较好的比较程序,比如 kdiff3, gdiff, vimdiff 等,kdiff3 可以用不同颜色显示两个文档中不同的行、字符,算是比较理想的比较程序。我们可以拿它来替换掉 svn diff 默认的比较程序。

很显然这种需求别人也会有,所以早就有高手解决了这样的问题,您可以从这里下载一个 bash 脚本,将其重命名为 svndiffwrapper,加上可执行权限放到一个可执行路径(比如 /usr/bin/)下。然后修改您的 ~/.subversion/config 文件,找到 diff-cmd,修改为如下所示:

### Set diff-cmd to the absolute path of your 'diff' program.
###   This will override the compile-time default, which is to use
###   Subversion's internal diffimplementation.
diff-cmd = svndiffwrapper
### Set diff3-cmd to the absolute path of your 'diff3' program.
###   This will override the compile-time default, which is to use
###   Subversion's internal diff3 implementation.
diff3-cmd = svndiffwrapper

这样,当您再执行 svn diff 的时候,svn 会默认调用 kdiff3 进行文件比较。由于 kdiff3 是 GUI 程序,所以文件比较将会是一个一个进行的,关掉第一个文件比较的 kdiff3 窗口,才会显示第二个文件的比较窗口。

网友 sleetdrop 评论指出,如果使用基于 Python 的 Meld 作为 GUI 比较工具,那么不需要任何 wrapper,只要修改上述配置为:

diff-cmd = meld

即可。不可否认,这比 kdiff3 简便了不少,而且 meld 还支持在比较时编辑,这也是一个很大的优点。

FBI 终端登录主题

FBI Terminal KDM&GDM Greeter Theme

慵懒阳光下的北京虽然还有些乍暖还寒,随着穗穗掉落的杨花,春天还是到了。在这样美好又带有一点儿遗憾的春日里,我这样的宅男依然龟缩在带有落地窗的宿舍,凝望着楼下长长的北京正负电子对撞机,考虑我被辐射挂掉的可能性有多大。

下面是这样对生命深刻地思考之余的一个副产品:FBI 终端登录主题。某日看到了 Windows 下有一个很酷的 FBI Terminal 登录主题,在 gnome 和 kde look 搜索一下未果后,就决定自己做一个,产生了这个东西。谁知道在我费劲地搞出来它之后,才搜索到有类似的 Gnome 主题,不过我可以自我安慰的是它不能很好地支持我的电脑分辨率。

这是一款 Linux 下 KDE4 和 GNOME 桌面的登录欢迎主题,安装并选择它作为登录主题后,欢迎界面就会变成类似于 FBI Terminal 的样子,如图所示。其实我并不知道真正的 FBI Terminal 是什么样子,只是按照 Windows 下某款 FBI Terminal 主题进行的修改。不过依然很酷,是吧?

这款主题可以支持 KDM4 和 GDM,没有在 KDM3.x 进行过测试。目前这个主题可以支持三种分辨率:1024x768, 1208x800, 1280x1024,使用其它分辨率的用户可以按照宽高比选择相近的比率主题。

FBI 终端登录主题 for Linux 的下载页面是:http://share.solrex.org/misc/fbi_theme

另外,Happy April Fool's Day! :)

Kubuntu 9.04 KDE4 问题

这些问题也未必是 Kubuntu 的问题,很有可能是 KDE4 本身的问题。

1. .gtkrc-2.0-kde4 实际不能用。

GTK 的程序在 KDE4 下显示太难看了,尤其是菜单那块,整整突出来一个方块。Firefox 和 Thunderbird 还好,可以更换个主题啥的。像 Pidgin, scim 之类,那个难看呀,和 KDE4 的主题一点儿都不搭。

都说在 System Settings->Appearance->GTK Styles and Fonts 中选择 Use my KDE style in GTK applications 就可以了(需要先安装 gtk-qt-engine-kde4),但我发现一个很奇怪的问题。选择了该选项之后,是会在家目录下新建一个名为 .gtkrc-2.0-kde4 的文件,里面是 GTK 主题的设置:

# This file was written by KDE
# You can edit it in the KDE control center, under "GTK Styles and Fonts"

include "/usr/share/themes/Qt4/gtk-2.0/gtkrc"

style "user-font"
{
    font_name="DejaVu Sans"
}
widget_class "*" style "user-font"

gtk-theme-name="Qt4"
gtk-font-name="DejaVu Sans 9"

systemsettings 还提示需要重新登录 KDE 之类的话。但是一旦重新登录,这个 .gtkrc-2.0-kde4 就会被删除,无论把该文件的权限设置成啥样,然后 GTK 程序还是老样子。真的搞不清楚是谁跟这个文件有仇,见了它就删。

我登来登去实在没辙了,干脆直接把它改名为 .gtkrc-2.0,没想到 GTK 程序的主题立马 OK,根本不用重新登录。你说 KDE4 的方法和提示这不是害人吗?

PS: 我在另外一台电脑上发现,当先装 Ubuntu,再安装 kubuntu-desktop 时,那个 .gtkrc-2.0-kde4 是有作用的。

2. 用户帐户图片无法更改。

在 System Settings->About Me 中,提示说 Click to change your image,点击根本没用,会弹出来一个:Your administrator has disallowed changing your image. 甚至使用 root 权限,更改 root 用户的 image,也是这个提示。而 KDE4 目前没有提供一个像以前版本的 kcontrol 中进入管理员模式的按钮,所以我实在不知道该怎么办了。这个错误好像在 SUSE, Fedora, Gentoo 的邮件列表中都有报告,没看到有可用的解决方法。而且这个提示也太恶心,谁是 Your administrator?root 的 administrator 是谁?在哪里 disallowed 的?是 user privilege 不够吗?我深深地怀疑是不是 KDE4 目前没有实现这个东西,搞个提示唬人的。

PS: 我知道本文涉及到了 Linux 世界的两大战争:发行版之争和桌面系统之争,评论请就事论事,不要涉及这两点。