Good job! I'll definitely test this later! Does it work also in Script editors?
cheers Xavier > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Wouter > Sent: Friday, February 25, 2005 02:17 > To: [email protected] > Subject: unlimited undo's for text fields > > Hi All, > > For those who like unlimited undo's (or is it ram limited > undo's?) an undo framework starter for text in fields. > This script can be placed in a stackscript and will act on all > (editable) fields. > Drag dropping text from one field to the other is supported. > It is functional and tested on OS X. But for the other > platforms I don't know yet. > Adapt as necessary and beware of the mail wraps! > > global gHistory > local lSC,lData > > on rawkeydown x > writeHistory x > pass rawkeydown > end rawkeydown > > on dragstart > put the selectedchunk into lSC > pass dragstart > end dragstart > > on dragend > put the dragData["text"] into lData > send "checkdragdata" to me in 20 millisecs > pass dragend > end dragend > > on checkdragdata > put the selectedchunk into tSC > get word -2 to -1 of lSC > put word 1 to 7 of the long id of it into tFNameOrig > get word -2 to -1 of tSC > put word 1 to 7 of the long id of it into tFNameDest > if tFNameOrig = tFNameDest and not (word 2 of tSC > word 4 > of tSC) then > put "d",lSC,tSC,hexadize(lData) & cr after gHistory[tFNameDest] > else if tFNameOrig <> tFNameDest then > delete word 3 to 4 of lSC > put "x",lSC,hexadize(lData) & cr after gHistory[tFNameOrig] > put "v",tSC,hexadize(lData) & cr after gHistory[tFNameDest] > end if > put "" into lSC > put "" into lData > end checkdragdata > > ### first item indicates the action > ### w = write > ### v = paste > ### x = cut > ### b = backspace > ### d = dragplaced > > on writeHistory x > put the selectedchunk into tSC > get word -2 to -1 of tSC > put word 1 to 7 of the long id of it into tFName > if the commandkey is down then > switch x > case "122" ### z > reverseHistory > break > case "118" ### v > put clipboardData["text"] into x > put "v",tSC,hexadize(x) & cr after gHistory[tFName] > break > case "120" ### x > put the value of tSC into x > if x <> "" then > delete word 3 to 4 of tSC > put "x",tSC,hexadize(x) & cr after gHistory[tFName] > end if > break > end switch > else > switch x > case "65421" ### enter in field > case "65307" ### escape key > case "65308" ### scrollwheel up and down > case "65309" > case "65361" ### arrowkeys > case "65363" > case "65362" > case "65364" > -- do nothing > break > case "65288" ### backspace > if word 4 of tSC <> 0 then > if word 2 of tSC < word 4 of tSC then > get the value of tSC > delete word 3 to 4 of tsC > else if word 2 of tSC > word 4 of tSC then > delete word 2 to 3 of tSC > get the value of tsC > end if > put hexadize(it) into x > put "b",tSC,x & cr after gHistory[tFName] ## b = backspace > end if > break > case "65293" ### return in field > delete word 3 to 4 of tSC > put "w",tSC,hexadize(return) & cr after gHistory[tFName] > break > default > delete word 3 to 4 of tSC > put "w",tSC,hexadize(numtochar(x)) & cr after gHistory[tFName] > break > end switch > end if > end writeHistory > > on reverseHistory > put word 1 to 7 of the the focusedobject into tFName > if gHistory[tFName] = "" then > beep > exit reverseHistory > end if > get line -1 of gHistory[tFName] > delete line - 1 of gHistory[tFName] > switch item 1 of it > case "b" > put dehexadize(last item of it) into x > if x = return then put "cr" into x > else if x = space then put "space" into x > else if x = tab then put "tab" into x > else > replace quote with quote & ""e&" & quote in x > replace cr with quote&"&cr&"& quote in x > put quote & x & quote into x > end if > do "put" && x && "before" && item 2 of it > break > case "w" > do "delete" && item 2 of it > break > case "v" > put dehexadize(last item of it) into x > put the num of chars in x into y > put word 2 of item 2 of it + y - 1 into word 4 of item 2 of it > do " delete" && item 2 of it > break > case "x" > put dehexadize(last item of it) into x > if x = return then put "cr" into x > else if x = space then put "space" into x > else if x = tab then put "tab" into x > else > replace quote with quote & ""e&" & quote in x > replace cr with quote&"&cr&"& quote in x > put quote & x & quote into x > end if > do " put" && x && "before" && item 2 of it > break > case "d" > put dehexadize(last item of it) into x > if last char of x = cr then add 1 to word 4 of item 3 of it > if the num of lines in x > 1 then delete last char of x > if x = return then put "cr" into x > else if x = space then put "space" into x > else if x = tab then put "tab" into x > else > replace quote with quote & ""e&" & quote in x > replace cr with quote&"&cr&"& quote in x > put quote & x & quote into x > end if > do "delete" && item 3 of it > delete word 3 to 4 of item 2 of it > do " put" && x && "before" && item 2 of it > break > end switch > end reverseHistory > > ### Big Endian BinaryDecode ### > function hexadize sx > get binarydecode("H*", sx, x1) > return x1 > end hexadize > > ### Big Endian Binary Encode ### > function deHexadize sx > replace space with "" in sx > try > get binaryEncode("H*", sx, x1) > catch errornum > put "no hex value" into it > finally > return it > end try > end deHexadize > > ################### > ## for test purposes ## > ################### > > on emptyHistory > delete global gHistory > end emptyHistory > > on putHistory > put word 1 to 7 of the the focusedobject into tFName > if the optionkey is down then put the keys of gHistory > else put gHistory[tFName] > end putHistory > > > Greetings, > WA > > _______________________________________________ > use-revolution mailing list > [email protected] > http://lists.runrev.com/mailman/listinfo/use-revolution > _______________________________________________ use-revolution mailing list [email protected] http://lists.runrev.com/mailman/listinfo/use-revolution
