Slava Pestov wrote:
> To be even more useful, the contents of the variable could be stored in a
> 'model' object. This way, other code could receive notifications when the
> model value changes using the existing framework, you could have a gadget
> that displays this value in some manner, etc.
I'm interested in two-way file/model links. If the file is changed, the model
is updated. If the model is changed, the file is updated.
Let's do it.
----------------------------------------------------------------------
! Create a model
0 <model>
! Setup a link which updates the model when the file changes
"/tmp/mod" over '[ "/tmp/mod" file->val , maybe-set ] on-modify
! Setup a link which updates the file when the model changes
[ value>> "/tmp/mod" utf8 [ . ] with-file-writer ] over add-connection
----------------------------------------------------------------------
If I do:
$ cat 10 > /tmp/mod
The model sitting on the stack in my listener changes.
If I do:
20 over set-model
I can then check the file:
~$ cat /tmp/mod
20
I use 'maybe-set' in the file->model link. This is used to prevent a loop: the
model changes, so the file changes, so the model changes...
Here's 'maybe-set':
: maybe-set ( val mod -- ) dup value>> pick = [ 2drop ] [ set-model ]
if ;
I wrote about the 'on-modify' word earlier today.
Finally, I added a 'model-changed' method for quotations:
M: quotation model-changed call ;
Ed
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Factor-talk mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/factor-talk