Migrated from Tiddlywiki to Emacs Org-Mode
I am an early adopter of TiddlyWiki, a personal wiki which runs locally in a browser. I used it for many years nearly every day at work and home. I'm so used to it, I'm unable to do my daily work without it. I even wrote a couple of plugins for TiddlyWiki and I ported it to the palm pre mobile platform.
Now that era is over, thanks to the developers of firefox. I used to use an outdated portable firefox instance at work when a couple of weeks ago the NoScript plugin has been updated. From that moment on, firefox didn't work properly anymore, so I had to update firefox as well. I did it and everything looked good. Until I clicked the "save" button in tiddlywiki - it didn't work anymore. Turns out, that the firefox developers disabled the UniversalXPConnect capability, which made it possible for local Javascripts like TiddlyWiki to access the local harddisk.
There's a plugin called TiddlyFox, which aims to close the gap, but there are several reasons why I can't use it. First, it doesn't work with older wikis. Mine was based on version 2.3 and heavily customized. I just couldn't upgrade it (and I don't know, how, anyway). So I had to use the latest TiddlyWiki version, which I don't like. Then there's the problem, that the TiddlyFox plugin just pops up firefox' "Save as..." dialogue, if you click save and the file already exists, you end up with "wiki(1).html", the next time with "wiki(2).html" and so forth, which is really annoying and impractical. Also, the very fact, that a plugin is required to save a wiki, is a no-go for me. What if the admins of my workstation decide to forbid firefox plugins? I would be fucked.
Therefore I decided to make a cut and look for another solution for note taking and organizing. I ended up with org-mode for emacs. I use emacs anyway, primarily for programming, so I'm at home already. I tried org-mode a decade ago and didn't like it. I've got to admit, I still don't really like it, but I get used to it and it'll suffice my requirements. I use org-mode only for note taking, I don't use its agenda-mode or the time and clocking keeping stuff. So, it's ok. The only thing I miss is a feature I regularly used in TiddlyWiki: click on a tag, a popup appears with all tiddlers which also have this tag, from which you can select one to open it (or jump to it, if it's already open). In org-mode you end up in the agenda if you click on a tag, which splits the window. Ok it is possible to click on a tag there which shows all matching entries but if you click on one, it opens it within the same frame as the agenda. So, in the end you've got two frames with org-mode. So far I was unsuccessfull to disable this annoying behavior, therefore I don't use the tags. Maybe some day I've got a working solution for this (e.g. an imenu with matching entries if click on a tag).
Ok, this is the script I used to convert my TiddlyWiki entries to an org-mode file: tiddlers2orgmode.pl. If you want to use it, keep in mind that it is only tested with TiddlyWiki 2.3. You may also tweak it here and there.
Finally here's the org-mode emacs config I've put together so far:
; org mode (defvar my-home "C:/Cygwin/home/tom") (defvar my-lisp (concat my-home "/.emacs.d")) (defvar my-org-file (concat my-home "/notizen.org"))(setq load-path (cons (concat my-lisp "/org/lisp") load-path)) (setq load-path (cons (concat my-lisp "/org/contrib/lisp") load-path))
(custom-set-variables ‘(org-agenda-files (list my-org-file)) ‘(org-default-notes-file (concat "/remember.org")) ‘(org-reverse-note-order t) ‘(org-remember-store-without-prompt t) ‘(org-reverse-note-order t) ‘(org-startup-indented t) ‘(word-wrap t) ‘(org-startup-truncated nil) ‘(org-columns-default-format "%80ITEM %22Timestamp %TODO %TAGS %0PRIORITY") ‘(org-mouse-1-follows-link nil) ’(org-insert-heading-always-after-current ‘t) ; new headings below current ‘(org-M-RET-may-split-line nil) ;; dont break heading with enter ‘(org-blank-before-new-entry ( ; no blank lines after headings quote ((heading . auto) (plain-list-item . auto))) ) ‘(org-agenda-restore-windows-after-quit t) ‘(org-use-speed-commands t) ; see next block for which ones ’(org-catch-invisible-edits ‘error) ; dont edit invisibles )
(setq org-speed-commands-user (quote ( (“0” . ignore) (“1” . delete-other-windows) (“2” . ignore) (“3” . ignore) (“d” . org-archive-subtree-default-with-confirmation) ; delete, keep track (“v” . org-narrow-to-subtree) ; only show current heading (“view”) (“q” . widen) ; close current heading and show all (“quit”) (":" . org-set-tags-command) ; add/edit tags )))
; ctrl-n for new entry with template (setq org-capture-templates ‘((“j” “Note” entry (file+datetree my-org-file) "* %? %^g\n %U\n %i\n")) )
(define-key global-map "\C-n" (lambda () (interactive) (org-capture nil “j”)))
; use ctrl-arrows to jump between headings (add-hook ‘org-mode-hook ( lambda () ; move heading down (local-set-key (kbd "<C-down>") ‘outline-next-visible-heading) ; move heading up (local-set-key (kbd "<C-up>") ‘outline-previous-visible-heading) ; alt-enter = insert new subheading below current (local-set-key (kbd "<kp-enter>") ‘org-insert-subheading) ; search for tags (ends up in agenda view) (local-set-key "\C-f" ‘org-tags-view) ))
(setq org-todo-keywords ‘((sequence “TODO” “STARTED” “WAITING” “DONE” “CANCELED”)))
;; todo colors (setq org-todo-keyword-faces ‘( (“TODO” . (:foreground "#b70101" :weight bold)) (“STARTED” . (:foreground "#b70101" :weight bold)) (“WAITING” . (:foreground “orange” :weight bold)) (“DONE” . (:foreground “forestgreen” :weight bold)) (“CANCELED” . shadow) ))