Home News Screenshots Documentation Downloads Patches Related Links

Download Current Version: tkdesk-2.0.tar.gz

TkDesk Needs Developers!

TkDesk, like any free software project, cannot survive without the support of developers who use it, enjoy it, and want to improve it. To contribute your TkDesk-related coding efforts, simply email your changes to me. Maybe we'll even get to argue about them for a while before they get included. That's always fun...

Please note that we can always use help with documentation, translations, etc., so you do not have to be a programmer to contribute. Please do not be afraid to volunteer your time and skills, whatever they may be.

Below is a collection of features we'd like to see added to TkDesk. A few are already being explored. Most are still in the "wouldn't that be nice..." stage. If you see something you'd like to work on, please let me know. It's not required, of course, but we'd like to avoid a duplication of effort. Similarly, if you've thought of some feature you'd like TkDesk to have, let me know. Perhaps we'll argue about it for a while before it gets put on the list. That's always fun...

Speaking of arguing... er, developer communication that is... There's a TkDesk mailing list just for developers. You can subscribe here: https://lists.sourceforge.net/lists/listinfo/tkdesk-code. To post questions, updates, polite arguments, etc., send email to tkdesk-code@lists.sourceforge.net (please subscribe first).

TkDesk Development Roadmap - Release 2.x

I'm working on a plan for future TkDesk releases, starting with 2.0, based partly on items from the wish list below, and partly from whatever ideas pop into my head on any given day. Suggestions are always welcome.

Version 2.0

  • Drop support for Tcl/Tk versions < 8.0 - Continuing backwards compatibility is going to limit adoption of the many new features of Tcl/Tk 8.x and turn into a maintenance nightmare.
  • Drop included Itcl and BLT source from the distribution.
  • Clean up autoconf stuff. Add more support for packaging builds, e.g. tar, rpm, apt, etc.
  • General code cleanups - Prepare for more advanced features, e.g. virtual file system. Also, review newer features of Tcl/Tk and take advantage where possible.
  • Mouse-wheel support - Patches have already been contributed.
  • ???

Version 2.1

  • More code cleanups, as needed.
  • Virtual filesystem support - Ouch. This would be a big win.
  • Alternative drag-n-drop mechanisms, e.g. gnome, kde. Another big win.
  • Modularized AppBar button configs (plugins)
  • Integrated Dialer GUI - I'd really like this...
  • ???

Version 2.2

  • ???

The TkDesk Wish List

Item Notes

[These notes are mostly Christian's, but I've made some changes here and there, plus added some new items, so blame me for any wrongdoing. My personal view of adding features to TkDesk is that we should adopt the emac^H^H^H^H kitchen-sink strategy. I never liked a feature I didn't see...]

Restructure TkDesk

Like every self-respecting software that's older than a couple of months, TkDesk is not very well structured anymore. In fact, TkDesk never was as well structured as it probably could be, and that is mainly to my ignorance of using the object-oriented possibilities itcl in a more consequent fashion. This now creates problems e.g. with virtualizing the file system to be able to browse tar archive, ftp services etc. just like the local file system. So the goal of this item really is to get TkDesk into a cleaner and more modular structure, with virtualizing as much as possible.

Virtualization can be achieved by creating a class hierarchy, that allows for building on base classes providing functionality that is used by other parts of TkDesk. For example:

  • Have a basic FileView class that can be inherited by a number of different file classes implementing mega widgets or windows for providing different views on the (virtual) file system. Such as:
    • ListView, BrowserView as present in TkDesk today, ListView could also have a multi column capability and the ability to selectively display more detailed information,
    • TreeView a la MS Explorer,
    • IconView a la Mac, Explorer etc.,
    • combinations of those.
  • A ViewWidget class to be used by the file view windows, and providing functionality such as the menu that's available in the file listboxes today (giving access to the "Mask" dialog etc.). The following view-specific mega-widgets could inherit from this class:
    • TextListbox, like the dsk_Listbox class in todays widget,
    • IconCanvas, a class implementing a mega widget for displaying different sized icons,
    • TreeCanvas for implementing a tree widget
    • etc.
  • Have a DataSource base class that basically provides the interface to the virtual file system. Specific file system class could inherit from this, e.g.:
    • FileSystemSource, the "local" file system (including NFS, AFS, DFS, etc.),
    • FtpSource, providing transparent access to FTP servers,
    • TarFileSource, allowing access to tar file contents,
    • classes for anything with a tree like structure are conceivable, e.g. mail folders, news servers, possibly HTML files, etc.
  • A ViewController class controlling updates of the file system views, opening files/directories, displaying popup menus, and basically handling any user interaction with the different views.
  • Transform other parts of TkDesk into classes where applicable, e.g.:
    • The appbar, with classes AppBar and AppBarItem which could be inherited by classes AppBarButton and AppBarSpecial to implement appbar plugins. It would probably also be nice to be able to have multiple appbars (i.e. instances of AppBar).
    • The Editor (already a class today), with a class EditBuffer to handle the editor's buffers in a nicer way.
    • Maybe a base class for the config files (until these are superseded by GUI configuration, anyway).

Virtual File System

This is definitely the item most people ask about (whether it's available, not whether they should implement it, unfortunately). This should probably be based on work done for the restructure item to have a clean interface for the virtual file system (VFS).

Most every other available file manager seems to have something like a VFS implemented, or at least something to be able to transparently access an FTP server. As most of these are released under the GPL we should be able to take a close look at them and see what we can use for TkDesk (of course only after kindly asking the respective developers). Some of these include:

  • FileRunner: Written in pure Tcl/Tk, very nice FTP support; especially ftp.tcl seems to be easy to use with other applications.
  • X-Files, another Tcl/Tk based file manager, planned to have a VFS and transparent FTP access in 2.0 (currently in beta).
  • Midnight Commander, a C-based file manager with a full fledged VFS. I suppose it'd be easier to implement a Tcl-based VFS for TkDesk but this code may still be useful for reference purposes.
  • Miklos Szeredi has written a VFS C-library that could prove to be useful as well.

This item consists of two major parts: The VFS interface that's used outside of the VFS and provides methods for listing, traversing, copying, moving, deleting, opening etc. FS objects, and the various implementations for the local FS, tar files, rpm archives, FTP servers etc.

Plugin AppBar Button Configuration

Modularize/Generalize AppBar button configs to allow for downloadable config "plugins," i.e. tcl-code snippets that can be stored in separate files and sourced during init. The point being to simplify the process of collecting, providing, and installing user-contributed button configs.

This might help to simplify the adoption of more GUI-based configuration.

Probably leads to some security concerns...

GUI Configuration of TkDesk

Another item many users ask for. Having to edit flat configuration files with Tcl code is not very user-friendly at all, but it's beein the easiest way for configuring TkDesk from a programmer-standpoint, as these files can be simply sourced into TkDesk.

This item should try to get rid of the config files as the primary place of user configuration and should replace them with nice and friendly GUI panels, arranged in a notebook or tree (like Netscape or MS do). The challenge is that these panels should be as simple as possible yet retain the power that direct editing of the config files provides.

The following areas of TkDesk can currently be configured:

  • General and file-specific font, color, and sound settings
  • Contents of "Commands" and "Directories" menus
  • Appbar layout and contents, including cascading menus
  • File-specific popup menus
  • General and directory-specific button bars
  • Action to perform when opening specific directories
  • Numerous minor options
  • Any number of additional user-supplied procs
It will probably be a challenge to transform all of these into GUI panels, but this would certainly improve TkDesk's usability significantly.

Additional File-System Views

The number of views on the file system TkDesk currently provides is very limited. Building on the work done for the restructure item additional views should be implemented plus the current ones enhanced.

Additional views should include:

  • A tree view of the file systems directory structure, with another view (which also shows files) to the right.
  • An icon view of a directory's content (maybe one with large, one with small icons).
  • A multicolumn list view (i.e. one which wraps at the lower border to the next column to the right).
  • A details view, similiar to today's but with configurable detail levels.
  • A multi-listbox view like TkDesk's browser window today, but with uncoupled/disconnected listboxes.

Improve Drag'n'Drop

BLT's drag'n'drop which is used by TkDesk is not very verbose and not in very wide-spread use anymore. It's probably a good idea to evaluate whether it's possible to to replace it with a different mechanism to improve interoperability with other mechanisms, such as:

Alternatively we could just wait for Tk to get its own DND mechanism (apparently planned for Tk 8.2), but it's not clear whether this would be able to exchange data with non-Tk apps.

NLS'ify TkDesk

This item's task would be to remove all hard coded text message strings from TkDesk's Tcl library, save these strings to a language specific message catalog, and use some indexing mechanism to reference them from the Tcl library, e.g. associative arrays.

Translate User's Guide to other languages

Hm - not much to say about this item. Work for this would "simply" involve translating the user guide's source file guide.sgml to another language. Note that this file is in SGML format and uses the LinuxDoc DTD, but should still be fairly easy to translate as all SGML directives are wrapped in < and >.

The source file for the User's Guide can be found in the doc subdirectory of the distribution, and may also be downloaded here: guide.sgml. To download click the right mousebutton over the link and select "Save Link As...".

Look into tkgoodstuff

TkGoodstuff contains some nice features which would be useful for TkDesk as well, e.g. the ability to "swallow" other X applications and to communicate with FVWM. Apparently TkGoodstuff is no longer maintained, so it might even make sense to merge it into TkDesk.

Transparent icons

Many people have asked why TkDesk cannot display transparent icons for the desktop items. The reason is that to achieve this the SHAPE extension of the X server would need to be used, and I know far too little about X programming to be able to get this functionality into Tk (plus, I didn't car too much to be honest). This might even have been done already, but I didn't look very hard yet.

Wizard-button for selected strings

The idea here is to add a button to the Appbar (or anywhere else) that would parse the current X selection and either invoke an appropriate action or present a menu of actions that could be used on the current selection. E.g., selecting the string "#include <stdio.h>" and clicking on the wizard button could open a new editor window displaying /usr/include/stdio.h.

This is inspired be the ACME system, so it might be interesting to look what these folks did.

NeXT-like icon shelf

It'd be nice to have a sort of "shelf" in the browser windows where files and directories could be moved for quick access, similar to the NEXTSTEP file manager. This shelf would probably need to be scrollable, and should use large icons. It should also be possible to expand and collapse the shelf.

Improve "Find Files" dialog

The "Find Files" dialog could be improved such that it provides access to the functionality of the "locate" command. It would also be helpful if the matches found after a string/regexp search would be listed underneath the respective file name in the results window. Double-clicking on these should open an editor window at the corresponding line.

Make file list boxes "paned"

We should use "paned" geometry management of the file listboxes in the browser window to allow individual width changes of each of these. There are quite a few Tcl libraries available that provide this functionality, so hopefully this shouldn't involve too much work.

Site-wide/LAN-wide configuration

Currently TkDesk uses only the configuration files found in each user's ~/.tkdesk directory. This makes site-wide or domain-wide configuration impossible. This should be changed, somehow.

E.g. TkDesk could be changed so that on initial invokation it does not copy the default config files to ~/.tkdesk but merely symlinks them. Only when a file really is to be changed the file is copied. For this approach a higher granularity of config files would certainly be useful.

This item obviously has dependencies on the GUI configuration item.

Support Wheeled Mice

TkDesk should support the scrolling of file lists, etc., with mouse wheels. Tk has support for this now, so the functionality should not be hard to implement.

Integrated GUI Dialer

TkDesk already has built-in dialup support, but the config. is awkward and the functionality is limited. I'd like to see a gui dialup configuration with more features and connection monitoring. Perhaps integrate some GPL'd dialup app?

Integrated IMAP client

Why not? There are already tcl/tk-based clients available. We might snarf one of them, if the licensing allows.

Maintainer: J. Chris Coppick

SourceForge Logo

Copyright 2001 J. Chris Coppick - Please do not reproduce without permission.