hey I don't let you lie :p
I read it from top to bottom and was really interesting ;)
Phil

Youness Alaoui a écrit :
> oh great! thanks! :)
> I thought noone read that huge mail, lol..
> 
> KKRT
> 
> On Mon, Jun 04, 2007 at 06:08:13PM +0100, Tom Hennigan wrote:
>> Okay I've got round to putting it on the wiki
>> (http://amsn-project.net/wiki/Dev:TclTk_Tutorial). I didn't put
>> anything about multiline commands yet. But I think everything else is
>> there!
>>
>> - Tom
>>
>> On 5/31/07, Youness Alaoui <[EMAIL PROTECTED]> wrote:
>>> Yeah, you reminded me of something...
>>> Most 'common problems' with tcl/tk are the "lists theory", substitution 
>>> theory, and command theory.
>>> In short, the 'lists theory' is that everything is a list, and tcl works a 
>>> lot with list manipulations.
>>> substitution theory is that, if I do "function $arg" the $arg will be 
>>> substituted, and if it had a space, the
>>> 'function' will get two arguments, if I do {function $arg} (the {} means 
>>> it's a list) the $arg will not be
>>> substituted and the argument will be the same as if I wrote "function 
>>> \$arg". If I do [list function $arg] then
>>> $arg will be substituted but if it had a space in it, it will still count 
>>> as one argument (not two like
>>> before).. actually $arg will become a list element.
>>> Example :
>>> set file "c:\My documents\file.txt"
>>> if you do
>>> button .b -command "open $file"
>>> then it will fail because it would be the same as doing :
>>> button .b -command "open c:\My documents\file.txt"
>>> (this is what will be stored), so once evaluated, it will evaluate "C:\My" 
>>> as the first argument and
>>> "documents\file.txt" as the second argument.
>>> If you do :
>>> button .b -command {open $file}
>>> then it will fail because it will say "$file : file not found" unless you 
>>> create a file named "$file"
>>> if you do :
>>> button .b -command [list open $file]
>>> then it will work because Tcl will store the callback as : {open {C:\My 
>>> documents\file.txt}} (a list with two
>>> elements, the first being the command, the second being the argument).
>>> and finally, about the 'command theory', it's to say that EVERYTHING is a 
>>> command. even 'if'.. so the if is a
>>> command which takes :
>>> if expression body ?elseif body? ?elseif body? ... ?else body?
>>> so if you do :
>>> if $a return
>>> it works, if you want to do :
>>> if $a == $b return
>>> it won't work because you sent "$a" as one argument "==" as a second 
>>> argument (the body '==' is invalid, it
>>> would say that '==' is not a valid command) and $b as the third argument 
>>> (again error because it only accepts
>>> else and elseif) and return as the 4th argument. So you group them into a 
>>> list :
>>> if {$a == $b} return
>>> the {$a == $b} becomes a list. You could have also done :
>>> if [list $a == $b] return
>>> but it's better to put braces, and the 'if' command will evaluate the 
>>> expression and *substitute in the parent
>>> namespace* (which is why it works, even if { } will disable substitution).
>>> Also, you CAN'T do  :
>>> if {$a == $b} {
>>>    return 0
>>> }
>>> else
>>> {
>>>    return 1
>>> }
>>>
>>> because it will say "else : invalid command". The commands are delimited by 
>>> either a ';' or by a newline, so
>>> when you close the brace after the if and go to the next line, it means 
>>> that you finished with the 'if'. This
>>> means you HAVE to put the 'else' on the same line as the closing brace of 
>>> the body, like this :
>>> if {$a == $b} {
>>>    return 0
>>> } else {
>>>    return 1
>>> }
>>> The same applies for the 'else' you can't put a newline after the 'else', 
>>> otherwise it will say "{ : invalid
>>> command".
>>> You can put newlines inside the body of the if only because we do a { } (if 
>>> you do [list] you'll need to put a
>>> backslash at the end of each line otherwise it will say "missing close 
>>> bracket", like this :
>>> if {$a == $b} [list \
>>>    return 0 \
>>> ] else [list \
>>>    return 1
>>> ]
>>> but you DON'T WANT TO DO THIS because... well, remember { } allows you to 
>>> disable substitution, so if you do for
>>> example :
>>> if {$a == $b} [list return [exit]]
>>> then when evaluation the 'if', the [list return [exit]] will be evaluated 
>>> (to go as an argument of the if) and
>>> 'exit' will be called even if $a != $b.
>>> So to continue, when you do the { }, nothing is evaluated, so if you do
>>> if { $a == $b } {
>>>    return 0
>>> }
>>> then if will get 2 arguments, the first being the expression and the second 
>>> being a list containing multiple
>>> elements : a newline, a series of spaces, a 'return', a '0' and a newline. 
>>> When the 'if' will evaluated that
>>> list, it will be evaluated as code and the variables/commands will be 
>>> substituted/evaluated and the newlines
>>> will be interpreted as command delimiters.
>>> You can also do something like this :
>>> set body { whatever_function $arg
>>>  return 0
>>> }
>>> if {$a == $b} $body
>>> and since $body is not between { } it will be replaced by the code above...
>>> beware, if you did :
>>> if {$a == $b} {$body }
>>> then $body will only be substituted AFTER the if is entered and will be 
>>> evaluated as one command, it will say
>>> that :
>>> {whatever_function $arg
>>>   return 0
>>> } : invalid command
>>>
>>> oh and yes, if you were meant to ask, yes, you can put newlines and put 
>>> spaces in a command, so if you do :
>>> proc {a
>>> b
>>> c} { } {puts 'abc called'}
>>>
>>> a command called {a
>>> b
>>> c} will be created. And you can call it with
>>> {a
>>> b
>>> c}
>>> or with :
>>> set command "a\nb\nc"
>>> $command
>>>
>>> it's fun Tcl, right ? you just need to understand those three basics, 
>>> anything is a command getting executed..
>>> the tcl keywords are just 'built-in' commands (like if), understand lists 
>>> and substitutions... and once you get
>>> that, you can do a lot of fancy stuff (like commands with spaces or 
>>> newlines in them :p)
>>>
>>> Finally, here are three interesting links in the forums in which I 
>>> explained what I just explained in this mail,
>>> a bit differently, maybe better, with other examples, and probably with a 
>>> bit more info. So please read them
>>> too.
>>> http://www.amsn-project.net/forums/viewtopic.php?p=17467
>>> http://www.amsn-project.net/forums/viewtopic.php?p=5801#5801
>>> http://www.amsn-project.net/forums/viewtopic.php?p=4461#4461
>>>
>>> and I would REALLY love it if someone could summarize all this (or just 
>>> copy/paste it?) to the wiki in a page
>>> like Dev:Tcl/Tk_Tutorials
>>>
>>>
>>>
>>> p.s.: I never tried/tested the commands with newlines, but I'm guessing 
>>> they will work,I know that if I had put
>>> $body, it will tell me an error trying to execute a command containing the 
>>> newline, but I never created one in
>>> itself.
>>>
>>> Thanks and have fun!
>>> KaKaRoTo
>>>
>>>
>>> On Thu, May 31, 2007 at 12:05:49AM +0200, Mirko Hansen wrote:
>>>> Wow thanks a lot everybody for this nice welcome. It's a real pleasure to
>>>> me. I think I should introduce myself roughly. Well, I think you all 
>>>> already
>>>> know, but my name is Mirko. ;) I'm 24 years old, living in Germany, and
>>>> actually I'm studying computer science at university. It's sometimes really
>>>> time-consuming, especially if we have those really nice homeworks like the
>>>> last two days, but I hope I'll be of use for the team, anyway I'll give my
>>>> best to. As Youness said, I'm very new to TCL, I never had to deal with it
>>>> before, so I would be really grateful if you advise me of my possibly made
>>>> mistakes, to be able to learn from them. :)
>>>>
>>>> I think you'll hear from me soon. To a great teamwork! :)
>>>>
>>>> Bye,
>>>> Mirko
>>>>
>>>> 2007/5/30, Youness Alaoui <[EMAIL PROTECTED]>:
>>>>> yeah, sounds intriguing right ?
>>>>> well, baaazen is the username of Mirko. And this mail is to announce that
>>>>> he's been added as part of the team.
>>>>> So everyone, please welcome Mirko into the team, and please be helpful.
>>>>> Mirko, if you need anything, don't hesitate to ask. I think you've been
>>>>> following the ML for a little while now
>>>>> so you should know how we work. in short ;
>>>>> 1 - a bugfix, you can commit
>>>>> 2 - a change to the UI should be discussed
>>>>> 3 - a change of behavior should be discussed
>>>>> 4 - a new feature should be discussed.
>>>>>
>>>>> Mirko is still studying and won't have much time (like everyone else) but
>>>>> he promised to do his best to try and
>>>>> help. He doesn't know much Tcl but from the patches he sent, it shows that
>>>>> he's very skilled and I'm sure he'll
>>>>> learn it all pretty soon.
>>>>>
>>>>> KaKaRoTo
>>>>>
>>>>> -------------------------------------------------------------------------
>>>>> This SF.net email is sponsored by DB2 Express
>>>>> Download DB2 Express C - the FREE version of DB2 express and take
>>>>> control of your XML. No limits. Just data. Click to get it now.
>>>>> http://sourceforge.net/powerbar/db2/
>>>>> _______________________________________________
>>>>> Amsn-devel mailing list
>>>>> Amsn-devel@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/amsn-devel
>>>>>
>>>> -------------------------------------------------------------------------
>>>> This SF.net email is sponsored by DB2 Express
>>>> Download DB2 Express C - the FREE version of DB2 express and take
>>>> control of your XML. No limits. Just data. Click to get it now.
>>>> http://sourceforge.net/powerbar/db2/
>>>> _______________________________________________
>>>> Amsn-devel mailing list
>>>> Amsn-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/amsn-devel
>>>
>>> -------------------------------------------------------------------------
>>> This SF.net email is sponsored by DB2 Express
>>> Download DB2 Express C - the FREE version of DB2 express and take
>>> control of your XML. No limits. Just data. Click to get it now.
>>> http://sourceforge.net/powerbar/db2/
>>> _______________________________________________
>>> Amsn-devel mailing list
>>> Amsn-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/amsn-devel
>>>
>> -------------------------------------------------------------------------
>> This SF.net email is sponsored by DB2 Express
>> Download DB2 Express C - the FREE version of DB2 express and take
>> control of your XML. No limits. Just data. Click to get it now.
>> http://sourceforge.net/powerbar/db2/
>> _______________________________________________
>> Amsn-devel mailing list
>> Amsn-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/amsn-devel
> 
> -------------------------------------------------------------------------
> This SF.net email is sponsored by DB2 Express
> Download DB2 Express C - the FREE version of DB2 express and take
> control of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> _______________________________________________
> Amsn-devel mailing list
> Amsn-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/amsn-devel
> 


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Amsn-devel mailing list
Amsn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/amsn-devel

Reply via email to