implicitVars [Was: Re: Best Practices in Rev development]

Tereza Snyder tereza at
Fri Jul 6 15:31:54 EDT 2007

On Jul 6, 2007, at 1:31 PM, Kay C Lan wrote:
> This puts a smile on my face because the best assistant for me is a  
> program
> called CopyPaste.
> Unfortunately, Rev and CopyPaste don't get on :-(

I favor CopyPaste, too...everywhere but Rev. Rev's stranglehold on  
the clipboard trips up CopyPaste, and another favorite of mine,  

To console myself, I made a snippet-paster that lets me insert  
boilerplate into scripts, optionally merging the contents of the  
clipboard, and position the insertion cursor within the boilerplate.

First, I have a frontscript for various utility functions, among them  
a keydown handler that reads, in part:
       switch pKey
             case "`"  -- same key as tilde
                 get the selectedchunk
                 put the long id of the target into  word -2 to -1 of it
                 set the dialogdata to it
                 popup "CFX_Snippets"
                 exit keydown

It pops up a menu whenever I type ` in a script. The dialogData is  
first set to the position in the script field for the boilerplate  
text. The CFX_Snippets stack has a custompropertyset (i.e. array  
property) in which each property name (key) is a description of its  
content, the boilerplate text. For example, one of the snippets  is  

       log "x="

the text that is stored for that key is:

      log param(0) && "[[it]]=" & [[it]] ` --///

which, if the variable name "tVar" is on the clipboard, will result in:

     log param(0) && "tVar=" & tVar --///

in my script. My "log" handler (which lives in the frontscript) will  
post :

    myHandlerName  tVar = 5

when it gets to that statement, which can sometimes be more useful  
than the debugger and variable watcher in nailing down certain bugs.

Other snippets result in more elaborate log statements, switch  
statements, etc.

in the CFX_Snippets stack:
> on preopenstack
>     put the dialogdata into sSel  -- save the insertion point
>     set the custompropertyset of me to uSnippetsA
>     get  the customkeys of me
>     sort lines of it ascending
>     put it into fld 1 of me
>     set the height of  fld 1 of me to (the formattedheight of fld 1  
> of me) + 8
>     set the topleft of fld 1 of me to 0,0
>     set the height of me to the height of fld 1 of me
> end preopenstack
> on closeStack
>     put the uSnippetsA[the selectedtext of fld 1 of me] of me into  
> tSnip
>     if tSnip contains "[[" then       -- use merge statement
>         if length(the clipboarddata["text"] ) < 30         -- only  
> for short clipboard text
>         then get line 1 of the clipboarddata["text"] else get empty
>         put merge( tSnip ) into tSnip
>     end if
>     put offset( "`",  tSnip) into tInsertion  -- set the insertion  
> point
>     if tInsertion is 0 then put (the length of tSnip) - 6 into  
> tInsertion      -- before "--///"
>     else put space into char tInsertion of tSnip
>     do "put tSnip into" && sSel
>     add tInsertion to word 2 of sSel
>     put (word 2 of sSel) - 1 into word 4 of sSel
>     do "select" && sSel
> end closeStack


Tereza Snyder
Califex Software, Inc.

More information about the Use-livecode mailing list