OVH Cloud OVH Cloud

[AppleScript] Choose from list

19 réponses
Avatar
unbewusst.sein
Peut-être ais-je la berlue, ùais j'ai vu un AS avec un "Choose from
list" qui avait en + de cela un input text field de manière à pouvoir
entrer un nouvel élément qui n'existe pas dans la liste ?

j'ai googelisé sans résultat pour l'instant.

--
« Je me sens très optimiste quant à l'avenir du pessimisme. »
(Jean Rostand)

9 réponses

1 2
Avatar
danrob
Une Bévue wrote:

mais je ne suis pas sûr que, pour lancer Pashua, il faille indiquer le
path complet du bin, vraisemblablement le path du bundle (Pashua.app) en
absolu suffit, à vérifier.

je viens juste de vérifier, ça ne marche pas :
zsh-% ./essai_pashua.rb
sh: /Applications/Utilities/Pashua/Pashua.app: is a directory



Comment je l'utilise en Applescript :
(* Pashua_Setting = contient les paramètres pour Pashua
PathToHelpers = chemin du dossier où est Pashua.app
*)

set PathToPashua to quoted form of POSIX path of ¬
(PathToHelpers & "Pashua.app:Contents:MacOS:Pashua" as string)

-- création du fichier temporaire passé à Pashua
set PashuaTemp to do shell script ("mktemp -q -t Pashua_ini")
set PashuaTemp to POSIX file PashuaTemp
write Pashua_Setting to file PashuaTemp

set PashuaTemp to quoted form of POSIX path of PashuaTemp

-- appel de Pashua et récupération du résultat
set Pashua_Bin to (PathToPashua & " " & PashuaTemp & " ; sleep 1")
(*** sleep 1 : tempo pour Snow Leopard ***)

Attention, dans certaines conditions j'avais un fonctionnement aléatoire
sous SL.
Pashua plantait silencieusement et ne donnait rien en retour dans AS.
Le problème semble venir d'une conjonction entre "SL, machine rapide et
multiprocesseur", soit un défaut de synchronisation entre process.
La solution consiste à ajouter une tempo avant retour "sleep 1".
Signalé au développeur, pas réagit à ce jour.
Avatar
unbewusst.sein
Daniel Robillard wrote:

Comment je l'utilise en Applescript :
(* Pashua_Setting = contient les paramètres pour Pashua
PathToHelpers = chemin du dossier où est Pashua.app
*)

set PathToPashua to quoted form of POSIX path of ¬
(PathToHelpers & "Pashua.app:Contents:MacOS:Pashua" as string)



bon, en fait, maintenant je vais lire l'Info.plist pour savoir quel est
l'exécutable, amha, c'est plus sûr, même si, pour Pashua, c'est
"Pashua"...

-- création du fichier temporaire passé à Pashua
set PashuaTemp to do shell script ("mktemp -q -t Pashua_ini")
set PashuaTemp to POSIX file PashuaTemp
write Pashua_Setting to file PashuaTemp



Il faut vraiment passer la conf par un fichier temp ?
une string n'est pas OK ?
(pas essayé)

set PashuaTemp to quoted form of POSIX path of PashuaTemp

-- appel de Pashua et récupération du résultat
set Pashua_Bin to (PathToPashua & " " & PashuaTemp & " ; sleep 1")
(*** sleep 1 : tempo pour Snow Leopard ***)

Attention, dans certaines conditions j'avais un fonctionnement aléatoire
sous SL.
Pashua plantait silencieusement et ne donnait rien en retour dans AS.
Le problème semble venir d'une conjonction entre "SL, machine rapide et
multiprocesseur", soit un défaut de synchronisation entre process.
La solution consiste à ajouter une tempo avant retour "sleep 1".
Signalé au développeur, pas réagit à ce jour.



bon, je lis sur <http://www.bluem.net/downloads/pashua_en/> :
Download Version: 0.9.4 (05/30/2007)
-------------------------------^^^^
donc, ça bouge plus...

d'ailleurs le site <http://users.rcn.com/m3ha11/ruby/> donné dans le
fichier "Pashua.rb" répond "Not Found".

mais bon, pas de pb pour moi, je peux me dépatouiller avec ce qui
existe...
--
« Le meilleur moyen de tenir sa parole est de ne jamais la donner. »
(Napoléon Bonaparte)
Avatar
blanc
Une Bévue wrote:

Soit dit, en passant, il a fallu que je modifie l'adaptation à ruby
(fichier Examples/Pashua.rb) qui ne trouvait pas le bin...



Bizarre : chez moi l'exemple en question trouve très bien le bin !...
Mais ne serait-ce pas parceque tu n'as pas mis l'appli Pashua
directement dans le dossier /Applications, mais dans un sous-dossier de
nom Pashua du sous-dossier Utilities ?

Même et surtout quand je lui donnait directement en arg ?



Pourquoi ne pas le mettre le path directement dans le script ?


Maintenant c'est bon même avec '' comme arg de path et même si, comme
chez moi Pashua.app ce trouve dans :

/Applications/Utilities/Pashua



Voilà.


Amha, la bonne méthode est pluôt d'utiliser le Finder pour retrouver
l'appli avec :

$:.push(File.dirname($0)) # amha inutile sauf si on met Pashua.app dans
le même rep que le script de lancement

require 'Pashua'
include Pashua
require 'rubygems'
require 'appscript'
include Appscript

a_name = 'Pashua'
a = app(a_name)
puts a.to_s
# => app("/Applications/Utilities/Pashua/Pashua.app")

bizarement on ne peut avoir ni comme propriété ni comme méthode le path
de l'appli (?), mais je l'obtiens par une regex :



Bon là je ne comprends pas tout. Mais c'est sans doute normal, puisque
je ne connais pas Ruby. :-/

a_path = a.to_s.gsub(/^app("(.*)")$/, '1')



Ruby me semble très compliqué, si on est obligé de faire de telles
astuces pour définir un chemin qui par ailleurs est parfaitement
connu !...

et le bin :

a_bin = "#{a_path}/Contents/MacOS/#{a_name}"


qui ne marche pas à tous les coups, par ex Firefox a un bin de nom
"firefox-bin".



Oui le nom de l'exécutable est en fait donné dans Info.plist :
<key>CFBundleExecutable</key>
<string>firefox-bin</string>

Mais dans le cas de Pashua, c'est bien Pashua.
Donc si tu mets le chemin complet en clair :
/Applications/Utilities/Pashua/Pashua.app/Contents/MacOS/Pashua

ça devrait marcher (àmha)


mais je ne suis pas sûr que, pour lancer Pashua, il faille indiquer le
path complet du bin, vraisemblablement le path du bundle (Pashua.app) en
absolu suffit, à vérifier.



Si, si , ils le disent bien dans la doc.


--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE
Avatar
blanc
Daniel Robillard wrote:

Applescript paquet application.
Un truc hybride bien pratique.
Seul problème, il faut le construire en partie "à la main" afin de
mettre dedans toutes les ressources nécessaires.



OK.

> Tu peux le passer ?

Oui mais il faut savoir qu'il est fait pour être utilisé avec MediaPro
ou Expression Media.



Ça, ça ne m'intéresse pas. Mais n'y a-t-il pas une partie correspondant
simplement à la copie des photos dans le répertoire choisi dans la
fenêtre de dialogue que te donne Pashua ? C'est ça qui m'intéresse.

Mon premier est jpol
Mon deuxième est mon nom et tient à mon premier
Mon troisième est chez free
Mon quatrième rappelle que mon 3ème est en France
Mon tout est valide ;-)


--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE
Avatar
blanc
Une Bévue wrote:

bon, en fait, maintenant je vais lire l'Info.plist pour savoir quel est
l'exécutable, amha, c'est plus sûr, même si, pour Pashua, c'est
"Pashua"...



Amha, il y a peu de chances qu'ils changent le nom de leur exécutable.
Mais si c'était le cas tu aurais bien le message qu'il n'est pas trouvé,
et tu n'aurais plus qu'à changer le nom dans ton script, non ?

> -- création du fichier temporaire passé à Pashua
> set PashuaTemp to do shell script ("mktemp -q -t Pashua_ini")
> set PashuaTemp to POSIX file PashuaTemp
> write Pashua_Setting to file PashuaTemp

Il faut vraiment passer la conf par un fichier temp ?
une string n'est pas OK ?



D'après le read-me tu peux passer aussi par un pipe.

Je crois me souvenir avoir vu dans la doc que dans ce cas il fallait,
lors de l'appel de Pashua, mettre comme argument le caractère - plutôt
que le nom du fichier. Mais je n'ai pas retrouvé où c'était pour te
donner plus de détails.

--
JiPaul.
/ /--/--// Jean-Paul Blanc
|/| L | quelquepart en (somewhere in)
/|| = ||| FRANCE
Avatar
unbewusst.sein
JiPaul wrote:


Bizarre : chez moi l'exemple en question trouve très bien le bin !...
Mais ne serait-ce pas parceque tu n'as pas mis l'appli Pashua
directement dans le dossier /Applications, mais dans un sous-dossier de
nom Pashua du sous-dossier Utilities ?



ben oui.

>
> Même et surtout quand je lui donnait directement en arg ?

Pourquoi ne pas le mettre le path directement dans le script ?



j'ai du modifier le script "Pashua.rb" pour que ça marche dans ce cas.
en fait, après ma modif, ce script marche "à tous les coups" même si
Pashua.app est dans un sous-répertoire de "/Applications/Utilities" et
même s'il est appelé sans donné le path de Pashua.app.
Voir ci-dessous :
>
> Maintenant c'est bon même avec '' comme arg de path et même si, comme
> chez moi Pashua.app ce trouve dans :
>
> /Applications/Utilities/Pashua

Voilà.

>
> Amha, la bonne méthode est pluôt d'utiliser le Finder pour retrouver
> l'appli avec :
>
> $:.push(File.dirname($0)) # amha inutile sauf si on met Pashua.app dans
> le même rep que le script de lancement
>
> require 'Pashua'
> include Pashua
> require 'rubygems'
> require 'appscript'
> include Appscript
>
> a_name = 'Pashua'
> a = app(a_name)
> puts a.to_s
> # => app("/Applications/Utilities/Pashua/Pashua.app")
>
> bizarement on ne peut avoir ni comme propriété ni comme méthode le path
> de l'appli (?), mais je l'obtiens par une regex :

Bon là je ne comprends pas tout. Mais c'est sans doute normal, puisque
je ne connais pas Ruby. :-/



c'est juste un commentaire en passant, il est curuenx que l'objet
(retourné par le Finder) :
a = app('Pashua')
quand il est printé en tant que string donne la string :
app("/Applications/Utilities/Pashua/Pashua.app")
qui comporte donc le path de l'appli MAIS qu'il n'y a pas une méthode
qui retourne uniquement le path par ex : "a.path"...

mais bon là j'utilise un bridge AppleScript/Ruby nommé AppScript qui
n'est plus trop développé...
donc à garder précieusement.

>
> a_path = a.to_s.gsub(/^app("(.*)")$/, '1')

Ruby me semble très compliqué, si on est obligé de faire de telles
astuces pour définir un chemin qui par ailleurs est parfaitement
connu !...



c'est pas Ruby c'est le bridge qui est en question.

j'ai eu le même genre de pb avec la plist des applis, il y a une info
dedans : "NSAppleScriptEnabled" qui, suivant l'application peut-être à :
<string>Yes</string> # cas du Finder
<true /> cas de Firefox
nil cas de MacSOUP

et là, le module plist pour ruby retourne une string dans le cas du
Finder, un booléen si <true /> ou <false /> et nil (qui est false en
ruby.

le problème est que ce genre de pont ne regarde pas la spécificité de la
plits en question car pour "NSAppleScriptEnabled" on s'attend à un
booléen, pas à une string.

je pense que l'ago cocoa doit aussi retourner un booléen dans le cas du
Finder.
>
> et le bin :
>
> a_bin = "#{a_path}/Contents/MacOS/#{a_name}"

>
> qui ne marche pas à tous les coups, par ex Firefox a un bin de nom
> "firefox-bin".

Oui le nom de l'exécutable est en fait donné dans Info.plist :
<key>CFBundleExecutable</key>
<string>firefox-bin</string>

Mais dans le cas de Pashua, c'est bien Pashua.
Donc si tu mets le chemin complet en clair :
/Applications/Utilities/Pashua/Pashua.app/Contents/MacOS/Pashua

ça devrait marcher (àmha)

>
> mais je ne suis pas sûr que, pour lancer Pashua, il faille indiquer le
> path complet du bin, vraisemblablement le path du bundle (Pashua.app) en
> absolu suffit, à vérifier.

Si, si , ils le disent bien dans la doc.



oui, j'ai vérifié !
--
« Le meilleur moyen de tenir sa parole est de ne jamais la donner. »
(Napoléon Bonaparte)
Avatar
unbewusst.sein
JiPaul wrote:

Mon premier est jpol
Mon deuxième est mon nom et tient à mon premier
Mon troisième est chez free
Mon quatrième rappelle que mon 3ème est en France
Mon tout est valide ;-)



Poète ?
--
« Le meilleur moyen de tenir sa parole est de ne jamais la donner. »
(Napoléon Bonaparte)
Avatar
unbewusst.sein
JiPaul wrote:

Amha, il y a peu de chances qu'ils changent le nom de leur exécutable.
Mais si c'était le cas tu aurais bien le message qu'il n'est pas trouvé,
et tu n'aurais plus qu'à changer le nom dans ton script, non ?



oui, c'est pas un vrai soucis...

> > -- création du fichier temporaire passé à Pashua
> > set PashuaTemp to do shell script ("mktemp -q -t Pashua_ini")
> > set PashuaTemp to POSIX file PashuaTemp
> > write Pashua_Setting to file PashuaTemp
>
> Il faut vraiment passer la conf par un fichier temp ?
> une string n'est pas OK ?

D'après le read-me tu peux passer aussi par un pipe.

Je crois me souvenir avoir vu dans la doc que dans ce cas il fallait,
lors de l'appel de Pashua, mettre comme argument le caractère - plutôt
que le nom du fichier. Mais je n'ai pas retrouvé où c'était pour te
donner plus de détails.



Ah d'accord, merci, j'essaierai en pipe, c'est fastoche en ruby :

status = POpen4::popen4(cmd) do |stdout, stderr|
puts "stderr : #{stderr.read.strip}".ansi_red
puts "stdout : #{stdout.read.strip }"
end

--
« Le meilleur moyen de tenir sa parole est de ne jamais la donner. »
(Napoléon Bonaparte)
Avatar
danrob
Une Bévue wrote:

Il faut vraiment passer la conf par un fichier temp ?
une string n'est pas OK ?



Non, fichier obligatoire.

bon, je lis sur <http://www.bluem.net/downloads/pashua_en/> :
Download Version: 0.9.4 (05/30/2007)
-------------------------------^^^^
donc, ça bouge plus...



Rien depuis.
1 2