Hi Pablo,

  \showframe
  \setupinteraction[state=start]
  \starttext
  \startbuffer[abc]
  def foo(x):
  if x == 0:
      bar()
  else:
      baz(x)
  foo(x - 1)
  \stopbuffer
  \comment[location=leftmargin,
    space=yes,
    buffer=abc,
    title={Python code}]
    {}\typebuffer[abc]
  \stoptext

This might solve what you need. At least, this is the approach that I
use to provide text that can be directly copied.

I'm on Linux and last time I tested on Windows there were extra lines in
the comments.
 
That's actually something I had never thought of, using PDF comments, thanks!.
It's a really nice approach, though weirdly it doesn't work on Okular (Linux+KDE)
for me, even though attachments worked fine. I'll try and see why that is.
 
What I had in mind was rather the following:
 
\starttext
\starttyping[space=on]
def foo(x):
   y = bar(x)
   if y:
       return x
   return y
foo(1)
\stoptyping
\stoptext

but with ordinary char32 spaces rather than \textcontrolspace characters.
 
Best regards,