emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Babel, Python and UTF-8
@ 2010-12-01 23:50 Vincent Beffara
  2010-12-02  1:18 ` Eric Schulte
  0 siblings, 1 reply; 25+ messages in thread
From: Vincent Beffara @ 2010-12-01 23:50 UTC (permalink / raw)
  To: emacs-orgmode


Hi,

I am discovering org-mode and org-babel, and wanted to try it out with
python code blocks. My use case would involve text processing, encoded
as UTF-8. Usually a python file has to contain a line to that effect,
saying sth like   # -*- coding: utf-8 -*-    (without which an error is
raised).

Is there a way to manage that during org-babel block evaluation ?

Thanks for your help !

       /v

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

* Re: Babel, Python and UTF-8
  2010-12-01 23:50 Babel, Python and UTF-8 Vincent Beffara
@ 2010-12-02  1:18 ` Eric Schulte
  2010-12-02  1:36   ` Vincent Beffara
  0 siblings, 1 reply; 25+ messages in thread
From: Eric Schulte @ 2010-12-02  1:18 UTC (permalink / raw)
  To: Vincent Beffara; +Cc: emacs-orgmode

Hi Vincent,

I would suggest just trying it out first and seeing if you get an error
without such a line.  Also, you could try adding the line to the
beginning of your code block.

If there is definitely a problem please reply to this thread and we
could easily add a header argument for this case, possibly named
":prefix" which could be used to specify such a code-block-prefix for
code evaluation.  This header argument could then be set globally or on
the file, heading, or code block level.

Best -- Eric

Vincent Beffara <vbeffara@ens-lyon.fr> writes:

> Hi,
>
> I am discovering org-mode and org-babel, and wanted to try it out with
> python code blocks. My use case would involve text processing, encoded
> as UTF-8. Usually a python file has to contain a line to that effect,
> saying sth like   # -*- coding: utf-8 -*-    (without which an error is
> raised).
>
> Is there a way to manage that during org-babel block evaluation ?
>
> Thanks for your help !
>
>        /v
>
>
> _______________________________________________
> 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] 25+ messages in thread

* Re: Babel, Python and UTF-8
  2010-12-02  1:18 ` Eric Schulte
@ 2010-12-02  1:36   ` Vincent Beffara
  2010-12-02  9:11     ` Sébastien Vauban
                       ` (2 more replies)
  0 siblings, 3 replies; 25+ messages in thread
From: Vincent Beffara @ 2010-12-02  1:36 UTC (permalink / raw)
  To: emacs-orgmode


Hi,

> I would suggest just trying it out first and seeing if you get an error
> without such a line.

Well, I do, that's why I'm asking ;-)

> Also, you could try adding the line to the beginning of your code
> block.

I tried like this :

--8<---------------cut here---------------start------------->8---
#+begin_src python
# -*- coding: utf-8 -*-
s = "é"
#+end_src
--8<---------------cut here---------------end--------------->8---

The error message tells me that the error happens on line 4, hence the
coding line ends up on line 3, and python only takes it into account if
it is one of the first two ... so it almost works, but it doesn't.

> If there is definitely a problem please reply to this thread and we
> could easily add a header argument for this case, possibly named
> ":prefix" which could be used to specify such a code-block-prefix for
> code evaluation.  This header argument could then be set globally or on
> the file, heading, or code block level.

That would be fantastic ! (And possibly useful in other cases as well
...)

Thanks,

        /vincent

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

* Re: Babel, Python and UTF-8
  2010-12-02  1:36   ` Vincent Beffara
@ 2010-12-02  9:11     ` Sébastien Vauban
  2010-12-02 19:34       ` Eric Schulte
  2010-12-02 14:29     ` Eric Schulte
  2010-12-02 16:09     ` Sébastien Vauban
  2 siblings, 1 reply; 25+ messages in thread
From: Sébastien Vauban @ 2010-12-02  9:11 UTC (permalink / raw)
  To: emacs-orgmode-mXXj517/zsQ

Hi Vincent and Eric,

Vincent Beffara wrote:
>> I would suggest just trying it out first and seeing if you get an error
>> without such a line.
>
> Well, I do, that's why I'm asking ;-)
>
>> Also, you could try adding the line to the beginning of your code
>> block.
>
> I tried like this :
>
> #+begin_src python
> # -*- coding: utf-8 -*-
> s = "é"
> #+end_src

I'm not sure to understand your problem. In fact, the problem is not about
"inserting a prefix to the block", it's about the coding system itself, I
guess.

Your "é" in your Org buffer, how is it encoded?  Is your Org buffer an UTF-8
one, or a Latin-1?

In the first case, I don't see why:

- it would fail
- it would even need to be specified

In the second, you want an ISO Latin 1 block of text to be tangled or executed
as UTF-8. Is this right?


> The error message tells me that the error happens on line 4, hence the
> coding line ends up on line 3, and python only takes it into account if
> it is one of the first two ... so it almost works, but it doesn't.
>
>> If there is definitely a problem please reply to this thread and we
>> could easily add a header argument for this case, possibly named
>> ":prefix" which could be used to specify such a code-block-prefix for
>> code evaluation.  This header argument could then be set globally or on
>> the file, heading, or code block level.

Isn't such a prefix already available through the "shebang" option: can't it
be multiline?  Anyway, I don't think it's the problem here...

Best regards,
  Seb

-- 
Sébastien Vauban


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

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

* Re: Re: Babel, Python and UTF-8
  2010-12-02  1:36   ` Vincent Beffara
  2010-12-02  9:11     ` Sébastien Vauban
@ 2010-12-02 14:29     ` Eric Schulte
  2010-12-02 16:12       ` Vincent Beffara
  2010-12-02 18:23       ` Dan Davison
  2010-12-02 16:09     ` Sébastien Vauban
  2 siblings, 2 replies; 25+ messages in thread
From: Eric Schulte @ 2010-12-02 14:29 UTC (permalink / raw)
  To: Vincent Beffara; +Cc: emacs-orgmode

Hi,

I've just pushed up a new prefix header argument.  This header argument
only has meaning for python code blocks (since it is tied into
evaluation each language would have to handle it separately).  This is
only used during external evaluation (i.e. not when :session is
specified) and the value of the :prefix argument is prepended to the
temporary file evaluated by python.

The following demonstrate its usage:

** Python requires a utf-8 coding prefix
#+begin_src python :prefix # -*- coding: utf-8 -*- :return s
s = "é"
#+end_src

#+results:
: é

#+begin_src python :prefix # -*- coding: utf-8 -*- :results output
s = "é"
print(s)
#+end_src

#+results:
: é

Best -- Eric

Vincent Beffara <vbeffara@ens-lyon.fr> writes:

> Hi,
>
>> I would suggest just trying it out first and seeing if you get an error
>> without such a line.
>
> Well, I do, that's why I'm asking ;-)
>
>> Also, you could try adding the line to the beginning of your code
>> block.
>
> I tried like this :
>
> #+begin_src python
> # -*- coding: utf-8 -*-
> s = "é"
> #+end_src
>
> The error message tells me that the error happens on line 4, hence the
> coding line ends up on line 3, and python only takes it into account if
> it is one of the first two ... so it almost works, but it doesn't.
>
>> If there is definitely a problem please reply to this thread and we
>> could easily add a header argument for this case, possibly named
>> ":prefix" which could be used to specify such a code-block-prefix for
>> code evaluation.  This header argument could then be set globally or on
>> the file, heading, or code block level.
>
> That would be fantastic ! (And possibly useful in other cases as well
> ...)
>
> Thanks,
>
>         /vincent
>
>
> _______________________________________________
> 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] 25+ messages in thread

* Re: Babel, Python and UTF-8
  2010-12-02  1:36   ` Vincent Beffara
  2010-12-02  9:11     ` Sébastien Vauban
  2010-12-02 14:29     ` Eric Schulte
@ 2010-12-02 16:09     ` Sébastien Vauban
  2010-12-02 16:44       ` Vincent Beffara
  2 siblings, 1 reply; 25+ messages in thread
From: Sébastien Vauban @ 2010-12-02 16:09 UTC (permalink / raw)
  To: emacs-orgmode-mXXj517/zsQ

Hi Vincent and Eric,

Vincent Beffara wrote:
>> I would suggest just trying it out first and seeing if you get an error
>> without such a line.
>
> Well, I do, that's why I'm asking ;-)
>
>> Also, you could try adding the line to the beginning of your code
>> block.
>
> I tried like this :
>
> #+begin_src python
> # -*- coding: utf-8 -*-
> s = "é"
> #+end_src

I'm not sure to understand your problem. In fact, the problem is not about
"inserting a prefix to the block", it's about the coding system itself, I
guess.

Your "é" in your Org buffer, how is it encoded?  Is your Org buffer an UTF-8
one, or a Latin-1?

In the first case, I don't see why:

- it would fail
- it would even need to be specified

In the second, you want an ISO Latin 1 block of text to be tangled or executed
as UTF-8. Is this right?


> The error message tells me that the error happens on line 4, hence the
> coding line ends up on line 3, and python only takes it into account if
> it is one of the first two ... so it almost works, but it doesn't.
>
>> If there is definitely a problem please reply to this thread and we
>> could easily add a header argument for this case, possibly named
>> ":prefix" which could be used to specify such a code-block-prefix for
>> code evaluation.  This header argument could then be set globally or on
>> the file, heading, or code block level.

Isn't such a prefix already available through the "shebang" option: can't it
be multiline?  Anyway, I don't think it's the problem here...

Best regards,
  Seb

-- 
Sébastien Vauban


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

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

* Re: Babel, Python and UTF-8
  2010-12-02 14:29     ` Eric Schulte
@ 2010-12-02 16:12       ` Vincent Beffara
  2010-12-02 18:23       ` Dan Davison
  1 sibling, 0 replies; 25+ messages in thread
From: Vincent Beffara @ 2010-12-02 16:12 UTC (permalink / raw)
  To: emacs-orgmode


Hi,

> I've just pushed up a new prefix header argument. 

Fantastic ! It works exactly as needed. Thanks a lot !

> This header argument only has meaning for python code blocks (since it
> is tied into evaluation each language would have to handle it
> separately).

That's fine, most cases can probably be handled using something like
<<prefix>> anyway. It is just Python insisting to find the coding
instruction in the first 2 lines that causes trouble, so a specific
implementation makes sense.

Thanks again,

       /v

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

* Re: Babel, Python and UTF-8
  2010-12-02 16:09     ` Sébastien Vauban
@ 2010-12-02 16:44       ` Vincent Beffara
  2010-12-03 14:56         ` Christopher Allan Webber
  0 siblings, 1 reply; 25+ messages in thread
From: Vincent Beffara @ 2010-12-02 16:44 UTC (permalink / raw)
  To: emacs-orgmode


>> #+begin_src python
>> # -*- coding: utf-8 -*-
>> s = "é"
>> #+end_src
>
> I'm not sure to understand your problem. In fact, the problem is not
> about "inserting a prefix to the block", it's about the coding system
> itself, I guess.
>
> Your "é" in your Org buffer, how is it encoded?  Is your Org buffer an
> UTF-8 one, or a Latin-1?

Doesn't really matter, in fact ... Whenever a python file contains a
non-ascii character (utf-8 or latin-1) it insists on finding an
indication of the encoding within the file. If latin-1, it finds \xe9,
if utf-8, it finds \xc3, but in both cases it raises this:

# SyntaxError: Non-ASCII character '\xe9' in file /Users/vincent/toto.py
# on line 1, but no encoding declared; see
# http://www.python.org/peps/pep-0263.html for details

That's even if the character in question lies within a string. That
makes a lot of sense in terms of portability, but it makes on-the-fly
evaluation a bit more complicated.

> In the second, you want an ISO Latin 1 block of text to be tangled or
> executed as UTF-8. Is this right?

No, I want everything in utf-8, there is no converting to do anywhere,
just telling python that it is utf-8.

> Isn't such a prefix already available through the "shebang" option:
> can't it be multiline?  Anyway, I don't think it's the problem here...

Hmm, didn't know about :shebang, but it seems to be ignored (at least
for python) because this works without a syntax error:

--8<---------------cut here---------------start------------->8---
#+begin_src python :shebang sldfkj
return 1
#+end_src
--8<---------------cut here---------------end--------------->8---

Anyway, :prefix cannot hurt I guess ...

        /v

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

* Re: Babel, Python and UTF-8
  2010-12-02 14:29     ` Eric Schulte
  2010-12-02 16:12       ` Vincent Beffara
@ 2010-12-02 18:23       ` Dan Davison
  2010-12-02 19:36         ` Eric Schulte
  1 sibling, 1 reply; 25+ messages in thread
From: Dan Davison @ 2010-12-02 18:23 UTC (permalink / raw)
  To: Eric Schulte; +Cc: Vincent Beffara, emacs-orgmode

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=us-ascii, Size: 2893 bytes --]

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

> Hi,
>
> I've just pushed up a new prefix header argument.

"preamble" might be a better name? or "header"? prefix makes me think of
adding a string onto the front of a string[1]; preamble and header are
used by e.g. latex to refer to prelimary lines at the top of a file. For
obscure options like this it might be OK to use a longer name
(e.g. ":header-line"), especially now we have multiline header args
with #+header.

>  This header argument
> only has meaning for python code blocks

but might in the future be used by others?

Dan

[1]: accurate i know, but many people won't think of a block as a
character string.


> (since it is tied into
> evaluation each language would have to handle it separately).  This is
> only used during external evaluation (i.e. not when :session is
> specified) and the value of the :prefix argument is prepended to the
> temporary file evaluated by python.
>
> The following demonstrate its usage:
>
> ** Python requires a utf-8 coding prefix
> #+begin_src python :prefix # -*- coding: utf-8 -*- :return s
> s = "é"
> #+end_src
>
> #+results:
> : é
>
> #+begin_src python :prefix # -*- coding: utf-8 -*- :results output
> s = "é"
> print(s)
> #+end_src
>
> #+results:
> : é
>
> Best -- Eric
>
> Vincent Beffara <vbeffara@ens-lyon.fr> writes:
>
>> Hi,
>>
>>> I would suggest just trying it out first and seeing if you get an error
>>> without such a line.
>>
>> Well, I do, that's why I'm asking ;-)
>>
>>> Also, you could try adding the line to the beginning of your code
>>> block.
>>
>> I tried like this :
>>
>> #+begin_src python
>> # -*- coding: utf-8 -*-
>> s = "é"
>> #+end_src
>>
>> The error message tells me that the error happens on line 4, hence the
>> coding line ends up on line 3, and python only takes it into account if
>> it is one of the first two ... so it almost works, but it doesn't.
>>
>>> If there is definitely a problem please reply to this thread and we
>>> could easily add a header argument for this case, possibly named
>>> ":prefix" which could be used to specify such a code-block-prefix for
>>> code evaluation.  This header argument could then be set globally or on
>>> the file, heading, or code block level.
>>
>> That would be fantastic ! (And possibly useful in other cases as well
>> ...)
>>
>> Thanks,
>>
>>         /vincent
>>
>>
>> _______________________________________________
>> 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
>
> _______________________________________________
> 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] 25+ messages in thread

* Re: Re: Babel, Python and UTF-8
  2010-12-02  9:11     ` Sébastien Vauban
@ 2010-12-02 19:34       ` Eric Schulte
  2010-12-02 20:10         ` Sébastien Vauban
  0 siblings, 1 reply; 25+ messages in thread
From: Eric Schulte @ 2010-12-02 19:34 UTC (permalink / raw)
  To: Sébastien Vauban; +Cc: emacs-orgmode

Sébastien Vauban <wxhgmqzgwmuf@spammotel.com> writes:

>
> Isn't such a prefix already available through the "shebang" option: can't it
> be multiline?  Anyway, I don't think it's the problem here...
>

The :shebang header argument is only used for tangling, not during
evaluation, however if you ever needed to tangle python code blocks with
non-ASCII encodings this would be the appropriate solution.

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

* Re: Babel, Python and UTF-8
  2010-12-02 18:23       ` Dan Davison
@ 2010-12-02 19:36         ` Eric Schulte
  2010-12-02 20:05           ` Sébastien Vauban
  0 siblings, 1 reply; 25+ messages in thread
From: Eric Schulte @ 2010-12-02 19:36 UTC (permalink / raw)
  To: Dan Davison; +Cc: Vincent Beffara, emacs-orgmode

Dan Davison <dandavison7@gmail.com> writes:

> "Eric Schulte" <schulte.eric@gmail.com> writes:
>
>> Hi,
>>
>> I've just pushed up a new prefix header argument.
>
> "preamble" might be a better name? or "header"? prefix makes me think of
> adding a string onto the front of a string[1];

Absolutely, "prefix" was just the most obvious to me and I certainly
don't claim that makes it the most obvious choice globally :)

I would lean against "header" since we already talk about "header
arguments", but I think "preamble" is an improvement.  Does anyone have
a better suggestion?

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

* Re: Babel, Python and UTF-8
  2010-12-02 19:36         ` Eric Schulte
@ 2010-12-02 20:05           ` Sébastien Vauban
  0 siblings, 0 replies; 25+ messages in thread
From: Sébastien Vauban @ 2010-12-02 20:05 UTC (permalink / raw)
  To: emacs-orgmode-mXXj517/zsQ

Hi Eric and Dan,

"Eric Schulte" wrote:
> Dan Davison <dandavison7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> writes:
>> "Eric Schulte" <schulte.eric-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> writes:
>>>
>>> I've just pushed up a new prefix header argument.
>>
>> "preamble" might be a better name? or "header"? prefix makes me think of
>> adding a string onto the front of a string[1];
>
> Absolutely, "prefix" was just the most obvious to me and I certainly
> don't claim that makes it the most obvious choice globally :)
>
> I would lean against "header" since we already talk about "header
> arguments", but I think "preamble" is an improvement.  Does anyone have
> a better suggestion?

I second Dan's comment, and fully am in favor of preamble... Of course, then,
one might ask for postamble ;-)

What about shebang?  Isn't it a preamble as well?

Best regards,
  Seb

-- 
Sébastien Vauban


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

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

* Re: Babel, Python and UTF-8
  2010-12-02 19:34       ` Eric Schulte
@ 2010-12-02 20:10         ` Sébastien Vauban
  2010-12-03 10:27           ` Vincent Beffara
  0 siblings, 1 reply; 25+ messages in thread
From: Sébastien Vauban @ 2010-12-02 20:10 UTC (permalink / raw)
  To: emacs-orgmode-mXXj517/zsQ

Hi Eric,

"Eric Schulte" wrote:
> Sébastien Vauban <wxhgmqzgwmuf-geNee64TY+gS+FvcfC7Uqw@public.gmane.org> writes:
>> Isn't such a prefix already available through the "shebang" option: can't it
>> be multiline?  Anyway, I don't think it's the problem here...
>
> The :shebang header argument is only used for tangling, not during
> evaluation, however if you ever needed to tangle python code blocks with
> non-ASCII encodings this would be the appropriate solution.

Sorry, reading this after the other post...

But, does it still make sense to make that distinction:

- some sort of preamble only for tangling?
- a preamble for evaluation (and tangling)?

Why would the shebang not be inserted as well for evaluation?

Do you/we need:

- one only for eval,
- one only for tangling,
- and one for both?

Depending on that answer, I would maybe make it more explicit what's the role
of each, like:

- :eval-preamble
- :tangle-preambel
- :preamble

But I'm wondering if one sort of preamble wouldn't be enough (and be used both
for tangling and evaluating)?

Best regards,
  Seb

-- 
Sébastien Vauban


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

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

* Re: Babel, Python and UTF-8
  2010-12-02 20:10         ` Sébastien Vauban
@ 2010-12-03 10:27           ` Vincent Beffara
  2010-12-03 11:27             ` Sébastien Vauban
  2010-12-03 14:30             ` Eric Schulte
  0 siblings, 2 replies; 25+ messages in thread
From: Vincent Beffara @ 2010-12-03 10:27 UTC (permalink / raw)
  To: emacs-orgmode


Hi,

"preamble" sounds fine (and it would be excellent to allow for a code
block as a preamble, instead of a string in the header or as an
alternative, because preambles once they are allowed tend to grow
uncontrollably ;->)

>> The :shebang header argument is only used for tangling, not during
>> evaluation, however if you ever needed to tangle python code blocks with
>> non-ASCII encodings this would be the appropriate solution.
>
> Sorry, reading this after the other post...
>
> But, does it still make sense to make that distinction:
>
> - some sort of preamble only for tangling?
> - a preamble for evaluation (and tangling)?

One naive question : why is the code path different for tangling and
evaluation ? One would think that a natural way for evaluation would be
to tangle the current block (plus included noweb stuff etc) into a
temporary file and eval that file ... and that would enable shebang for
evaluation as well. There must be something I am missing here.

           /v

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

* Re: Babel, Python and UTF-8
  2010-12-03 10:27           ` Vincent Beffara
@ 2010-12-03 11:27             ` Sébastien Vauban
  2010-12-03 14:30             ` Eric Schulte
  1 sibling, 0 replies; 25+ messages in thread
From: Sébastien Vauban @ 2010-12-03 11:27 UTC (permalink / raw)
  To: emacs-orgmode-mXXj517/zsQ

Hi Vincent,

Vincent Beffara wrote:
> "preamble" sounds fine (and it would be excellent to allow for a code
> block as a preamble, instead of a string in the header or as an
> alternative, because preambles once they are allowed tend to grow
> uncontrollably ;->)

If you want a bigger preamble, just use noweb expansion:

#+begin_src python :noweb yes
<<preamble>>
...
my code
...
#+end_src

and have somewhere:

#+srcname: preamble
#+begin_src python
-*- coding-system: utf-8 -*-
...
rest of my preamble
...
#+end_src

Best regards,
  Seb

-- 
Sébastien Vauban


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

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

* Re: Re: Babel, Python and UTF-8
  2010-12-03 10:27           ` Vincent Beffara
  2010-12-03 11:27             ` Sébastien Vauban
@ 2010-12-03 14:30             ` Eric Schulte
  2010-12-03 15:43               ` Vincent Beffara
  1 sibling, 1 reply; 25+ messages in thread
From: Eric Schulte @ 2010-12-03 14:30 UTC (permalink / raw)
  To: Vincent Beffara; +Cc: emacs-orgmode

Hi,

Vincent Beffara <vbeffara@ens-lyon.fr> writes:

> Hi,
>
> "preamble" sounds fine

As this seems to be the general consensus I've replaced "prefix" with
"preamble" as the header argument name

> (and it would be excellent to allow for a code block as a preamble,
> instead of a string in the header or as an alternative, because
> preambles once they are allowed tend to grow uncontrollably ;->)
>

This is currently possible using the `sbe' function.  Arbitrary emacs
lisp can be placed inside of header arguments, and the `sbe' take the
name of a code block and returns its result. e.g.

** Python requires a utf-8 coding prefix
#+source: my-preamble
#+begin_src python :return preamble
  preamble = "# -*- coding: utf-8 -*-"
#+end_src

#+begin_src python :preamble (sbe my-preamble) :return s
s = "é"
#+end_src

#+results:
: é

#+begin_src python :preamble # -*- coding: utf-8 -*- :results output
s = "é"
print(s)
#+end_src

#+results:
: é

>
>>> The :shebang header argument is only used for tangling, not during
>>> evaluation, however if you ever needed to tangle python code blocks with
>>> non-ASCII encodings this would be the appropriate solution.
>>
>> Sorry, reading this after the other post...
>>
>> But, does it still make sense to make that distinction:
>>
>> - some sort of preamble only for tangling?
>> - a preamble for evaluation (and tangling)?
>
> One naive question : why is the code path different for tangling and
> evaluation ? One would think that a natural way for evaluation would be
> to tangle the current block (plus included noweb stuff etc) into a
> temporary file and eval that file ... and that would enable shebang for
> evaluation as well. There must be something I am missing here.
>

Tangling works for *any* programming language, even those which have yet
to be created and have no explicit Emacs or Org-mode support, this is
because on tangling the code block is simply treated as text.

Evaluation requires language specific support for both performing the
evaluation and collecting the result.  Evaluation can (for example) be
performed using an external file or using a persistent session.  Even
when using an external file the contents of the file are often very
different when tangling and exporting, e.g.

#+source: my-preamble
#+begin_src python :return preamble
  preamble = "# -*- coding: utf-8 -*-"
#+end_src

tangles to the following (possibly with comments)

--8<---------------cut here---------------start------------->8---
preamble = "# -*- coding: utf-8 -*-"
--8<---------------cut here---------------end--------------->8---

and is evaluated as the following

--8<---------------cut here---------------start------------->8---
def main():
  preamble = "# -*- coding: utf-8 -*-"
  return preamble

open('temporary-result-collection-file', 'w').write( pprint.pformat(main()) )
--8<---------------cut here---------------end--------------->8---

Best -- Eric

>
>            /v
>
>
> _______________________________________________
> 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] 25+ messages in thread

* Re: Re: Babel, Python and UTF-8
  2010-12-02 16:44       ` Vincent Beffara
@ 2010-12-03 14:56         ` Christopher Allan Webber
  0 siblings, 0 replies; 25+ messages in thread
From: Christopher Allan Webber @ 2010-12-03 14:56 UTC (permalink / raw)
  To: Vincent Beffara; +Cc: emacs-orgmode

(Also worth mentioning that python 3 allows you to use actual unicode
characters inside strings in the file, not \xff chars; not sure if
org-babel needs to change its habits between python2 and python3?)

Vincent Beffara <vbeffara@ens-lyon.fr> writes:

>>> #+begin_src python
>>> # -*- coding: utf-8 -*-
>>> s = "é"
>>> #+end_src
>>
>> I'm not sure to understand your problem. In fact, the problem is not
>> about "inserting a prefix to the block", it's about the coding system
>> itself, I guess.
>>
>> Your "é" in your Org buffer, how is it encoded?  Is your Org buffer an
>> UTF-8 one, or a Latin-1?
>
> Doesn't really matter, in fact ... Whenever a python file contains a
> non-ascii character (utf-8 or latin-1) it insists on finding an
> indication of the encoding within the file. If latin-1, it finds \xe9,
> if utf-8, it finds \xc3, but in both cases it raises this:
>
> # SyntaxError: Non-ASCII character '\xe9' in file /Users/vincent/toto.py
> # on line 1, but no encoding declared; see
> # http://www.python.org/peps/pep-0263.html for details
>
> That's even if the character in question lies within a string. That
> makes a lot of sense in terms of portability, but it makes on-the-fly
> evaluation a bit more complicated.
>
>> In the second, you want an ISO Latin 1 block of text to be tangled or
>> executed as UTF-8. Is this right?
>
> No, I want everything in utf-8, there is no converting to do anywhere,
> just telling python that it is utf-8.
>
>> Isn't such a prefix already available through the "shebang" option:
>> can't it be multiline?  Anyway, I don't think it's the problem here...
>
> Hmm, didn't know about :shebang, but it seems to be ignored (at least
> for python) because this works without a syntax error:
>
> #+begin_src python :shebang sldfkj
> return 1
> #+end_src
>
> Anyway, :prefix cannot hurt I guess ...
>
>         /v
>
>
> _______________________________________________
> 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] 25+ messages in thread

* Re: Babel, Python and UTF-8
  2010-12-03 14:30             ` Eric Schulte
@ 2010-12-03 15:43               ` Vincent Beffara
  2010-12-05 15:30                 ` Eric Schulte
  0 siblings, 1 reply; 25+ messages in thread
From: Vincent Beffara @ 2010-12-03 15:43 UTC (permalink / raw)
  To: emacs-orgmode


Hi,

>> (and it would be excellent to allow for a code block as a preamble,
>> instead of a string in the header or as an alternative, because
>> preambles once they are allowed tend to grow uncontrollably ;->)
>
> This is currently possible using the `sbe' function.  Arbitrary emacs
> lisp can be placed inside of header arguments, and the `sbe' take the
> name of a code block and returns its result.

Very cool ! That does all I want, thanks for the info. For multi-line it
is a bit heavy to write, with lots of \n and preamble .= "lskjd", but I
can live with that. Unless there is a way already to write something
like this ?

--8<---------------cut here---------------start------------->8---
#+source: my-preamble
#+begin_src python :return preamble
  # -*- coding: utf-8 -*-"
  import os,sys,whatever
#+end_src

#+begin_src python :preamble (org-babel-get-and-expand-source-code-body my-preamble) :return s
  s = "é"
#+end_src
--8<---------------cut here---------------end--------------->8---

There is org-babel-get-src-block-info but it looks at the block around
(point), not by name ... so I guess it would not be too hard to write
the extraction method, but it might be somewhere in the code already.

>> One naive question : why is the code path different for tangling and
>> evaluation ? One would think that a natural way for evaluation would be
>> to tangle the current block (plus included noweb stuff etc) into a
>> temporary file and eval that file ... and that would enable shebang for
>> evaluation as well. There must be something I am missing here.
>
> Tangling works for *any* programming language, even those which have yet
> to be created and have no explicit Emacs or Org-mode support, this is
> because on tangling the code block is simply treated as text.

As far as I understood from testing, tangling does adapt to the language
(at least to implement :var in a suitable way), so I was under the
impression that evaluating could be implemented as some kind of wrapping
around the tangled output - and obviously the wrapping would have to be
language-specific even if for the most part the tanglong is not.

I am just discovering all of this, sorry if I have horrible
misconceptions about the thing ...

Regards,

        /v

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

* Re: Re: Babel, Python and UTF-8
  2010-12-03 15:43               ` Vincent Beffara
@ 2010-12-05 15:30                 ` Eric Schulte
  2010-12-06  9:42                   ` Dan Davison
  0 siblings, 1 reply; 25+ messages in thread
From: Eric Schulte @ 2010-12-05 15:30 UTC (permalink / raw)
  To: Vincent Beffara; +Cc: emacs-orgmode

Vincent Beffara <vbeffara@ens-lyon.fr> writes:

> Hi,
>
>>> (and it would be excellent to allow for a code block as a preamble,
>>> instead of a string in the header or as an alternative, because
>>> preambles once they are allowed tend to grow uncontrollably ;->)
>>
>> This is currently possible using the `sbe' function.  Arbitrary emacs
>> lisp can be placed inside of header arguments, and the `sbe' take the
>> name of a code block and returns its result.
>
> Very cool ! That does all I want, thanks for the info. For multi-line it
> is a bit heavy to write, with lots of \n and preamble .= "lskjd", but I
> can live with that. Unless there is a way already to write something
> like this ?
>
> #+source: my-preamble
> #+begin_src python :return preamble
>   # -*- coding: utf-8 -*-"
>   import os,sys,whatever
> #+end_src
>
> #+begin_src python :preamble (org-babel-get-and-expand-source-code-body my-preamble) :return s
>   s = "é"
> #+end_src
>
> There is org-babel-get-src-block-info but it looks at the block around
> (point), not by name ... so I guess it would not be too hard to write
> the extraction method, but it might be somewhere in the code already.
>

Yes, the following uses an internal Babel function, but is probably much
simpler

#+results: my-preamble
: # -*- coding: utf-8 -*-
: import os,sys,whatever

#+begin_src python :preamble (org-babel-ref-resolve "my-preamble") :return s
s = "é"
#+end_src

Note that as written this will return the following python error

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
ImportError: No module named whatever

>
>>> One naive question : why is the code path different for tangling and
>>> evaluation ? One would think that a natural way for evaluation would be
>>> to tangle the current block (plus included noweb stuff etc) into a
>>> temporary file and eval that file ... and that would enable shebang for
>>> evaluation as well. There must be something I am missing here.
>>
>> Tangling works for *any* programming language, even those which have yet
>> to be created and have no explicit Emacs or Org-mode support, this is
>> because on tangling the code block is simply treated as text.
>
> As far as I understood from testing, tangling does adapt to the language
> (at least to implement :var in a suitable way), so I was under the
> impression that evaluating could be implemented as some kind of wrapping
> around the tangled output - and obviously the wrapping would have to be
> language-specific even if for the most part the tanglong is not.
>

Yes, some language specific features (e.g. variable expansion) can be
used by the tangling mechanisms if such features are defined for the
language in question, however tangling can be done in the absence of any
language specific features and thus works for any arbitrary language.

That shebang and preamble should remain separate for the other reasons
mentioned in my previous email.

>
> I am just discovering all of this, sorry if I have horrible
> misconceptions about the thing ...
>

No problem, it is a fairly (but I don't think overly) complex system.

>
> Regards,
>
>         /v
>
>
> _______________________________________________
> 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] 25+ messages in thread

* Re: Babel, Python and UTF-8
  2010-12-05 15:30                 ` Eric Schulte
@ 2010-12-06  9:42                   ` Dan Davison
  2010-12-06 11:53                     ` Eric S Fraga
  2010-12-06 16:42                     ` Thomas S. Dye
  0 siblings, 2 replies; 25+ messages in thread
From: Dan Davison @ 2010-12-06  9:42 UTC (permalink / raw)
  To: Eric Schulte; +Cc: Vincent Beffara, emacs-orgmode

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

> Vincent Beffara <vbeffara@ens-lyon.fr> writes:
>
>> Hi,
>>
>>>> (and it would be excellent to allow for a code block as a preamble,
>>>> instead of a string in the header or as an alternative, because
>>>> preambles once they are allowed tend to grow uncontrollably ;->)
>>>
>>> This is currently possible using the `sbe' function.  Arbitrary emacs
>>> lisp can be placed inside of header arguments, and the `sbe' take the
>>> name of a code block and returns its result.

This makes me think of another good use of the sbe ("src block eval")
function. I'm often seeing Org documents with a src block like this,

#+source: essential-document-config
#+begin_src emacs-lisp
 ;; some essential document-specific configuration
#+end_src

and some instructions saying something like "To use this document, first
evaluate this code block".

This can be automated by using sbe in a local variables line at the end
of the Org file:

# Local variables:
# eval:(sbe "essential-document-config")
# End:

When the file is first opened, Emacs will evaluate the set-up blocks
(after asking for confirmation).

This isn't restricted to configuration of Emacs variables with
emacs-lisp blocks; eval lines could reference blocks in any language,
for example to start an ESS session and run some preparatory code, etc,
e.g.

#+source: document-config
#+begin_src emacs-lisp
(set (make-local-variable 'org-edit-src-content-indentation) 0)
#+end_src

#+source: start-ess
#+begin_src R :session *R session*
  a <- 1
#+end_src

# Local variables:
# eval:(sbe "document-config")
# eval:(sbe "start-ess")
# End:


Dan

>>
>> Very cool ! That does all I want, thanks for the info. For multi-line it
>> is a bit heavy to write, with lots of \n and preamble .= "lskjd", but I
>> can live with that. Unless there is a way already to write something
>> like this ?
>>
>> #+source: my-preamble
>> #+begin_src python :return preamble
>>   # -*- coding: utf-8 -*-"
>>   import os,sys,whatever
>> #+end_src
>>
>> #+begin_src python :preamble (org-babel-get-and-expand-source-code-body my-preamble) :return s
>>   s = "é"
>> #+end_src
>>
>> There is org-babel-get-src-block-info but it looks at the block around
>> (point), not by name ... so I guess it would not be too hard to write
>> the extraction method, but it might be somewhere in the code already.
>>
>
> Yes, the following uses an internal Babel function, but is probably much
> simpler
>
> #+results: my-preamble
> : # -*- coding: utf-8 -*-
> : import os,sys,whatever
>
> #+begin_src python :preamble (org-babel-ref-resolve "my-preamble") :return s
> s = ""
> #+end_src
>
> Note that as written this will return the following python error
>
> Traceback (most recent call last):
>   File "<stdin>", line 2, in <module>
> ImportError: No module named whatever
>
>>
>>>> One naive question : why is the code path different for tangling and
>>>> evaluation ? One would think that a natural way for evaluation would be
>>>> to tangle the current block (plus included noweb stuff etc) into a
>>>> temporary file and eval that file ... and that would enable shebang for
>>>> evaluation as well. There must be something I am missing here.
>>>
>>> Tangling works for *any* programming language, even those which have yet
>>> to be created and have no explicit Emacs or Org-mode support, this is
>>> because on tangling the code block is simply treated as text.
>>
>> As far as I understood from testing, tangling does adapt to the language
>> (at least to implement :var in a suitable way), so I was under the
>> impression that evaluating could be implemented as some kind of wrapping
>> around the tangled output - and obviously the wrapping would have to be
>> language-specific even if for the most part the tanglong is not.
>>
>
> Yes, some language specific features (e.g. variable expansion) can be
> used by the tangling mechanisms if such features are defined for the
> language in question, however tangling can be done in the absence of any
> language specific features and thus works for any arbitrary language.
>
> That shebang and preamble should remain separate for the other reasons
> mentioned in my previous email.
>
>>
>> I am just discovering all of this, sorry if I have horrible
>> misconceptions about the thing ...
>>
>
> No problem, it is a fairly (but I don't think overly) complex system.
>
>>
>> Regards,
>>
>>         /v
>>
>>
>> _______________________________________________
>> 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
>
> _______________________________________________
> 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] 25+ messages in thread

* Re: Re: Babel, Python and UTF-8
  2010-12-06  9:42                   ` Dan Davison
@ 2010-12-06 11:53                     ` Eric S Fraga
  2010-12-06 16:42                     ` Thomas S. Dye
  1 sibling, 0 replies; 25+ messages in thread
From: Eric S Fraga @ 2010-12-06 11:53 UTC (permalink / raw)
  To: Dan Davison; +Cc: emacs-orgmode

Dan Davison <dandavison7@gmail.com> writes:
> This makes me think of another good use of the sbe ("src block eval")
> function. I'm often seeing Org documents with a src block like this,
>
> #+source: essential-document-config
> #+begin_src emacs-lisp
>  ;; some essential document-specific configuration
> #+end_src
>
> and some instructions saying something like "To use this document, first
> evaluate this code block".
>
> This can be automated by using sbe in a local variables line at the end
> of the Org file:
>
> # Local variables:
> # eval:(sbe "essential-document-config")
> # End:

This is *really* nice.  Thanks!

-- 
: Eric S Fraga (GnuPG: 0xC89193D8FFFCF67D) in Emacs 23.2.1
: using Org-mode version 7.3 (release_7.3.211.g6388.dirty)

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

* Re: Re: Babel, Python and UTF-8
  2010-12-06  9:42                   ` Dan Davison
  2010-12-06 11:53                     ` Eric S Fraga
@ 2010-12-06 16:42                     ` Thomas S. Dye
  2010-12-06 18:07                       ` Achim Gratz
  2010-12-06 18:23                       ` Dan Davison
  1 sibling, 2 replies; 25+ messages in thread
From: Thomas S. Dye @ 2010-12-06 16:42 UTC (permalink / raw)
  To: Dan Davison; +Cc: Vincent Beffara, emacs-orgmode

Hi Dan,

Emacs configuration is one of the highest barriers to entry for  
potential adopters of Org-mode, IMO.  The idea of context-sensitive  
configuration is potentially terrific.  It gets the user to work more  
quickly than would otherwise be the case.  The problem I've run into  
is that exiting a buffer doesn't change the configuration back to some  
initial, or base, state.  I'm on to the next task but still configured  
to do the last thing.

I'm not a software engineer, so this idea might be wacky, but it seems  
to me that some code to restore the user's start-up settings would be  
a useful, standard part of an Org-mode file, something like the export  
template that many (most?) org-mode files use.   I think it would be  
handy to be able to stick something simple in my Org-mode file so that  
I was confident I knew exactly how Emacs was configured while I was  
using that file.

Tom

On Dec 5, 2010, at 11:42 PM, Dan Davison wrote:

> "Eric Schulte" <schulte.eric@gmail.com> writes:
>
>> Vincent Beffara <vbeffara@ens-lyon.fr> writes:
>>
>>> Hi,
>>>
>>>>> (and it would be excellent to allow for a code block as a  
>>>>> preamble,
>>>>> instead of a string in the header or as an alternative, because
>>>>> preambles once they are allowed tend to grow uncontrollably ;->)
>>>>
>>>> This is currently possible using the `sbe' function.  Arbitrary  
>>>> emacs
>>>> lisp can be placed inside of header arguments, and the `sbe' take  
>>>> the
>>>> name of a code block and returns its result.
>
> This makes me think of another good use of the sbe ("src block eval")
> function. I'm often seeing Org documents with a src block like this,
>
> #+source: essential-document-config
> #+begin_src emacs-lisp
> ;; some essential document-specific configuration
> #+end_src
>
> and some instructions saying something like "To use this document,  
> first
> evaluate this code block".
>
> This can be automated by using sbe in a local variables line at the  
> end
> of the Org file:
>
> # Local variables:
> # eval:(sbe "essential-document-config")
> # End:
>
> When the file is first opened, Emacs will evaluate the set-up blocks
> (after asking for confirmation).
>
> This isn't restricted to configuration of Emacs variables with
> emacs-lisp blocks; eval lines could reference blocks in any language,
> for example to start an ESS session and run some preparatory code,  
> etc,
> e.g.
>
> #+source: document-config
> #+begin_src emacs-lisp
> (set (make-local-variable 'org-edit-src-content-indentation) 0)
> #+end_src
>
> #+source: start-ess
> #+begin_src R :session *R session*
>  a <- 1
> #+end_src
>
> # Local variables:
> # eval:(sbe "document-config")
> # eval:(sbe "start-ess")
> # End:
>
>
> Dan
>
>>>
>>> Very cool ! That does all I want, thanks for the info. For multi- 
>>> line it
>>> is a bit heavy to write, with lots of \n and preamble .= "lskjd",  
>>> but I
>>> can live with that. Unless there is a way already to write something
>>> like this ?
>>>
>>> #+source: my-preamble
>>> #+begin_src python :return preamble
>>>  # -*- coding: utf-8 -*-"
>>>  import os,sys,whatever
>>> #+end_src
>>>
>>> #+begin_src python :preamble (org-babel-get-and-expand-source-code- 
>>> body my-preamble) :return s
>>>  s = "é"
>>> #+end_src
>>>
>>> There is org-babel-get-src-block-info but it looks at the block  
>>> around
>>> (point), not by name ... so I guess it would not be too hard to  
>>> write
>>> the extraction method, but it might be somewhere in the code  
>>> already.
>>>
>>
>> Yes, the following uses an internal Babel function, but is probably  
>> much
>> simpler
>>
>> #+results: my-preamble
>> : # -*- coding: utf-8 -*-
>> : import os,sys,whatever
>>
>> #+begin_src python :preamble (org-babel-ref-resolve "my- 
>> preamble") :return s
>> s = ""
>> #+end_src
>>
>> Note that as written this will return the following python error
>>
>> Traceback (most recent call last):
>>  File "<stdin>", line 2, in <module>
>> ImportError: No module named whatever
>>
>>>
>>>>> One naive question : why is the code path different for tangling  
>>>>> and
>>>>> evaluation ? One would think that a natural way for evaluation  
>>>>> would be
>>>>> to tangle the current block (plus included noweb stuff etc) into a
>>>>> temporary file and eval that file ... and that would enable  
>>>>> shebang for
>>>>> evaluation as well. There must be something I am missing here.
>>>>
>>>> Tangling works for *any* programming language, even those which  
>>>> have yet
>>>> to be created and have no explicit Emacs or Org-mode support,  
>>>> this is
>>>> because on tangling the code block is simply treated as text.
>>>
>>> As far as I understood from testing, tangling does adapt to the  
>>> language
>>> (at least to implement :var in a suitable way), so I was under the
>>> impression that evaluating could be implemented as some kind of  
>>> wrapping
>>> around the tangled output - and obviously the wrapping would have  
>>> to be
>>> language-specific even if for the most part the tanglong is not.
>>>
>>
>> Yes, some language specific features (e.g. variable expansion) can be
>> used by the tangling mechanisms if such features are defined for the
>> language in question, however tangling can be done in the absence  
>> of any
>> language specific features and thus works for any arbitrary language.
>>
>> That shebang and preamble should remain separate for the other  
>> reasons
>> mentioned in my previous email.
>>
>>>
>>> I am just discovering all of this, sorry if I have horrible
>>> misconceptions about the thing ...
>>>
>>
>> No problem, it is a fairly (but I don't think overly) complex system.
>>
>>>
>>> Regards,
>>>
>>>        /v
>>>
>>>
>>> _______________________________________________
>>> 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
>>
>> _______________________________________________
>> 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
>
> _______________________________________________
> 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] 25+ messages in thread

* Re: Babel, Python and UTF-8
  2010-12-06 16:42                     ` Thomas S. Dye
@ 2010-12-06 18:07                       ` Achim Gratz
  2010-12-06 18:40                         ` Thomas S. Dye
  2010-12-06 18:23                       ` Dan Davison
  1 sibling, 1 reply; 25+ messages in thread
From: Achim Gratz @ 2010-12-06 18:07 UTC (permalink / raw)
  To: emacs-orgmode

"Thomas S. Dye" <tsd@tsdye.com> writes:
> Emacs configuration is one of the highest barriers to entry for
> potential adopters of Org-mode, IMO.  The idea of context-sensitive
> configuration is potentially terrific.  It gets the user to work more
> quickly than would otherwise be the case.  The problem I've run into
> is that exiting a buffer doesn't change the configuration back to some
> initial, or base, state.  I'm on to the next task but still configured
> to do the last thing.

Isn't that what buffer-local variables are for?


Achim.
-- 
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+

SD adaptations for KORG EX-800 and Poly-800MkII V0.9:
http://Synth.Stromeko.net/Downloads.html#KorgSDada

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

* Re: Babel, Python and UTF-8
  2010-12-06 16:42                     ` Thomas S. Dye
  2010-12-06 18:07                       ` Achim Gratz
@ 2010-12-06 18:23                       ` Dan Davison
  1 sibling, 0 replies; 25+ messages in thread
From: Dan Davison @ 2010-12-06 18:23 UTC (permalink / raw)
  To: Thomas S. Dye; +Cc: Vincent Beffara, emacs-orgmode

"Thomas S. Dye" <tsd@tsdye.com> writes:

> Hi Dan,
>
> Emacs configuration is one of the highest barriers to entry for
> potential adopters of Org-mode, IMO.  The idea of context-sensitive
> configuration is potentially terrific.  It gets the user to work more
> quickly than would otherwise be the case.  The problem I've run into
> is that exiting a buffer doesn't change the configuration back to some
> initial, or base, state.  I'm on to the next task but still configured
> to do the last thing.

Hi Tom,

I think someone else suggested using buffer-local variables to address
this problem, and I think that's the correct suggestion. One of the
examples below shows how to set a buffer-local value:

[...]

> #+source: document-config
>> #+begin_src emacs-lisp
>> (set (make-local-variable 'org-edit-src-content-indentation) 0)
>> #+end_src

As it happens, for that particular setting to be useful requires a patch
that is pending review, but, in general, I think this is the way to do
what you're describing.

Dan


>>
>> #+source: start-ess
>> #+begin_src R :session *R session*
>>  a <- 1
>> #+end_src
>>
>> # Local variables:
>> # eval:(sbe "document-config")
>> # eval:(sbe "start-ess")
>> # End:
>>
>>
>> Dan
>>
>>>>
>>>> Very cool ! That does all I want, thanks for the info. For multi-
>>>> line it
>>>> is a bit heavy to write, with lots of \n and preamble .= "lskjd",
>>>> but I
>>>> can live with that. Unless there is a way already to write something
>>>> like this ?
>>>>
>>>> #+source: my-preamble
>>>> #+begin_src python :return preamble
>>>>  # -*- coding: utf-8 -*-"
>>>>  import os,sys,whatever
>>>> #+end_src
>>>>
>>>> #+begin_src python :preamble
>>>> (org-babel-get-and-expand-source-code-
>>>> body my-preamble) :return s
>>>>  s = "é"
>>>> #+end_src
>>>>
>>>> There is org-babel-get-src-block-info but it looks at the block
>>>> around
>>>> (point), not by name ... so I guess it would not be too hard to
>>>> write
>>>> the extraction method, but it might be somewhere in the code
>>>> already.
>>>>
>>>
>>> Yes, the following uses an internal Babel function, but is probably
>>> much
>>> simpler
>>>
>>> #+results: my-preamble
>>> : # -*- coding: utf-8 -*-
>>> : import os,sys,whatever
>>>
>>> #+begin_src python :preamble (org-babel-ref-resolve "my-
>>> preamble") :return s
>>> s = ""
>>> #+end_src
>>>
>>> Note that as written this will return the following python error
>>>
>>> Traceback (most recent call last):
>>>  File "<stdin>", line 2, in <module>
>>> ImportError: No module named whatever
>>>
>>>>
>>>>>> One naive question : why is the code path different for tangling
>>>>>> and
>>>>>> evaluation ? One would think that a natural way for evaluation
>>>>>> would be
>>>>>> to tangle the current block (plus included noweb stuff etc) into a
>>>>>> temporary file and eval that file ... and that would enable
>>>>>> shebang for
>>>>>> evaluation as well. There must be something I am missing here.
>>>>>
>>>>> Tangling works for *any* programming language, even those which
>>>>> have yet
>>>>> to be created and have no explicit Emacs or Org-mode support,
>>>>> this is
>>>>> because on tangling the code block is simply treated as text.
>>>>
>>>> As far as I understood from testing, tangling does adapt to the
>>>> language
>>>> (at least to implement :var in a suitable way), so I was under the
>>>> impression that evaluating could be implemented as some kind of
>>>> wrapping
>>>> around the tangled output - and obviously the wrapping would have
>>>> to be
>>>> language-specific even if for the most part the tanglong is not.
>>>>
>>>
>>> Yes, some language specific features (e.g. variable expansion) can be
>>> used by the tangling mechanisms if such features are defined for the
>>> language in question, however tangling can be done in the absence
>>> of any
>>> language specific features and thus works for any arbitrary language.
>>>
>>> That shebang and preamble should remain separate for the other
>>> reasons
>>> mentioned in my previous email.
>>>
>>>>
>>>> I am just discovering all of this, sorry if I have horrible
>>>> misconceptions about the thing ...
>>>>
>>>
>>> No problem, it is a fairly (but I don't think overly) complex system.
>>>
>>>>
>>>> Regards,
>>>>
>>>>        /v
>>>>
>>>>
>>>> _______________________________________________
>>>> 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
>>>
>>> _______________________________________________
>>> 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
>>
>> _______________________________________________
>> 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
>
>
> _______________________________________________
> 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] 25+ messages in thread

* Re: Re: Babel, Python and UTF-8
  2010-12-06 18:07                       ` Achim Gratz
@ 2010-12-06 18:40                         ` Thomas S. Dye
  0 siblings, 0 replies; 25+ messages in thread
From: Thomas S. Dye @ 2010-12-06 18:40 UTC (permalink / raw)
  To: Achim Gratz; +Cc: emacs-orgmode


On Dec 6, 2010, at 8:07 AM, Achim Gratz wrote:

> "Thomas S. Dye" <tsd@tsdye.com> writes:
>> Emacs configuration is one of the highest barriers to entry for
>> potential adopters of Org-mode, IMO.  The idea of context-sensitive
>> configuration is potentially terrific.  It gets the user to work more
>> quickly than would otherwise be the case.  The problem I've run into
>> is that exiting a buffer doesn't change the configuration back to  
>> some
>> initial, or base, state.  I'm on to the next task but still  
>> configured
>> to do the last thing.
>
> Isn't that what buffer-local variables are for?
>
>
> Achim.
> -- 
> +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+
>
> SD adaptations for KORG EX-800 and Poly-800MkII V0.9:
> http://Synth.Stromeko.net/Downloads.html#KorgSDada
>
>

Aloha Achim,

I suppose so, but AFAIK I haven't seen them in the configuration code  
blocks that Dan mentioned.  I might be missing something.

I experimented with buffer-local configuration variables myself a  
while back, but my Lisp skills are sub-minimal and I couldn't make  
them work to my satisfaction.

All the best,
Tom


> _______________________________________________
> 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] 25+ messages in thread

end of thread, other threads:[~2010-12-06 18:40 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-12-01 23:50 Babel, Python and UTF-8 Vincent Beffara
2010-12-02  1:18 ` Eric Schulte
2010-12-02  1:36   ` Vincent Beffara
2010-12-02  9:11     ` Sébastien Vauban
2010-12-02 19:34       ` Eric Schulte
2010-12-02 20:10         ` Sébastien Vauban
2010-12-03 10:27           ` Vincent Beffara
2010-12-03 11:27             ` Sébastien Vauban
2010-12-03 14:30             ` Eric Schulte
2010-12-03 15:43               ` Vincent Beffara
2010-12-05 15:30                 ` Eric Schulte
2010-12-06  9:42                   ` Dan Davison
2010-12-06 11:53                     ` Eric S Fraga
2010-12-06 16:42                     ` Thomas S. Dye
2010-12-06 18:07                       ` Achim Gratz
2010-12-06 18:40                         ` Thomas S. Dye
2010-12-06 18:23                       ` Dan Davison
2010-12-02 14:29     ` Eric Schulte
2010-12-02 16:12       ` Vincent Beffara
2010-12-02 18:23       ` Dan Davison
2010-12-02 19:36         ` Eric Schulte
2010-12-02 20:05           ` Sébastien Vauban
2010-12-02 16:09     ` Sébastien Vauban
2010-12-02 16:44       ` Vincent Beffara
2010-12-03 14:56         ` Christopher Allan Webber

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).