World: r3wp
[Rebol School] Rebol School
older newer | first last |
PatrickP61 26-Jul-2007 [588x2] | My teachers, Anton and Rebolek have submitted two answers. The difference between them is that Anton's answer will insert a tab between varying numbers of values per line, where Rebolek will insert a tab in-between col 1 and col2 (assuming only 2 columns in the array). Is that a correct interpretation? |
Anton, I understand Rebolek answer, but I want to understand your answer too. I'm wondering about the line: repeat N -1 + length? Blk [append append Line Blk/:N tab] does Rebol do the inner append first (in math expressions) like this: [append ( append Line Blk/:N ) tab] and then do this for the number of "lines" in the array N Out-block 0 [] 1 "Col A1^-Col B1" 2 "Col A1^-Col B1" "2^-3" 3 "Col A1^-Col B1" "2^-3" {line "3"^-col "b"} I think I see the above progression, but not sure about Blk [append Line last Blk] Is this advancing the starting position within In-array? | |
Gregg 27-Jul-2007 [590] | ...insert a tab between varying numbers of values per line <versus> ... insert a tab in-between col 1 and col2 -- Correct. On new-line, it's kind of advanced because it doesn't insert a newline (CR/LF), but rather a hidden marker between values that REBOL uses when molding blocks. |
PatrickP61 27-Jul-2007 [591] | Hi Gregg -- Is that primarily for display purposes, or could it be used for other things? |
Gregg 27-Jul-2007 [592x2] | On "append append", yes. You could also do it like this: "append line join blk/:n tab", the difference being that APPEND modifies its series argument, and JOIN does not. REPEAT is 1-based, not zero, Anton is using "-1 + length? blk" rather than "(length? blk) - 1" or "subtract length? blk 1". The first of those cases requires the paren because "-" is an op! which will be evaluated before the length? func, so REBOL would see it like this "length? (blk - 1)", which doesn't work. |
For display or formatted output. It's *very* useful when generating code for example. | |
PatrickP61 27-Jul-2007 [594] | Sounds like more advanced stuff than I'm understanding right now. I'll read up on the terms. When I get REBOL code solution, I'd like to understand how Rebol is processing the code. What it does logically first, and logically second... I think I get confused about when Rebol does the evaluations. |
Gregg 27-Jul-2007 [595x3] | You shouldn't have to worry about new-line at all. It's actually relatively new, so we all lived without it for a long time. |
It can be confusing at times, and even once you know what you're doing, you sometimes have to think about it a bit. The up-side is that you have a great deal of control once you know how to use it. | |
I should point out that NEW-LINE, as Anton used it, is a handy shortcut that takes the place of foreach+print for simple console display. | |
PatrickP61 27-Jul-2007 [598] | I am looking forward for the Rebol lightbult to go on full power!!! I think it just takes me playing around with rebol more to get there! |
[unknown: 9] 27-Jul-2007 [599] | Yes...that will happen. The best way is to try to teach what you know now to someone else. To Teach is to learn. |
Geomol 27-Jul-2007 [600] | Patrick, before I started with REBOL, I had many years of experience with many different languages, both as a hobby and professional. It wasn't hard for me to grasp new languages, because every new one always reminded me of some other language, I already knew. Then I came to REBOL, and I could make small scripts after a few days. But it took me more than a year to really "get it". And it's just the best language, I've ever programmed in. It keeps amaze me after all these years, and I constantly find new things, new ways of doing things. From your posts here, you're having a very good start, as I see it. Just keep hacking on that keyboard, and don't forget to have fun! |
btiffin 27-Jul-2007 [601] | Patrick; Check out http://www.rebol.org/cgi-bin/cgiwrap/rebol/art-display-article.r?article=lf019t It's an experiment in rebol.org hosting public wiki articles. Plus I'm plugging my own work :) |
Vladimir 3-Oct-2007 [602x4] | Well first of all ....Im new here... :) joined yesterday... and I have a problem on my hands..... |
Here is a piece of code from graphic editor.... I have problems with "insert-event-func" | |
pixel_face: make face [ size: pixel_size edge: none color: black data: 0 ] ... pane-func: func [face index] [ index: (index - 1) either integer? index [ if index < ((grid_size/x) * (grid_size/y)) [ xx: (index // (grid_size/x)) + 1 yy: to-integer ((index / (grid_size/x)) + 1) pixel_face/data: index pixel_face/offset/y: ((yy - 1) * (pixel_size/y)) pixel_face/offset/x: ((xx - 1) * (pixel_size/x)) pixel_face/color: pick paleta sprite-colors/:yy/:xx return pixel_face ] ][ ; return to-integer index/y / 20 + 1 ] ] key-event: func [face event] [ if event/type = 'key [ switch event/key [ up [cursor_y: cursor_y - 1] down [cursor_y: cursor_y + 1] left [cursor_x: cursor_x - 1] right [cursor_x: cursor_x + 1] ] sprite-colors/:cursor_y/:cursor_x: 2 show grid ] if event/type = 'time [ ? now/time cursor_color: (3 - cursor_color) sprite-colors/:cursor_y/:cursor_x: :cursor_color show grid ] event ] insert-event-func :key-event grid: make face [ offset: ((screen_size - window_size) / 2) size: window_size rate: 00:00:05 color: blue effect: [gradient] pane: :pane-func ] view/new grid do-events | |
No matter where I put the rate: 1 element I get 24 events in one second..... How can I slow this down? | |
Oldes 3-Oct-2007 [606] | Which events? If from keyboard, you have to filter them in your key-event function. |
Vladimir 3-Oct-2007 [607x3] | That is what I do in key-event func....: if event/type = 'time [ ? now/time cursor_color: (3 - cursor_color) |
Problem is that events are always happening the same rate... no matter what I do.... | |
I tried to put rate:1 in my grid face.... I tried to put it in pixel_face... I tried to put it in pane-func... | |
Oldes 3-Oct-2007 [610] | Here is simplified your problem: ke: func[f e][ if e/type = 'time [print now/time/precise] e] insert-event-func :ke view layout [box with [rate: 10]] But I cannot help you. I'm not a view guru. It looks you should not use insert-event-func if you don't want to get all time events. |
Vladimir 3-Oct-2007 [611x2] | :) |
yeah... I guess its a mix between insert-event-func and iterated pane..... pane is generated every time and my adding rate element to it doesn't effect global rate..... thanks for answer! | |
Oldes 3-Oct-2007 [613] | Use somethink like: view layout [ box with [ rate: 10 feel: make feel [ engage: func [f a e] [ if a = 'time [print now/time/precise] ] ] ] ] |
Vladimir 3-Oct-2007 [614x8] | I'm just typing something like that.... :) |
I will check if iterated pane is the source of problem.... | |
pane is not a problem...... your code works (as it should) :) | |
I know it works, but I remember puting insert-event-func there for a reason.... If I remember I couldnt get keyboard response from my iterated pane somehow.... I'll try it again .... | |
Thanks for help! | |
Done it! All I needed was: system/view/focal-face: grid | |
I guess I should read docs more :) | |
Sorry for spamming this gruoup... but I was wrong.... I mixed to source files... Editid one and ran another... so ... it still doesnt work....... | |
Oldes 3-Oct-2007 [622x2] | If you want just blinking cursor, don't use insert-event-func, but just something like that: cursorMover: func[f e][ if e/type = 'key [ switch e/key [ up [cursor/offset/y: cursor/offset/y - 10] down [cursor/offset/y: cursor/offset/y + 10] left [cursor/offset/x: cursor/offset/x - 10] right [cursor/offset/x: cursor/offset/x + 10] ] show cursor ] e ] insert-event-func :cursorMover view layout/size [ cursor: box 10x10 with [ rate: 10 colors: [0.0.0 255.255.255] feel: make feel [ engage: func [f a e] [ if a = 'time [ f/color: first head reverse f/colors show f ] ] ] ] ] 400x400 |
(I mean don't use the insert-event-func for changing color but only for geting the key events) | |
Izkata 3-Oct-2007 [624] | It looks like the event function isn't being triggered for the box, but rather for system/view/screen-face or something - >> ke: func [f e][if e/type = 'time [print f/text]] >> insert-event-func :ke >> view layout [box "Testing" with [rate: 1]] none none None of them print "Testing", as a call from the box should |
Vladimir 3-Oct-2007 [625x4] | Thanks Oldes! I did it.... I used insert-event-func for key events and feel for time events.... |
But, why? Ohhhh why do I need to do it like that? :) | |
I red part of docs (6.4 Focus and Keyboard Events) but it doesnt help......... Well so far I'm ok, my editor can move on.... :) | |
But I would love to know: How to set key press event on something so that it would be timed? Or how to make insert-event-func function get called in precise timed intervals? | |
Oldes 4-Oct-2007 [629] | insert-event-func is simply used for global events, you can use it to detect 'close, 'resize, 'active and 'inactive as well. Why you should have such a event handlers in feels? |
Vladimir 4-Oct-2007 [630] | I'm actually interested only in keypress events... But I have to limit the rate of events... I know there is the rate element in every face, and I did make it work for time event and that is ok. But I couldn't make keypress event occur in timed intervals. I'm not saying I have to have it. Maybe it just isnt supossed to be. But it says in docs: The focal-face must be set to a valid face object (one that is part of a pane in the face hierarchy) and the system/view/caret (explained in next section) must also be set in order to: 1. Receive keyboard events .... So I put this inside engage func: system/view/focal-face: face system/view/caret: tail "" And now it works... I dont even use caret but you have to set it to some bogus value! So in my opinion rate element has no influence on key events (if I type like crazy I get 19 key events for 1 second...). But I can make some sort of counter and simply do keypress response only when I want to... |
Gregg 4-Oct-2007 [631] | The event handling system will call your insert-event-func handler as fast as it can, if there are availalbe events, and there will always be time events, occurring at whatever rate REBOL uses them. I don't know of any way to control when, or how often, your func is called. |
Vladimir 4-Oct-2007 [632] | Its ok like this... :) I can make what ever I need for my editor using this method. I guess things will be more controllable in R3... Thanks again for help! |
Anton 7-Oct-2007 [633x2] | Vladimir, the window/feel gets time events at full speed. Any subface/feel gets time events at subface/rate. |
So, I advise to trap events in subface/feel/engage, not in window/feel or screen-face/feel. (insert-event-func adds a handler which is processed in screen-face/feel) | |
Vladimir 26-Oct-2007 [635] | What could be problem with this script? set-net [[user-:-mail-:-com] smtp.mail.com pop3.mail.com] today: now/date view center-face layout [ size 340x120 button "Send mail" font [size: 26] 300x80 [ send/attach/subject [user-:-mail-:-com] "" %"/c/file.xls" reduce [join "Today " :danas] quit ] ] I get this error: ** User Error: Server error: tcp 554 5.7.1 <[user-:-mail-:-com]>: Relay access denied ** Near: insert smtp-port reduce [from reduce [addr] message] Could it be some security issue? It worked with previous internet provider... A week ago we changed it and now this happens... Should I contact my provider to change some security settings or should I change something in the script? |
Pekr 26-Oct-2007 [636x2] | The problem probably is, that you are trying to send your email from outside of @mail.com domain. |
smtp servers usually don't allow you to send email via themselves, if you are not part of particular network, or they require authentication to smtp - usually your accont name and password is enough. I think that in such case, you are out of luck with REBOL. Not sure our smtp protocol can handle it ... but - go to www.rebol.org and try to search for "smtp" - there are some scripts which could help you .... | |
older newer | first last |