我一直在使用 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