Je ne sais pas s'il existe un moyen simple ou agréable de faire ce que vous demandez. En d'autres termes, vous ne pouvez pas simplement dire quelque chose comme cela open target file and move cursor to first empty line
, mais le code ci-dessous le fera.
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
Le code ci-dessus est codé pour ouvrir le fichier texte dans TextEdit, comme open -e
dans la deuxième
do shell script
commande. Il est codé de cette façon, car System Events doit savoir où envoyer les séquences de touches fléchées vers le bas . Si vous souhaitez un autre éditeur de texte, supprimez-
le -e
et la open
commande l'ouvrira dans l'application que l' extension de fichier .txt est enregistrée pour pouvoir l'ouvrir. Ensuite, vous devrez également changer:
tell application "System Events" to tell process "TextEdit"
À:
tell application "System Events" to tell front process
Et remplace:
tell application "TextEdit" to activate
Avec: delay 1
Dans la première do shell script
commande , awk
obtient le numéro de ligne de la première ligne vide et la sortie, et c’est ce qui permet de calculer le nombre de frappes de la flèche vers le basrepeat
.
J'ai légèrement modifié ma réponse initiale pour me débarrasser de la delay
commande, mais je voulais ajouter ma réponse à la réponse de adc tout en éliminant tout le menu_click
contenu.
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
Mise à jour:
Le code ci-dessous a été modifié à partir du code ci-dessus en haut de ma réponse, et non de ma réponse à la réponse de arc, bien qu'elle puisse également s'appliquer ici, afin de résoudre le problème rencontré par TextEdit lors de l'écriture de deux retours à la place au lieu des deux retours attendus et normaux. la ligne est utilisée pour une ligne vide après une ligne contenant du contenu ou deux lignes vides dans une ligne.
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
Remarque: Bien que le code modifié fonctionne avec votre fichier testfile.txt à partir du lien de votre commentaire, je ne souscris pas personnellement à cette solution de contournement et rechercherais plutôt la cause première du problème et le corrigerait ainsi que vos fichiers!