KeyNote 2.0 Development FAQ
Last updated: 21 May 2003
The latest version of this file is available at http://www.tranglos.com/free/knt2devfaq.html
When will KeyNote 2.0 be released?
As soon as it is ready! I am not being flippant; I simply cannot offer a reliable release date. Please keep in mind that this is a hobby project, that I'm working on a few other hobby projects
at the same time, and preparing the release of my first shareware project
. This, of course, in addition to my real-life work
. KeyNote 2.0 is going to be a huge improvement over the current version, which also means its complexity is an order of magnitude higher. If you're interested in seeing version 2.0 released as soon as possible, consider assisting me in the project.
Will KeyNote 2.0 be available in languages other than English?
At this time (May 2003) I have completed work on the localization engine which will be used in all new applications, including KeyNote. To see it in action, you can download Oubliette version 1.9
or later. The localization mechanism does not support double-byte characters, however, so some languages will be excluded. For more information please see the Localization forum
I want to help with developing KeyNote. What information is available?
- The main KeyNote FAQ (please read first!)
- KeyNote 2.0 "Help wanted" page: a general outline of areas where help is sought (programming, know-how, interoperability, design, graphics, testing, support...)
- * Problem spots: a number of very specific issues related to Delphi and Windows API programming which I am fairly desperate to solve at the moment. I've done my research, asked on all relevant newsgroups, bought books, but solutions to these problems elude me. These are major-priority issues. I'll appreciate any help, code, or suggestions.
- For graphics designers, a list of requirements, please pick what interests you most.
- KeyNote-dev mailing list for developers, designers and testers
What new features are planned for KeyNote 2.0?
In general, here is what you can expect:
- All features present in 1.x will be preserved, though some may take different form, have different names or be available through different UI elements
- Exception to the above: the "simple RTF" notes, i.e. notes which only have the RTF editor but no tree, will not be available. Their functionality can be easily replicated by having a tree with only one node, and hiding the tree permanently.
- The tree hierarchy will provide a lot of expanded functionality, including multiselection of nodes, improved drag-and-drop support, improved categorization of items, a number of new properties, an unlimited number of user-defined properties (declared as data types and values), column display, improved support for display styles, etc.
- Ability to handle several new data formats internally. Apart from RTF data, KeyNote 2.0 will be able to store and manipulate:
KeyNote 2.0 will be able to store all these data formats internally, as well as access them via extended "virtual node" capability.
- plain text: a separate control for editing plain text, more suitable than the richedit control for editing source code, HTML, etc. Syntax highlighting is a possibility but not a high-priority item (expect it in a version later than 2.0).
- HTML: an optional, embedded web browser (ActiveX control, either IE 5.x or Mozilla 1.x required) to view local and remote HTML documents. No wysiwyg HTML editing capability is planned for 2.0; the embedded browser will only display, but not edit, HTML content. Provision will be made to switch between a browser view and a plain text editor view, to facilitate editing HTML content directly in KeyNote.
- CSV: a simple grid (spreadsheet) control, suitable for storing and editing tabular data. May support simple formulas.
- image viewer: ability to store and display images in the following formats: ICO, BMP, GIF, JPG. Support for PNG may be added subsequently.
- Improved support for large files; ability to open files "dynamically", reading only the portion of data which is currently displayed. This will significantly improve memory use efficiency.
- RTF editor improvements, within the feature range supported by the standard richedit control, see the main KeyNote FAQ for more on this.
- Full keyboard and toolbar customization
- Expanded support for macros and plugins
- Localization support (ability to translate the interface)
- Miscallaneous features (not a complete list):
- Ability to create "shortcuts" or aliases to existing notes within the same tree, so that each note can be accessed in several places
- Category icons will be stored as part of a .KNT file, which will allow for more flexibility in handling them
- Templates at all possible levels: KNT file templates, notebook templates, note templates for each type (format) of a note. Templates will be able to store only the structure of an element (e.g. only the tree hierarchy), or both structure and data (tree and text)
- Editor enhancements: single-key editing (e.g. ability to cut or copy current word without selecting it first), ruler bar, proper tabstop handling, etc.
- Improved printing, including print preview
- Persistent navigation history, with ability to move "back" and "forward" not only within a single notebook (as in version 1.x) but between notebooks and files as well
- Searchable keywords for notes and notebooks
- "Virtual views" for the tree: ability to rearrange, filter or sort the tree structure without altering the actual structure of the file
- Expanded text and usage statistics, e.g. ability to view the most recently edited notes, notes on which the user has worked longest, or notes which have not been accessed in a long time
- Extremely flexible display of note properties, via tokens (similar to 1.x options such as "Default name for new nodes", but greatly enhanced)
- Ability to reload configuration files at runtime (manual edits can take effect without restarting KeyNote)
- Regular expression support in search commands
- Search enhancements: ability to store search results for later reuse (store only the search criteria, store index of links to search results, export search results to a new KNT file)
- Command-line switches to open a file and automatically navigate to a location inside it
- Ability to transfer data between two running instances of KeyNote
- Multi-line tree node captions (Windows NT/2000 only)
- Enhanced virtual nodes, including ability to use relative paths; limited support for remote virtual nodes
- Fully automatic numbering of nodes in the tree; ability to automatically re-sort nodes
- Clipboard capture enhancements: ability to annotate, modify or reject each captured clip
- possibly: Ability to synchronize two KNT files (reconcile differences)
- Enhanced support for styles, including preview mode in the style selector
Precautions to take when testing demos, prototypes, alpha and beta versions
First, never replace your existing 'live' copy of KeyNote.exe (or its associated files) with any demo version. Create a copy of your KeyNote installation and use the copy for testing, or install the demo version in its own, temporary folder as appropriate. Expect bugs, expect crashes, expect data loss. Never run any demo, prototype or alpha version with your personal data. Always create copies of your data files and work on the copies.
Will KeyNote use XML to store its own data?
No. I do not believe XML is a suitable format for the type of data KeyNote needs to store. The "human-readable" aspect of XMl does not apply, because RTF data (and other binary information, such as images, as well as HTML) would have to be base64-encoded for XML storage. Also, other formats can provide for much faster reads and writes than XML would. If you still want XML, feel free to develop a converter. I will provide help with regard to KeyNote's native file format, but with XML itself, you'll be on your own.
What about a database backend for storing KeyNote data?
Nope. KeyNote must be a self-sufficient, standalone application. I don't want to make it dependent upon any database package, even if it's free and open-source, especially that such packages are typically much larger and more complex to deploy than KeyNote itself.
Will KeyNote 2.0 support storing attachments inside .knt files?
Too early to say. It depends partly on what new file format is going to be used. If you need such functionality, you'll probably be better off with zip (or tar) files and storing hyperlinks to those files in KeyNote documents. Storing attachments (or embedding files) inside KeyNote's native data is being considered, but it's not a priority issue.
Is the current (version 1.x) file format documented?
Yes. Please download the KeyNote file format specification. The package includes detailed description of the file structure, additional notes and example .KNT files.
By far the best documentation is KeyNote source code. You can download the full source code (see below) and see how KeyNote saves and reads its files. The format is fairly simple and, depending on what you're trying to do, you may not need to access all the information in the file. The full source code is somewhat large, but you'll only need to look at three files: kn_FileObj.pas, kn_NoteObj.pas (separate routines for saving simple and tree-type notes), and kn_NodeList.pas. Please note that the current file format will change heavily in version 2.0; you may want to consider this before creating any tools that work with the current file format. (KeyNote 2.0 will of course be able to read 1.x files, so it's OK for third-party applications to create files in 1.x format.)
Where can I find information about the new (version 2.0) file format?
The new file format has not been established yet. When it happens, information will be posted to the -dev list and will be available here. Version 2.0 file format will be fully documented. Meanwhile, if you subscribe to KeyNote-dev, you can still have a say in what the new file format will be.
Where can I find KeyNote's source code?
Version 2.0 source code will be available from SourceForge
, but it does not yet exist. The current (1.x) source code is available here
Notes on new terminology
After a lengthy debate on keynote-dev and lots of excellent suggestions, the following terminology changes have been introduced:
- old: note, tab - new: notebook
- old: node (tree node) - new: note
KeyNote "files" are still "files", but this may change depending on what file format is ultimately chosen.
Will there be a Linux version?
* No, unless you write one. I have no knowledge of Linux programming and really no desire to learn it, sorry. (This should not be interpreted as a put-down of Linux. I simply do not have the time, and Linux is unsuitable for my everyday work and play, so I'll stick to Windows for the foreseeable future.) Further, in order to port KeyNote to Linux I would have to purchase Borland Kylix (the free version can only be used to create GPL-licensed applications, which KeyNote is not). I would gladly accept a gift of Kylix, but I probably wouldn't be able to make constructive use of it, anyway.
You may be able to run KeyNote (version 1.x) under Wine. If you have success that way, please let me know and, if possible, write a detailed How-To, which I'll post on the website.
Will KeyNote be ported to PDAs, such as Palm or PocketPC?
* Not by me, or not as freeware. The issues here are very similar to the issues related to a Linux port. I would first have to learn C (two to three years at least; you probably don't want to wait that long) and then I'd have to purchase development tools for PalmOS (or PocketPC). If you'd like to work on a PDA port yourself, I'll do my best to help you on the KeyNote/Windows side, so please let me know if you're seriously interested in it.
Will KeyNote 2.0 support Unicode?
No. Delphi has no support for Unicode, which means that I would have to create from scratch all VCL controls that display text, no matter how simple (TEdit, TCheckBox) or complex (TListView). A freeware set of Unicode-enabled VCL components by Troy Wolbrink is available here
, but KeyNote uses a lot of customized controls, which add functionality to standard VCL widgets. If I were to use Troy's set, I would again have to re-create all the added functionality. In other words, here's a job looking for a volunteer :-)
Will the rich text editor in KeyNote 2.0 support headers, footers, columns, tables, on-the-fly spellchecker, footnotes, endnotes or other advanced editing features such as those in Word?
KeyNote's RTF editor can only support the range of editing features which are built into the standard WIndows richedit control (riched20.dll). Please read the main KeyNote FAQ
Will KeyNote 2.0 have its own spellchecker?
* At the moment, it is unlikely. I have yet to investigate a number of options, such as hooking into the open-source ispell engine.
Will KeyNote 2.0 be able to display more than one note at the same time? Will I be able to see or edit two notes (or nodes) simultaneously?
The existing interface (tabs plus trees) makes it rather cumbersome to add yet another layer to the UI. Also, there are serious issues with preventing users from editing the same note in two instances of an editor at the same time (much the same as editing the same file in two instances of KeyNote). I'm investigating the options here, but it is not part of the current design.
Will KeyNote 2.0 support concurrent access to files? Can several users read and write the same file at the same time?
* Unlikely. Such a facility requires a very complex solution, beyond what I can take on at the moment. Of equal importance is the fact that KeyNote is targeted at individual users, rather than corporate / network environments. The amount and complexity of the work involved here do not justify, in my view, the relatively small number of cases where concurrent access would actually be used.
Will there be a web interface to KeyNote?
* Please contact me if you can provide assistance in developing it.
Important addresses and contact information
* If you're a programmer and would like to help develop any of the design elements or mechanisms marked with a red asterisk, I will appreciate if you contact me: but please do so only if you're prepared to write actual code or offer programming expertise.