diff --git a/tools/apple-notes-til-markdown.sh b/tools/apple-notes-til-markdown.sh index 3a7ef96..b63335d 100755 --- a/tools/apple-notes-til-markdown.sh +++ b/tools/apple-notes-til-markdown.sh @@ -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.