If you need to pipe data between your program and texmacs, then the best way
is a plugin. Search the documentation for "plugin" and read for instance
"Background evaluations" and "Mathematical and customized input". That ought
to be just what you need.

Of course, you could also keep banging your head against the painful Scheme
wall (I know it hurts). Then I must point out that the reason why you are
not getting all of the lines in the selection might be that only the active
prompt is of <input> type. In a scheme session I have right here open by my
side, every line above the prompt (i.e. those commands I already evaluated)
are <unfolded-io> tags. Although probably you already realized this...

Best,
________________
Miguel de  Benito.


On Thu, Jul 28, 2011 at 01:29, Michael Lachmann <lachm...@eva.mpg.de> wrote:

> Ok, the following works:
> ---
> (kbd-map ("C-8"
> (let* (
>       (f (url-concretize (url-temp)))
>       (p (open-output-file f))
>       )
>   (write (selection-tree) p)
>   (close-output-port p)
>   (eval-system (string-append "convert_pb2R.pl " f))
>   ) ) )
> ---
> This will save the current selection to a temporary file, then run
> convert_pb2R on it. convert_pb2R will then put the converted text onto the
> clipboard, which then I can insert into the buffer. This still uses the
> command pbcopy  to put the string back into the selection buffer (though it
> should be possible from TeXmacs), and analyzing the tree from withing
> TeXmacs would be much more elegant...
>
> Comments welcome.
> Thanks!
>
> Michael
>
>
> On 28 Jul 2011, at 12:28AM, Michael Lachmann wrote:
>
>
> On 27 Jul 2011, at 11:15PM, Miguel de Benito Delgado wrote:
>
> Hi,
>
>   I'm not sure if it could help, but in a recent post about bookmarks I
> posted some scheme code which lists all tags of a given kind in a document.
> Might this not be used to list all the R input lines? Just a possibility, I
> wouldn't know...
>
>
> Here is my feeble attempt:
>
> (kbd-map ("C-8"
>   (for-each (lambda (item)
>       (display (tree->string (tree-ref item 0))))
>     (selection-tree)
>     )
>   )
>  )
>
> But, it doesn't work. I get an error:
>  In procedure for-each in expression (for-each (lambda # #)
> (selection-tree)):
>  Wrong type argument in position 2: <tree <math|x<rsup|2>> Hello>
>
> Which is kind of funny, since the error statement contains the string I'd
> like to get :) all I want is a string like that:
>
> <tree <math|x<rsup|2>> Hello>
>
> MIchael
>
> P.S. Just a comment. I think there is a bug in the scheme session, in that
> expressions such as "tree->string" are converted to
> "tree-<gtr>string", and then you get an error that that function is not
> defined.
>
>
> ________________
> Miguel de  Benito.
>
>
> On Wed, Jul 27, 2011 at 15:54, Michael Lachmann <lachm...@eva.mpg.de>wrote:
>
>> I managed to do what I asked for, though it is a hack, and currently only
>> works on a mac.
>>
>> Attached is a perl script. It should be saved as convert_pb2R.pl somewhere
>> in the path.
>>
>> Then, add this to my-init-texmacs.scm:
>> (kbd-map ("R R ." (shell "convert_pb2R.pl")
>>          (clipboard-paste "primary")
>>          ))
>>
>> What you can do then is select several input/output cells in an R session
>> (or even several R sessions). Copy them.
>> Then go to the place you want to insert them (for example an empty input
>> cell) and type "RR.". TeXmacs will insert only the R commands in the copied
>> cells.
>>
>> Michael
>>
>>
>> On 27 Jul 2011, at 2:19AM, Michael Lachmann wrote:
>>
>> > I am trying to make it easier to work with R in TeXmacs. What often
>> happens is that in an interactive session I type
>> > in many commands one after the other - each in its own input. at some
>> point everything works, and I'd like to just copy them all into a script, or
>> maybe into one multiline input.
>> >
>> > So, I'd like to be able to select text, and copy just the R part. That
>> would be parts between
>> > <|input>
>> > and
>> > </input>
>> >
>>
>>
>>
>> ---
>> #!/usr/bin/perl
>>
>> open(PB, "pbpaste|") ;
>>
>> $in_section = 0 ;
>> $sec_name = "" ;
>> $section = "" ;
>>
>> $clip = "" ;
>>
>> while( <PB> ) {
>>  $line =~ s/\s*$// ;
>>  $line = $_ ;
>> #  print "line: $line |||\n" ;
>>  if( $line =~ s/[<][|]([^>]*)[>]// ) {
>>    $in_section = 1 ;
>>    $prev_section = $section ;
>>    $section = "" ;
>>  }
>>  if( $line =~ s/[<]\/([^>]*)[>]// ) {
>>    $in_section = 0 ;
>>    if( $1 eq "input" ) {
>>      $clip .= $section ;
>>    }
>>    if( $1 eq "unfolded-io" ) {
>>      $clip .= $prev_section ;
>>    }
>>  }
>>  if( $in_section == 1 ) {
>>    if( !($line =~ /^\s*$/ ) ) {
>>      $line =~ s/^  // ;
>>      $line =~ s/\\ / /g ;
>>      $section = $section .  $line."\n\n" ;
>>    }
>>  }
>> }
>>
>> close(PB) ;
>>
>> open(PB,"|pbcopy") ;
>> print PB $clip ;
>> close(PB) ;
>>
>>
>> ----
>> _______________________________________________
>> Texmacs-dev mailing list
>> Texmacs-dev@gnu.org
>> https://lists.gnu.org/mailman/listinfo/texmacs-dev
>>
>
> _______________________________________________
> Texmacs-dev mailing list
> Texmacs-dev@gnu.org
> https://lists.gnu.org/mailman/listinfo/texmacs-dev
>
>
> _______________________________________________
> Texmacs-dev mailing list
> Texmacs-dev@gnu.org
> https://lists.gnu.org/mailman/listinfo/texmacs-dev
>
>
>
> _______________________________________________
> Texmacs-dev mailing list
> Texmacs-dev@gnu.org
> https://lists.gnu.org/mailman/listinfo/texmacs-dev
>
>
_______________________________________________
Texmacs-dev mailing list
Texmacs-dev@gnu.org
https://lists.gnu.org/mailman/listinfo/texmacs-dev

Reply via email to