Notebook App

Notebook is one of several Personal Wikis currently available. It allows a single user to easily create, edit, browse, search, and link together a collection of pages on their own personal machine. You can extend Notebook from within the application itself in the Tcl language.


Development of Notebook 3 is currently stalled. However, the parser for poortext(5), the Notebook 3 Markup language, and poortext(n), the widget that renders it, have both been extracted from the Notebook 3 code base and made available for general use in a standalone library called Glue, along with a number of other useful tools.


Version 2.2.0 is available at https://github.com/wduquette/notebook . The main reason for its existence is as a testbed for Quill. EMJ has run it in Androwish with only minor issues, the most important of which is that it needs to be more easily adaptable to different screen sizes - (2016-08-16) actually fixable by changing the Scaling in Preferences and adding in one line to make every notebookbrowser toplevel full-screen.

Version 2.1.3 (the current development version) is now (20050530) available at the Notebook Wiki, http://notebook.wjduquette.com/
(Archived version: http://web.archive.org/web/20160608075720/http://notebook.wjduquette.com/ )

Version 2.0.3 (the current stable version) is now (1/11/2004) available at the Notebook Wiki, http://notebook.wjduquette.com/

See http://web.archive.org/web/20040214182532/http://www.sitepoint.com/article/1241 for an article that describes Notebook V1.1.

Notebook Mailing List

There is now a Notebook discussion list; see the instructions at http://notebook.wjduquette.com

Changes in V2.1.2

  • This is a development release
  • Lots of bug fixes
  • Support for inline images
  • Better line-break markup

Changes in V2.1.1

  • This is a development release
  • Export an entire Notebook to HTML
  • Native OS X Application!
  • New markup and commands

Changes in V2.1.0

  • This is a development release.
  • Should support international character sets.
  • Exports individual notebook pages to a number of formats, including HTML.
  • Many new Notebook Commands.
  • New markup.

Changes in V2.0.3

  • Fixed bugs found in V2.0.2; see [L1 ] for more details.

Changes in V2.0.2

  • Fixed bugs found in V2.0.1; see [L2 ] for more details.

Changes in V2.0.1

  • This is a BETA release.
  • Many new Notebook Commands
  • Improved usability, especially in the page editor
  • Open multiple windows on the same or different notebook files
  • Many, many other things.

Changes in V1.1

  • Some new Notebook commands: newpage, pageset, backpage
  • New strikeout markup tags
  • Some bug fixes.

Changes in V1.0

  • Undo/Redo in the editor
  • Standalone Windows executable
  • Starkit-based distribution
  • New Notebook commands

Ancient History

WHD: I was playing with Wikit's stand-alone Tk GUI, which is way cool, and I thought it would make a great personal notebook if only it were designed to be a great personal notebook instead of a Wiki. So I start developed my own application from scratch; here's what I said about it early on:

  • A single user Tk application; a pleasant user experience is the goal here, not creation of a web application. In fact, it isn't a web application.
  • A markup convention similar to but different with Wikit's. I think it's an improvement, naturally. :-)
  • Embedded macros in notebook pages, using TclLib's "expander" (see below). Include any desired text or the output of any program Tcl can exec in any page. (Quote of the day on your home page, for example.)
  • Magic Buttons in notebook pages. Like links, but execute any desired Tcl code.
  • Easy creation of "web log" pages, except that of course this isn't on the web. Decide what you want your log to be called (e.g., Daily Log). Create a page with that name, and put this text in it, in the first column:
     [@logpage@]
  • Searching, Indexing, and Recent Changes
  • Page maintenance tools: Delete and Rename. Renaming a page also updates all links to that page.

Some things on my wish list:

  • More page maintenance tools: copy pages within a Notebook, or from one notebook to another.
  • A user-configurable and extendable editor
  • Browsing multiple Notebooks at the sametime.
  • Importing text into Notebook pages.
  • Exporting Notebook pages (one or all) to plain text, HTML, or Notebook markup files.

And on and on and on.


User Wishlist

If there are features you'd like to see, feel free to add them here.

Wishlist # 1: Starting Notebook maximized on Windows

WHD: You can do this by creating a shortcut to start Notebook and editing the shortcut's properties.

Wishlist # 2: Hyperlink HTTP support

Either by displaying pages directly or by invoking the default web browser.

WHD: Invoking the default web browser is difficult to do in a cross platform way. With respect to displaying pages directly, see Duquette's First Law. I won't say it can't be done, but it would require turning Notebook into a web browser, and that's quite a lot of work.

AK: I just came accross the same situation, me wishing to have a link on a notebook page to some external website. Just Invoking browsers is enough for me from my POV. However also note Detlef Groth's work on a help browser, using tkhtml. Ok, this does introduce platform dependencies as tkhtml is a C package. Well, as I said, just opening the system browser is good enough for me.

Wishlist # 3: Reaping" capability, so this wiki's pages could be easily imported.

WHD: This is doable, but it's difficult to do in general--every Wiki has its own flavor of markup. However, it should be possible to write this sort of thing as User Code.

Wishlist # 4: Dividing the notebook into different pages and not having a huge single file

The pages would be created inside a notebook sub-directory called Pages. Ex: we write a notebook called: To do list. All the pages would be stored in c:\Notebook\To Do List\Pages.

WHD: I regard the single file as a feature; a notebook is a single document, not a collection of documents. Storing the notebook as many files would slow down execution considerably, especially searches. It would be easy enough to export a notebook's contents to a bunch of text files, though.

unperson: Will that be optional in the preferences in the next version? This is a very important feature for those who want to print pages, among other things.

WHD: The next version will likely have the option to copy a page to the clipboard with nice text formatting, and to export a page to a file with nice text formatting. There might conceivably be an option to do a bulk export as well, but really it's easy enough to write User Code to do that.

Wishlist # 5: For the Windows version, reintegrate the copy, cut and paste on the right click of the mouse.

WHD: This is easily done, though it's not a case of "reintegration"; this is simply a feature I'd not implemented.

Wishlist # 6: Simplify the mark-up.

Since we are not on a browser, why have HTML sort of mark-up? Like bold <b> </b>; isn't it a bit too complicated? Unless HTML could work. In this case well ....

WHD: Wikis use a variety of weird markup for bold, italic, and so forth, and I don't like any of it--that was one of my reasons for writing Notebook, to devise a markup I'd be willing to live with. Also, I've got more markup types than are easily represented by the standard wiki methods at method. I've got bold, italic, bold-italic, monospace, small type, and header styles all using the same style of markup, and they combine in logical ways. When I added strikeout <x>...</x>, it followed the same pattern as the others, and I didn't need to search for new characters to use.

unperson: Well I do tend to agree on this one after all. HTML is becoming so mainstream that most people will know your conventions right away. I also agree that on some wikis there is some weird mark-up.

Wishlist # 7: Align the first character of the page title one space on the left.

WHD: Why?

unperson: Symmetry! It looks weird unaligned! But I guess we could get used to it!

Wishlist # 8: Change the date order.

The date order is now the month, the day and the year. Very confusing. Could we have a choice of date format in the preferences. The best would be the day 05 the month with 3 letters Nov + the year 2003: 5 Nov 2003 instead of 11-3-03. Much more legible!

WHD: It all depends on what you like, I suppose, which is why they call it a preference. Noted, but it's low priority compared to some of the other changes I need to make.

Wishlist # 9: Just for info, check the calendar feature on http://c2.com/cgi/wiki?InnovativeWikiFeatures (on the bottom).

You click on a date on the calendar and a wiki page is created with the date. unperson

Wishlist # 10: Also just for info, please also check # 2 on this list at C2: the wiki trail. This is a very interesting feature found in TK Outliner. unperson

Wishlist #11: Publish the pages in a wiki website - You click on Export, then you enter the wikisite URL, your login and password, and all the pages are uploaded. Simple like that. Futurely, the user could be warned about other user's modification while he/she worked offline, and asked about what to do then (merge? diff? overwrite changes? don't apply new version?). (Fabricio Rocha, 09-Jun-09)

Wishlist #12: Modern & Ancient Greek character support - Version 2.1.3 should be supporting international characters, but whenever I try to input greek chars, they show up as what looks like Chinese characters. (~~~)


User Supplied Patches

Notebook App - User Supplied Patches


Useful User Code Snippets

Notebook App - User Code Snippets


Notebook Bugs

If you find a bug, either e-mail it to me or post it on the Bug Reports page at the Notebook Wiki, http://notebook.wjduquette.com .


User Comments

Rohan Pall - Cool program! I've been using it and I like it. Seems pretty stable so far. I've longed for a program like this for a while, but haven't had the time to do it. I used knotes for a while, the kde thing, but I wanted something that I could reprogram. This fits the bill. Thanks.


LV wonders - as you think about evolving your program, keep that programmability aspect alive. For instance, you say add some code to turn it off - instead, consider allowing someone to decide. Frankly, with lots of pages, I would want narrowing down even more. Another thing that I always like to encourage in tools like this is to consider a comm/tk send interface, so that the tool could be used by other tk applications.

WHD replies -- Programmability is a large part of what Notebook's about; the tricky part is defining (and then documenting!) a clean API that code embedded in pages can use to customize and extend the behavior of the tool as desired. Version 0.8 (currently in development) adds a "User Code" page that's loaded automatically at load time, and thereafter as the user directs; it's a place to define new commands. But even now, the extendability is interesting. The "Index" page is simply a page with the embedded command "pageIndex". If you want an index of just the pages with Tcl in their names, create a page and use the embedded command "pageIndex *Tcl*". And then there's the Home page in my own notebook that verifies whether the notebook has been checked into CVS or not...and creates a button to check it in if not.


July 17th, 2002

Hey Will, you've got a great program there. I really enjoyed using yours, so I wrote my own from scratch. It doesn't have many features yet, but in time, who knows ;) Maybe we can trade ideas sometime. Oh yeah, the code for the link hiliting is in there... you might have to dig though ;>

Hmmm. I don't know whether to be flattered, or.... Hmmmm. :-) -- WHD

Yes, I know the feeling! I've had several "I like it so much, I wrote my own" reports over the past years (several projects, not just this one, btw). Let's face it, we all do it. It goes with the territory, I s'pose. Which is yet another reason to hammer on modularity IMO: re-coding can be good, as learning experience, but also as "2nd try works better" effect. If we just focus on implementing ideas in a modular way, then maybe, sometimes, things will turn out to work well in ways never anticipated. IMO, multiple implementations can be a positive thing, as functionality gets turned more and more into isolated and re-usable components. Well, my .02... -jcw

WHD: Yes, I'm completely aware of the irony of the situation. :-) And actually, I suspect that Ro's motivation is the same as mine: "Gosh, this is fun, and it would be even more fun to do it all by myself!" I've been a programmer for many, many years and I've seldom had reason or opportunity to write a real standalone GUI application; and I tend to learn best by doing. I'm learning an amazing amount.

Well, if it's any comfort... I wrote Wikit in much the same way :) - if we can end up with at least some pieces which are good enough to be re-used, it would be great. With the understanding that re-use is not something one imposes, but something that happens because people decide they WANT to. I see the fact that people re-write stuff I did as being proof that it was not yet good enough (in some sense). -jcw

AK: I agree with learning by doing. I am right now deeply in the bowels of the Wiki formatter, and the rewrite of the conversion of markup 2 internal rep gave me really nice insight into the power of tcl for parsing any language ... The new code uses string map and regsub to pre-tokenize a string, inserting marker characters, and then split on the marker to listify, i.e tokenize. The new stuff is nearly 2 times faster. And I wondered if I could use the same technique to tokenize C sources. I believe it is possible. Together with yeti this could make one heck of a general purpose parser framework.

WHD: Just a thought--I found that it's very useful if the internal rep contains enough information to rebuild the input exactly as it was. For example, renaming links automatically requires parsing the page source; you can't be sure that text in brackets is a real link otherwise. And it's only polite when making changes like that to leave the page source looking as much like it originally did as possible.

Good point. The only reason I did not (at least not back then) want to go that way, was out of fear of making mistakes. By storing the original text, one never needs to worry about losing entered data, even when the rendering system is buggy. Tricky trade-off... -jcw

WHD: I only do it when renaming links in pages.

Ro: In mindweb I made two text widgets. One is the source text widget, and the other is the render text widget. The source text widget never gets modified programmatically, what ever you type in is always the same every time you look at it (it doesn't have the old "grow by one newline every time" bug). I never modify the source text, but I will have to when I add the rename function. But this seems pretty straightforward to me, just a case insensitive regsub, right? Maybe you guys can enlighten me...

On motivation: Yeah, I'm doing it cause its fun. This language is my fave, I mean in what else can you hack up a little project in two days? I wrote my program to go all the way from idea to windows installer, and to experience it for myself.

This whole phenomenon is interesting to me - I remember reading the posts that you guys have put up on usenet, reading Will's guides, checking out Andreas's pool, and trying out tclkit. To think that maybe something I do will also inspire others is really CooL ;)

WHD: Ro, so long as every bracketed sequence of characters that matches your regexp is guaranteed to be a link, the regsub will do the trick. In Notebook's markup, it depends on where the bracketed sequence appears. It might be some text (a Tcl example, for example) in preformatted text; it might be a call of a Tcl function in an embedded macro or magic button. Without actually parsing the text, I have no way of knowing which is which. Oh, by the way....how did you do the installer?

Ro: That's the difference between thinking about the feature, and actually implementing it ;) Oh, the installer... pretty cool, isn't it? That was done _very_ easily using Inno Setup [L3 ]. There's only one problem with it, but that can be easily remedied. Its all documented in the FAQ and the problem is with shortcuts not finding their working directory. If you need more help, I'll send you my Inno Setup .iss script.

I think a little friendly competition is fun, what do you think? ;>

WHD: Works for me. :-)

Ro: Glad to hear it ;P Just got back from a great weekend trip to Montreal, and here I see is version 0.8! Great stuff, I can't wait to check it out ;) You can check out my latest version... it launches your default browser when you click a url.

In your notebook 0.8 I had some trouble starting the app coz it doesn't look in the lib dir for packages. Including

  lappend auto_path lib

before the package requires fixed this.

WHD: Silly bug. "package require trycatch" appears before I fix up the auto_path. I didn't notice on my system because I have trycatch installed for general use. Thanks for telling me about it!

Ro: Yeah tough to catch without having other computers lying around to test it on... that's what I try to do before releasing a version, but still I only test on Win98... gotta setup a winxp and win2000 image one of these days... ;) You're really making super progress Will - you're fassttttttttt!

WHD: And my wife's getting a little fed up with it. Time for some vacation. There's a patch on the home page, BTW; see the URL at the top of this page. Incidentally, I've tested V0.7 on Win ME, Win 2000, and Solaris--but only because I've been using it at work, which is where the latter two machines are. I haven't been in since Friday, so I haven't been able to try out V0.8 on either of them.

Ro: Yeah I know the feeling. My girlfriend calls me a 'workaholic' - maybe we both need some downtime ;) Enjoy yourself, you deserve it.

Ed Suominen: Will, I completely understand the "wife's fed up" part. My Privaria [L4 ] TCL-based project has taken up too much my time already (in her opinion). So, I'd like to donate my own partially-completed work on a similar project to you (or whomever) and see if it makes sense to integrate them. I've put my main source file on its own Wiki page, WebUtils. Your thoughts, anyone?

Ro: As always, you're very thoughtful Ed ;) I haven't found a use for WebUtils, but I'll let you know when I do... things just stick around in my brain... it takes time to sink in - then one day its BAM! Thanks Ed ;)


Ro: October 7th, 2002: I've finally got around to updating mindweb ... you might like to check it out Will, I've added auto-detection of links while you type bypassing the edit-save cycle.

WHD: I won't say that making Notebook truly WYSIWYG hasn't occurred to me. But darn it, I get so much mileage out of editing pages as plain text.....

Ro: I know what you mean. All the data is stored as plain text in mindweb as well. Plain text is compatible! ;) In mindweb, a renderer is run every half second to do auto-hiliting, so there isn't a need for multiple modes. I find it simpler to use.

WHD: Yes, but that only works if all you're doing is highlighting. Much of the power of Notebook is in the embedded macros; something like [@logpage@] can expand into hundreds of lines of rendered text. I suppose I could leave the macro in place as well, but that would be awfully ugly...and I'm not sure about expanding the macros every every half second. I don't think it would look good. (Sigh!)

Ro: Yes, you're right. Have a great weekend!

escargo: I think there are really five text formats of interest.

  1. Presentation format: How the text is displayed when being viewed.
  2. Editing format: How the text is displayed when being edited.
  3. Storage format: How the text is really stored internally.
  4. Export formats: How the text might be encoded for storing externally. (Added 10/15/2002, revised 10/17/2002)
  5. Import formats: What encodings the text might be permitted when loading from an external source. (Added 10/19/2002)

The presentation format is how the text is styled with multiple fonts, different colors or underlining for hyperlinks, etc.

The editing format is how the text is presented for editing. There might be some "almost free text" [L5 ] (Link added 10/18/2002) or wiki representation of the editable text.

The internal storage format could be the same of the editing text, but it need not be if there was some good reason.

The set of external storage formats is of interest if the application can export the contents for use by other programs. If multiple export formats are supported, then a Save as... option would need to be specified somewhere. (Added 10/15/2002, revised 10/17/2002)

Some of the external formats might be importable, with varying degrees of fidelity. Added 10/19/2002

Actually, there might be any number of different external storage formats: internal format, HTML, nicely formatted text, nicely formatted text with warts (e.g., things like Magic Button text), and on and on. -- WHD, 10/17/2002

This Magic Button [L6 ] [L7 ]? - escargo

Nope, it's a Notebook thing: a bit of markup that expands into a button that executes Tcl code. It isn't necessarily obvious how to format such things in a pretty way. -- WHD

OK, I see where it is mentioned up above. Are there examples somewhere of how these things are formatted? I didn't see anything on a superficial examination of the documents. -- escargo

Within Notebook, a magic button just looks like a link, though nominally of a different color. Notebook doesn't actually support any export formats yet, so I can't answer for that. -- WHD

But what does it look like in editing format, when you are entering the text string for a Magic Button instead of for a link? -- escargo

Oh. Like this:

    [%Button Text|Code to Execute%]

For example, a button to pop up the help window with help on Magic Buttons would look like this:

    [%Help on Magic Buttons|showhelp "Magic Button"%]

How feature-rich you want the presentation and editing formats to be depends on the level of function you want, how fancy you want the display, how simple you want the representation to be for editing.

You could have all three formats be the same, and have editing of HTML through a web page. You could have the presentation be in HTML being rendered from text stored in a wiki format. You just need to balance the richness of the presentation with the simplicity of processing and editing.

WHD: This is true, of course. When I began, I explicitly chose to make the presentation and editing formats separate, using a wiki-like editing format. There's certainly no reason, however, why I couldn't using highlighting in the editor (and possibly other tricks) to make editing more friendly. It's just a matter of finding time.

AK: Here is another idea: Editor with 2 panes. In one you edit the page, the other panel show the rendered version of the input. With a fast machine this might even be quite smooth. Of course, this preview panel should be optional.

WHD: This is part of something I've been pondering--allowing multiple views at the same time. Multiple rendered views, of the same or different notebook files, and multiple editors. I've just been having trouble figuring out just how I want to do it (not to mention finding time to make the changes). I could use multiple toplevel windows, a single window with tabs, a single paned window like Emacs, or some combination of the above. I'm leaning towards panes (like Emacs), but tabs (like Mozilla) are also tempting.


Ro: Mindweb was copied as I copied your notebook app!

WHD: What comes around goes around, I guess... :-)

unperson You both should be flattered! They say: "Imitation is the ultimate form of flattery!"


(escargo 10/29/2002)-- I found myself wondering about a couple of aspects of the Notebook. These might be considered as What if... possibilities. (For all I know, the Notebook may already be implemented this way.)

What if ... the notebook pages were stored in a VFS inside the notebook. While the page hierarchy might or might not be related to file hierarchy, there might be some benefit from that.

What if ... each page had associated with it some type information that specified the kind of markup used for that page. (I don't know if MIME type headers would be appropriate here, but I had that passing thought.) The notebook application would then have different dynamically loaded rendering procedures that would be called when the page needs to be presented.

WHD --

Regarding the first one, there is no page hierarchy; it's a flat list, like a Wiki. In fact, at present it's all stored in an array in memory, and is dumped to a Tcl-script-format file each time a page is modified and saved. Ultimately, I'll be changing that, and I'll most likely go to something like a Metakit database. Using a VFS would have its advantages, though.... Some people want me to store and display image data, and if I made the Notebook file a .zip file with a virtual VFS that would be easy. On the other hand, it might also be slow, which would be very bad.

The second question is more interesting to me, and is certainly a possibility. If images could be stored within the Notebook file, for example, it might make sense for each image to be its own page; it could then be displayed within other pages by way of a markup tag of some kind. Or one could imagine a canvas-based page for drawing diagrams. It's a logical idea, and will probably happen some day.

escargo -- How would you store images in a Notebook file? I can see where this leads to creeping featurism -- the notebook becomes the repository for a personal wiki that only needs a different front end to be an encapsulated web site.

AK: Regarding 'encapsulated website's see StarSite.

WHD: At present, you can't store images (easily) in a Notebook file; it's a text file. But I can store binary strings in a Metakit database. Mind you, I'm not sure I really want to store images (as opposed to links to images elsewhere on the disk) directly in the Notebook file; but some have suggested it.

One of the great things about a wiki (or Notebook) is simplicity. Please don't get carried away with features -- or if you do add them, I hope you try to make it so "what you don't know won't hurt you". In my opinion, the most useful feature you could add would be the ability to type part of a page name, then hit a key-combination and then select a page from a list matching the partial page name. It's your baby, though; I'm pleased you made it freely available for other people to use.


By way of contrast, compare with Magic Notebook [L8 ] -- escargo 6 Nov 2002


US: I packed WHDs notebook app into a starkit and would like to add it to the sdarchive. Who knows how?

 Submissions of new Starkits can be made via https://www.tcl-lang.org/starkits/submit.cgi

WHD: I expect to release Version 0.91 as a starkit/starpack....but Snit's Not Incr Tcl is taking up most of my spare time at the moment, so Notebook development is stalled for the time being.


jnc: I am curious if it is possible to access a page's text from the UserCode section. I would like to make a few functions that access and retrieve information off of other pages. Can an example be posted here?

WHD: Check the Notebook Commands page in the on-line help.

jnc: Hey, thanks. I found it:

 proc sandbox {} {
   set page [pageexpand "Sandbox"]

   # Do my processing here on the page

   return $newPage
 }

The above is of course a dummy function that is of no use, none the less, it shows how to get a page from the notebook and process code on it.


US: Is it possible to provide a level argument to current? I need this for log pages.

Example:

Page XXX Log Page

 This is my XXX log page.
 [@logpage@]

Page XXX Log Page: 2003-02-13

 [@logentry {XXX Log Page} 2003-02-13@]
 * Log Entry for today
 [@itsme@]

with itsme defined on the User Code page:

 proc itsme {} {
   return "I am page >>[current]<<."
 }

When I view the page XXX Log Page it displays as I am page >>XXX Log Page<<, but when I view the page XXX Log Page: 2003-02-13 it displays as I am page >>XXX Log Page: 2003-02-13. I want it to display the latter regardless which of the two I view. Is this possible and how?

WHD: There's no easy way, at the moment. But you could try this, if you're brave: patch the "pageexpand" command to save the name of the page it is currently expanding in a global variable. The usual method to do this uses Tcl's rename command:

 # NOTE: do this only once!  (Check to see if pageexpand.orig exists first)
 rename pageexpand pageexpand.orig

 proc pageexpand {name} {
     global pageBeingExpanded
     set oldPage $pageBeingExpand
     set pageBeingExpanded $name
     set result [pageexpand.orig]
     set pageBeingExpand $oldPage
     return $result
 }

The above is just a sketch; I've not actually tried it. Anyway, you could then write a command to return the current value of pageBeingExpanded, and leave "current" alone.


unperson Well well I can see TCL is kicking ass nowadays and I am starting to love the language! I have just downloaded Notebook for Windows - not bad at all!- but I can't seem to find the cut, copy, paste right click of the mouse.

Does anyone know how to cut, copy and paste on Notebook? Thanks!

OK I did find the info. It is ctrl c, v, x and Z.

But I have 2 more questions:

1) Why aren't these functions located on the right click of the mouse?

Because I don't tend to use that feature, and no one has asked for it before. It's easily done, though the next version of Notebook is some time away. -- WHD

Great! Thanks! The next version will be in what 2 months? unperson

WHD: New versions come out as I have time to work on Notebook and as I get stuff finished. I've got a long list of features I want to add; I also have important changes to make to the program's internals to make other features easy to add. In short, there's a lot to do and as this is a personal project I've got little time to devote to it. So I make it a point not to predict when the next version will be out. I'm currently putting a fair amount of time into Notebook, but the holidays are coming....

2) Why is a Notebook file one single huge file and not different files like on any wiki. Is there a reason for this technically? If we do a lot of writing we could get 1 or 2 megs on a single file. Can be real dangerous!

I don't see why. It's a text file; even if Notebook stopped working, you wouldn't lose your data. As regards size, I have a Notebook file I use every day at work to log my activities and take notes on various software design problems. I've been using it since the earliest versions of Notebook (i.e., for about a year) and it's less than 400K in size. -- WHD

LV Also, if a file of 1 or 2 megs were dangerous, then most computers would be in trouble, because the operating system kernel is frequently that large or larger. If you want smaller files, then create a series of notebooks and then use URLs to link them together. Even this web site is a single file!

See also Users' wishlist above for my suggestions

See my comments interleaved with your suggestions. -- WHD

unlucky it seems can't use i18n/chinese words -_- 可以用中文不行? thx. [email protected]

Hey it can display chinese in wikit! I hope I will learn tcl/tk soon and make notebook app also do that!

WHD: Notebook 2.1.0 should be able to display Chinese, if you've got the fonts you need.

Jou IIRC, Notebook 2.1.3 does display Chinese but it is forgetful: After quitting the application and starting it again, it forgot the fonts and displays ??s. At least that's how it appeared to me. Wikit on the other hand, can remember the fonts correctly.

jnc Feb 16, 2010 - I made a little user code to make a simple todo system in your Notebooks. I am sure code will change over time, but take a peek at Notebook App - Todo Code.


Are there any (also non-Tcl) ALTERNATIVES?

Jou I'm using WikidPad, implemented in Python http://www.jhorman.org/wikidPad/ . Each wiki page is stored as a text file on disk and I really like that (I have paranoia of my data being trapped in someone's proprietary format) and indexing is stored in another set of files (as a database(gadfly?)) so performance is not that bad either. Another wonderful feature is document attributes, similar to tags. I'm no serious TCL programmer, but seems to me if VFS is being used as the storage format for Notebook, then I suppose it might be easy to choose between an "exploded" format on disk or a single file format.

ConnectedText is an alternative (although it isn't free). It allows you to import and export text as well as html and html help. So you don't have to be paranoid. Your data won't be trapped in someone's proprietary format. On the other hand, the data are stored in an sql database. This makes the program quick and robust.

VoodooPad [L9 ] for Mac OS X.

A non-Tcl alternative is TotalTextContainer. Available from http://mtirnanic.googlepages.com/ . Stores files, documents and all in a ZIP file.

Fabricio Rocha 09-Jun-09 - Once I felt the need of something like a "local wiki" for keeping ideas together in a site-like fashion. I thought even on creating something alike in Tcl/Tk... and only now I see that others Tclers also had the same idea. Great! In the meantime, I found some applications for that. Tomboy is a Gnome project made with Mono which can be used as a local wiki, in spite of apparently being promoted as something more than that (and I just can't understand what). It has inspired the simpler Gnote, which aims to be a C++ version. There is also a Sun extension for OpenOffice which allows you to edit wiki documents and export them to MediaWiki sites, but it did not work for me and then I discovered that it seems to be broken for any OO 3.x version. The last application I found, and the one which I have been using with great satisfaction, is Zim (http://www.pardus.nl/projects/zim ), made with Perl-GTK. It is nice, very easy to use, works with plain text files grouped in directories, and is also able to export to HTML -- but not to export to wiki sites/servers, and that's why I suggested that above. I wish the Tcl options get even better than it -- and, of course, I wish they could be more easily found! :)