Questions aux spécialistes d'AppleScript

FjRond

Membre actif
16 Février 2004
800
14
66
Vendée
blogdefrancoisgiron.wordpress.com
Bonjour,
J'utilise peu AppleScript (préférant les scripts de Terminal), mais ça peut être utile parfois.
Voici ma question:
Comment appeler une commande unix en lui adjoignant, pour argument, une réponse donnée dans une boîte de dialogue?
Pour être plus explicite, voici ce que je veux faire. J'ai fait un shell script (nommé doctex) qui crée automatiquement un fichier contenant tous mes paramètres LaTeX courants. Ce script peut être lancé comme n'importe quelle commande de terminal et prend en argument le nom du fichier que l'on veut créer.
Je voudrais que ma femme (hostile au terminal) puisse le lancer en n'ayant rien d'autre à faire que sélectionner le script depuis la barre de menu et saisir l'argument.
Voici ce que j'ai commencé à faire, mais il me manque le nécessaire pour l'argument.
Bloc de code:
display dialog "Veuillez saisir le nom de votre document (sans espace)" default answer ""
tell application "Terminal"
	do shell script "doctex " & <ARGUMENT??????????>
end tell
Il y a d'autre part un second problème: apparemment, AppleScript ne trouve pas les commandes du répertoire ~/bin bien que j'ai configuré ma variable $PATH pour zsh, bash et tcsh pour qu'ils reconnaissent ce chemin.
Donc si quelqu'un a une idée&#8230;
Merci
 
Pour ton argument, il me semble que ceci devrait faire affaire :
display dialog "Argument ?" default answer "" buttons {"OK"} default button 1
set argument to (text returned of result)
Sachant qu'ensuite l'argument rentré au clavier est enregistré dans la variable argument. Tu peux donc lancer
do shell script "doctex " & argument
Tu peux même mettre une réponse par défaut (par exemple un argument qui revient souvent) dans les guillemets qui suivent defautl answer

Pour ton deuxième problème, le caractère invisible du dossier /bin/ ne joue-t-il pas ? (Je lance ça sans idée précise)
 
  • J’aime
Réactions: FjRond
Autre chose, pourquoi passer par AppleScript, tu peux enregistrer les Scripts terminal sous forme d'exécutables depuis le Finder (j'en ai un dans mon dock). Il y avait le "tout comment qu'est-ce qui faut faire" dans un des deux ou trois derniers numéros d'A Vos Mac (que c'est le plus bô !).
 
Merci Berthold. Je fais l'essai.
Pour le ~/bin, il n'est pas invisible. La solution est peut-être d'écrire avec le chemin d'accès de la commande (?)
Bloc de code:
do shell script "~/bin/doctex " & argument

Pour répondre à Pascal, je connais bien les commandes de script (j'en ai même un paquet), sauf que là, pour n'avoir rien d'autre à saisir que le nom du fichier désiré comme argument, il me semblait qu'un ApplScript devait être la meilleure solution.
 
La solution de Berthold me renvoie l'erreur (en ayant saisi « document » comme argument):
Erreur d'Applescript
Impossible d&#8217;obtenir text "
" of {text returned:"document", button returned:"OK"}.
D'autre part, si je lance le script suivant:
Bloc de code:
tell application "Terminal"
	do shell script "echo $PATH "
end tell
le résultat ne donne que la variable par défault. Comment faire pour qu'AppleScript tienne compte de la modification de $PATH?
Il y a bien la solution d'enregistrer mon shell script dans /usr/bin/ (solution présentée dans AvosMac n° 43 p. 32), mais ce n'est pas une solution très « propre ». Mieux vaut mettre ses scripts dans un répertoire ~/bin
 
:confused: Bizarre, je viens de refaire des essais, j'ai bien un texte document renvoyé. Apparemment ton script considère les réponses texte et bouton et les enregistre en liste. Essaie ceci à la place :
display dialog "Argument ?" default answer "" buttons {"OK"} default button 1
set argument1 to (text returned of result) as list
set argument2 to item1 of argument1
Mes essais fonctionnent aussi sur cette série d'instructions, sauf erreur de copier/coller de ma part :rateau:

Pour plus de clarté j'ai utilisé 2 variables différentes argument1 et argument2, mais tu peux accélerer les choses si tout est clair pour toi en modifiant la même variable :
display dialog "Argument ?" default answer "" buttons {"OK"} default button 1
set argument to (text returned of result) as list
set argument to item1 of argument
Bon enfin cette dernière remarque n'est pas fondamentale...

Donne des nouvelles :coucou:
 
Encore un fil qui m'apparaît deux fois dans la liste. :confused: Et cette fois-ci ce n'est pas moi qui ait fait des c...afouillages de connexion. Quoi-t-est-ce qu'il se passe ?
 
Toujours le même résultat avec vos indications.
Pour l'instant, je m'en sors avec un script de commande placé dans le dock.

Pour ce qui est du doublet, je m'en explique sur l'autre post: ma réponse semblait ne pas partir et J'ai annulé et renvoyé. Mais cela coïncide avec des problèmes avec le site de MacGénération: j'ai eu hier un mal fou à charger les pages de ce site.
 
FjRond a dit:
Toujours le même résultat avec vos indications.
Pour l'instant, je m'en sors avec un script de commande placé dans le dock.

Pour ce qui est du doublet, je m'en explique sur l'autre post: ma réponse semblait ne pas partir et J'ai annulé et renvoyé. Mais cela coïncide avec des problèmes avec le site de MacGénération: j'ai eu hier un mal fou à charger les pages de ce site.

C'est vrai que lorsque je tentais de réexpédier un post qui semblait refuser de passer, il me disait que la réponse était identique à la précédente. Il semble y avoir un petit problème de ce côté. Et je confirme, ce matin, je n'ai pas réussi à me connecter sur le forum.
 
à tenter aussi :
display dialog "Veuillez saisir le nom de votre document (sans espace)" default answer ""
copy the result as list to {texte, bouton}
set argument to texte as string
Qu'est-ce-que ça donne ? Sinon je fais comme Pascal77 qui a inventé une nouvelle balise : [PENSE À HAUTE VOIX]:) essaie d'appeler le Terminal avant la boîte de dialogue, ou au contraire après l'attribution de valeur aux variables... ou d'utiliser une routine, non, je ne sais plus comment ça s'appelle, bref un sous-programme qui dissocierait la gestion des variables et le travail de l'appli Terminal ?
Je ne comprends pas pourquoi les lignes de commandes que je t'ai recommandées, chez moi, hors toute appli, même pas le finder, donne des strings et chez toi des lists, dont apparemment il refuse la pêche aux items ?[/PENSE À HAUTE VOIX]

[DICTON DU JOUR] c'est en scriptant qu'on devient scripteron. [/DICTON DU JOUR] :rolleyes:
 
Berthold a dit:
à tenter aussi :Qu'est-ce-que ça donne ? Sinon je fais comme Pascal77 qui a inventé une nouvelle balise : [PENSE À HAUTE VOIX]:) essaie d'appeler le Terminal avant la boîte de dialogue, ou au contraire après l'attribution de valeur aux variables... ou d'utiliser une routine, non, je ne sais plus comment ça s'appelle, bref un sous-programme qui dissocierait la gestion des variables et le travail de l'appli Terminal ?
Je ne comprends pas pourquoi les lignes de commandes que je t'ai recommandées, chez moi, hors toute appli, même pas le finder, donne des strings et chez toi des lists, dont apparemment il refuse la pêche aux items ?[/PENSE À HAUTE VOIX]

[DICTON DU JOUR] c'est en scriptant qu'on devient scripteron. [/DICTON DU JOUR] :rolleyes:

Hé, ho ! c'est ©, et ® ça, va faloir passer à la caisse ! :D
 
Bon alors pour cette histoire de G5, je te propose puisqu'on en est là : tu prends le G, je prends le 5. ;)

Ça roule ? :p :D
 
Berthold a dit:
Bon alors pour cette histoire de G5, je te propose puisqu'on en est là : tu prends le G, je prends le 5. ;)

Ça roule ? :p :D

6H13 ménant ! T'es un androïde ? Tu dors jamais ?

Bon, pour le partage de l'étiquette, c'est OK, comment on fait pour la bécane maintenant ? :D
 
Je me permets de m'introduire dans votre petite conversation pour remercier Berthold, car ça marche. Voici mon script:
Bloc de code:
display dialog "Veuillez saisir le nom de votre document (sans espace)" default answer ""
copy the result as list to {texte, bouton}
set argument to texte as string
tell application "Terminal"
	do shell script "~/bin/doctex " & argument
end tell
Peut-être vaudra-t-il la peine de figurer parmi les astuces AppleScript d'AvosMac! parce que c'est foutrement utile.
Voici mon script ~/bin/doctex:
Bloc de code:
#!/bin/sh																				 
#####################################################
#			 -- doctex v 0,1 --													 							 
# Ce script permet de creer un fichier .tex comprenant								 
# la declaration de packages et les commandes d'environnement							 
# necessaires a la creation d'un document												 
# Pour supprimer une commande du fichier .tex											 
# il suffit de la commenter avec le symbole "%".										 
#																						 
# SYNTAXE:	 [doctex] [argument]													 
#																						 
#####################################################									 
##																					 
# Declaration de variables															 
##																					 
dclss='\documentclass[a4paper]{article}'
inpt='\usepackage[latin9]{inputenc}'
fnt='\usepackage[T1]{fontenc}'
fr='\usepackage[frenchb]{babel}'
tit='\title{METTRE ICI LE TITRE.}'
aut="\author{METTRE ICI L'AUTEUR}"
dat='\date{}'
bar='%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%'
bgdc='\begin{document}'
mtit='\maketitle'
let="% Commencer sous cette ligne la saisie du texte du document"
endc="\end{document}"
##																					 
#																						 
##																					 
echo "% Le titre de ce fichier est $1.tex" > ~/Desktop/$1.tex
echo $dclss >> ~/Desktop/$1.tex
echo $inpt >> ~/Desktop/$1.tex
echo $fnt >> ~/Desktop/$1.tex
echo $fr >> ~/Desktop/$1.tex
echo $aut >> ~/Desktop/$1.tex
echo $dat >> ~/Desktop/$1.tex
echo $tit >> ~/Desktop/$1.tex
echo $bar >> ~/Desktop/$1.tex
echo $bgdc >> ~/Desktop/$1.tex
echo $mtit >> ~/Desktop/$1.tex
echo "% Fichier $1.tex" >> ~/Desktop/$1.tex
echo $let >> ~/Desktop/$1.tex
echo $endc >> ~/Desktop/$1.tex
echo "% Ne rien écrire après la ligne \end{document}" >> ~/Desktop/$1.tex
echo $endc >> ~/Desktop/$1.tex
echo "% Ne rien écrire après la ligne \end{document}" >> ~/Desktop/$1.tex
# Ouvrir le fichier avec TeXShop.app													 
open -a TeXShop ~/Desktop/$1.tex
exit
Il n'était certes pas nécessaire de passer par la définition de toutes ces variables, mais ça peut être plus pratique pour faire certaines modifications. Si ça peut inspirer certains utilisateurs qui trouvent fastidieux de réécrire à chaque fois toutes les lignes de commandes LaTeX&#8230;
 
FjRond a dit:
Je me permets de m'introduire dans votre petite conversation pour remercier Berthold, car ça marche.
Content pour toi :) et rassuré pour moi :rateau: (Tiens faudrait inventer un smiley 'ouf' pour exprimer le soulagement.
Par contre je ne comprends pas pourquoi les premières séries d'instructions que je t'ai proposées ne fonctionnaient pas :confused: ?
 
Pendant que j'y suis, une autre question aux spécialistes d'AppleScript. Depuis Panther, lorsque j'ouvre un script.app avec l'Éditeur de scripts, j'ai une page blanche. Pour pouvoir les ouvrir de nouveau, je suis obligé d'en conserver une copie au format .scpt.
C'est gênant surtout pour ouvrir les scripts trouvés sur internet et les analyser.
 
Ceux qui s'ouvrent en page blanche ont été enregistré en cochant l'option 'exécutable seulement'. J'ignore s'il est possible de récupérer les lignes de commandes de tels scripts...
Ça m'étonnerait...:(
 
Mais bien sûr!
Pourquoi AvosMac se donne-t-il la peine de préciser de ne cocher aucune option!
Honte à moi.