Ho un codice AppleScript che sto riscontrando problemi nella scrittura.
Vorrei un nuovo file .rtf vuoto da creare con un nome file definito dall'utente, salvato in una posizione predeterminata, con un modello di documento predeterminato. So già come realizzare tutte queste funzioni in AppleScript.
Mi piacerebbe quindi che il testo normale negli appunti fosse scritto sul documento e il testo semplice per corrispondere allo stile del modello di documento predeterminato. È questo desiderio che crea difficoltà.
Se gli appunti contengono una formattazione (come lo stile del carattere, la dimensione del carattere, lo stile enfatizzato, il colore del testo o il colore di evidenziazione), vorrei che queste informazioni fossero ignorate e invece il testo degli Appunti corrispondesse alla formattazione predeterminata dell'RTF file.
Ecco il codice che ho a questo punto. Sentiti libero di abbandonare il mio approccio, dato che non riesco a farlo funzionare.
(Il seguente codice AppleScript è quasi identico a questo codice da parte dell'utente3439894 . Ho contrassegnato il mio (errato ) aggiunte introducendo righe di codice che ho scritto io stesso con "Il mio nuovo codice".)
global theCustomRichTextFilePathname
global customFilename
global fullDataToWriteToRTFfile
repeat
set customFilename to the text returned of (display dialog "Save as:" with title "Do you want to create a new, blank TextEdit RTF document?" default answer "")
if customFilename is "" then
beep
display alert "The filename cannot be empty!" message "Please enter a name to continue..."
else
exit repeat
end if
end repeat
set theCustomRichTextFilePathname to ((path to desktop) & customFilename & ".rtf") as string
-- My new code:
set hexOfTheClipboardText to convertATextStringToItsHexFormat()
set hexOfTheClipboardText to (hexOfTheClipboardText & "7D")
-- The 7D in the above line represents the hex code of the closing bracket } that must be the last character of the RTF data string.
set dataForTheRTFDocumentTemplateThatIWant to "7B5C727466315C616E73695C616E7369637067313235325C636F636F61727466313430345C636F636F617375627274663437300A7B5C666F6E7474626C5C66305C6673776973735C6663686172736574302048656C7665746963613B7D0A7B5C636F6C6F7274626C3B5C7265643235355C677265656E3235355C626C75653235353B7D0A5C6D6172676C313434305C6D61726772313434305C766965777731303830305C7669657768383430305C766965776B696E64300A5C706172645C74783732305C7478313434305C7478323136305C7478323838305C7478333630305C7478343332305C7478353034305C7478353736305C7478363438305C7478373230305C7478373932305C7478383634305C7061726469726E61747572616C5C7061727469676874656E666163746F72300A0A5C66305C66733336205C636630205C0A"
set fullDataToWriteToRTFfile to (dataForTheRTFDocumentTemplateThatIWant & hexOfTheClipboardText)
-- End of my new code.
tell application "Finder"
try
if exists file theCustomRichTextFilePathname then
tell current application
display dialog "The file \"" & POSIX path of theCustomRichTextFilePathname & "\" already exists!" & return & return & "Do you want to overwrite the file?" buttons {"No", "Yes"} default button 1 with title "File Already Exists..." with icon caution
if the button returned of result is "No" then
-- # The file already exists, chose not to overwrite it, just open the document.
my openDocument()
else
-- # The file already exists, chose to overwrite it, then open the document.
my createCustomRTFDocument()
my openDocument()
end if
end tell
else
-- # The file does not already exist. Create and open the document.
tell current application
my createCustomRTFDocument()
my openDocument()
end tell
end if
on error eStr number eNum
activate
display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with icon caution
return
end try
end tell
on createCustomRTFDocument()
tell current application
-- My new line of code:
set customRTFDocumentTemplate to «data RTF fullDataToWriteToRTFfile»
-- THE ABOVE LINE DOES NOT WORK AND SENDS AN ERROR.
try
set referenceNumber to open for access theCustomRichTextFilePathname with write permission
write customRTFDocumentTemplate to referenceNumber
close access referenceNumber
on error eStr number eNum
activate
display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with title "File I/O Error..." with icon caution
try
close access referenceNumber
end try
return
end try
end tell
end createCustomRTFDocument
on openDocument()
try
tell application "TextEdit"
open file theCustomRichTextFilePathname
activate
tell application "System Events"
set displayedName to get displayed name of file theCustomRichTextFilePathname
if displayedName contains ".rtf" then
tell application "TextEdit"
set bounds of window (customFilename & ".rtf") to {160, 22, 883, 639}
end tell
key code 125
else
tell application "TextEdit"
set bounds of window customFilename to {160, 22, 883, 639}
end tell
key code 125
end if
end tell
end tell
on error eStr number eNum
activate
display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with icon caution
return
end try
end openDocument
-- New code:
on convertATextStringToItsHexFormat()
set hexOfText to ""
set letters to every character in the clipboard
repeat with letter in letters
set numberRepresentingTheID to (id of letter)
set hexOfText to hexOfText & list2hex(numberRepresentingTheID)
end repeat
return hexOfText
end convertATextStringToItsHexFormat
on list2hex(X)
set y to ""
repeat with Z in {} & X
set y to y & num2hex(Z) & ","
end repeat
set y to text 1 thru -2 of y
return y
end list2hex
on num2hex(X)
set y to ""
repeat until X = 0
set n to X mod 16
if n > 9 then
set y to character id (55 + n) & y
else
set y to character id (48 + n) & y
end if
set X to X div 16
end repeat
return y
end num2hex
-- End of new code
So che forse il modo più semplice per ottenere ciò che voglio è semplicemente il tasto di scelta rapida da tastiera per "Incollare e abbinare lo stile" in TextEdit.app, cioè ⌥ opzione + ⇧ + ⌘ comando + V . Ma speravo in un "back-end" e in un metodo più sofisticato, dal momento che il keystroking porta con sé un ritardo notevole.