emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] More wiki-like behaviour


From: Carsten Dominik
Subject: Re: [Orgmode] More wiki-like behaviour
Date: Sat, 7 Aug 2010 08:27:44 +0200


On Feb 5, 2009, at 8:48 PM, Paul Sexton wrote:

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.

I have just pushed a change which does the following:

1. It makes a link like [[Find this text]] only match if there is an
   exact headline like this.  The fuzzy text search that used to
   result from such a link at least I never use in Org files

2. If there is no match, it offers to create this headline.

Let me know if this works for you.  Also: does this break
things for anyone else?

- Carsten



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


_______________________________________________
Emacs-orgmode mailing list
Remember: use `Reply All' to send replies to the list.
address@hidden
http://lists.gnu.org/mailman/listinfo/emacs-orgmode

- Carsten






reply via email to

[Prev in Thread] Current Thread [Next in Thread]