0 votes

Applescript échoue inexplicablement à Big Sur.

EDIT : J'ai fait un script beaucoup plus simple qui présente le même problème. Le script précédent est déplacé ci-dessous.

J'ai utilisé TextExpander pour exécuter ce script et il a récemment commencé à échouer après la mise à jour vers Big Sur. Pensant que cela était lié à TextExpander, j'ai créé un raccourci similaire pour l'exécuter dans BetterTouchTool mais j'ai le même problème. Il ne génère pas d'erreur visible, il émet simplement un son d'erreur à la fin de l'opération et ne produit rien. Ce qui est étrange, c'est que lorsque je l'exécute à partir d'un éditeur script, il fonctionne parfaitement. C'est seulement quand il est appelé depuis un autre processus qu'il échoue.

L'idée de base du script est de prendre un nombre brut en entrée dans une boîte de dialogue et de sortir un code temporel formaté dans l'application la plus en avant. Par exemple, en entrant "207", on obtient "01:00:02:07".

J'ai parcouru le code et je n'arrive pas à trouver ce qui pourrait causer l'erreur puisqu'il s'agit d'une manipulation de texte très basique. Toute réflexion serait très utile.

(Le bloc "System Events" permet d'éviter que TextExpander ne soit mis en avant lorsque la "Display Dialog" apparaît).

tell application "System Events"
 set frontProcessName to name of first process whose frontmost is true

 set test_text to text returned of (display dialog "Text?" default answer "")

tell application frontProcessName to activate
 end tell

 return "test_text"

Voici le script original :

tell application "System Events"
--Set process that called text expander aside so it can be returned to the front
set frontProcessName to name of item 1 of (processes whose frontmost is true)

-- Get the raw numbers from the user
set raw_timecode to text returned of (display dialog "Timecode" default answer "")

-- Set the default variables
set user_timecode to "" as string
set rt_length to the length of raw_timecode

--Check to see if the TC field is blank
if raw_timecode = "" then
    set raw_timecode to "01000000"
end if

--Parse the user supplied numbers and replace any "." with "00"
repeat with n from 1 to rt_length
    if character n of raw_timecode = "." then
        set user_timecode to user_timecode & "00" as text
    else
        set user_timecode to user_timecode & character n of raw_timecode as text
    end if

end repeat

--Set to 00:00:00:00 if only digit is 0 
if user_timecode = "0" then
    set base_timecode to "00000000"
else
    set base_timecode to "01000000"
end if

set x to the length of user_timecode

-- Trim extra digits off base timecode
if x = 8 and user_timecode != "0" then
    set raw_timecode to user_timecode as string
else
    repeat while (length of base_timecode) + (length of user_timecode) > 8
        try
            set base_timecode to characters 1 thru -(x + 1) of base_timecode as string
            set raw_timecode to base_timecode & user_timecode as string
        on error
            display dialog "Invalid timecode"
            error number -128
        end try
    end repeat
end if
set new_timecode to characters 1 thru 2 of raw_timecode & ":" & characters 3 thru 4 of raw_timecode & ":" & characters 5 thru 6 of raw_timecode & ":" & characters 7 thru 8 of raw_timecode as text

end tell

-- Return the previous app that called text expander to the front
tell application frontProcessName to activate
delay 0.5

return new_timecode

0voto

wch1zpink Points 6067

Je n'ai pas de TextExpander ou de BetterTouchTool et je n'ai donc pas pu faire le test exactement comme vous l'aviez demandé. Cependant, j'ai apporté quelques petites modifications à votre code et j'ai enregistré le script dans la barre de menu script et l'ai exécuté à partir de là plusieurs fois tout en travaillant dans plusieurs applications différentes. Je n'ai eu aucune erreur de mon côté.

Si votre seule raison d'utiliser les "événements système" est de vous assurer que l'application dans laquelle vous travailliez à ce moment-là, lors de l'exécution de votre code, reste la plus en avant après la disparition de votre fenêtre de dialogue alors tout ce que vous devez faire est d'insérer un fichier activate avant votre display dialog commande. Cela amènera la fenêtre de dialogue au premier plan, puis, lorsqu'elle sera fermée, l'application dans laquelle vous travailliez restera au premier plan. Dans ce cas, l'utilisation de "System Events" n'est pas du tout nécessaire.

-- Get the raw numbers from the user
activate
set raw_timecode to text returned of ¬
    (display dialog "Timecode" default answer "")

-- Set the default variables
set user_timecode to "" as string
set rt_length to the length of raw_timecode

--Check to see if the TC field is blank
if raw_timecode = "" then set raw_timecode to "01000000"

--Parse the user supplied numbers and replace any "." with "00"
repeat with n from 1 to rt_length
    if character n of raw_timecode = "." then
        set user_timecode to user_timecode & "00" as text
    else
        set user_timecode to user_timecode & character n of raw_timecode as text
    end if
end repeat

--Set to 00:00:00:00 if only digit is 0 
if user_timecode = "0" then
    set base_timecode to "00000000"
else
    set base_timecode to "01000000"
end if

set x to the length of user_timecode

-- Trim extra digits off base timecode
if x = 8 and user_timecode != "0" then
    set raw_timecode to user_timecode as string
else
    repeat while (length of base_timecode) + (length of user_timecode) > 8
        try
            set base_timecode to characters 1 thru -(x + 1) of base_timecode as string
            set raw_timecode to base_timecode & user_timecode as string
        on error
            display dialog "Invalid timecode"
            error number -128
        end try
    end repeat
end if
set new_timecode to characters 1 thru 2 of raw_timecode & ":" & ¬
    characters 3 thru 4 of raw_timecode & ":" & characters 5 thru 6 of ¬
    raw_timecode & ":" & characters 7 thru 8 of raw_timecode as text

--set the clipboard to new_timecode
activate
display dialog new_timecode buttons {"OK"} giving up after 6
return new_timecode

enter image description here

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X