emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Dan Davison <davison@stats.ox.ac.uk>
To: Carsten Dominik <carsten.dominik@gmail.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: cannot edit two source code examples simultaneously
Date: Sun, 17 May 2009 13:28:01 -0400	[thread overview]
Message-ID: <87hbzjmyfy.fsf@stats.ox.ac.uk> (raw)
In-Reply-To: <4FBDF50D-609C-4816-952C-54A83854F528@gmail.com> (Carsten Dominik's message of "Sat, 16 May 2009 19:39:35 +0200")

Following on from this, I'd like to suggest that, while it is being
edited, the source code is removed from the org buffer, to avoid
concurrency problems. I just had a go at that -- the patch below
replaces the source code with a work-in-progress message that contains
a link to the edit buffer.

That brought up a couple of related questions:

1. Is there a dedicated format for an org-link to an emacs buffer? (I
   used an elisp: link)

2. Now I'm going to be confusing. Despite me using a link inside a code
   block in that, I had previously wondered about how appropriate it is
   that org conducts its special formatting operations inside source
   code blocks. E.g. in R code, x[[3]] means the 3rd element of list
   x. But that gets magically formatted by org as a link, which looks
   weird. Do we think that the current behaviour is desirable? If not,
   should org be prevented from formatting stuff in literal blocks, or
   is it too inefficient or messy to implement that? (If it were
   changed, the work-in-progress message could go outside the block.)

Dan

diff --git a/lisp/org.el b/lisp/org.el
index b9df6ec..25973be 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -6394,6 +6394,7 @@ the edited version."
 	nil
       (setq beg (move-marker beg (nth 0 info))
 	    end (move-marker end (nth 1 info))
+	    org-buffer (buffer-name)
 	    code (buffer-substring-no-properties beg end)
 	    lang (nth 2 info)
 	    single (nth 3 info)
@@ -6409,6 +6410,14 @@ the edited version."
 	(and buffer (kill-buffer buffer))
 	(switch-to-buffer (generate-new-buffer "*Org Edit Src Example*"))
 	(insert code)
+	(save-excursion
+	  (let ((src-buffer (buffer-name)))
+	    (set-buffer org-buffer)
+	    (goto-char beg)
+	    (delete-region beg end)
+	    (insert (format "<<%s [[elisp:(switch-to-buffer \"%s\")][%s]]>>"
+			    "Contents are currently being edited" src-buffer "here"))
+	    (setq end (move-marker end (point)))))
 	(remove-text-properties (point-min) (point-max)
 				'(display nil invisible nil intangible nil))
 	(let ((org-inhibit-startup t))


Carsten Dominik <carsten.dominik@gmail.com> writes:

> Hi Hsiu-Khuern,
>
> On May 15, 2009, at 7:38 AM, Hsiu-Khuern Tang wrote:
>
>     Hi Carsten,
>    
>     You recently changed org-edit-src-code to use a separate buffer instead of an
>     indirect buffer.  One side effect of this is that I can no longer edit several
>     code examples at the same time: opening the second buffer will silently discard
>     any changes made in the first.  I would prefer this behavior: when opening the
>     second edit source buffer, write any changes in the first buffer to the
>     originating Org buffer (but don't save it, of course).
>    
>     Another approach is to use different buffer names.
>
> I think the second idea is better, provided that a mechanism
> ensures that not two editing instances of the same region
> are created.  This is what I have implemented now.  Thank
> you for your report.
>
> - Carsten
>
> _______________________________________________
> Emacs-orgmode mailing list
> Remember: use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode

  reply	other threads:[~2009-05-17 17:28 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-15  5:38 Hsiu-Khuern Tang
2009-05-16 17:39 ` Carsten Dominik
2009-05-17 17:28   ` Dan Davison [this message]
2009-05-18  5:38     ` Taru Karttunen
2009-05-18  6:07       ` Dan Davison
2009-05-18  6:27         ` Taru Karttunen
2009-05-18 10:12           ` Carsten Dominik
2009-05-18 15:23           ` Carsten Dominik
2009-05-18 17:40             ` Dan Davison
2009-05-18 10:48     ` Carsten Dominik
2009-05-19  0:32   ` Hsiu-Khuern Tang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87hbzjmyfy.fsf@stats.ox.ac.uk \
    --to=davison@stats.ox.ac.uk \
    --cc=carsten.dominik@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    --subject='Re: cannot edit two source code examples simultaneously' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Code repositories for project(s) associated with this inbox:

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).