El portapapeles y sus formatos
Copiar no es copiar texto: es ofrecer lo mismo en varios formatos y dejar que quien pegue elija. Cómo se hace bien, y lo que nunca debería acabar ahí.
Varios formatos a la vez
La última fila es el patrón que resuelve el copiar y pegar interno: ofreces tu formato completo y texto plano. Al pegar dentro de tu aplicación tomas el tuyo y no pierdes información; al pegar fuera, la otra aplicación toma el texto.
El pegado
El caso difícil, porque lo que llega puede ser cualquier cosa:
El paso 3 no es teórico: pegar texto de una web en un campo que acepta marcado es exactamente la vía del nivel 32.3, y el contenido del portapapeles no ha pasado por ningún control.
Lo que no debe acabar ahí
Dos cosas, y las dos por la misma razón: el portapapeles es global, persistente y accesible para todas las aplicaciones.
- Secretos. Una contraseña copiada al portapapeles la puede leer cualquier programa del usuario, y se queda ahí hasta que se copie otra cosa. Si tu aplicación ofrece «copiar contraseña» —que es una función legítima en un gestor de credenciales—, debe borrarla del portapapeles pasado un tiempo corto y decirlo.
- Y datos que el usuario no sabe que está copiando. Si al copiar una fila de una tabla incluyes campos ocultos en tu formato propio, el usuario puede pegar en otro sitio más de lo que creía.
Y una consideración de historial: varios sistemas guardan un historial de portapapeles, así que «se borra al copiar otra cosa» no siempre es cierto — razón adicional para no poner secretos ahí salvo cuando el usuario lo pide explícitamente.
Copiar y pegar dentro de tu aplicación
Un último detalle: para mover cosas dentro de tu aplicación, el portapapeles del sistema no siempre es la herramienta.
- Si el usuario espera que interactúe con el resto del sistema —copiar un texto y pegarlo en un correo— sí.
- Si es una operación interna —duplicar un elemento, mover algo de un panel a otro— puede ser mejor un mecanismo propio, que no ensucia el portapapeles del usuario ni pierde lo que él tenía copiado.
Sobrescribir lo que el usuario tenía en el portapapeles sin que él haya pulsado copiar es una de las cosas que más molestan y ocurre cuando una aplicación lo usa como almacén temporal interno.