No sé si hay una manera fácil o bonita de hacer lo que me estás pidiendo. En otras palabras, no puedes simplemente decir algo como open target file and move cursor to first empty line
, sin embargo, el código a continuación lo hará.
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
El código anterior está codificado para abrir el archivo de texto en TextEdit, que es lo que open -e
en el segundo comando de do shell script
está haciendo y está codificado de esta manera porque los eventos del sistema necesitan saber a dónde enviar las pulsaciones flecha abajo . Si desea un editor de texto diferente, elimine
-e
y el comando open
lo abrirá en cualquier aplicación en la que esté registrada la extensión de archivo .txt abrir con. Entonces también necesitarás cambiar:
tell application "System Events" to tell process "TextEdit"
Para:
tell application "System Events" to tell front process
Y reemplazar:
tell application "TextEdit" to activate
Con: delay 1
En el primer comando do shell script
, awk
obtiene el número de línea de la primera línea vacía y sale y esto es lo que se usa para calcular cuántos < em> flecha abajo pulsaciones de tecla a repeat
.
Modifiqué ligeramente mi respuesta original para deshacerme del comando delay
, pero quería agregar mi opinión sobre la respuesta de adc a la vez que eliminaba todas las cosas de menu_click
.
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
Actualizar:
El código a continuación se modificó desde el código que aparece arriba en la parte superior de mi respuesta, no mi respuesta a la respuesta del arco, aunque también es aplicable allí, para abordar el problema está haciendo que TextEdit escriba dos retornos de carro en lugar de las dos líneas de línea esperadas y normales para una línea vacía después de una línea que contiene contenido o dos líneas vacías en una fila.
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: Aunque el código modificado funciona con su archivo testfile.txt desde el enlace de su comentario, no obstante, personalmente no me suscribo a esta solución alternativa, y en lugar de eso, descubriría la causa raíz del problema y lo solucionaría junto con sus archivos.