No sé si hay una forma fácil o bonita de hacer lo que estás pidiendo. En otras palabras, no puedes simplemente decir algo como abrir archivo de destino y mover el cursor a la primera línea vacía
, sin embargo el código a continuación lo hará.
set filePathName to POSIX path of (path to desktop as string) & "Mi Registro de Frutas.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 # Flecha abajo
end repeat
end tell
El código anterior está codificado para abrir el archivo de texto en TextEdit, que es lo que open -e
en el segundo do shell script
comando está haciendo y está codificado de esta manera porque System Events necesita saber dónde enviar las pulsaciones de teclas de la flecha abajo. Si quieres un editor de texto diferente entonces elimina el -e
y el open
comando lo abrirá en la aplicación con la que el archivo .txt está registrado para abrir. Luego también necesitarás cambiar:
tell application "System Events" to tell process "TextEdit"
A:
tell application "System Events" to tell front process
Y reemplaza:
tell application "TextEdit" to activate
Con: delay 1
En el primer do shell script
comando, awk
está obteniendo el número de línea de la primera línea vacía y saliendo y esto es lo que se usa para calcular cuantas pulsaciones de teclas de flecha abajo repetir
.
Modifiqué ligeramente mi respuesta original para eliminar el delay
comando pero quería agregar mi opinión sobre la respuesta de adc mientras elimino toda la parte de menu_click
.
set filePathName to POSIX path of (path to desktop as string) & "Mi Registro de Frutas.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 # Flecha Izquierda - Para que la línea no esté resaltada.
Actualización:
El código a continuación ha sido modificado del código arriba en mi respuesta, no es mi versión de la respuesta de arc aunque también es aplicable allí, para abordar el problema que estás teniendo con TextEdit escribiendo dos retornos de carro en lugar de los dos avances de línea esperados y normales para una línea vacía después de una línea con contenido o dos líneas vacías seguidas.
set filePathName to POSIX path of (path to desktop as string) & "Mi Registro de Frutas.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 # Flecha Abajo
end repeat
Nota: Aunque el código modificado funciona con tu archivo testfile.txt del enlace en tu comentario, personalmente no recomiendo este arreglo y preferiría encontrar la causa root del problema y ¡arreglarlo y tus archivos!