emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [BABEL] tangling with leaving non-source code lines as empty lines?
@ 2010-07-12 15:19 Rainer M Krug
  2010-07-12 18:04 ` Eric Schulte
  0 siblings, 1 reply; 7+ messages in thread
From: Rainer M Krug @ 2010-07-12 15:19 UTC (permalink / raw)
  To: emacs-orgmode


[-- Attachment #1.1: Type: text/plain, Size: 997 bytes --]

Hi Eric,

would it be possible, when tangling, to leave lines without source code in
the resulting code file as empty lines? The reasoning would be that error
messages (at least in R) give the line in which the error occurred. If the
line numbers in which the code sits would be preserved (by leaving empty
lines where no code is in the .org file), debugging would be much easier.

By the way: I am using the after tangle hook and it works absolutely
perfectly.

Thanks and cheers,

Rainer


-- 
NEW GERMAN FAX NUMBER!!!

Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology,
UCT), Dipl. Phys. (Germany)

Centre of Excellence for Invasion Biology
Natural Sciences Building
Office Suite 2039
Stellenbosch University
Main Campus, Merriman Avenue
Stellenbosch
South Africa

Cell:           +27 - (0)83 9479 042
Fax:            +27 - (0)86 516 2782
Fax:            +49 - (0)321 2125 2244
email:          Rainer@krugs.de

Skype:          RMkrug
Google:         R.M.Krug@gmail.com

[-- Attachment #1.2: Type: text/html, Size: 1315 bytes --]

[-- Attachment #2: Type: text/plain, Size: 201 bytes --]

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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [BABEL] tangling with leaving non-source code lines as empty lines?
  2010-07-12 15:19 [BABEL] tangling with leaving non-source code lines as empty lines? Rainer M Krug
@ 2010-07-12 18:04 ` Eric Schulte
  2010-07-13  0:46   ` Eric Schulte
  2010-07-13  7:47   ` Dr Rainer M Krug
  0 siblings, 2 replies; 7+ messages in thread
From: Eric Schulte @ 2010-07-12 18:04 UTC (permalink / raw)
  To: Rainer M Krug; +Cc: emacs-orgmode

Hi Rainer,

If I'm understand you correctly you want the absolute position (by LOC)
of the lines of R code to be the same in both the original org file and
the tangled file or R code.  I don't think this is possible.  It is
possible to tangle code blocks in any order (not just the order in which
they appear in the original org file), so there are many valid tangling
scenarios in which this feature could not work.

Rather, I think that it may make sense to have a function for jumping
back and forth between tangled code blocks and the related Org file.  In
that case the R errors could be followed to the tangled R code file,
from which you could easily jump to the relevant line in the relevant
code block in the Org file.  If you are tangling with comments, then it
should be possible to have a function called from a line in a tangled
code file which when called

1) finds it's enclosing comments
2) remembers it's offset from the comments (which would then be it's
   offset in the code block in the Org file)
3) read the comment to learn which code block in which Org file it's
   tangled from
4) jump to the relevant line, in the relevant block, in the relevant
   file

Similarly when called form within a code block in an Org file the
function could

1) read it's header argument to find the relevant tangled code file
2) jump to that file
3) use the comments in that file to move to the appropriate section of
   code and related line

I'll think about such a function, and if it makes sense to implement it
apart from a more general "activate org-mode links in comments" minor
mode.  Any ideas or suggestions would be welcome!

Thanks -- Eric

Rainer M Krug <r.m.krug@gmail.com> writes:

> Hi Eric,
>
> would it be possible, when tangling, to leave lines without source code in
> the resulting code file as empty lines? The reasoning would be that error
> messages (at least in R) give the line in which the error occurred. If the
> line numbers in which the code sits would be preserved (by leaving empty
> lines where no code is in the .org file), debugging would be much easier.
>
> By the way: I am using the after tangle hook and it works absolutely
> perfectly.
>
> Thanks and cheers,
>
> Rainer

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [BABEL] tangling with leaving non-source code lines as empty lines?
  2010-07-12 18:04 ` Eric Schulte
@ 2010-07-13  0:46   ` Eric Schulte
  2010-07-13  8:10     ` Dr Rainer M Krug
  2010-07-13  7:47   ` Dr Rainer M Krug
  1 sibling, 1 reply; 7+ messages in thread
From: Eric Schulte @ 2010-07-13  0:46 UTC (permalink / raw)
  To: Rainer M Krug; +Cc: emacs-orgmode

Hi Rainer,

With the tangling comments generated by the latest Org-mode, the
following function should be able to jump from any code in a tangled
code file back to the relevant block in the original Org-mode file.

--8<---------------cut here---------------start------------->8---
(defun org-babel-tangle-jump-to-org ()
  "Jump from a tangled code file to the related Org-mode file."
  (interactive)
  (let ((mid (point))
	target-buffer target-char
	start end link path block-name)
    (save-window-excursion
      (save-excursion
	(unless (and (re-search-backward org-bracket-link-analytic-regexp nil t)
		     (setq start (point))
		     (setq link (match-string 0))
		     (setq path (match-string 3))
		     (setq block-name (match-string 5))
		     (re-search-forward (concat " " (regexp-quote block-name)
						" ends here[\n\r]") nil t)
		     (setq end (point))
		     (< start mid) (< mid end))
	  (error "not in tangled code")))
      (when (string-match "::" path)
	(setq path (substring path 0 (match-beginning 0))))
      (find-file path) (setq target-buffer (current-buffer))
      (goto-char start) (org-open-link-from-string link)
      (if (string-match "[^ \t\n\r]:\\([[:digit:]]+\\)" block-name)
	  (org-babel-next-src-block
	   (string-to-int (match-string 1 block-name)))
	(org-babel-goto-named-src-block block-name))
      (setq target-char (point)))
    (pop-to-buffer target-buffer)
    (goto-char target-char)))
--8<---------------cut here---------------end--------------->8---

This is too large of a block of untested code to push into Org-mode now,
however please give it a try, and let me know if you think this could be
generally useful.  Hopefully after the feature-freeze we can fold
something like this into Babel to ease navigation between Org files and
their tangled offspring.

Cheers -- Eric

"Eric Schulte" <schulte.eric@gmail.com> writes:

> Hi Rainer,
>
> If I'm understand you correctly you want the absolute position (by LOC)
> of the lines of R code to be the same in both the original org file and
> the tangled file or R code.  I don't think this is possible.  It is
> possible to tangle code blocks in any order (not just the order in which
> they appear in the original org file), so there are many valid tangling
> scenarios in which this feature could not work.
>
> Rather, I think that it may make sense to have a function for jumping
> back and forth between tangled code blocks and the related Org file.  In
> that case the R errors could be followed to the tangled R code file,
> from which you could easily jump to the relevant line in the relevant
> code block in the Org file.  If you are tangling with comments, then it
> should be possible to have a function called from a line in a tangled
> code file which when called
>
> 1) finds it's enclosing comments
> 2) remembers it's offset from the comments (which would then be it's
>    offset in the code block in the Org file)
> 3) read the comment to learn which code block in which Org file it's
>    tangled from
> 4) jump to the relevant line, in the relevant block, in the relevant
>    file
>
> Similarly when called form within a code block in an Org file the
> function could
>
> 1) read it's header argument to find the relevant tangled code file
> 2) jump to that file
> 3) use the comments in that file to move to the appropriate section of
>    code and related line
>
> I'll think about such a function, and if it makes sense to implement it
> apart from a more general "activate org-mode links in comments" minor
> mode.  Any ideas or suggestions would be welcome!
>
> Thanks -- Eric
>
> Rainer M Krug <r.m.krug@gmail.com> writes:
>
>> Hi Eric,
>>
>> would it be possible, when tangling, to leave lines without source code in
>> the resulting code file as empty lines? The reasoning would be that error
>> messages (at least in R) give the line in which the error occurred. If the
>> line numbers in which the code sits would be preserved (by leaving empty
>> lines where no code is in the .org file), debugging would be much easier.
>>
>> By the way: I am using the after tangle hook and it works absolutely
>> perfectly.
>>
>> Thanks and cheers,
>>
>> Rainer

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [BABEL] tangling with leaving non-source code lines as empty lines?
  2010-07-12 18:04 ` Eric Schulte
  2010-07-13  0:46   ` Eric Schulte
@ 2010-07-13  7:47   ` Dr Rainer M Krug
  1 sibling, 0 replies; 7+ messages in thread
From: Dr Rainer M Krug @ 2010-07-13  7:47 UTC (permalink / raw)
  To: emacs-orgmode

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi Eric,

On Mon, Jul 12, 2010 at 8:04 PM, Eric Schulte <schulte.eric@gmail.com>wrote:

> Hi Rainer,
>
> If I'm understand you correctly you want the absolute position (by LOC)
> of the lines of R code to be the same in both the original org file and
> the tangled file or R code.


That's right - that's what I was thinking about.


> I don't think this is possible.  It is
> possible to tangle code blocks in any order (not just the order in which
> they appear in the original org file), so there are many valid tangling
> scenarios in which this feature could not work.
>

Accepted - under these circumstances it would only concern a special case
where the whole file is tangled in order to another R file. I agree, that
other solutions would be more useful - please see comments below.


> Rather, I think that it may make sense to have a function for jumping
> back and forth between tangled code blocks and the related Org file.  In
> that case the R errors could be followed to the tangled R code file,
> from which you could easily jump to the relevant line in the relevant
> code block in the Org file.


That sounds perfect to me.


> If you are tangling with comments, then it
> should be possible to have a function called from a line in a tangled
> code file which when called
>
> 1) finds it's enclosing comments
> 2) remembers it's offset from the comments (which would then be it's
>   offset in the code block in the Org file)
> 3) read the comment to learn which code block in which Org file it's
>   tangled from
> 4) jump to the relevant line, in the relevant block, in the relevant
>   file
>
>
That would be really be useful for literate programming and the following
debugging.


> Similarly when called form within a code block in an Org file the
> function could
>
> 1) read it's header argument to find the relevant tangled code file
> 2) jump to that file
> 3) use the comments in that file to move to the appropriate section of
>   code and related line
>

Also quite useful, although I don't see an immediate use for this, as the
code file is dynamic, and changing it would not make much sense (unless, and
now I am probably dreaming, one could sync the changes back into the .org
file into the blocks. In that way, one could debug the code file as one
would a normal code file and sync it, after it is working, back into the
.org file. Comments could be used to define the blocks. Although, I guess
that could cause problems with more advanced features on babel, which I am
not using (yet?).)

Another important aspect of a function lie that could be to be able to type
in the line number in the code file (from e.g. an error message) and to jump
to the corresponding line in the .org file. That would directly address my
suggestion above in a MUCH more elegant and efficient way.


> I'll think about such a function, and if it makes sense to implement it
> apart from a more general "activate org-mode links in comments" minor
> mode.  Any ideas or suggestions would be welcome!
>

I think that both functions would be extremely useful. The one outlined
above as a tool for debugging and the "links in org-mode comments" as kind
of backward linking documentation.

Let me know if you have anything you want me to test.

Cheers,

Rainer


>
> Thanks -- Eric
>
> Rainer M Krug <r.m.krug@gmail.com> writes:
>
> > Hi Eric,
> >
> > would it be possible, when tangling, to leave lines without source code
> in
> > the resulting code file as empty lines? The reasoning would be that error
> > messages (at least in R) give the line in which the error occurred. If
> the
> > line numbers in which the code sits would be preserved (by leaving empty
> > lines where no code is in the .org file), debugging would be much easier.
> >
> > By the way: I am using the after tangle hook and it works absolutely
> > perfectly.
> >
> > Thanks and cheers,
> >
> > Rainer
>



- -- 
NEW GERMAN FAX NUMBER!!!

Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology,
UCT), Dipl. Phys. (Germany)

Centre of Excellence for Invasion Biology
Natural Sciences Building
Office Suite 2039
Stellenbosch University
Main Campus, Merriman Avenue
Stellenbosch
South Africa

Cell:           +27 - (0)83 9479 042
Fax:            +27 - (0)86 516 2782
Fax:            +49 - (0)321 2125 2244
email:          Rainer@krugs.de

Skype:          RMkrug
Google:         R.M.Krug@gmail.com

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkw8GhMACgkQoYgNqgF2egqtdQCfY9TTM9MRWftZHEQhbA4zLqMe
qZ8AnjT2p3hRf/vr+lMTCbe9djOk7HAC
=i/Z5
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [BABEL] tangling with leaving non-source code lines as empty lines?
  2010-07-13  0:46   ` Eric Schulte
@ 2010-07-13  8:10     ` Dr Rainer M Krug
  2010-07-13 17:22       ` Eric Schulte
  0 siblings, 1 reply; 7+ messages in thread
From: Dr Rainer M Krug @ 2010-07-13  8:10 UTC (permalink / raw)
  To: Eric Schulte; +Cc: emacs-orgmode

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 13/07/2010 02:46, Eric Schulte wrote:
> Hi Rainer,
> 
> With the tangling comments generated by the latest Org-mode, the
> following function should be able to jump from any code in a tangled
> code file back to the relevant block in the original Org-mode file.

Wow - that was quick.

Thanks.

> 
> --8<---------------cut here---------------start------------->8---
> (defun org-babel-tangle-jump-to-org ()
>   "Jump from a tangled code file to the related Org-mode file."
>   (interactive)
>   (let ((mid (point))
> 	target-buffer target-char
> 	start end link path block-name)
>     (save-window-excursion
>       (save-excursion
> 	(unless (and (re-search-backward org-bracket-link-analytic-regexp nil t)
> 		     (setq start (point))
> 		     (setq link (match-string 0))
> 		     (setq path (match-string 3))
> 		     (setq block-name (match-string 5))
> 		     (re-search-forward (concat " " (regexp-quote block-name)
> 						" ends here[\n\r]") nil t)
> 		     (setq end (point))
> 		     (< start mid) (< mid end))
> 	  (error "not in tangled code")))
>       (when (string-match "::" path)
> 	(setq path (substring path 0 (match-beginning 0))))
>       (find-file path) (setq target-buffer (current-buffer))
>       (goto-char start) (org-open-link-from-string link)
>       (if (string-match "[^ \t\n\r]:\\([[:digit:]]+\\)" block-name)
> 	  (org-babel-next-src-block
> 	   (string-to-int (match-string 1 block-name)))
> 	(org-babel-goto-named-src-block block-name))
>       (setq target-char (point)))
>     (pop-to-buffer target-buffer)
>     (goto-char target-char)))
> --8<---------------cut here---------------end--------------->8---
> 

I tried it out, and realised that one needs to name the blocks
(#+srcname:) to be able to use it. Then it jumps to the code block in
the org file.

Two more things (As pointed out in the other email) would be nice:

1) it would be nice to jump to the line of code in the Org-mode file
which corresponds to the line in the code file

2) It would be brilliant, if one could call the function from the
Org-file buffer and enter the line number and then jump to the block /
line in the block.

In addition:
3) it would be very useful, if this function could be used with
non-named source blocks.

But that function is already quite usefull.

Thanks,

Rainer


> This is too large of a block of untested code to push into Org-mode now,
> however please give it a try, and let me know if you think this could be
> generally useful.  Hopefully after the feature-freeze we can fold
> something like this into Babel to ease navigation between Org files and
> their tangled offspring.
> 
> Cheers -- Eric
> 
> "Eric Schulte" <schulte.eric@gmail.com> writes:
> 
>> Hi Rainer,
>>
>> If I'm understand you correctly you want the absolute position (by LOC)
>> of the lines of R code to be the same in both the original org file and
>> the tangled file or R code.  I don't think this is possible.  It is
>> possible to tangle code blocks in any order (not just the order in which
>> they appear in the original org file), so there are many valid tangling
>> scenarios in which this feature could not work.
>>
>> Rather, I think that it may make sense to have a function for jumping
>> back and forth between tangled code blocks and the related Org file.  In
>> that case the R errors could be followed to the tangled R code file,
>> from which you could easily jump to the relevant line in the relevant
>> code block in the Org file.  If you are tangling with comments, then it
>> should be possible to have a function called from a line in a tangled
>> code file which when called
>>
>> 1) finds it's enclosing comments
>> 2) remembers it's offset from the comments (which would then be it's
>>    offset in the code block in the Org file)
>> 3) read the comment to learn which code block in which Org file it's
>>    tangled from
>> 4) jump to the relevant line, in the relevant block, in the relevant
>>    file
>>
>> Similarly when called form within a code block in an Org file the
>> function could
>>
>> 1) read it's header argument to find the relevant tangled code file
>> 2) jump to that file
>> 3) use the comments in that file to move to the appropriate section of
>>    code and related line
>>
>> I'll think about such a function, and if it makes sense to implement it
>> apart from a more general "activate org-mode links in comments" minor
>> mode.  Any ideas or suggestions would be welcome!
>>
>> Thanks -- Eric
>>
>> Rainer M Krug <r.m.krug@gmail.com> writes:
>>
>>> Hi Eric,
>>>
>>> would it be possible, when tangling, to leave lines without source code in
>>> the resulting code file as empty lines? The reasoning would be that error
>>> messages (at least in R) give the line in which the error occurred. If the
>>> line numbers in which the code sits would be preserved (by leaving empty
>>> lines where no code is in the .org file), debugging would be much easier.
>>>
>>> By the way: I am using the after tangle hook and it works absolutely
>>> perfectly.
>>>
>>> Thanks and cheers,
>>>
>>> Rainer

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkw8H2YACgkQoYgNqgF2egqpxgCfe2ygSqfbk1/LKt0PMUrBXC+O
S1MAn3+izWWIE87oJiP9hG8o91ZNxV11
=wxFj
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [BABEL] tangling with leaving non-source code lines as empty lines?
  2010-07-13  8:10     ` Dr Rainer M Krug
@ 2010-07-13 17:22       ` Eric Schulte
  2010-07-15  8:00         ` Rainer M Krug
  0 siblings, 1 reply; 7+ messages in thread
From: Eric Schulte @ 2010-07-13 17:22 UTC (permalink / raw)
  To: Dr Rainer M Krug; +Cc: emacs-orgmode

Hi Rainer,

Dr Rainer M Krug <r.m.krug@gmail.com> writes:

> On 13/07/2010 02:46, Eric Schulte wrote:
>> Hi Rainer,
>> 
>> With the tangling comments generated by the latest Org-mode, the
>> following function should be able to jump from any code in a tangled
>> code file back to the relevant block in the original Org-mode file.
>
> Wow - that was quick.
>
> Thanks.
>
>> 
>> --8<---------------cut here---------------start------------->8---
>> (defun org-babel-tangle-jump-to-org ()
>>   "Jump from a tangled code file to the related Org-mode file."
>>   (interactive)
>>   (let ((mid (point))
>> 	target-buffer target-char
>> 	start end link path block-name)
>>     (save-window-excursion
>>       (save-excursion
>> 	(unless (and (re-search-backward org-bracket-link-analytic-regexp nil t)
>> 		     (setq start (point))
>> 		     (setq link (match-string 0))
>> 		     (setq path (match-string 3))
>> 		     (setq block-name (match-string 5))
>> 		     (re-search-forward (concat " " (regexp-quote block-name)
>> 						" ends here[\n\r]") nil t)
>> 		     (setq end (point))
>> 		     (< start mid) (< mid end))
>> 	  (error "not in tangled code")))
>>       (when (string-match "::" path)
>> 	(setq path (substring path 0 (match-beginning 0))))
>>       (find-file path) (setq target-buffer (current-buffer))
>>       (goto-char start) (org-open-link-from-string link)
>>       (if (string-match "[^ \t\n\r]:\\([[:digit:]]+\\)" block-name)
>> 	  (org-babel-next-src-block
>> 	   (string-to-int (match-string 1 block-name)))
>> 	(org-babel-goto-named-src-block block-name))
>>       (setq target-char (point)))
>>     (pop-to-buffer target-buffer)
>>     (goto-char target-char)))
>> --8<---------------cut here---------------end--------------->8---
>> 
>
> I tried it out, and realised that one needs to name the blocks
> (#+srcname:) to be able to use it. Then it jumps to the code block in
> the org file.
>

Have you tried this on un-named code blocks (with the latest Org-mode
from git)?  It should work for those as well -- it parses the name, and
uses org-babel-next-src-block to jump down the appropriate number of
blocks.

>
> Two more things (As pointed out in the other email) would be nice:
>
> 1) it would be nice to jump to the line of code in the Org-mode file
> which corresponds to the line in the code file
>

Agreed, I was planning on implementing this, it shouldn't be difficult.

>
> 2) It would be brilliant, if one could call the function from the
> Org-file buffer and enter the line number and then jump to the block /
> line in the block.
>

That's a great suggestions, I will certainly look at folding it in.

>
> In addition:
> 3) it would be very useful, if this function could be used with
> non-named source blocks.
>

As I said above, I /believe/ that it is usable as such now, however if
you could come up with an example where this fails, please do let me
know.

>
> But that function is already quite usefull.
>

Great, I'll post any future improvements I make to this thread, and
please do let me know if you run across errant behavior or new
potentially useful behavior.

Cheers -- Eric

>
> Thanks,
>
> Rainer
>
>
>> This is too large of a block of untested code to push into Org-mode now,
>> however please give it a try, and let me know if you think this could be
>> generally useful.  Hopefully after the feature-freeze we can fold
>> something like this into Babel to ease navigation between Org files and
>> their tangled offspring.
>> 
>> Cheers -- Eric
>> 
>> "Eric Schulte" <schulte.eric@gmail.com> writes:
>> 
>>> Hi Rainer,
>>>
>>> If I'm understand you correctly you want the absolute position (by LOC)
>>> of the lines of R code to be the same in both the original org file and
>>> the tangled file or R code.  I don't think this is possible.  It is
>>> possible to tangle code blocks in any order (not just the order in which
>>> they appear in the original org file), so there are many valid tangling
>>> scenarios in which this feature could not work.
>>>
>>> Rather, I think that it may make sense to have a function for jumping
>>> back and forth between tangled code blocks and the related Org file.  In
>>> that case the R errors could be followed to the tangled R code file,
>>> from which you could easily jump to the relevant line in the relevant
>>> code block in the Org file.  If you are tangling with comments, then it
>>> should be possible to have a function called from a line in a tangled
>>> code file which when called
>>>
>>> 1) finds it's enclosing comments
>>> 2) remembers it's offset from the comments (which would then be it's
>>>    offset in the code block in the Org file)
>>> 3) read the comment to learn which code block in which Org file it's
>>>    tangled from
>>> 4) jump to the relevant line, in the relevant block, in the relevant
>>>    file
>>>
>>> Similarly when called form within a code block in an Org file the
>>> function could
>>>
>>> 1) read it's header argument to find the relevant tangled code file
>>> 2) jump to that file
>>> 3) use the comments in that file to move to the appropriate section of
>>>    code and related line
>>>
>>> I'll think about such a function, and if it makes sense to implement it
>>> apart from a more general "activate org-mode links in comments" minor
>>> mode.  Any ideas or suggestions would be welcome!
>>>
>>> Thanks -- Eric
>>>
>>> Rainer M Krug <r.m.krug@gmail.com> writes:
>>>
>>>> Hi Eric,
>>>>
>>>> would it be possible, when tangling, to leave lines without source code in
>>>> the resulting code file as empty lines? The reasoning would be that error
>>>> messages (at least in R) give the line in which the error occurred. If the
>>>> line numbers in which the code sits would be preserved (by leaving empty
>>>> lines where no code is in the .org file), debugging would be much easier.
>>>>
>>>> By the way: I am using the after tangle hook and it works absolutely
>>>> perfectly.
>>>>
>>>> Thanks and cheers,
>>>>
>>>> Rainer

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [BABEL] tangling with leaving non-source code lines as empty lines?
  2010-07-13 17:22       ` Eric Schulte
@ 2010-07-15  8:00         ` Rainer M Krug
  0 siblings, 0 replies; 7+ messages in thread
From: Rainer M Krug @ 2010-07-15  8:00 UTC (permalink / raw)
  To: Eric Schulte; +Cc: emacs-orgmode, Dr Rainer M Krug

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 13/07/2010 19:22, Eric Schulte wrote:
> Hi Rainer,
> 
> Dr Rainer M Krug <r.m.krug@gmail.com> writes:
> 
>> On 13/07/2010 02:46, Eric Schulte wrote:
>>> Hi Rainer,
>>>
>>> With the tangling comments generated by the latest Org-mode, the
>>> following function should be able to jump from any code in a tangled
>>> code file back to the relevant block in the original Org-mode file.
>>
>> Wow - that was quick.
>>
>> Thanks.
>>
>>>
>>> --8<---------------cut here---------------start------------->8---
>>> (defun org-babel-tangle-jump-to-org ()
>>>   "Jump from a tangled code file to the related Org-mode file."
>>>   (interactive)
>>>   (let ((mid (point))
>>> 	target-buffer target-char
>>> 	start end link path block-name)
>>>     (save-window-excursion
>>>       (save-excursion
>>> 	(unless (and (re-search-backward org-bracket-link-analytic-regexp nil t)
>>> 		     (setq start (point))
>>> 		     (setq link (match-string 0))
>>> 		     (setq path (match-string 3))
>>> 		     (setq block-name (match-string 5))
>>> 		     (re-search-forward (concat " " (regexp-quote block-name)
>>> 						" ends here[\n\r]") nil t)
>>> 		     (setq end (point))
>>> 		     (< start mid) (< mid end))
>>> 	  (error "not in tangled code")))
>>>       (when (string-match "::" path)
>>> 	(setq path (substring path 0 (match-beginning 0))))
>>>       (find-file path) (setq target-buffer (current-buffer))
>>>       (goto-char start) (org-open-link-from-string link)
>>>       (if (string-match "[^ \t\n\r]:\\([[:digit:]]+\\)" block-name)
>>> 	  (org-babel-next-src-block
>>> 	   (string-to-int (match-string 1 block-name)))
>>> 	(org-babel-goto-named-src-block block-name))
>>>       (setq target-char (point)))
>>>     (pop-to-buffer target-buffer)
>>>     (goto-char target-char)))
>>> --8<---------------cut here---------------end--------------->8---
>>>
>>
>> I tried it out, and realised that one needs to name the blocks
>> (#+srcname:) to be able to use it. Then it jumps to the code block in
>> the org file.
>>
> 
> Have you tried this on un-named code blocks (with the latest Org-mode
> from git)?  It should work for those as well -- it parses the name, and
> uses org-babel-next-src-block to jump down the appropriate number of
> blocks.

OK - I tried it this morning (after updating org-mode), and it is
working even with unnamed blocks - perfect.

> 
>>
>> Two more things (As pointed out in the other email) would be nice:
>>
>> 1) it would be nice to jump to the line of code in the Org-mode file
>> which corresponds to the line in the code file
>>
> 
> Agreed, I was planning on implementing this, it shouldn't be difficult.

Great - thanks

> 
>>
>> 2) It would be brilliant, if one could call the function from the
>> Org-file buffer and enter the line number and then jump to the block /
>> line in the block.
>>
> 
> That's a great suggestions, I will certainly look at folding it in.

Perfect - I am looking forward to that.

> 
>>
>> In addition:
>> 3) it would be very useful, if this function could be used with
>> non-named source blocks.
>>
> 
> As I said above, I /believe/ that it is usable as such now, however if
> you could come up with an example where this fails, please do let me
> know.

Working - thanks.

> 
>>
>> But that function is already quite usefull.
>>
> 
> Great, I'll post any future improvements I make to this thread, and
> please do let me know if you run across errant behavior or new
> potentially useful behavior.

I am looking forward to any additions,

Cheers,

Rainer

> 
> Cheers -- Eric
> 
>>
>> Thanks,
>>
>> Rainer
>>
>>
>>> This is too large of a block of untested code to push into Org-mode now,
>>> however please give it a try, and let me know if you think this could be
>>> generally useful.  Hopefully after the feature-freeze we can fold
>>> something like this into Babel to ease navigation between Org files and
>>> their tangled offspring.
>>>
>>> Cheers -- Eric
>>>
>>> "Eric Schulte" <schulte.eric@gmail.com> writes:
>>>
>>>> Hi Rainer,
>>>>
>>>> If I'm understand you correctly you want the absolute position (by LOC)
>>>> of the lines of R code to be the same in both the original org file and
>>>> the tangled file or R code.  I don't think this is possible.  It is
>>>> possible to tangle code blocks in any order (not just the order in which
>>>> they appear in the original org file), so there are many valid tangling
>>>> scenarios in which this feature could not work.
>>>>
>>>> Rather, I think that it may make sense to have a function for jumping
>>>> back and forth between tangled code blocks and the related Org file.  In
>>>> that case the R errors could be followed to the tangled R code file,
>>>> from which you could easily jump to the relevant line in the relevant
>>>> code block in the Org file.  If you are tangling with comments, then it
>>>> should be possible to have a function called from a line in a tangled
>>>> code file which when called
>>>>
>>>> 1) finds it's enclosing comments
>>>> 2) remembers it's offset from the comments (which would then be it's
>>>>    offset in the code block in the Org file)
>>>> 3) read the comment to learn which code block in which Org file it's
>>>>    tangled from
>>>> 4) jump to the relevant line, in the relevant block, in the relevant
>>>>    file
>>>>
>>>> Similarly when called form within a code block in an Org file the
>>>> function could
>>>>
>>>> 1) read it's header argument to find the relevant tangled code file
>>>> 2) jump to that file
>>>> 3) use the comments in that file to move to the appropriate section of
>>>>    code and related line
>>>>
>>>> I'll think about such a function, and if it makes sense to implement it
>>>> apart from a more general "activate org-mode links in comments" minor
>>>> mode.  Any ideas or suggestions would be welcome!
>>>>
>>>> Thanks -- Eric
>>>>
>>>> Rainer M Krug <r.m.krug@gmail.com> writes:
>>>>
>>>>> Hi Eric,
>>>>>
>>>>> would it be possible, when tangling, to leave lines without source code in
>>>>> the resulting code file as empty lines? The reasoning would be that error
>>>>> messages (at least in R) give the line in which the error occurred. If the
>>>>> line numbers in which the code sits would be preserved (by leaving empty
>>>>> lines where no code is in the .org file), debugging would be much easier.
>>>>>
>>>>> By the way: I am using the after tangle hook and it works absolutely
>>>>> perfectly.
>>>>>
>>>>> Thanks and cheers,
>>>>>
>>>>> Rainer

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkw+wDYACgkQoYgNqgF2egoNmgCeL1ypgjwjT82r60x6yEyT5FF6
VwgAnA1GkoyEX4GoQmYjtctI+Q2t6S2s
=AVWc
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-07-15  8:01 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-07-12 15:19 [BABEL] tangling with leaving non-source code lines as empty lines? Rainer M Krug
2010-07-12 18:04 ` Eric Schulte
2010-07-13  0:46   ` Eric Schulte
2010-07-13  8:10     ` Dr Rainer M Krug
2010-07-13 17:22       ` Eric Schulte
2010-07-15  8:00         ` Rainer M Krug
2010-07-13  7:47   ` Dr Rainer M Krug

Code repositories for project(s) associated with this public 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).