Non so se c'è un modo facile o carino per fare ciò che stai chiedendo. In altre parole, non puoi semplicemente dire qualcosa come open target file and move cursor to first empty line
, tuttavia il codice sotto lo farà.
set filePathName to POSIX path of (path to desktop as string) & "My Fruit Log.txt"
set firstEmptyLineNumber to (do shell script "awk '$1 == \"\" {print NR;exit;}' \"" & filePathName & "\"")
do shell script "open -e " & quoted form of filePathName
tell application "TextEdit" to activate
tell application "System Events" to tell process "TextEdit"
repeat (firstEmptyLineNumber - 1) times
key code 125 # Down Arrow
end repeat
end tell
Il codice sopra è codificato per aprire il file di testo in TextEdit, che è ciò che open -e
nel secondo
do shell script
comando sta facendo ed è codificato in questo modo perché gli eventi di sistema devono sapere dove inviare i tasti freccia giù a. Se vuoi un editor di testo diverso, rimuovi il -e
e il comando% em_de% lo aprirà in qualsiasi app l'estensione del file .txt è registrata aperto con. Quindi dovrai anche cambiare:
tell application "System Events" to tell process "TextEdit"
A:
tell application "System Events" to tell front process
E sostituire:
tell application "TextEdit" to activate
Con: open
Nel primo delay 1
comando , do shell script
sta ottenendo il numero di riga della prima riga vuota ed esce e questo è quello che viene usato per calcolare quanti < em> freccia giù tasti su awk
.
Ho modificato leggermente la mia risposta originale per sbarazzarmi del repeat
comando ma volevo aggiungere la mia risposta alla risposta di adc eliminando tutte le roba delay
.
set filePathName to POSIX path of (path to desktop as string) & "My Fruit Log.txt"
set firstEmptyLineNumber to (do shell script "awk '$1 == \"\" {print NR;exit;}' \"" & filePathName & "\"")
if firstEmptyLineNumber = "" then set firstEmptyLineNumber to 1 as string
do shell script "open -e " & quoted form of filePathName
tell application "TextEdit" to activate
tell application "System Events" to tell process "TextEdit"
key code 37 using command down # ⌘L
keystroke firstEmptyLineNumber
keystroke return
key code 123 # Left Arrow - So the line is not highlighted.
end tell
Aggiornamento:
Il codice qui sotto è stato modificato dal codice sopra nella parte superiore della mia risposta, non dalla mia risposta alla risposta di arc sebbene sia applicabile anche lì, per risolvere il problema con TextEdit stai scrivendo due ritorni a capo invece dei normali e previsti feed a due righe per una riga vuota dopo una riga contenente il contenuto o due righe vuote in una riga.
set filePathName to POSIX path of (path to desktop as string) & "My Fruit Log.txt"
set firstEmptyLineNumber to (do shell script "awk '$1 == \"\" {print NR;exit;}' \"" & filePathName & "\"")
if firstEmptyLineNumber is equal to "" then
set firstEmptyLineNumber to (do shell script "awk '/\r\r/{print NR+1;exit;}' \"" & filePathName & "\"")
end if
do shell script "open -e " & quoted form of filePathName
tell application "TextEdit" to activate
tell application "System Events" to tell process "TextEdit"
repeat (firstEmptyLineNumber - 1) times
key code 125 # Down Arrow
end repeat
end tell
Nota: anche se il code modificato funziona con il tuo file testfile.txt dal link nel tuo commento, tuttavia personalmente non mi abbono a questa soluzione alternativa e dovresti invece scoprire la causa principale del problema e correggerlo e i tuoi file!