Las selecciones , los búferes de corte y la función de arrastrar y soltar son los mecanismos que utiliza el Sistema X Window para permitir al usuario transferir datos de una ventana a otra. Las selecciones y los búferes de corte se utilizan normalmente cuando un usuario selecciona texto u otros datos en una ventana y los pega en otra. La función de arrastrar y soltar se utiliza cuando un usuario selecciona algo en una ventana, hace clic en la selección y la arrastra a otra ventana.
Dado que las dos ventanas pueden ser gestionadas por dos aplicaciones diferentes, estos mecanismos requieren dos clientes distintos conectados al mismo servidor X para intercambiar datos. El protocolo central del Sistema de Ventanas X incluye algunas solicitudes y eventos específicos para el intercambio de selecciones, pero la transferencia se realiza principalmente mediante el envío de eventos y las propiedades de la ventana, que no son específicas de la transferencia de selecciones.
Se pueden transferir diferentes tipos de datos: normalmente texto, pero también puede ser una imagen, un número, una lista de objetos, etc. A continuación, solo se considera el caso del texto.
Selecciones activas y pasivas
Los métodos para transferir datos se pueden clasificar en activos y pasivos, dependiendo de si el cliente que maneja los datos seleccionados tiene que participar activamente en la transferencia a un cliente que la solicita:
- Pasivo
- Cuando se seleccionan algunos datos, el cliente que maneja la ventana donde se realiza esta selección los transfiere a algún lugar y ya no necesita preocuparse por ellos;
- Activo
- La transferencia de datos a un cliente requiere que el cliente que "posee" la selección participe activamente en el intercambio.
Las selecciones y la función de arrastrar y soltar son mecanismos activos: tras seleccionar texto en una ventana, el cliente que la gestiona debe admitir activamente un protocolo para transferir los datos a la aplicación que los solicita. Por el contrario, los búferes de corte son un mecanismo pasivo: tras seleccionar texto, este se transfiere a un búfer de corte y permanece allí incluso si la aplicación que gestiona la ventana finaliza y esta se destruye. El portapapeles X es un mecanismo pasivo desde la perspectiva del cliente que mantiene la selección, pero requiere que xclipboardeste admita activamente cualquier transferencia de datos posterior.
Una ventaja de los mecanismos activos es que los datos pueden convertirse a un formato diferente antes de la transferencia. En concreto, el cliente receptor puede solicitar que los datos de selección se conviertan a un formato adecuado. Si el cliente emisor se niega, el receptor puede solicitar un formato diferente. Por ejemplo, un fragmento de código HTML que genera texto puede transferirse como texto a un solicitante que solo admite texto, pero también puede transferirse como código HTML si el solicitante puede procesarlo. Esta negociación de formato no es posible con mecanismos pasivos, en los que el cliente que posee la selección (y le asigna semántica) la transfiere y no participa en la transferencia posterior al cliente que la solicita.
Otra ventaja de los mecanismos activos es que permiten transferir grandes cantidades de datos en una secuencia de transferencias, en lugar de una sola. Los mecanismos pasivos, en cambio, requieren que todos los datos se transfieran desde el propietario de la selección a algún lugar y luego se vuelvan a transferir al cliente que los solicita.
La ventaja de los mecanismos pasivos es que la transferencia puede realizarse incluso después de que el cliente que posee los datos finalice su actividad. Esto no es posible con los mecanismos activos, que requieren que el cliente participe activamente en la transferencia.
Trozos escogidos
El sistema X Window admite un número arbitrario de selecciones; cada selección se identifica mediante una cadena (más precisamente, un atom). La selección más utilizada es la PRIMARYselección.
Las siguientes solicitudes son específicas para la transferencia de selección, aunque la transferencia también implica otras solicitudes:
- Solicitar saber qué ventana posee la selección.
- solicitud para establecer la ventana que posee la selección
- solicitud para convertir la selección
El propietario de la selección suele ser la ventana donde se encuentra el texto seleccionado, si la hay. Cuando el usuario selecciona texto en una ventana, el cliente que gestiona dicha ventana debe indicar al servidor que la ventana es la propietaria de la selección.
Cuando el usuario intenta pegar la selección en otra ventana, el controlador de esa ventana inicia un protocolo para obtener el texto seleccionado del otro cliente. Este protocolo incluye la segunda y la tercera solicitud de la lista anterior, y no está especificado por el protocolo X, sino como una convención del Manual de Convenciones de Comunicación entre Clientes (ICCCM).
En concreto, el cliente de destino comienza preguntando al servidor qué ventana posee la selección. A continuación, ambos clientes transfieren la selección a través del servidor. Este intercambio implica una propiedad de una ventana y un dato arbitrario asociado a ella. Si el contenido de la selección se considera lo suficientemente pequeño como para transferirse de una sola vez, los pasos que se siguen son:
- El destinatario de la selección solicita que se convierta la selección, especificando una propiedad de una ventana (esta puede ser la ventana donde se debe pegar el texto).
SelectionRequestEn respuesta, el servidor envía un evento al propietario actual de la selección ;- El propietario coloca el texto seleccionado en la propiedad de la ventana que el solicitante ha especificado enviando una
ChangePropertysolicitud ; al servidor. - El propietario envía una solicitud al servidor para que envíe al solicitante una
SelectionNotifynotificación para informarle que la selección ha sido transferida. - El solicitante ahora puede leer la selección en la propiedad de la ventana enviando una o más
GetPropertysolicitudes al servidor; - El solicitante destruye la propiedad; si el propietario ha solicitado ser informado de esto, se le envía un
PropertyNotifyevento.
Si el contenido es extenso, debe transferirse por partes. En este caso, ambos clientes expresan interés en PropertyNotifylos eventos: así, el propietario de la selección sabe cuándo se ha leído la selección y el solicitante sabe cuándo se ha añadido otro fragmento a la propiedad.
La extensión XFixes permite a los clientes escuchar los cambios de selección. [ 1 ]
Portapapeles
La opción más utilizada es la PRIMARYselección, que se emplea cuando el usuario selecciona datos. Esta selección se usa cuando el usuario selecciona datos y solicita explícitamente que se copien al portapapeles, por ejemplo, al usar la opción "Copiar" en el menú "Editar" de una aplicación. Al usar CLIPBOARDla opción "Pegar", se copian los datos seleccionados .CLIPBOARD
A nivel del protocolo central, las PRIMARYselecciones CLIPBOARDno difieren. Sin embargo, el xclipboardcliente las hace comportarse de manera diferente. En particular, cuando otro cliente reclama la propiedad de la CLIPBOARDselección, este programa la solicita y la muestra en una ventana. Cualquier solicitud posterior de esta selección es gestionada por xclipboard. De esta forma, el contenido de la selección se conserva incluso después de que el cliente la haya copiado.
Recortar búferes
Los búferes de corte son otro mecanismo para transferir datos, en particular texto seleccionado. Son propiedades de la ventana raíz , denominadas CUT_BUFFER1, etc. A diferencia de las selecciones, los búferes de corte no implican una interacción directa entre clientes. En cambio, cuando se selecciona texto en una ventana, el propietario de la ventana copia este texto en la propiedad de la ventana raíz llamada CUT_BUFFER1. Cuando el usuario pega el texto en otra ventana, el propietario de la ventana lee esta propiedad de la ventana raíz.
El xcutselprograma transfiere datos entre selecciones y búferes de corte, y xcbpermite varios tipos de acceso a los búferes de corte.
Los búferes de corte se consideran obsoletos. [ 2 ]
XDND
La función de arrastrar y soltar en el sistema X Window se rige por la convención Xdnd. [ 3 ] Cuando el usuario arrastra el texto seleccionado a una ventana y suelta el botón del ratón, el intercambio de datos se realiza como en la selección inicial. La función de arrastrar y soltar se complica por lo que sucede durante el arrastre. Es decir, cuando el usuario arrastra la selección a diferentes partes del escritorio o de una ventana, espera poder saber si el texto se puede soltar o no. En concreto, el destino debe mostrar una indicación visual de si acepta o no la acción de soltar, y el cursor debe cambiar para indicar la acción que se realizará; por ejemplo, copiar o mover.
En el protocolo Xdnd, la ventana donde se selecciona el texto y comienza el arrastre se denomina origen ; la ventana sobre la que se sitúa el cursor se denomina destino . La comunicación entre el origen y el destino es gestionada por el origen, ya que este "captura" el cursor. Por lo tanto, es necesario un intercambio entre el origen y el destino para que el destino sepa que se está produciendo una operación de arrastrar y soltar. Dado que el origen decide la forma del cursor, debe recibir una respuesta del destino para actualizarlo. Además, como el destino puede necesitar dibujar una mira para indicar dónde se producirá la operación de soltar, y dado que la aceptación de la misma puede depender de la ubicación exacta del cursor, este intercambio debe repetirse a medida que el cursor se mueve. De hecho, incluso si el cursor no se mueve, se deben intercambiar mensajes para permitir que el destino se desplace cuando el cursor se encuentra cerca del borde del área de visualización. De lo contrario, el usuario solo podrá soltar el texto en la parte visible del destino.
Un programa puede indicar que una ventana puede ser el objetivo de una acción de arrastrar y soltar creando una propiedad XdndAwareque contenga la versión más reciente del protocolo compatible con el programa. De esta forma, las aplicaciones compatibles con versiones más recientes pueden recurrir a versiones anteriores para funcionar correctamente. Además, se ignorarán todas las aplicaciones escritas sin compatibilidad con Xdnd.
Cuando el cursor entra en la ventana de destino, el origen comprueba la presencia de la XdndAwarepropiedad en esa ventana. Si esta propiedad está presente, comienza un intercambio:
- La fuente le indica al destino que el cursor ha entrado en el destino mientras arrastra algunos datos mediante el envío de un evento.
XdndEnter - El objetivo puede averiguar qué tipo de datos se arrastran (texto, imagen, etc.) al observar este evento y posiblemente mediante una interacción posterior con la fuente.
Mientras el cursor se encuentra dentro de la ventana de destino:
- La fuente envía
XdndPositioneventos para indicarle al destino dónde se encuentra actualmente el cursor. - El objetivo responde con
XdndStatuseventos para indicarle al origen si los datos se pueden dejar en la posición actual. - La fuente envía un mensaje
XdndLeaveoXdndDropcuando el cursor ha salido de la ventana o se ha soltado el botón, respectivamente.
Si el usuario abandona la selección, el destino solicita la selección al origen como de costumbre. Cuando se completa la transferencia de la selección, el destino envía un XdndFinishevento para informar al origen que la transferencia se ha realizado correctamente.
En resumen, el protocolo es gestionado por la fuente, que mantiene al destino informado sobre la actividad del cursor. A su vez, el destino comunica a la fuente si se acepta o no la acción de soltar. El destino también debe ser informado cuando el usuario suelta el botón del ratón, ya que este evento inicia una solicitud de selección, cuyo protocolo es gestionado por el destino.
Lo anterior describe la convención de Xdnd para arrastrar y soltar. En Motif, OffiX y Amulet se utilizan convenciones diferentes para esta función.
XDS
El Protocolo de Guardado Directo , abreviado XDS (por X Direct Save Protocol), es un protocolo de software que permite guardar archivos arrastrándolos a las ventanas del administrador de archivos . XDS se basa en el protocolo XDND . [ 4 ] [ 5 ]
Programas
Los siguientes programas operan específicamente sobre mecanismos de transferencia de datos:
- xcutsel transfiere datos de las selecciones a los búferes de corte o viceversa.
- xclipboard, glipper ( Gnome ), parcellite ( LXDE ) y klipper ( KDE ) son gestores de portapapeles , y quizás también wmcliphist.
- xcb muestra el contenido de los búferes de corte y permite al usuario manipularlos.
- xselection , xclip , xsel y xcopy son programas de línea de comandos que copian datos hacia o desde la selección X. xcopy tiene una opción de nivel de detalle que ayuda a depurar problemas de la selección X. Parcellite también permite leer y escribir en selecciones X específicas desde la línea de comandos.
- Synergy es una herramienta multiplataforma que permite compartir el portapapeles entre varios ordenadores con distintos sistemas operativos.
- xfce4-clipman-plugin es un "plugin de historial del portapapeles para el panel Xfce4" y también un gestor del portapapeles.
- xtranslate busca palabras en la selección X en un diccionario multilingüe
- autocutsel sincroniza el búfer de corte y el búfer de selección.
Véase también
Referencias
- ↑ "c - X11 Esperar y obtener texto del portapapeles" . Stack Overflow . Consultado el 27 de julio de 2021 .
- ↑ Zawinski, JW (2002). Selecciones X, búferes de corte y anillos de eliminación. Recuperado el 13 de julio de 2010 de http://www.jwz.org/doc/x-cut-and-paste.html
- ↑ Protocolo de arrastrar y soltar para el sistema X Window, de https://www.freedesktop.org/wiki/Specifications/XDND/
- ↑ Lindal, John. "Guardar archivos mediante arrastrar y soltar: el protocolo de guardado directo para el sistema X Window" . Archivado del original el 5 de marzo de 2016.
- ↑ "Guardar archivos mediante arrastrar y soltar: el protocolo de guardado directo para el sistema X Window" . freedesktop.org . Archivado del original el 22 de marzo de 2015. Consultado el 20 de septiembre de 2018 .
Enlaces externos
- ICCCM: Comunicación entre pares mediante selecciones
- ICCCM: Comunicación punto a punto mediante búferes de corte
- Especificación Xdnd archivada el 4 de marzo de 2016 en Wayback Machine.
- Un artículo de Keith Packard
- Selecciones en general y en Emacs
- Sistema X Window