r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[Core] Discuss core issues

Joe
22-May-2006
[4688]
I am using altme on linux. How do I get the clipboard to work ?
Henrik
22-May-2006
[4689]
I think by using the middle mouse button
Joe
22-May-2006
[4690x2]
nope, clipboard is broken in linux
anton, thanks for your example, it's quite useful
Anton
22-May-2006
[4692]
You're welcome.
Joe
22-May-2006
[4693x2]
ZZ
didn't mean to type it
Frank
22-May-2006
[4695]
Clipboard on linux :   ctrl-v  in altme and middle mouse button in 
a text editor, it works for me
Joe
22-May-2006
[4696]
Frank, yes thanks. For me is ctrl-C + middle mouse
Henrik
22-May-2006
[4697]
Why can't I find paths in a loadable block?

>> t: [x/y]
== [x/y]
>> type? first t
== path!
>> find t 'x/y
== none
>> find t to-path 'x/y
== none
Anton
23-May-2006
[4698]
I think the answer is: "because there is a bug."
BrianH
23-May-2006
[4699x2]
Paths are structures like blocks. Find doesn't do structure analysis 
on block types like that - it just tries to determine if the exact 
same path is there, not another that resembles it.
Use find/only and your path! will be found.
Henrik
23-May-2006
[4701x2]
>> t: [x/y]
== [x/y]
>> type? first t
== path!
>> type? 'x/y
== path!
>> equal? 'x/y  first t
== true

One would think that find would be able to find it anyway
ah! thanks
BrianH
23-May-2006
[4703x2]
>> find/only [x/y] 'x/y
== [x/y]
find [x y] 'x/y
== [x y]
Find can be unexpectedly fun at times.
Henrik
23-May-2006
[4705]
yes, it's very fun especially when you are on a time limit :-)
Anton
23-May-2006
[4706]
Brian is right, the more complex "object" types are compared using 
same?:
>> equal? 'x/y 'x/y
== true
>> same? 'x/y 'x/y
== false
BrianH
23-May-2006
[4707x3]
When searching in a string type for any string type, the type is 
converted. Same for block types. And path! is a block type.
The only way to avoid the conversion is to use /only.
I was wrong earlier about the reason Henrik's find didn't work.
Anton
23-May-2006
[4710]
yes, my initial reply was a bit hasty too.
Ashley
23-May-2006
[4711x2]
Don't know whether this has been discussed / RAMBOed yet, but I think 
a smarter reduce (either a refinement or another word) which could 
handle:

	reduce [now then]

instead of requiring:

	reduce [now 'then]

or

	compose [(now) then]


would make writing dialects a lot easier as unset! is rarely a legitimate 
value within a dialect (i.e. I'd like to reduce blocks before parsing 
and words without a value should just be left as is).
Something like:

reduce2: make function! [
	block [block!]	"Block to reduce"
	/deep		"Reduce nested blocks"
	/local blk

 "Evaluates a block of expressions, skipping words without a value, 
 and returns a block."
] [
	blk: copy []
	foreach word block [
		either block? word [
			either deep [
				insert/only tail blk reduce2/deep word
			] [insert/only tail blk word]
		] [insert tail blk either value? word [do word] [word]]
	]
	blk
]


>> reduce2 [red x now now/date (1 + 1) [red x now now/date (1 + 1)]]

== [255.0.0 x 24-May-2006/13:12:14+10:00 24-May-2006 2 [red x now 
now/date (1 + 1)]]

>> reduce2/deep [red x now now/date (1 + 1) [red x now now/date (1 
+ 1)]]

== [255.0.0 x 24-May-2006/13:12:26+10:00 24-May-2006 2 [255.0.0 x 
24-May-2006/13:12:26+10:00 24-May-2006 2]]


but as a native! and able to handle funcs with args (e.g. reduce2 
[print "hi"]).
Ashley
24-May-2006
[4713]
Here's a different approach to get the result I'm after:

cast: make function! [
	block [block!] "Block to cast"
	words [block!] "Words to convert into literal words"
	/local blk word
	"Casts nominated words within a block into literal words."
] [
	blk: copy []
	repeat i length? block [

  insert/only tail blk either find words pick block i [to lit-word! 
  pick block i] [pick block i]
	]
	blk
]

>> cast [area red button green 'btn blue] [area button]
== ['area red 'button green 'btn blue]
>> reduce cast [area red button green 'btn blue] [area button]
== [area 255.0.0 button 0.255.0 btn 0.0.255]
BrianH
24-May-2006
[4714x2]
>> reduce/only [area red button green 'btn blue] [area button]
== [area 255.0.0 button 0.255.0 'btn 0.0.255]
Does that do what you need?
Ashley
24-May-2006
[4716]
Doh! I'm an idiot. I even read the help text on reduce ... but failed 
to read the text associated with the words refinement. Thanks for 
that, that is one refinement I'm *never* going to forget now. ;)

Please disregard my previous postings.
BrianH
24-May-2006
[4717]
Yeah, I get that feeling here a lot too :)
Geomol
24-May-2006
[4718]
REBOL keeps surprise us again and again! :-)
BrianH
24-May-2006
[4719]
I was a little surprised that the lit-word didn't turn into a word. 
That could be useful. I'm going to do some experiments to see what 
else reduce/only doesn't do. Should be fun.
Rebolek
24-May-2006
[4720]
Why I am not able to OPEN file which I can READ ?
Graham
24-May-2006
[4721x2]
Example?
'read must 'open a file
Ladislav
24-May-2006
[4723]
Open/read may be the difference
Rebolek
24-May-2006
[4724]
Ladislav yes, that was the problem, thanks
JaimeVargas
24-May-2006
[4725]
Ashley, but reduce/only doesn't perform according to your  initial 
spec "Evaluates a block of expressions, skipping words without a 
value, and returns a block."
>> reduce/only [now then]
** Script Error: then has no value
Anton
24-May-2006
[4726x2]
Huh? that's not the error I get:
>> reduce/only [now then]

** Script Error: reduce expected words argument of type: block none
** Near: reduce/only [now then]
Ah but maybe that's still your point - not what Ashley asked for.
Volker
24-May-2006
[4728]
Docu is wrong. it does not reduce words in the /only block. But it 
also rejects functions. so
>> reduce/only[then][then]
== [then]
but it also rejects functions, here unfortunally:
>> reduce/only[now][]
** Script Error: Invalid argument: now
because of security-reasons (draw-blocks from untrusted code).
Ashley
24-May-2006
[4729]
but reduce/only doesn't perform according to your  initial spec
 True, on two counts:

1) It doesn't evaluate expressions (even if parenthesized)

2) You have to predetermine what words to ignore (less of an issue 
for dialects)

I still can't see a simple way of doing the following:

>> reduce [b: button red form now/date]
** Script Error: button has no value
** Near: b: button red form now/date
>> reduce/only [b: button red form now/date] [button]
** Script Error: Invalid argument: form
** Near: form now/date
>> reduce/only [b: button red (form now/date)] [button]
== [b: button 255.0.0 (form now/date)]


although at least the last case gets most of the way there. What 
I'd really like is:

>> reduce/ignore [b: button red form now/date]
== [b: button 255.0.0 "25-May-2006"]
Ladislav
25-May-2006
[4730]
I am using my BUILD dialect http://www.fm.tul.cz/~ladislav/rebol/build.r
to do it as follows:

>> build [b: button ins red ins form now/date]
== [b: button 255.0.0 "25-May-2006"]

or, another alternative:


>> build/with [b: button red form now/date] [red: system/words/red 
form: get in system/words 'form]
== [b: button 255.0.0 "25-May-2006"]
Gabriele
25-May-2006
[4731]
Use do/next in the parse rule. (that's the reason I suggested the 
DO command for parse some time ago...)
Ashley
25-May-2006
[4732x2]
Not sure I understand, a small example would help. ;)
Or was your comment intended for Ladislav?
Cyphre
25-May-2006
[4734]
Ashley: reduce /only -- Only evaluate words and paths, not functions
So the results you are getting above seems logicalto me.
Ashley
25-May-2006
[4735]
I understand what reduce/only is doing, it's just not doing 100% 
of what I want! ;)
Cyphre
25-May-2006
[4736x2]
Ah got it ;-)
I think VID like parser is the way then.