Newsgroup: it.comp.macintosh
Titolo: [AS] domanda...

beh..in realta' sono tre  ;o)
1) in Script Tools 1.3.6 ho trovato uno script il cui handler inizia con
(esempio reale):
on ListFiles of srcFolders
all'esecuzione mi viene dato errore...
ho cambiato in:
on ListFiles(srcFolders)
e tutto va bene...
cos'e' ? una vecchia forma ?
(PS..lo script e' compilato...e si chiama "ListFolder" negli esempi..)
2) sempre ne medesimo script, ho trovato un "display dialog" con tre
pulsanti...
lo script contiene due "if text returned of result =<valore pulsante>"
il problema e' che mi viene dato errore al secondo passaggio..e' come se
non ritrova il "text returned of result"...
ho risolto con una property...
ma vorrei capire il perche' non lo ritrova....
3) come faccio a dire ad AS di mettermi una stringa, un testo o una
parola negli appunti ?
grazie... :o)
-- 
Ridi e il Mondo ridera' con te. Piangi e avrai bisogno di un fazzoletto.
---
mailto:
xx...@iname.com
 / 
xx...@freemail.it
Sostituisci "xxxxx" con "pscss" per rispondere via mail

 cerchero' un'altra donna dentro ai sogni di Tarzan...

 parola negli appunti ?
In generale con Jon's Commands, pero` qualche volta non funziona, ma 
questo dipende dal system e dalle applicazioni, non da AS: 
se ho capito bene ogni applicazione ha la sua clipboard, quindi 
per leggere/scrivere la sua clipbard, non basta che il comando di
leggi/scrivi la clipboard sia dentro a una tell a quella applicazione,
occorre sempre che quella applicazione sia in primo piano. Alle volte 
anche questo non basta, perche' qualche applicazione, pensata per il
Sys7.1, percepisce i cambiamenti della clipboard solo o quando sono 
determinati da lei oppure quando c'e` un passaggio da un'applicazione
all'altra. In questo secondo caso, per far percepire la nuova clipboard
occorre mandare in primo piano per un attimo un'altra applicazione e poi
ritornare a quella che vogliamo. (E` spiegato meglio nell'help on line 
dei Jon's Commands).
In generale, come sai, per passare i dati fra due applicazioni
scriptabili non bisogna mai usare la clipboard, ma delle variabili
applescript, non solo per i problemai di sopra ma perche' nella
clipboard ci potrebbero essere dei dati importanti, che cosi` andrebbero
persi inavvertitamente. Si puo` usare solo come emergenza, se bisogna
fare qualcosa con applicazioni non scriptabili. Ma allora tanto vale
emulare direttamente le keystrokes con Sandi's Additions e lasciare
perdere lo stesso la clipboard. 
---sbagliato:---
set the clipboard to "Leviatano" --Jon's Commands
tell app "BBEdit lite 4.1" --lo so che c'e` la 4.6
activate
TypeText "n" with command --Sandi's
TypeText "v" with command --Sandi's
end tell
-----
--meno sbagliato:---
set myvariable to "Leviatano" --Jon's Commands
tell app "BBEdit lite 4.1" --lo so che c'e` la 4.6
activate
TypeText "n" with command --Sandi's
TypeText myvariable --Sandi's
end tell
----
-- 
Ciao,        \+----------+  "La risposta e ` dentro di te...
   Vittorio --| : )    o |      ...MA E` SBAGLIATA!!!"
             /+----------+  - = 
http://fly.to/risorse/
 = -

occorre sempre che quella applicazione sia in primo piano.
Esattamente.


 la clipboard, ma non lo comunica al Finder.
Perche' e` importante farlo sapere al finder? :-)
Perche' deve metterlo nel file "Clipboard" in cartella sistema da cui le
altre app possono andare a leggere?


 in che senso? =:-o
set MyProperty to button returned ecc ecc...
il codice arriva :o)
---------
on open of srcFolders
ListFiles of srcFolders
end open
on run
set srcFolders to choose several folders¬
 with prompt "Select folders to list:"
ListFiles of srcFolders
end run
on ListFiles of srcFolders
set newFile to choose new file¬
 with prompt "Choose an output file:"
set result to display dialog ¬
"Should the folder path be included in the listing?" ¬
buttons {"Cancel", "Yes", "No"} ¬
default button "No"
if (button returned of result <segno di diverso> "Cancel") then
--devi sostituire la mia stringa tra <> con il segno "diverso"
--non mi permette di inviarlo perche' non "Latin"...
 
set outFile to (folder returned of newFile as string)¬
 & (filename returned of newFile)
 
if (replacing of newFile) then ¬
deleteFile alias outFile
 
createFile (filename returned of newFile) in¬
 (folder returned of newFile) ¬
owner "R*ch" 
set refNum to openFile alias outFile
 
repeat with i from 1 to count of srcFolders
set srcFolder to item i of srcFolders
if (button returned of result = "Yes") then
set srcPath to srcFolder as string
else
set srcPath to ""
end if
 
set fileNames to list folder srcFolder
 
repeat with i from 1 to count of fileNames
writeLine refNum text srcPath & (item i of fileNames)
end repeat
end repeat
 
closeFile refNum
end if
end ListFiles
---------
questo e' il codice originale...
ho tolto i commenti e spezzato le istruzioni troppo lunghe...
spero di non aver fatto cavolate....
Ciao  :o)


On Wed, 6 Oct 1999 16:05:33 +0200, 
xx...@freemail.it
 (cucciolo) wrote:
Apporto piccole correzioni al tuo script. Da una parte formali (come
togliere quell'"of"), dall'altra delle mie fisse... Invece di usare
nomi inglesi (che rischiano di collidere con proprieta' o parole
chiavi predefinite) io preferisco usare l'italiano: e' uno dei pochi
vantaggi che abbiamo sugli americani... sfruttiamolo ;-))))
Un esempio clamoroso, infatti, e' il tuo uso di "result" come nome
variabile... MALE!, "the result" infatti e' il nome predefinito della
variabile che contiene il risultato dell'ultima operazione effettuata.
Se tu l'avessi chiamata "risposta" non avresti avuto problemi.
Il segno "diverso" si scrive anche <>  =/  "is not"  "isn't"
<CODE>
------8<-------8<-------8<-------8<-------8<-------8<-------8<--
on open(cartelle)
  elenca(cartelle)
end open
on run
  set cartelle to choose several folders¬
    with prompt "Select folders to list:"
  elenca(cartelle)
end run
on elenca(cartelle)
  set newFile to choose new file¬
    with prompt "Choose an output file:"
  set risp to the button returned of (display dialog ¬
    "Should the folder path be included in the listing?" ¬
    buttons {"Cancel", "Yes", "No"} default button 3)
  if risp is "Cancel" then return -- fai prima!
  -- "folder returned of newfile"?
  -- 'sta cosa funzia? Ma che OSAX usi?
  set outFile to (folder returned of newFile as string)¬
    & (filename returned of newFile)
  -- Che roba e'? "replacing of newfile"?
  if (replacing of newFile) then deleteFile alias outFile
 
  createFile (filename returned of newFile) in¬
    (folder returned of newFile) owner "R*ch"
  set refNum to openFile alias outFile
 
  repeat with i from 1 to (count of srcFolders)
    set srcFolder to item i of srcFolders
    if risp is "Yes" then
      set srcPath to srcFolder as string
    else
      set srcPath to ""
    end if
    set fileNames to list folder srcFolder
    repeat with i from 1 to count of fileNames
       writeLine refNum text srcPath & (item i of fileNames)
    end repeat
  end repeat
  closeFile refNum
end ListFiles
------8<-------8<-------8<-------8<-------8<-------8<-------8<--
</CODE>
Non capisco (e non posso controllare, sono sotto Win), hai dei
problemi cosi'? Dove sono le property?


 il codice arriva :o)
Prima il predicozzo, poi la soluzione ;-)
Hai usato Script Tools di Mark Alldritt, delle scripting additions non
Apple, del 1993... questo non e` bene perche':
- in generale dipendere dalle osaxen di terze parti non e` bene, perche'
poi devi installarle anche sulle altre macchine su cui le usi.
- in particolare, quelle osaxen in parte sono obsolete, perche' lo
scriptable finder introdotto piu` o meno col 7.5 ha incorporato molte
delle loro funzionalita`. 
In particolare queste:
File IO
Gestalt
Processes
Shutdown
Speech
sono state rimpiazzate da comandi Apple del tutto analoghi (osax o
scriptable finder).
List Screens
Puoi usare i Jon's Commands, che fa tante altre cose.
Choose Files & Folders
Ok, migliora l'open/save dialog... si puo` usare se serve.
Regular Expressions
Ha un concorrente forse piu` facile da usare, ma e` ancora valida.
Infine, e` buona abitudine che ogni volta che usi un comando di una osax
non-Apple, scrivi accanto a ciascuno di quei comandi "aggiunti", ci
scrivi subito accanto in un commento da quale osax proviene :-)...
Jon's, Tanaka's, Sandi's, ecc.). Perche' se riapri lo script su una
macchina che non ha installata quella osax, non solo lo script non
funziona, ma nello script editor leggi solo il codice dell'apple event e
non sai quale osax devi andare a reinstallare per farlo funzionare!!!
Ok, adesso la correzione: :-)
----
on open(srcFolders)
ListFiles(srcFolders)
end open
on run
set srcFolders to ¬
choose several folders with prompt "Select folders to list:"
--Alldritt's Script Tools
ListFiles(srcFolders)
end run
on ListFiles(srcFolders)
set newFile to ¬
choose new file with prompt "Choose an output file:"
set risposta to display dialog ¬
"Should the folder path be included in the listing?" ¬
buttons {"Cancel", "Yes", "No"} default button "No"
--"result" e` parola riservata, non la 
--puoi usare come nome di una variabile
if (button returned of result is not "Cancel") then
--cosi` non c'e` il problema del "non-Latin"
set outFile to (folder returned of newFile as string) ¬
& (filename returned of newFile)
if (replacing of newFile) then ¬
deleteFile alias outFile
create file (filename returned of newFile) in ¬
(folder returned of newFile) ¬
owner "R*ch"
--Alldritt's Script Tools
set refNum to open file alias outFile
--Alldritt's Script Tools
repeat with i from 1 to count of srcFolders
set srcFolder to item i of srcFolders
if (button returned of risposta = "Yes") then
set srcPath to srcFolder as string
else
set srcPath to ""
end if
set fileNames to list folder srcFolder
repeat with i from 1 to count of fileNames
write file refNum text srcPath & (item i of fileNames)
--Avevi sbagliato una parola:
--write LINE refNum text srcPath & (item i of fileNames)
end repeat
end repeat
close file refNum
end if
end ListFiles
----


 problemi cosi'? Dove sono le property?
quelle sono sullo script corretto :o)
quello postato e' lo script originale preso da "Script Tools 1.3.6"
nella cartella "example" col nome di "List Folder"...
credo sia un esempio per l'osax che sfrutta la "several
folder"..."Choose Files & Folders" se non erro....
solo che provandolo, creava i problemi descritti....
ti posto lo script che ho modificato io...
--------------------
property MyYes : ""
on open of srcFolders
ListFiles(srcFolders)
end open
on run
set srcFolders to choose several folders with prompt ¬
"Seleziona le cartelle da includere:"
ListFiles(srcFolders)
end run
on ListFiles(srcFolders)
set newFile to choose new file with prompt "Crea il file:"
set result to display dialog ¬
"Vuoi includere il percorso nella lista?" ¬
buttons {"Annulla", "Si", "No"} ¬
default button "No"
 
set MyYes to (button returned of result)
 
if (MyYes isn't "Annulla") then
 
set outFile to (folder returned of newFile as string)¬
 & (filename returned of newFile)
if (replacing of newFile) then ¬
deleteFile alias outFile
 
createFile (filename returned of newFile) ¬
in (folder returned of newFile) ¬
owner "R*ch" 
set refNum to openFile alias outFile
 
repeat with i from 1 to count of srcFolders
set srcFolder to item i of srcFolders
if (MyYes = "Si") then
set srcPath to srcFolder as string
else
set srcPath to ""
end if
 
set fileNames to list folder srcFolder
 
repeat with i from 1 to count of fileNames
writeLine refNum text srcPath & (item i of fileNames)
end repeat
end repeat
 
 
closeFile refNum
end if
end ListFiles
---------------
ho solo cambiato il famoso "of" e usato la property come variabile per
il button returned....ed i messaggi :o)
lo script cosi messo funziona...
mi sono intestardito perche' non riuscivo a capire il malfunzionamento
..soprattutto perche' doveva essere un esempio...


 Perdonami, ma detta cosi` mi sembra una variabile :-)
beh..si.. :o)
infatti volevo solo usarla come una variabile per metterci il "button
returned" in base all'errore che mi dava...
come ho risposto a Marco, quello che ho postato e' lo script
originale..senza correzioni e che non funzionava...
ho postato quello che ..ehm..io ho corretto [non so come..ma funzia ;o)]
...MMmmm..mi sa che ho fatto un po' di casino..accc...
e poi...ho trovato Script Tools..delle osax..ed io ho buttato la' ...
sai il proverbio: quello che non strozza ingrassa ??  ;o)
e poi pensavo che usasse solo l'osax "Choose Files & Folders"...che
pensavo integrato nel sistema...e neanche sapevo che era cosi..vecchio..
una piccola nota...
nell'apertura del "several folder" che poi permette di selezionare piu'
cartelle, ho notato che la finbestra di dialogo e' molto instabile...
trema in continuazione la parte che visualizza le cartelle scelte...ma
se' cosi vecchio.. :o)


 se e' cosi vecchio.. :o)
(;-)


 tanto MyYes e` locale all'handler ListFiles...
OOOooohhh... :oO
acccc.....
con l'esperienza dell'altro script (che non riusciva a trovare la
variabile...) non mi sono posto il problema...ho direttamente creato la
property :o1
...come dire che ho usato la bomba atomica al posto del fucile ?! ;o)
beh..cosi comprendo meglio quello che vuoi dire....effettivamente
nell'altro non era locale dell'handler...
..benedetta esperienza... ;)
Ciao...
PS..al momento di usare un osax sarebbe buona regola indicare la
provenienza...
ma altrimenti, non c'e' nulla per risalire all'osax che usa un
determinato script?
cioe'..metti caso che compilo uno script come solo eseguibile ma
dimentico di dire quale osax usare...non avresti nulla per risalire
all'osax?


 all'osax?
Non e` possibbbole... perche' uno script letto senza la sua osax
contiene solo i codici degli apple events... le parole in pseudo inglese
di applescript erano dentro alla osax anche loro !! e` come se tu
trovassi un libro che non solo e` in una lingua che non conosci (=non
riesci ad eseguire lo script), ma neanche sai in quale lingua e`,
perche' mancano le prime e ultime pagine e non puoi sapere nemmeno se e`
stato  stampato a Lubiana o a Praga... se invece tu scrivi quale hai
usato, almeno vedi il luogo di stampa, indovini la lingua e sai a chi
devi rivolgerti per leggerlo...
In teoria qualcuno potrebbe risolvere queste situazioni compilando un
database di questi raw events... ma in pratica nessuno lo ha mai fatto,
perche' e` molto piu` facile evitare di averne bisogno. Quanche volta
sulla ML internazionale qualcuno chiede a cosa corrisponde un raw
events, e se gli va bene risponde qualcuno che sa quei codici a memoria,
non perche' ci sia un database...
