Hi,
I am interested in
using Org mode to create a personal wiki (along the lines of Wikidpad: http://wikidpad.sourceforge.net/ ),
treating top level headings (one star) as wiki topics.
To do this,
I have added 2 behaviours to Org-mode.
1. Always narrow to
subtree after following an internal link (ideally I would like to only narrow to
the relevant one-star heading).
Added to
.emacs:
(add-hook
'org-follow-link-hook (lambda ()
(org-narrow-to-subtree)))
2. More difficult:
create a new wikiword if the internal link is not found.
In .emacs, add a new
function to create the new topic:
(defun
org-create-new-wikiword (word)
(interactive "s")
(widen)
(end-of-buffer)
(newline 2)
(insert
(format "* <<<%s>>>" word)) ; create as radio
link
(backward-char 4)
(org-update-radio-target-regexp)
(newline 2)
(org-narrow-to-subtree))
Modification to the
(VERY long) function org-open-at-point in org.el:
((string= type
"thisfile")
(if
in-emacs
(switch-to-buffer-other-window
(org-get-buffer-for-internal-link
(current-buffer)))
(org-mark-ring-push))
(let ((cmd
`(org-link-search
,path
,(cond ((equal in-emacs '(4))
'occur)
((equal in-emacs '(16))
'org-occur)
(t
nil))
,pos)))
(condition-case nil (eval
cmd)
(error (progn
(widen)
;; BEGIN
CHANGE
(condition-case nil (eval
cmd)
(error
(when
(yes-or-no-p
(format "Topic '%s' not found;
create?"
path))
(org-create-new-wikiword
path)))))))))
;; END CHANGE
I am not the
greatest emacs-lisp orgrammer. Is there an easier way to do this? If not, is it
possible to create a 'link-not-found' hook so that I don't need to modify
org.el?
Thanks
Paul