Explicit Variables again

Peter M. Brigham pmbrig at gmail.com
Fri Oct 19 18:41:57 EDT 2012


On Oct 19, 2012, at 2:00 PM, J. Landman Gay wrote:

> Typos are almost never a problem for me. I only type variable names once when I first write them. I have a custom frontscript that includes a whole lot of handy things, one of which is the ability to insert or replace the selection with whatever word I point at. When I need to use an existing variable, I just point at the original and hit a keyboard shortcut and the variable name goes into the script with no typing. If the handler is longer than the script window (very rare for me) then I use copy/paste or the replace dialog.


I've been using your frontscript handler for several years now and I love it -- it saves me so much time and prevents typos. For those who are interested here is my version (slightly altered from yours, Jacque). They are all control-shift keypresses that work only in the IDE script editor. The one Jacque referred to is the "scriptPaint" handler: control-shift-space inserts the mousetext into the selection.

Put this into a frontScript:

on controlkeydown whichKey
   put the long name of the target into tarName
   put the shiftkey is down into shK
   switch whichKey
      case "'" -- ctrl-sh-quote puts quotes around the selection
         if not shK then pass controlkeydown
         if "field" is not in tarName then pass controlkeydown
         if "revNewScriptEditor" is not in tarName then pass controlkeydown
         get the selection
         put q(it) into the selection
         if it = "" then
            put the selectedChunk into tSel
            put word 4 of tSel into word 2 of tSel
            put (word 4 of tSel) - 1 into word 4 of tSel
            select tSel
         end if
         doUndoSpace
         break
      case "9"
      case "0" -- ctrl(-sh)-paren puts parens around the selection
         if "field" is not in tarName then pass controlkeydown
         if not shK then pass controlkeydown
         if "revNewScriptEditor" is not in tarName then pass controlkeydown
         get the selection
         put "(" & it & ")" into the selection
         if it = "" then
            put the selectedChunk into tSel
            put word 4 of tSel into word 2 of tSel
            put (word 4 of tSel) - 1 into word 4 of tSel
            select tSel
         end if
         doUndoSpace
         break
      case "["
      case "]" -- ctrl-bracket puts brackets around the selection
         if not shK then pass controlkeydown
         if "field" is not in tarName then pass controlkeydown
         if "revNewScriptEditor" is not in tarName then pass controlkeydown
         get the selection
         put "[" & it & "]" into the selection
         if it = "" then
            put the selectedChunk into tSel
            put word 4 of tSel into word 2 of tSel
            put (word 4 of tSel) - 1 into word 4 of tSel
            select tSel
         end if
         doUndoSpace
         break
      case "-"
      case "_" -- ctrl-sh-dash comments out the line(s)
         if not shK then pass controlkeydown
         if "field" is not in tarName then pass controlkeydown
         if "revNewScriptEditor" is not in tarName then pass controlkeydown
         put the selectedLine into tLineCh
         put "-" & "-" into cmntChars
         if " to " is in tLineCh then
            put word 2 of tLineCh into stLineNbr
            put word 4 of tLineCh into endLineNbr
            repeat with n = stLineNbr to endLineNbr
               put "put cmntChars & space before word 1 of line" && n && "of" && tarName \
                      into theDo
               do theDo
            end repeat
            -- put scriptLinesText into line stLineNbr to endLineNbr of the target
            put endLineNbr into selectHere
         else
            put word 2 of tLineCh into lineNbr
            put the long name of the target into tLongName
            put sr(line lineNbr of the target) into tLineText
            do "put cmntChars & space before word 1 of" && tLineCh
            put lineNbr into selectHere
         end if
         doUndoSpace
         send "tabkey" to tarname -- to fix indenting
         select after line selectHere of the target
         break
      case "="
      case "+" -- ctr(-sh)-plus uncomments the line -- until Rev fixes the commandkey shortcut
         if not shK then pass controlkeydown
         if "field" is not in tarName then pass controlkeydown
         if "revNewScriptEditor" is not in tarName then pass controlkeydown
         put the selectedLine into tLineCh
         if " to " is in tLineCh then
            put word 2 of tLineCh into stLineNbr
            put word 4 of tLineCh into endLineNbr
            put line stLineNbr to endLineNbr of target into scriptLinesText
            repeat with n = 1 to the number of lines of scriptLinesText
               put sr(line n of scriptLinesText) into tLineText
               if char 1 to 2 of tLineText = "-" & "-"
               then delete char 1 to 2 of tLineText
               put tLineText into line n of scriptLinesText
            end repeat
            put scriptLinesText into line stLineNbr to endLineNbr of the target
         else
            put sr(value(tLineCh)) into tLineText
            if char 1 to 2 of tLineText = "-"&"-" then
               delete char 1 to 2 of tLineText
               do "put tLineText into" && tLineCh
            end if
         end if
         doUndoSpace
         send "tabkey" to tarname
         break
      case " " -- scriptPaint: crl-sh-space inserts the mousetext into the selection
         if not shK then pass controlkeydown
         if "field" is not in tarName then pass controlkeydown
         if "revNewScriptEditor" is not in tarName then pass controlkeydown
         put the mouseText into the selection
         doUndoSpace
         break
     default
         pass controlkeydown
   end switch
end controlkeydown

private command doUndoSpace
   -- this solves the problem that after the above scripted operations
   -- the script editor remains unaware that the script has changed,
   -- so an <enterkey> will close but not save the changed script
   -- thus we have to *type* at least one character
   lock screen
   put the selectedText into selTxt
   type numToChar(32) -- the important step
   put word 4 of the selectedChunk into charNbr
   put selTxt into char charNbr of the target
   unlock screen
end doUndoSpace

function q str
   return quote & str & quote
end q





More information about the use-livecode mailing list