Re: [9fans] Help with plumbing rules

2013-11-06 Thread Alexander Sychev
Hi,

Question 1:
a flag '-d' can be useful a bit.

Question 2:
$file is filled when you check arg isfile $1

Question 3:
I think, the problem is you have to match exact full string is sent to
plumber.

This variant is working:

type is text
data matches 'File ([.a-zA-Z¡-￿0-9_/\-]*[a-zA-Z¡-￿0-9_/\-]+), line
([0-9]+)[ ,0-9A-Za-z_]*'
arg isfile $1
data set $file
attr add addr=$2
plumb to edit
plumb client $editor



On Wed, Nov 6, 2013 at 9:42 AM, 6o205z...@sneakemail.com wrote:

 I'm trying to create a plumbing rule so that I can right-click (in acme)
 on the diagnostic messages produced by Python and get the file opened with
 the appropriate line select.  Unfortunately my attempts so far have failed.

 Question 1: Is there an easy way to debug plumbing rules (I'm using
 plan9port on linux)?

 I started by looking at a couple of existing rules from $PLAN9/plumb/basic:

 # existing files tagged by line number:columnumber or
 linenumber.columnumber, twice, go to editor
 type is text
 data matches '([.a-zA-Z¡-￿0-9_/\-]*[a-zA-Z¡-￿0-9_/\-])':$
 twocolonaddr,$twocolonaddr
 arg isfile $1
 data set $file
 attr add addr=$2-#1+#$3,$4-#1+#$5
 plumb to edit
 plumb client $editor

 # existing files tagged by line number:columnumber or
 linenumber.columnumber, twice, go to editor
 type is text
 data matches '([.a-zA-Z¡-￿0-9_/\-]*[a-zA-Z¡-￿0-9_/\-])':$
 twocolonaddr
 arg isfile $1
 data set $file
 attr add addr=$2-#1+#$3
 plumb to edit
 plumb client $editor

 After reading http://plan9.bell-labs.com/sys/doc/plumb.pdf, I think I
 understand these rules except for the line
 data set $file

 Question2: What does that line do?  What is $file?

 Since the Python 2.7 diagnostic messages look like

 File /home/pcanning/src/python/test/test_cli.py, line 91, in
 test_interactive_mode

 I created the following rule that attempts to match the test from File
 to line 91, and send plumbing message to edit (acme).

 # Python (2.7) error messages
 type is text
 data matches File ([.a-zA-Z¡-￿0-9_/\-]*[a-zA-Z¡-￿0-9_/\-]), line
 ([0-9]+)
 arg isfile $1
 data set $1
 attr add addr=$2
 plumb to edit
 plumb client $editor

 Question 3: How do I change this rule to make acme open
 /home/pcanning/src/python/test/test_cli.py and select line 91 (in the
 example above)?

 thanks,
 Peter Canning

 PS: Once I get this working I'll tackle the diagnostic messages I get when
 compiling Java code using maven (not my choice).  They look like
 [error] /home/pcanning/src/java/test/PerfTest.java:[66,1] error: reached
 end of file while parsing





-- 
Best regards,
  santucco


Re: [9fans] Help with plumbing rules

2013-11-06 Thread Mark van Atten
 PS: Once I get this working I'll tackle the diagnostic messages I get when
 compiling Java code using maven (not my choice).  They look like
 [error] /home/pcanning/src/java/test/PerfTest.java:[66,1] error: reached end
 of file while parsing

For lacheck, a Latex checker, I have this in my profile to put its
messages in the right form:

# for lacheck: format output for acme
fn lacheck $* {builtin lacheck $* | 9 sed 's/(.*).*line ([0-9]+):
(.*)/\1:\2:\3/'}

Can you do something similar?

Mark.



Re: [9fans] acme/sam language question

2013-11-06 Thread Rudolf Sykora
On 31 October 2013 20:24, Rudolf Sykora rudolf.syk...@gmail.com wrote:
 On 31 October 2013 16:49, Friedrich Psiorz f.psi...@gmx.de wrote:
 It works for me, but I found another inconsistency.

 I tried it on p9p and 9vx, both in acme and sam.

 /A/+#0;/B/-#0
 g/CC/ s/CC/DD/g
 p

 Well. If I use these commands one by one inside p9p acme
 (and probably sam, too), I truly get what I want (and what
 you say). The problem appears when I want to run it from
 a script like this:

 sam -d EOF $1  [2] /dev/null
 /A/+#0;/B/-#0
 g/CC/ s/CC/DD/g
 p
 EOF

 then you get, since the g is on a seperate line, an extra
 output from the line before g. And if you try to join g with
 the match like

 sam -d EOF $1  [2] /dev/null
 /A/+#0;/B/-#0 g/CC/ s/CC/DD/g
 p
 EOF

 then you get no output if CC is not between A and B
 (although when it is there, you get what I want).
 In neither case I am fully satisfied. :)

 Thanks
 Ruda

So far I still do not know how to do it properly...
But it seems nobody here proposes anything...

Thanks for any clue
Ruda



Re: [9fans] acme/sam language question

2013-11-06 Thread Micah Stetson
What if you specify the address twice like this:

/A/+#0;/B/-#0g/CC/ s/CC/DD/g
/A/+#0;/B/-#0p

That doesn't work if A and B occur more than once in the file or if DD matches 
A or B. But otherwise, it seems to work for me.

Micah

On Nov 6, 2013, at 10:47 AM, Rudolf Sykora wrote:

 On 31 October 2013 20:24, Rudolf Sykora rudolf.syk...@gmail.com wrote:
 On 31 October 2013 16:49, Friedrich Psiorz f.psi...@gmx.de wrote:
 It works for me, but I found another inconsistency.
 
 I tried it on p9p and 9vx, both in acme and sam.
 
 /A/+#0;/B/-#0
 g/CC/ s/CC/DD/g
 p
 
 Well. If I use these commands one by one inside p9p acme
 (and probably sam, too), I truly get what I want (and what
 you say). The problem appears when I want to run it from
 a script like this:
 
 sam -d EOF $1  [2] /dev/null
 /A/+#0;/B/-#0
 g/CC/ s/CC/DD/g
 p
 EOF
 
 then you get, since the g is on a seperate line, an extra
 output from the line before g. And if you try to join g with
 the match like
 
 sam -d EOF $1  [2] /dev/null
 /A/+#0;/B/-#0 g/CC/ s/CC/DD/g
 p
 EOF
 
 then you get no output if CC is not between A and B
 (although when it is there, you get what I want).
 In neither case I am fully satisfied. :)
 
 Thanks
 Ruda
 
 So far I still do not know how to do it properly...
 But it seems nobody here proposes anything...
 
 Thanks for any clue
 Ruda
 




Re: [9fans] acme/sam language question

2013-11-06 Thread Mark van Atten
I write the script like this:

/A/+#0;/B/-#0 {
g/CC/ s/CC/DD/g
}
p

Mark.


On Wed, Nov 6, 2013 at 7:47 PM, Rudolf Sykora rudolf.syk...@gmail.com wrote:
 On 31 October 2013 20:24, Rudolf Sykora rudolf.syk...@gmail.com wrote:
 On 31 October 2013 16:49, Friedrich Psiorz f.psi...@gmx.de wrote:
 It works for me, but I found another inconsistency.

 I tried it on p9p and 9vx, both in acme and sam.

 /A/+#0;/B/-#0
 g/CC/ s/CC/DD/g
 p

 Well. If I use these commands one by one inside p9p acme
 (and probably sam, too), I truly get what I want (and what
 you say). The problem appears when I want to run it from
 a script like this:

 sam -d EOF $1  [2] /dev/null
 /A/+#0;/B/-#0
 g/CC/ s/CC/DD/g
 p
 EOF

 then you get, since the g is on a seperate line, an extra
 output from the line before g. And if you try to join g with
 the match like

 sam -d EOF $1  [2] /dev/null
 /A/+#0;/B/-#0 g/CC/ s/CC/DD/g
 p
 EOF

 then you get no output if CC is not between A and B
 (although when it is there, you get what I want).
 In neither case I am fully satisfied. :)

 Thanks
 Ruda

 So far I still do not know how to do it properly...
 But it seems nobody here proposes anything...

 Thanks for any clue
 Ruda