Escribí un script de Apple para re-crear las líneas en blanco que fueron eliminadas. Es solo aproximado: tiene que hacer ciertas suposiciones imperfectas sobre cuándo insertar una línea, pero es mejor que nada.
-- Reformateo de nuevas líneas de contactos
-- Reintroduce la separación de párrafos en las notas de contactos
-- después de un fallo en Cobook que eliminó todas las líneas en blanco.
-- (Corregido en Cobook v. 1.1.1: http://blog.cobook.co/post/43633583273/cobook-with-google-maps)
-- Basado en el trabajo de Nigel Garvey en MacScripter
-- http://macscripter.net/viewtopic.php?pid=153540#p153540
-- Obtener todos los IDs de personas y notas de una sola vez, para eficiencia.
tell application "Contacts" to set {theIDs, theFirstNames, theLastNames, theCompanies, theOrgs, theNotes} to {id, first name, last name, company, organization, note} of people
-- Almacenar el o los delimitadores de texto actuales y configurar el delimitador en salto de línea.
set astid to AppleScript's text item delimiters
set AppleScript's text item delimiters to linefeed -- esto puede ser innecesario ahora
try
-- Recorrer las listas paralelas de IDs y notas obtenidas anteriormente.
repeat with i from 1 to (count theIDs)
-- Obtener el siguiente valor de la lista de notas.
set thisNote to item i of theNotes
-- Si no es 'missing value', hay una nota para esta persona.
if (item i of theCompanies is false) then
set theName to (item i of theFirstNames) & " " & (item i of theLastNames)
else
set theName to (item i of theOrgs)
end if
if (thisNote is not missing value) then
-- Dividir el texto de la nota en párrafos.
set theParagraphs to thisNote's paragraphs
set newParagraphs to {}
-- Máquina de estado de bloque PGP:
-- 0 no está en el bloque PGP
-- 1 Primera línea del bloque PGP (siempre "-----BEGIN PGP MESSAGE-----")
-- 2 En encabezado de bloque PGP, no es la primera línea
-- 3 En cuerpo de bloque PGP, primera línea
-- 4 En cuerpo de bloque PGP, no es la primera línea
-- 5 Última línea del bloque PGP (siempre "-----END PGP MESSAGE-----")
set pgpBlockState to 0
repeat with k from 1 to (count theParagraphs)
set thisParagraph to (item k of theParagraphs)
set appendEmptyParagraph to true
if pgpBlockState is 0 then
if (thisParagraph contains "BEGIN PGP MESSAGE") then
set pgpBlockState to 1
end if
else if pgpBlockState is 1 then
if thisParagraph contains ":" then
set pgpBlockState to 2
else
set pgpBlockState to 3
end if
else if pgpBlockState is 2 then
if thisParagraph does not contain ":" then
set pgpBlockState to 3
end if
else if pgpBlockState is 3 then
set pgpBlockState to 4
else if pgpBlockState is 4 then
if (thisParagraph contains "END PGP MESSAGE") then set pgpBlockState to 5
else if pgpBlockState is 5 then
set pgpBlockState to 0
end if
-- Modificar la salida según pgpBlockState
if (pgpBlockState is not 0) then set appendEmptyParagraph to false
if (pgpBlockState is 3) then set end of newParagraphs to "" -- esto es un truco, no está limpio
-- Condiciones en las que no queremos un salto de línea
if (length of thisParagraph < 30) then set appendEmptyParagraph to false
if (length of thisParagraph > 1 and first character of thisParagraph = "-") then set appendEmptyParagraph to false
if (length of thisParagraph > 1 and first character of thisParagraph = "•") then set appendEmptyParagraph to false
if (thisParagraph is not equal to "") then set end of newParagraphs to thisParagraph -- eliminar cualquier separación manual de párrafos
if (appendEmptyParagraph) then set end of newParagraphs to "" -- recuerda, newParagraphs es una lista, no una cadena
end repeat
if (count of newParagraphs) > 0 then
-- Obtener el número del último "no vacío".
repeat with j from (count newParagraphs) to 1 by -1
if ((count item j of newParagraphs) > 0) then exit repeat
end repeat
-- Forzar los párrafos (hasta el último no vacío) a un solo texto, usando el delimitador de salto de línea.
set editedNote to (items 1 thru j of newParagraphs) as text
tell application "Contacts" to set note of person id (item i of theIDs) to editedNote
log "Entrada actualizada para: " & theName
else
log "Saltando / sin nota para: " & theName -- maneja notas basadas en Exchange, que no son igual a "missing value" incluso cuando está en blanco
end if
end if
end repeat
on error msg
display dialog msg buttons {"OK"} default button 1
end try
-- Restaurar el valor de delimitador antiguo.
set AppleScript's text item delimiters to astid
-- Guardar los cambios en Contactos.
tell application "Contacts" to save
--> Retorna 'missing value'. No se conoce significado conocido.
Hay una extensa sección en el medio que maneja bloques PGP que podrían aparecer en tu libreta de direcciones. Puede parecer excesivo, pero esos bloques son muy sensibles a tener una colocación correcta de saltos de línea. Si te faltan los saltos de línea adecuados, GPGTools (en su estado actual) simplemente fallará cuando intentes desencriptarlos y no mostrará ningún error útil que indique el problema.
Para ejecutar esto, simplemente pégalo en AppleScript Editor y haz clic en Ejecutar. Advertencia básica: haz una copia de seguridad de tus contactos antes.