Las selecciones , los búferes de corte y la función de arrastrar y soltar son los mecanismos que se utilizan en el sistema X Window para permitir que un usuario transfiera datos de una ventana a otra. Las selecciones y el búfer de corte se utilizan normalmente cuando un usuario selecciona texto o algunos otros datos en una ventana y pega en otra. Arrastrar y soltar se usa cuando un usuario selecciona algo en una ventana, luego hace clic en la selección y la arrastra a otra ventana.
Dado que las dos ventanas pueden ser manejadas por dos aplicaciones diferentes, estos mecanismos requieren dos clientes diferentes conectados con el mismo servidor X para intercambiar datos. El protocolo central del sistema X Window incluye algunas solicitudes y eventos que son específicos del intercambio de selección, 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 selección.
Se pueden transferir diferentes tipos de datos: suele ser 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 de transferencia de 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 lo 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 "posea" la selección para participar activamente en el intercambio.
Las selecciones y arrastrar y soltar son mecanismos activos: después de que se selecciona un texto en una ventana, el cliente que maneja la ventana debe admitir activamente un protocolo para transferir los datos a la aplicación que lo solicita. Por el contrario, los búferes de corte son un mecanismo pasivo: después de seleccionar un texto, se transfiere a un búfer de corte y permanece allí incluso si la aplicación que maneja la ventana termina y la ventana se destruye. El portapapeles X es un mecanismo pasivo según lo percibe el cliente que tiene la selección, pero requiere que el xclipboard
cliente admita activamente cualquier transferencia de datos posterior.
Una ventaja de los mecanismos activos es que los datos se pueden convertir a un formato diferente antes de la transferencia. En particular, el cliente que recibe los datos puede solicitar que los datos de selección se conviertan en un formulario adecuado. Si el cliente remitente se niega a hacerlo, el receptor puede solicitar un formato diferente. Por ejemplo, un fragmento de código HTML de representación de texto se puede transferir como texto a un solicitante que solo puede manejar texto, pero también se puede transferir como código HTML si el solicitante puede manejarlo. Tal negociación de formato no puede realizarse mediante mecanismos pasivos, en los que el cliente que tiene la selección (y le da la semántica) transfiere la selección y no participa en la transferencia adicional a un cliente que la solicita.
Otra ventaja de los mecanismos activos es que se pueden transferir grandes cantidades de datos en una secuencia de transferencias en lugar de en una sola. En cambio, los mecanismos pasivos requieren que todos los datos se transfieran en algún lugar del propietario de la selección y luego se transfieran nuevamente al cliente que los solicita.
La ventaja de los mecanismos pasivos es que la transferencia se puede realizar incluso después de que el cliente que tiene los datos termine. Esto no es posible en los mecanismos activos, que requieren que el cliente que posee los datos 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, una atom
). La selección más utilizada es la PRIMARY
selección.
Las siguientes solicitudes son específicas de la transferencia de selección, aunque la transferencia también implica otras solicitudes:
- Solicitar saber a qué ventana pertenece la selección.
- solicitud para configurar la ventana que posee la selección
- solicitud para convertir la selección
El propietario de la selección suele ser la ventana en la que se encuentra el texto seleccionado, si lo hubiera. Cuando el usuario selecciona algún texto en una ventana, el cliente que maneja la ventana debe decirle al servidor que la ventana es el propietario 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 involucra la segunda y tercera solicitudes de la lista anterior, y no está especificado por el protocolo X sino como una convención en el Manual de la Convención de Comunicaciones entre Clientes (ICCCM).
En particular, el cliente de destino comienza preguntando al servidor a qué ventana pertenece la selección. Luego, los dos clientes transfieren la selección a través del servidor. Este intercambio involucra una propiedad de una ventana y un dato arbitrario adjunto a la ventana. Si el contenido de la selección se considera lo suficientemente pequeño como para ser transferido de una vez, los pasos que se llevan a cabo son:
- el destinatario de la selección solicita que la selección se convierta, especificando una propiedad de una ventana (esta puede ser la ventana donde se debe pegar el texto)
- en respuesta, el servidor envía al propietario actual de la selección un
SelectionRequest
evento; - el propietario coloca el texto seleccionado en la propiedad de la ventana que el solicitante ha especificado enviando un
ChangeProperty
; solicitud al servidor - el propietario envía una solicitud al servidor para enviar al solicitante una
SelectionNotify
notificación de 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
GetProperty
solicitudes al servidor; - el solicitante destruye la propiedad; si el propietario ha solicitado ser informado de esto, se envía un
PropertyNotify
evento.
Si el contenido es grande, debe transferirse en trozos. En este caso, ambos clientes expresan interés en los PropertyNotify
eventos: de esta manera, el propietario de la selección sabe cuándo se ha leído la selección y el solicitante sabe cuándo se ha colocado otra porción en la propiedad.
Portapapeles
La selección más utilizada es la PRIMARY
selección, y se utiliza cuando el usuario selecciona algunos datos. La CLIPBOARD
selección se utiliza cuando el usuario selecciona algunos datos y solicita explícitamente que se "copien" en el portapapeles, por ejemplo, invocando "Copiar" en el menú "Editar" de una aplicación. Una solicitud asociada de "Pegar" da como resultado que CLIPBOARD
se utilicen los datos de la selección.
A nivel del protocolo central, las selecciones PRIMARY
y CLIPBOARD
no difieren. Pero el xclipboard
cliente hace que se comporten de manera diferente. En particular, cuando otro cliente afirma la propiedad de la CLIPBOARD
selección, este programa la solicita y la muestra en una ventana. Cualquier otra solicitud para esta selección es manejada por xclipboard
. De esta forma, el contenido de la selección sobrevive al cliente después de haberlo copiado.
Cortar tampones
Los búferes de corte son otro mecanismo para transferir datos, en particular, texto seleccionado. Son propiedades de ventana de la ventana raíz , nombradas CUT_BUFFER1
, etc. A diferencia de las selecciones, los búferes de corte no implican una interacción directa entre clientes. Más bien, 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 xcutsel
programa transfiere datos entre selecciones y búferes de corte, y el xcb
programa permite varios tipos de acceso a los búferes de corte.
Los búferes de corte se consideran obsoletos. [1]
XDND
Arrastrar y soltar en el sistema X Window está regulado por la convención Xdnd. [2] Cuando el usuario arrastra el texto seleccionado a una ventana y suelta el botón del mouse, el intercambio de datos se realiza como en la selección primaria. 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 una ventana, el usuario espera poder saber si el texto se puede quitar o no. En particular, el objetivo debe mostrar información visual sobre si aceptará o no la caída, y el cursor debe cambiar para indicar la acción que se tomará; por ejemplo, copiar o mover.
En el protocolo Xdnd, la ventana donde se selecciona el texto y comienza el arrastre se llama fuente ; la ventana sobre la que pasa el cursor se llama destino . La comunicación entre la fuente y el destino es impulsada por la fuente porque la fuente "agarra" el cursor. Por lo tanto, es necesario un intercambio entre la fuente y el destino para que el destino sepa siquiera que se está llevando a cabo la función de arrastrar y soltar. Dado que la fuente decide la forma del cursor, la fuente debe recibir una respuesta del objetivo para actualizar el cursor. Además, dado que el objetivo puede necesitar dibujar una vista de bomba para indicar dónde ocurrirá la caída, y dado que la aceptación de la caída puede depender de la ubicación exacta del cursor, este intercambio debe ocurrir repetidamente a medida que el cursor se mueve. De hecho, incluso si el cursor no se mueve, los mensajes deben intercambiarse para permitir que el objetivo se desplace cuando el cursor está cerca de un borde del área de visualización. De lo contrario, el usuario solo podrá dejarse caer sobre la parte visible del objetivo.
Un programa puede indicar que una ventana puede ser el objetivo de una gota creando una propiedad nombrada XdndAware
que contiene la versión más alta del protocolo que admite el programa. De esta forma, las aplicaciones que admiten versiones más recientes pueden recurrir a versiones anteriores para interoperar correctamente. Además, se ignorarán todas las aplicaciones escritas sin soporte para Xdnd.
Cuando el cursor ingresa a la ventana de destino, la fuente verifica la presencia de la XdndAware
propiedad en esa ventana. Si esta propiedad está presente, comienza un intercambio:
- la fuente le dice al objetivo que el cursor ha entrado en el objetivo mientras arrastra algunos datos enviando un evento
XdndEnter
- el objetivo puede averiguar qué tipo de datos se arrastran (texto, imagen, etc.) mirando este evento y posiblemente mediante una mayor interacción con la fuente
Mientras el cursor está dentro de la ventana de destino:
- la fuente envía
XdndPosition
eventos para decirle al objetivo dónde está actualmente el cursor - el objetivo responde con
XdndStatus
eventos para decirle a la fuente si los datos se pueden colocar en la posición actual - la fuente envía un mensaje
XdndLeave
oXdndDrop
cuando el cursor ha abandonado la ventana o se ha soltado el botón, respectivamente
Si el usuario cae, el objetivo solicita la selección de la fuente como de costumbre. Cuando se concluye la transferencia de la selección, el destino envía un XdndFinish
evento para decirle a la fuente que la transferencia se ha realizado correctamente.
En resumen, el protocolo es impulsado por la fuente, que mantiene al objetivo informado de lo que está sucediendo con el cursor. En respuesta, el objetivo le dice a la fuente si una gota sería aceptada o no. El objetivo también debe ser informado cuando el usuario suelta el botón del mouse, ya que este evento inicia una solicitud regular de una selección, que es un protocolo impulsado por el objetivo.
Lo anterior es la descripción de la convención Xdnd para arrastrar y soltar. Se utilizan diferentes convenciones para arrastrar y soltar en Motif, OffiX y Amulet.
XDS
El protocolo de ahorro directo , abreviados XDS (para X Window D directo teléfono S ave Protocolo), es un protocolo de software que permite guardar archivos por arrastrar a administrador de archivos de Windows . XDS se basa en el protocolo XDND . [3] [4]
Programas
Los siguientes programas operan específicamente sobre mecanismos de transferencia de datos:
- xcutsel transfiere datos de selecciones para cortar búferes o viceversa
- xclipboard, glipper ( Gnome ), parcellite ( LXDE ) y klipper ( KDE ) son administradores de portapapeles , tal vez wmcliphist también
- 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 verbosidad que ayuda a depurar los problemas de selección de X. parcellite también tiene la capacidad de leer y escribir en selecciones específicas de X desde la línea de comando.
- synergy es una herramienta multiplataforma que le permite compartir un portapapeles en múltiples computadoras que ejecutan múltiples sistemas operativos
- xfce4-clipman-plugin es un "complemento de historial del portapapeles para el panel Xfce4" y también un administrador del portapapeles
- xtranslate busca palabras en Xselection en un diccionario multilingüe
- autocutsel sincroniza el búfer de corte y el búfer de selección
Ver también
Referencias
- ^ Zawinski, JW (2002). X selecciones, cortar búferes y matar anillos. Obtenido 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 http://johnlindal.wix.com/xdnd
- ^ Lindal, John. "Guardar archivos mediante arrastrar y soltar: el protocolo de guardado directo para el sistema X Window" . Archivado desde el 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 desde el original el 22 de marzo de 2015.