1 pontos por GN⁺ 5 시간 전 | 1 comentários | Compartilhar no WhatsApp
  • O recortar e colar tradicional trata a movimentação de texto como duas operações separadas, tornando impossível um desfazer completo e alterando desnecessariamente o fluxo do documento
  • Mesmo ao desfazer o recorte, o conteúdo da área de transferência sobrescrito não é restaurado, e mesmo usando um gerenciador de clipboard não é possível reverter de uma vez todas as mudanças causadas por um único atalho
  • Como o texto some imediatamente e o documento sofre reflow, é preciso reencontrar o ponto onde colar, e desfazer toda a movimentação exige pelo menos dois comandos de desfazer
  • O Ghost Cut do editor de romances Ishmael usa Ctrl+X para esmaecer e desativar a seleção e, ao colar, removê-la da posição original e movê-la para a nova posição em uma única operação atômica
  • O Ghost Cut não sobrescreve a área de transferência e permite desfazer toda a movimentação de uma só vez, mas para fazer apenas o recorte no modo tradicional é preciso copiar e depois pressionar Backspace

Como o recortar/colar tradicional funciona

  • Recortar/colar é a combinação de recortar, que remove o texto selecionado do documento e o coloca na área de transferência, e colar, que o insere em outro lugar
  • Embora seja percebido como uma única ação de mover texto de um lugar para outro, na prática os editores tratam isso como duas operações separadas

Três falhas do recorte tradicional

  • Não dá para restaurar a área de transferência com desfazer

    • Depois de recortar, ao pressionar Ctrl+Z ou Command+Z, o texto no documento é restaurado, mas o conteúdo da área de transferência que foi sobrescrito não volta
    • Mesmo usando um gerenciador de clipboard, isso ainda não significa reverter de forma limpa todas as mudanças causadas por um único atalho
  • Apagar o texto original reorganiza o documento imediatamente

    • No instante em que o texto é recortado, o conteúdo restante sobe e as linhas e posições do documento são reorganizadas
    • Na maioria dos casos, o objetivo de recortar/colar é mover texto, mas a tela muda antes mesmo de você encontrar o ponto de colagem, obrigando a procurar de novo o local
    • O custo pode ser pequeno, mas gera uma carga cognitiva desnecessária
  • A movimentação não é tratada como uma operação atômica

    • Ao desfazer a colagem, só o texto inserido na nova posição é removido; para restaurá-lo à posição original é preciso desfazer mais uma vez
    • Se houve edições entre o recorte e a colagem, como criar um novo parágrafo, é preciso desfazê-las uma a uma até chegar ao recorte original
    • Conceitualmente é uma única movimentação de texto, mas no histórico de edição ela fica dividida em várias etapas

Como o Ghost Cut funciona

  • No Ishmael, ao pressionar Ctrl+X, o texto selecionado fica esmaecido e em estado desativado, mas continua no documento
    • Essa área não pode ser clicada, e o cursor a ignora
    • Nesse momento, nada é salvo na área de transferência e nenhuma ação de desfazer é criada
    • Ao pressionar Escape, o texto volta ao estado editável
  • Ao pressionar Ctrl+V ou Command+V, a área esmaecida é removida da posição original e movida para a posição atual do cursor
    • Toda a movimentação é uma única operação atômica, então pode ser desfeita com um único comando
    • É parecido com a forma como o Excel mostra células recortadas esmaecidas, mas é difícil encontrar a mesma abordagem em editores de texto
  • Se for necessário o comportamento tradicional de recortar, basta copiar com Ctrl+C ou Command+C e depois apagar o original com Backspace
  • Em editores de código, o problema de reflow do documento é menor, então a necessidade é relativamente mais baixa, mas se isso existisse no VSCode, valeria a pena ativar e usar

1 comentários

 
GN⁺ 5 시간 전
Comentários no Hacker News
  • Espero que não atrapalhem a seleção/colagem do X11. Hoje em dia, para usar como antes, parece que toda vez depende da sorte saber se é preciso segurar Shift
    Fazer copiar e colar usar mouse e teclado ao mesmo tempo, no esquema selecionar → Ctrl+C → clicar → Ctrl+V, é bárbaro, e apps modernos estão estragando o que o X11 implementou direito

  • Recortar e colar são três operações; recortar é composto de copiar e apagar. Assim como desfazer não reverte a cópia, também não deveria reverter o conteúdo da área de transferência de um recorte, e eu uso todo dia o fluxo de recortar, desfazer e depois colar várias vezes
    Fico em dúvida sobre o que deveria acontecer ao colar várias vezes com o Ghost Cut, se o editor teria de ler a área de transferência sem nem ter colado para fazer rollback, e se, caso houvesse uma chave secreta ali, isso a exporia a extensões como o Copilot
    No explorador de arquivos, recortar é na verdade um mover em que se definem origem e destino em sequência; não existe uma área de transferência do sistema de arquivos, e também é raro precisar colar em vários lugares. Não acho a semântica proposta ruim, mas seria mais elegante como um recurso independente, com atalho próprio, que deixa o texto esmaecido e depois o move de forma atômica

    • Recortar e colar deveriam ser uma única operação atômica. Se quiser colar várias vezes, basta copiar
      Desfazer um recorte sem reverter os efeitos colaterais é um defeito fundamental; desfazer não deveria voltar só alguns passos conforme a condição, e sim restaurar o sistema ao estado anterior
    • É razoável propor um recurso de mover atômico conveniente em editores de texto, mas pessoalmente não vejo tanta necessidade
    • Esse esquema de deixar o texto esmaecido e movê-lo para o lugar desejado é, na prática, igual ao arrastar e soltar do macOS
    • Não entendo por que criticam o fluxo do macOS Finder de copiar um arquivo com ⌘+C e depois, no destino, mover com ⌘+⌥+V ou copiar com ⌘+V. Decidir a ação no destino é o mais intuitivo
      O Windows também deixa o arquivo recortado esmaecido e o move ao colar, evitando perda de arquivos, mas esse bom UX não recebe reconhecimento suficiente
    • Se você cola várias vezes, talvez na verdade quisesse copiar. Nenhum modelo mental é absolutamente correto; se recortar é copiar e apagar, você pode copiar e apagar manualmente, e no Vim e no Emacs basta apagar
  • Ghost Cut é quase igual ao recortar/colar do Excel e talvez nem use a área de transferência. Softwares comuns veem isso como cópia e colagem com um apagamento acrescentado, mas o autor e o Excel veem como mover conteúdo dentro do documento
    O Ghost Cut tem a restrição de que o destino precisa ser exatamente um e estar no mesmo programa ou documento. Ainda assim, se o recorte atual já é no fim uma variação de copiar e colar, então copiar e depois Backspace produz quase o mesmo efeito, então não parece haver tanta perda em trocar para Ghost Cut

    • Em IDEs, costumo deixar o cursor em qualquer ponto da linha sem selecionar nada e apertar recortar para apagar a linha inteira. É um atalho fácil de usar com a mão esquerda, e o Ghost Cut estraga esse uso
  • O problema não é um defeito do recorte padrão, e sim que a UX dele não bate com o modelo mental pessoal do autor. Se alguém recortou por engano, em geral queria copiar, então faz sentido manter o texto na área de transferência
    A maioria entende desfazer como desfazer mudanças no arquivo, não como reverter ao mesmo tempo o estado do arquivo e do sistema operacional. Vale considerar um recorte configurável, mas isso parece mais uma alternativa para uma minoria do que algo melhor para a maioria

    • Não vejo esse comportamento como defeito, mas respeito o fato de terem apontado as desvantagens e proposto uma alternativa. Eu uso com bastante frequência esse comportamento de preservação da área de transferência em que recorto algo, coloco na área de transferência, desfaço só a alteração e depois uso aquele conteúdo
    • Prefiro recortar ou copiar um texto, desfazer alguns passos e então colá-lo em um novo lugar. Do jeito proposto, isso adiciona etapas intermediárias, como colar em um arquivo temporário antes de desfazer
  • Recortar é uma operação em que o app move texto para a área de transferência, que é uma aplicação separada. Assim como ninguém espera que, ao editar o app A e depois desfazer no app B, o A também mude, eu também não esperaria que desfazer afetasse a área de transferência
    O Ghost Cut é parecido com o Excel, e por isso me pega de surpresa com frequência. No Excel, às vezes você copia células, faz uma edição e depois tenta colar, mas a cópia não era o valor em si, e sim uma referência à seleção; se aquela área foi alterada ou desfeita, acaba não sendo possível colar nada

  • Se fosse projetado do zero, a crítica ao recortar/colar atual é razoável. Mas, como recortar e colar são duas operações, a ideia de que um único desfazer deveria reverter as duas soa estranha
    É parecido com uma escolha no estilo RISC/CISC entre ter um único comando CUTANDPASTE ou dois, CUT e PASTE

  • Não se deve mudar o comportamento esperado. O Excel funciona de modo parecido, mas é muito incômodo justamente porque não faz do jeito que eu quero
    Recortar deveria ir imediatamente para a área de transferência para também poder ser colado em outros programas, e não vale quebrar a expectativa e o fluxo normal da maioria para melhorar algo para uma minoria

    • Passa a haver muitas condições de borda, como se o texto não colado continua esmaecido, ou se ao copiar um novo texto em outro app será colado o texto esmaecido ou o novo conteúdo da área de transferência
      Se Ctrl+X não mexer na área de transferência, também não dá para colar em outro programa. O ganho é pequeno demais perto das dores de cabeça que surgem quando se sai do fluxo ideal
  • É uma perspectiva válida, mas difícil concordar. Antes, eu preferia que resolvessem o sequestro de cópia, quando um site ou app, ao tentar ajudar, coloca algo completamente diferente do item selecionado
    Também não quero que o navegador acrescente https:// arbitrariamente ao copiar uma URL

  • O Windows Explorer também se comporta de forma parecida ao recortar arquivos, mas também registra na área de transferência
    O Ghost Cut, do mesmo modo, só estaria quebrado de um jeito diferente do comportamento atual, embora combine mais com o gosto do autor. Ainda assim, é uma ideia interessante que faz pensar em como outros apps teriam evoluído se recortar/colar não tivesse sido criado como um recurso de sistema e entre aplicativos

  • Acho que eu não gostaria desse esquema. O Excel é o app que eu mais odeio para recortar, copiar e colar entre os que se comportam de forma parecida

    • Considero que o Excel, apesar de alguns defeitos, é muito bem projetado para a maioria dos usuários. Ele tem não só conteúdo de célula, mas também referências de célula, então recortar e copiar funcionam de formas sutilmente diferentes
      Recortar normalmente é um movimento atômico concluído com uma única colagem, então todas as referências relacionadas são atualizadas, independentemente de estarem dentro ou fora da área movida e de serem relativas ou absolutas. É por isso também que o indicador some depois de colar e não dá para colar duas vezes
      Já ao copiar, só as referências relativas entre as células copiadas são atualizadas; referências absolutas ou referências de células não copiadas não mudam, e dá para colar várias vezes. Quando se considera até referências de intervalo, é impressionante que isso funcione de forma tão previsível, e a restrição de a operação ser cancelada ao modificar a área original também é compreensível. Portanto, no Excel, copiar e depois apagar não é a mesma coisa que recortar
    • No Excel, parece que ele sempre escolhe a pior forma possível de copiar, recortar e colar para a minha intenção no momento. Na prática talvez não seja assim, mas pessoalmente acho muito pouco intuitivo em vários aspectos
    • No Excel, primeiro copio e colo, e depois apago o original. O recortar/colar comum quebra fórmulas que referenciam o local onde será colado
      Deveriam ter mantido o recorte padrão e atribuído esse movimento especial a Ctrl+Shift++
    • Em metade das vezes isso nem funciona direito