2009/01/10

Cortar

Una característica común y muy usada en los escritorios de los sistemas operativos modernos (Windows, OS X y freedesktop) es el portapapeles.

Normalmente hay 3 instrucciones básicas para usarlo: copiar, pegar y cortar. De ellas, las 2 primeras funcionan prácticamente igual en todos los escritorios modernos y en cualquier contexto o programa; pero la instrucción cortar tiene algunas peculiaridades que dependen tanto del sistema operativo como del programa que esté activo al invocarlo.

Este artículo trata de la instrucción cortar, su origen, sus distintas implementaciones (en varios sistemas operativos y programas), y lo que opino de ellas ahora que se todo esto.

¿De donde viene el portapapeles?

Con un poco de wikipedia (clipboard, "cut, copy and paste") no se tarda mucho en descubrir que la invención de este patrón de trabajo se atribuye a Lawrence Tesler (también en wikipedia), que como podéis ver tiene un currículo impresionante.

El IEEE Spectrum (publicación principal del Instituto de Ingenieros eléctricos y electrónicos), lo entrevistó en su artículo "Of Modes And Men", donde hay un par de pistas sobre la experiencia de Tesler con el portapapeles; traduzco del artículo:

[...] se puso a desarrollar Gypsy, un sistema de procesado de texto sin estados modales que fue el primero en usar elementos que ahora nos son familiares: la función de cortar-y-pegar para mover texto, un formulario para escribir términos de búsqueda, selección de texto manteniendo pulsado un botón del ratón y arrastrando el cursor, tipografías en cursiva y negrita, e impresión lo-que-ves-es-lo-que-hay.

y del apartado "Larry's lexicon" (el vocabulario de Larry):

Cortar-y-pegar: En 1969 Tesler se ofreció voluntario para ayudar a crear un catálogo para la Mid-Peninsula Free University del Área de la Bahía. Él y Jim Warren, fundador de la feria de ordenadores de la costa oeste, hicieron la fotocomposición para ese catálogo. Por aquella época Tesler vio una demo de una instrucción de ordenador que te permitía recuperar algo que habías borrado. La instrucción se invocaba con "Escape P punto y coma" (o algo igual de farragoso). Varios años después, cuando Tesler estaba escribiendo en Xerox PARC un libro blanco sobre el futuro de la informática, recordó aquellas experiencias para predecir que serías capaz de "cortar y pegar" en los documentos de ordenador

Igualmente interesante es el documento `"Gypsy", Una investigación del sistema de edición asistido por ordenador de Ginn` (enlazado desde el artículo sobre Gypsy de la wikipedia) el documento escrito por Betty Burr y Ralph Kimball sobre la experiencia en la implementación del programa desarrollado por Tesler y Tim Mott en el Xerox PARC. Primero en la página 23, que aunque no parezca relacionado, es muy importante:

Miedo a perder el trabajo y la presión de las fechas de entrega

Todos estamos bajo una cantidad de presión increíble, y además tenemos que pelearnos con un sistema experimental. . . .

Creo que lanzaría la puta máquina por la ventana si me hace perder el trabajo del día.

La fiabilidad del sistema era un asunto muy emocional entre los editores de Ginn y fue mencionada por la mayoría de los entrevistados. Los editores pidieron repetidamente una forma más a prueba de idiotas de protegerse de las pérdidas de trabajo debidas a futuros fallos del sistema. Si el editor pierde un archivo, debe reconstruir mucho trabajo de memoria, ya que gran parte del proceso de edición requiere elaborar juicios subjetivos. Como las fechas de prensas, artistas, y publicación del libro se han calculado en base a las fechas de entrega del editor, estos fallos son muy serios.

Experiencias tempranas con el sistema, donde se perdieron de verdad algunos archivos, parece que han dejado a los editores con una preocupación omnipresente. El grado de preocupación estaba inversamente relacionado con la cantidad de experiencia con el sistema; el aumento en la fiabilidad ha convencido a los usuarios continuos que pueden tener más fe en el sistema.

Y luego en la página 25, relacionado mucho más directamente con el portapapeles:

En Gypsy, el espacio donde se almacena todo lo que se borra se llama 'cubo de basura' [wastebasket]. Los usuarios tomaron el nombre demasiado literalmente y no pensaron en ese espacio como almacén de material editado sino como basura que no podía ser reutilizada. Pocos editores usaron efectivamente el cubo de basura para almacenar material temporalmente y pegarlo después en el manuscrito. Esto es debido parcialmente a la extraña naturaleza de la interacción con el cubo de basura y la escasa visibilidad de los elementos allí almacenados. El tamaño inicial del cubo de basura es de sólo dos líneas, así que cuando se corta una gran cantidad de texto, sólo se muestran las últimas dos lineas de texto. La limitación de las dos lineas es especialmente mala si el editor debe revisar el cubo de basura o manipularlo de alguna manera antes de hacer el pegado. Había disponible una instrucción para agrandar el cubo de basura, pero se perdió de alguna forma entre los implementadores de Gypsy y los editores, ya que ninguno de ellos sabía de su existencia.

Entonces tenemos que la primera implementación del portapapeles fue realmente transformar la instrucción borrar+buffer de seguridad (a modo de edición no destructiva que, como dijo Tesler, ya existía en otros sistemas) en la papelera, y que la instrucción cortar ha sido malentendida por bastante gente desde el mismo momento de su concepción; según el documento sobre Gypsy, debido a la poca visibilidad del 'cubo de basura'.

En la siguiente iteración del trabajo de Tesler y compañía (Lisa, ya en Apple), las funciones de edición no destructivas probadas en Gypsy se separaron en tres funciones que han permanecido hasta la actualidad sin demasiados cambios:

  • La instrucción de deshacer, que se usaba principalmente dentro de las aplicaciones, y también era deshacible con lo que además funcionaba como rehacer y, evidentemente, sólo permitía un nivel de marcha atrás. Deshacer no funcionaba con el sistema de archivos más allá de las operaciones con el texto de los nombres de los documentos.
  • La papelera propiamente dicha que, al igual que hoy en día, sólo estaba disponible para el sistema de archivos: el contenido borrado de las aplicaciones no era recuperable salvo con la instrucción de deshacer. Y el espacio para archivos era limitado, borrándose completamente los más antiguos cuando llegaban nuevos y se rebasaba el límite.
  • Un portapapeles parecido a las implementaciones actuales, donde la única forma de modificar su contenido es a través de las instrucciones cortar, copiar y pegar de cada aplicación. Además el sistema incluía un visor del portapapeles con su propio icono en el escritorio desde el 1º momento. Este sistema no permitía cortar, copiar ni pegar archivos en el explorador de archivos mediante las mismas instrucciones que el resto de aplicaciones y, al igual que la función de deshacer, actuaba sobre el texto de los nombres de los documentos. Para copiar archivos había dos modos de hacerlo: duplicar+arrastrar, o copiar una referencia+pegar, y para moverlos se hacía en 2 pasos copiando y borrando, o se arrastraban con el ratón.

Todo esto y más podéis probarlo vosotros mismos en cualquier ordenador de hoy en día con el emulador LisaEm, y con las ROMs de Lisa Write y del Lisa Office System, así que no me extenderé más.

Implementaciones actuales de cortar (y pegar)

Después de Lisa, el portapapeles y la papelera no han cambiado prácticamente. Aún así voy a repasar cómo parece que se comporta la instrucción de cortar según varias implementaciones actuales en diversas aplicaciones.

  • Implementación genérica en la mayoría de programas (textedit/notepad/word/pages, gedit/kate, photoshop/gimp, audacity, etc) tanto en Windows, OS X, como freedesktop
    cortar = copiar al portapapeles
           + borrar el original
    pegar = copia lo que haya en el portapapeles al documento actual
  • Implementación particular de los exploradores de archivos en Windows, y escritorios basados en freedesktop
    cortar = copiar al portapapeles
           + marcar
    pegar = pegar
          + borrar el original
  • Implementación particular de Finder (explorador de archivos de OS X)
    cortar = ∄ (está desactivado)

Además de estas, me gustaría destacar una variante interesante que también he visto:

  • Implementación particular en varias hojas de cálculo (MS-Excel, OpenOffice.org <v3.0 , Google Spreadsheets) para los valores en las casillas de las tablas
    cortar = copiar al portapapeles
           + marcar
    pegar = borrar el original
          + copia lo que haya en el portapapeles al documento actual
          + actualizar formulas si es el primer pegado desde que se cortó.
  • Implementación particular en Numbers (hoja de cálculo de Apple) para los valores en las casillas de las tablas
    cortar = copiar al portapapeles
           + borrar el original
    pegar = copia lo que haya en el portapapeles al documento actual (no actualiza formulas)
    
    marcar para desplazar = marcar
    desplazar = mover a la nueva posición lo que está marcado
              + actualizar formulas

Probablemente haya alguna más, pero tampoco voy a extender esto más, que ya me está quedando muy largo.

Conclusión

¿Cómo es posible que tanta gente lo esté haciendo tan mal?.

A ver, la idea de cortar y pegar que parte de la forma de mover las cosas en el "mundo analógico" anterior al ordenador: para desplazar un texto, si no tienes un ordenador, tienes que cortar de algún lado con unas tijeras, y eso implica una destrucción que es físicamente evidente pero aceptable ya que lo que normalmente se recorta no son originales (pensando en el sistema de fotocomposición con el que había trabajado Tesler). Pero si en un ordenador se puede representar el acto de mover de modo coherente, eliminando la capacidad destructiva de cortar (sobre todo siendo tan importante evitar la pérdida de información) y evitando redundancia, ¿Por qué se mantiene una orden destructiva entre un puñado de otras ordenes inofensivas? (especialmente cuando los sistemas actuales ya no están exclusivamente ligados al entorno de edición que las generó originalmente).

Si me preguntan a mi, yo eliminaría por completo la orden de cortar de cualquier rincon del sistema y, si de verdad hay que poner algo en su lugar, pondría algo parecido a Numbers: una orden de 'Marcar/Desmarcar para mover' y una nueva orden 'Mover ítem(s) marcado(s)' (tal vez también haga falta otra para Desmarcar todo, habría que mirarlo), tanto en los administradores de archivos, como en el resto de programas. Nadie debería usar 'mover' como sinónimo de 'borrar', ni a propósito, ni accidentalmente (aunque quitar 1 entrada de menú para poner 3 en su lugar, tal vez sea un poco demasiado, ya digo que habría que estudiarlo más a fondo, por que la implementación de la hoja de cálculo de Apple tampoco me acaba de convencer).

No se si a estas alturas, Microsoft, Apple, o Freedesktop se van a poner a revisar el concepto y su implementación, aunque por lo pronto, creo que Apple va en una dirección aceptable con su implementación en Numbers, que espero extienda a otras aplicaciones. De momento seguiremos trabajando con la fuerza de la costumbre, esperando que algún día alguien la anule.

4 comentarios:

  1. Yo opino que la implementación actual de "Cortar" tiene bastante sentido.

    El concepto de "cortar" para todo el mundo y para todos los programas es indiscutible:
    Cortar = copiar + borrar el original

    Cortar está definido por esas dos acciones y en ese orden en todos los programas que lo implementan. El tema, si te das cuenta, es cuando ocurre lo de "borrar el original". Que según el elemento que se está cortando sea texto, imágenes o archivos varía lo de "borrar el original".

    Cuando cortas un texto en un editor, dado que el consumo de memoria es minimo, el texto se borra inmediatamente y se copia a un area especial de memoria (como pueda ser el portapapeles).

    Por otro lado, en el caso del sistema de archivos, al cortar se marca el archivo como copiado y no se borra el original hasta que se pulsa pegar (el conjunto de la acción "cortar-pegar" es equivalente a "mover").

    Si te fijas, en el sistema de archivos se marca como seleccionado y no se borra porque un archivo en el sistema es algo muy valioso y si la acción de "borrar el original" ocurriera al pulsar "Cortar" podriamos perder el archivo (poco deseable). Por eso sólo ocurre cuando pulsas el botón de pegar, que es justo cuando el programa tiene la información necesaria para saber dónde lo quieres mover.

    Por otra parte, ¿te has dado cuenta que cuando "cortas" un texto, puedes pegarlo varias veces, y sin embargo cuando "cortas" un archivo, sólo lo puedes pegar una vez?

    ResponderEliminar
  2. """
    Yo opino que la implementación actual de "Cortar" tiene bastante sentido.
    """

    Sí, se puede perfectamente racionalizar el por qué es inconsistente con el resto del sistema, pero eso no hace que deje de ser inconsistente.

    """
    El concepto de "cortar" para todo el mundo y para todos los programas es indiscutible:
    Cortar = copiar + borrar el original
    """

    Exacto, la mayoría de las implementaciones son como dices, pero hay 2 excepciones que he comentado arriba: la de los exploradores, y las de las hojas de cálculo (la v3 de OO.o lo ha cambiado [al menos en Mac], pero creo que Excel la mantiene [no lo
    puedo comprobar ahora], y Google Docs también).

    También estamos de acuerdo en que en todos los exploradores es peligroso mantener esa implementación por que las consecuencias de un accidente son más graves que dentro del archivo (mismo efecto a distinto nivel de granularidad = distintas consecuencias). Por eso en los exploradores de win+lin han decidido generar una inconsistencia cambiando la forma de operar, y en osx han decidido desactivar la instrucción completamente para no ser inconsistente (al fin y al cabo, cada uno elige las inconsistencias que quiere, y Apple tiene las suyas en otras partes del sistema, pero no aquí).

    El caso es que la idea en el fondo de todas las implementaciones es la de mover: nadie usa cortar para borrar (vale, nadie que yo conozca :) ), sino para mover. La gente que quiere borrar, borra con la instrucción de borrar, nadie hace cortar A + cortar B para borrar A, y sin embargo es lo que sucede (otra vez: salvo en el explorador y hojas de cálculo). Además, en el terminal tampoco existe nada parecido (que yo sepa, ni mv ni ren borran nada en ningún sistema de archivos).

    Lo que quiero decir es que en el origen cortar tenía una semántica apropiada: en fotocomposición copiar, cortar, y pegar son literalmente eso que indica la semántica de los verbos, al trabajar siempre con copias no hay peligro, y es imperativo cortar para mover texto; pero hoy en día se mantiene nada más que por costumbre.

    Creo yo que habría que plantearse refactorizarle la etiqueta para que se ajuste a la intención de uso que se le da normalmente (que es mover), igual que se suele cambiar el nombre en algunas funciones cuando se refactoriza código, ¿no?.

    ResponderEliminar
  3. Si está claro que cuando uno le quiere ver sentido a una cosa se la ve (lo digo por mi comentario). Lo que está claro es que el sentido de cortar es "ranzonable", si no no sería una pieza básica de tantos programas hoy día.

    Puestos a razonar sobre un cambio más consistente en todos los programas, dado que estoy de acuerdo contigo en que al final el concepto de "cortar X + pegar Y" es el equivalente a "mover de X a Y", y que nadie quiere cortar para perder datos, y teniendo en cuenta que "copiar X + pegar Y" es el equivalente a "copiar X en Y", propondría los siguientes comandos:

    - Seleccionar
    - Copiar
    - Mover

    Donde "Seleccionar" es el equivalente al "copiar" y al "cortar" actuales, es lo que se pulsa según la acción que se desee realizar. Después si se pulsara sobre "Copiar" cogería el objeto seleccionado y lo copiaria, mientras que si se pulsara sobre "Mover" se cogeria el objeto seleccionado y se movería al destino.

    El problema ahora, es que se utilizaría la misma nomenclatura que la actual para hacer algo con un comportamiento totalmente distinto (lo digo por usar la palabra "copiar"). Esto sería una patada en la boca en cuanto a la usabilidad, pero creo que esta forma sería más consistente incluso que la que has puesto que utiliza el Numbers en mac.

    Incluso quedaría más claro de esta forma:
    - Seleccionar
    - Copiar Aquí
    - Mover Aquí

    Así se entiende mejor, y se evita el conflicto con el concepto actual del botón "copiar".

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.