fix(tools): tre fejl, en prøvekørsel på ti noter fandt med det samme

Kodningen. textutil gætter på inddataets kodning og gætter forkert, så
"Ansøgning" kom ud som "Ansøgning". Det ser ud som én underlig note, indtil man
opdager, at det er hver eneste note med et dansk bogstav i.

Titlen stod to gange. Kroppen af en Apple-note begynder med notens egen titel, så
en overskrift ovenover gav den dobbelt overalt.

Og listerne var ikke lister. Apple skriver dem som tabulator, tegn, tabulator —
en liste for et menneske og ingenting for en Markdown-læser, så en huskeliste
ankom som en klump linjer. Punkttegnet er flerbyte, og BSD sed hakkede det midt
over, så hver linje begyndte med to halve tegn; perl med -CSD gør det rigtigt.

Scriptet tager nu et antal som andet argument, så en prøvekørsel er til at
gentage. Det er billigere at opdage den slags på ti noter end på tolv hundrede.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
Kristian Wind
2026-08-19 19:37:52 +02:00
co-authored by Claude Opus 5
parent 414a35eaba
commit 08fc355bf9
+44 -3
View File
@@ -10,7 +10,8 @@
# mappe, du kan kigge igennem, før du beslutter dig — og et zip af den mappe er
# præcis det, Verdande importerer.
#
# ./apple-notes-til-markdown.sh ~/Desktop/noter
# ./apple-notes-til-markdown.sh ~/Desktop/noter # alle
# ./apple-notes-til-markdown.sh ~/Desktop/noter 10 # de første ti
# cd ~/Desktop && zip -r noter.zip noter
# → Indstillinger → Data → Importér noter
#
@@ -19,6 +20,7 @@
set -euo pipefail
ud="${1:-$HOME/Desktop/apple-noter}"
graense="${2:-0}" # 0 betyder alle
mkdir -p "$ud"
echo "Læser Noter. Første gang kan det tage et minut, før macOS svarer."
@@ -29,6 +31,13 @@ echo "Læser Noter. Første gang kan det tage et minut, før macOS svarer."
antal=$(osascript -e 'tell application "Notes" to return count of notes')
echo "Fandt $antal noter."
# En prøvekørsel først er en god idé: konverteringen taber Apple Noters
# formatering, og det er billigere at opdage på ti noter end på tolv hundrede.
if [ "$graense" -gt 0 ] && [ "$graense" -lt "$antal" ]; then
antal="$graense"
echo "Tager de første $antal."
fi
i=1
while [ "$i" -le "$antal" ]; do
titel=$(osascript -e "tell application \"Notes\" to return name of note $i" 2>/dev/null || echo "")
@@ -51,9 +60,41 @@ while [ "$i" -le "$antal" ]; do
# tekst; overskrifter og fed går tabt, men ordene og linjerne overlever, og det
# er dem, man kommer efter. Titlen sættes som første linje, fordi det er sådan
# Verdande navngiver en note.
#
# To ting, en prøvekørsel på ti noter afslørede med det samme:
#
# `-inputencoding UTF-8` — uden den gætter textutil på inddataets kodning og
# gætter forkert, så "Ansøgning" kommer ud som "Ansøgning". Det er den slags,
# der ser ud som en enkelt underlig note, indtil man opdager, at det er alle
# noter med et dansk bogstav i.
#
# Og kroppen af en Apple-note begynder med notens titel. Skriver man en
# overskrift ovenover, står titlen to gange i hver eneste note.
tekst=$(printf '%s' "$krop" \
| textutil -stdin -stdout -format html -inputencoding UTF-8 -convert txt -encoding UTF-8 2>/dev/null \
|| true)
# Apples lister kommer ud som tabulator, tegn, tabulator — "\t•\tPulp Fiction".
# Det er en liste for et menneske og ingenting for en Markdown-læser, så en
# huskeliste ville ankomme som en klump linjer. Punkttegnene bliver til "- " og
# tallene til "1. ", som er det, alt andet i verden læser som en liste.
#
# Perl og ikke sed: punkttegnet er flerbyte, og BSD sed hakkede det midt over,
# så hver linje begyndte med to halve tegn. -CSD siger, at ind- og uddata er
# UTF-8, hvilket er hele forskellen.
tekst=$(printf '%s' "$tekst" | perl -CSD -pe '
s/^\t+(\d+)[.)]\t*/$1. /; # nummereret liste
s/^\t+[^\t]{1,3}\t+/- /; # punkt- eller stregliste
')
foerste=$(printf '%s' "$tekst" | head -1)
if [ "$foerste" = "$titel" ]; then
tekst=$(printf '%s' "$tekst" | tail -n +2)
fi
{
printf '# %s\n\n' "$titel"
printf '%s' "$krop" | textutil -stdin -stdout -format html -convert txt 2>/dev/null || true
printf '# %s\n' "$titel"
printf '%s' "$tekst"
} > "$sti"
# Billeder og bilag.