TkDesk 简介
TkDesk 由 Christian Bolik 在过去几年中开发,目前是 Unix 和类 Unix 环境下最强大的桌面管理器之一。Christian 在他的文档中指出,该系统是专门为 Linux 设计的,这也是我主要使用它的地方。但是,我也在 AIX 下成功使用了它,并且在 Solaris 和其他 Unix 版本下的报告也都是正面的。
本文不提供用户手册或具体的自定义技巧(您可以通过阅读 TkDesk 出色的文档来学习),而是介绍我认为 TkDesk 如此有用和重要的 Unix 工具的原因。例如,今天早上我通过 xdm 登录到我的计算机。我只编写了 TkDesk 和一些实用程序应用程序(如 xautolock 和 xsysinfo)的自动启动脚本。在看到 TkDesk 启动屏幕后,我看到了 AppBar(见图 1)和几个文件浏览器(见图 2),它们的位置与我上次登录时离开的位置相同。从邮箱图标中,我看到我有电子邮件。点击邮箱启动了 exmh,我阅读了昨天以来收到的邮件。有人在一个 CGI 脚本中发现了一个错误。我估计找到问题并修复它不会花费太长时间,所以我启动了 XEmacs 和 Netscape,同样是通过点击 AppBar 中的图标。我将其中一个文件浏览器指向包含 CGI 脚本的目录,另一个指向开发目录。通过按住鼠标中键并拖动,我将脚本的副本复制到我的开发目录中(见图 3)。然后,我将此副本拖到 AppBar 中的 XEmacs 图标上,这会将脚本加载到我之前启动的 XEmacs 会话中。查看代码后,我意识到我可能颠倒了我调用的 CGI 模块函数的参数。点击 AppBar 中的 Library 图标上的鼠标右键,显示我的自定义文档菜单(见图 4)。我选择了指向我本地安装的 Perl 文档的参考。一个 Netscape 窗口打开,列出了目录,我点击了 cgi.pm.html 链接。看到我的错误后,我进行了必要的更改。我还需检查另一个 Perl 脚本。这次,我没有将脚本拖到 XEmacs 图标上,而是单击文件一次以选中它,然后选择我在 XEmacs 菜单下配置的“Open File New Frame”(在新框架中打开文件)。这会创建一个新的 XEmacs 窗口来显示脚本。
在仔细检查完这段代码后,我最终必须启动一个 shell,以便我可以离线测试我对脚本所做的更改。点击文件浏览器列表中代表我的开发目录的条目上的鼠标右键,会弹出一个弹出菜单,就像在 Windows 95 或 Windows NT 4.0 中点击鼠标右键会弹出一个菜单一样。我选择“Start XTerm Here”(在此处启动 XTerm)选项,然后会打开一个 XTerm 窗口,其工作目录设置为此位置。当我对我脚本的行为感到满意时,我使用 su 切换到 WWW 管理员帐户并安装该脚本。不幸的是,TkDesk 没有为我提供一种简单的方法来完成最后一步——至少目前还没有。
最后,出于好奇想知道是否有人正在访问 Web 服务器,我运行了 netstat 命令。但是,我不是从命令行运行它。我选择了我设置在 System Statistics(系统统计)图标下的“netstat”选项,它会打开“Periodic Execution”(定期执行)工具,运行 netstat 命令(见图 5)。Periodic Execution 工具(在本例中设置为每 30 秒运行 netstat)是 TkDesk 提供的几个通用工具之一。
这个场景只演示了我经常使用 TkDesk 桌面管理器快速高效地执行的各种任务中的一小部分。我认为这个描述很重要,因为这不是大多数人认为与 Unix 交互的方式。作为一个长期的 Macintosh 用户,我一直坚信,对于我在计算机上进行的大多数活动来说,设计良好的 GUI 比命令行更有效率。不幸的是,在 TkDesk 出现之前,我没有找到任何 Unix 文件管理器能让我感觉比在 shell 中工作更有效率。NextStep 可能是个例外。这很合适,因为 TkDesk 的外观和感觉很大程度上借鉴了 NextStep Dock 和文件浏览器。当我上次使用 NextStep 文件浏览器时(大约在 NextStep 2.0 时代),它在处理非 NextStep 本地文件和应用程序方面做得不好。从那时起,情况可能已经发生了变化。
没有高效桌面管理器的原因有很多,但其中最主要的原因是处理 Unix 环境相对无政府状态的困难。单片式 GUI 桌面管理器只有在定义良好的 API 的上下文中才能很好地工作。Macintosh Finder 和 Windows 95 及更高版本中的 Windows 资源管理器可以依赖几乎每个应用程序都以相同的方式支持基本操作,例如打开文件。显然,Unix 不包含这样的 API。对于大多数 Unix 专家来说,这提供了一种灵活性,被认为是优势,而不是缺点。
TkDesk 没有在这种无政府状态下崩溃,而是能够有效地与之协作。与其他单片式文件管理器不同,TkDesk 几乎完全用 Tcl/Tk 编写。这意味着 TkDesk 不是依赖于特定类别的过程来处理文件,而是可以通过引用一段 Tcl 代码来对每种文件类型做出不同的反应。这方面的一个例子可以在 TkDesk 如何处理 XEmacs 和 Netscape 时看到:当我双击以 .html 结尾的文件时,TkDesk 使用 Netscape-Remote 扩展将文件加载到 Netscape 中。但是,当我在 XEmacs 图标上拖动同一文件,或者选择我添加到与 HTML 文件关联的弹出菜单中的 XEmacs 选项时,TkDesk 会调用 gnudoit 函数,向 XEmacs 发送加载命令。将一组文档拖到 Netscape 图标上也同样有效,因为一个小型的“foreach”循环会将操作应用于每个文件,从而为每个文件弹出一个 Netscape 窗口。这种将 Tcl 代码块封装在图标和菜单后面的技术被用来定义 TkDesk 的大部分行为。由于这些代码块都可以在许多 TkDesk 配置文件中访问,因此更改 TkDesk 的行为既快速又容易。
我认为理解 TkDesk 的最佳方式是将其视为一种通用的文件选择器。TkDesk 为您提供了一个简洁直观的界面,用于将特定命令应用于不同类型的文件。TkDesk 支持的内置命令是您期望从任何完整的文件管理器中获得的操作类型:复制、删除、移动、重命名、链接和符号链接。与任何有自尊心的桌面管理器一样,删除命令可以用来将文件复制到“垃圾箱”中,然后再永久删除它们。
文件的类型是通过将其与全局模式匹配来确定的。一个配置文件 FileTags 文件将全局模式映射到描述文件在文件浏览器中外观的图标、字体和颜色。另一个配置文件 PopUps 文件将全局模式映射到 Tcl 命令列表,当用户用鼠标右键单击文件时,这些命令将可用。
这种设计允许您通过匹配文件或目录的扩展名(就像在 Windows 下一样),将特定的菜单选项、图标和其他行为与文件或目录关联起来。但是,它也允许 TkDesk 以特定的方式对其他类型的文件模式做出反应,例如 Emacs 检查点文件、README 文件和 Makefiles。有了 TkDesk,我现在可以解压缩源代码发行版,运行 configure 脚本并构建系统,而无需打开命令提示符。一些可以被认为是 TkDesk API 的 Tcl 函数使编写这些代码片段更容易和更一致。一个函数用于在后台运行命令,并在程序启动和退出时在文件浏览器的状态栏中显示通知。同一个函数将此命令添加到命令历史菜单中。一个函数允许您在状态栏中显示您自己的消息。其他函数允许您请求确认或输入字符串,在内置编辑器中显示程序的输出,播放声音,在定期执行工具中启动命令等等。“Local”配置文件甚至在您希望编写自己的函数以供其他配置文件使用时提供(我相信本文的大多数读者迟早会感到有添加自己函数的冲动)。
虽然 TkDesk 的核心是 AppBar 和文件浏览器,但也提供了一系列较小的工具。我最喜欢的是方便的帮助查看器,它可以解析 Linux HOWTO 文档的文本表示形式(见图 6)。初始默认配置之一是全局模式,用于识别 gzipped HOWTO 文档,解压缩它们并在帮助查看器中显示它们。
另一个工具是内置的文件信息框,它提供了一种快速查看任何给定文件的属性、更改文件的访问模式、“触摸”文件等等的方法(见图 7)。内置编辑器与 Windows 记事本或 Macintosh TeachText 相当,并提供了一种快速查看和扫描文本文件的方法。find file 工具将 Unix find 命令的各种选项封装在一个易于使用的对话框后面,包括通过 grep 过滤所有找到的文件。正如您所期望的那样,find 命令的结果显示在一个列表中,该列表提供对文件浏览器中可用的相同弹出菜单的访问(见图 8)。
尽管有如此好评,但 TkDesk 并非没有缺陷。最明显的抱怨是它的速度。人们经常注意到,由于幕后解释了大量的 Tcl 代码,操作速度会减慢。我通常选择不在文件浏览器中显示图标——更新大型文件列表中的图标通常需要太长时间。但是,这种情况很可能很快就会改变。Tcl 7.6 和更早版本在内部都基于一遍又一遍地替换字符串。虽然这允许设计一个非常简单的解释器,但它确实会在频繁执行的代码中造成性能损失。Tcl 8.0 有一个内部字节码解释器,并提供了与 Perl 相当的速度。不幸的是,TkDesk 用 Tcl 的面向对象扩展 [incr tcl] 编写,但 [incr tcl] 尚未移植到 Tcl 8.0。[incr tcl] 移植到 Tcl 8.0 的工作正在进行中,可能会在本文发表时完成。一旦 [incr tcl] 与 Tcl 8.0 一起工作,我们可以预期 TkDesk 的速度会大幅提高。
我希望 TkDesk 不是 Unix 尤其是 Linux 的 GUI 桌面管理器的最终版本。其他几个项目,如 K 桌面环境和 GNUStep,都显示出很大的希望。正如 TkDesk 目前所展示的那样,我认为 GUI 设计的未来在于将这些项目提供的窗口小部件与灵活的脚本语言(如 Tcl、GUILE 或其他 Scheme 变体、Python 或一些尚未发明的脚本语言)联系起来。GIMP 项目的成功是这种类型设计成功的另一个证明。然而,就目前而言,TkDesk 是我桌面的王者。
