Puedo reproducir sistemáticamente este comportamiento en TextEdit.app y Notes.app en MacOS Catalina 10.15.3 (19D76). Esto sucede con cualquier tipo de inserción de imágenes (por ejemplo, portapapeles, arrastrar y soltar).
No sé cómo evitar que ocurra cuando estás adjuntando una imagen a un texto, pero quizás consigas lo que quieres insertando una imagen en el medio del texto formateado; entonces el texto anterior/posterior conserva el formato original. Una cosa que me ha funcionado bien es escribir un espacio y luego tocar la flecha izquierda una vez antes de pegar una imagen.
A continuación explicaré con más detalle lo que he aprendido.
El tipo de letra siempre vuelve a la Helvética 12 pt después de pegar una imagen, independientemente de cualquier configuración que haya probado. Esto parece ser un hardcoded, inalterable por defecto del sistema. Aunque todavía no he probado a utilizar TinkerTool para cambiar la configuración de las fuentes en todo el sistema.
Cómo mirar en los archivos RTFD
No estoy seguro de cómo mirar el estado en memoria de NSTextView
pero si guardamos el archivo en el disco podemos inspeccionar el contenido del archivo RTF. Buscamos una directiva de tamaño de fuente como \fs12
o \fs24
. En realidad, el formato de archivo RTF original no admite imágenes, por lo que en realidad estamos hablando de .rtfd
( Directorio RTF ) aquí.
Al principio comparé dos archivos, uno en el que no se había pegado ninguna imagen, y otro en el que se había pegado la imagen y luego se había eliminado. Curiosamente, el contenido de los archivos era idéntico ¡! Esto sugiere que no hay un cambio intencionado de la configuración del formato de texto, y que la vuelta a la Helvética 12 pt está directamente relacionada con la presencia de la imagen.
Luego inspeccioné un archivo en el que había añadido la misma imagen varias veces. La misma directiva de imagen se repite sin ninguna directiva de formato de texto. En particular, \fs12
nunca aparece en el archivo.
\f0\fs48 \cf0 Hello World
\fs24 {{\NeXTGraphic Pasted Graphic.png \width500 \height520 \appleattachmentpadding0 \appleembedtype0 \appleaqc}}
{{\NeXTGraphic Pasted Graphic.png \width500 \height520 \appleattachmentpadding0 \appleembedtype0 \appleaqc}}
{{\NeXTGraphic Pasted Graphic.png \width500 \height520 \appleattachmentpadding0 \appleembedtype0 \appleaqc}}
Basándome en esto, puedo determinar de forma bastante concluyente que este comportamiento de pegado está relacionado con el manejo en memoria del texto formateado. En otras palabras, esto parece ser una peculiaridad de la implementación de Apple de NSTextView
.
Me parece poco probable que este sea el comportamiento que los ingenieros de software de Apple pretendían crear. Si fuera intencional, entonces sería off-topic especular sobre el porqué. Pero como parece ser un error, en su lugar te dirigiría a la página de Apple donde puedes escribir comentarios para MacOS .
Posibles pistas para futuras investigaciones
¿Cómo podemos inspeccionar directamente el contenido del portapapeles? ¿Hay alguna información de formato de texto asociada a una imagen en el portapapeles?
Probablemente podríamos identificar un caso menor para reproducir este problema manipulando directamente un NSMutableAttributedString . Hace tiempo que no hago desarrollo para Mac, pero probablemente centraría mi atención en appendAttributedString:
o insertAttributedString:atIndex:
.