Applescript необъяснимо дает сбой в Big Sur
Я использовал TextExpander для запуска этого скрипта, и недавно он начал давать сбой после обновления до Big Sur. Думая, что это связано с TextExpander, я создал аналогичный ярлык для его запуска в BetterTouchTool, но у меня та же проблема. Он не выдает видимую ошибку, он просто воспроизводит тональный сигнал ошибки, когда завершает работу, и ничего не выводит. Странно то, что когда я запускаю его из редактора сценариев, он работает просто отлично. Только когда он вызывается из другого процесса, он терпит неудачу.
Основная идея сценария состоит в том, чтобы вводить необработанные числа в диалоговое окно и выводить отформатированный временной код в самом переднем приложении. Например, при вводе «207» выводится «01:00:02:07».
Я просмотрел код и не могу найти, что могло бы вызвать ошибку, поскольку все это очень простые манипуляции с текстом. Любые мысли будут очень полезны.
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