O constrangedor acidente de postagem prematura

Aparentemente, sou afetado pela doença de “postagem prematura” em vários aplicativos focados em comunicação que não são de bate-papo.

Principalmente e-mails (Gmail) e Discourse.

O que acontece é que escrevo minha mensagem e a envio acidentalmente. Esse inconveniente acontece com muita frequência para o meu gosto, e provavelmente é devido a um atalho de teclado, como Ctrl + Enter, ou (talvez mais comumente?) Tab ↹ seguido de Enter.

Eu consigo gerenciar isso no Gmail: há uma pequena janela em que você pode cancelar o envio do e-mail. Viva! :raising_hands:
Para evitar completamente o envio da minha postagem enquanto estou escrevendo, não preencho o campo de destinatário. Eu faço isso por último, pouco antes de enviar o e-mail.

Mas no Discourse, para não mensagens privadas, isso não é possível. Tentei remover a categoria padrão do seletor de Categoria, então provavelmente enfrentaria uma mensagem de “a categoria não pode ficar em branco” ao enviar minha postagem, mas, infelizmente, não consigo.

É embaraçoso enviar um tópico ou uma resposta prematuramente. Posso excluí-la imediatamente, mas o conteúdo permanece visível para os outros (eles só precisam clicar no ícone de edição), pois este é o comportamento padrão do Discourse. E não consigo completar o conteúdo enquanto ele está excluído para reverter a exclusão depois.

No final, ou mantenho minha postagem incompleta (geralmente no meio de uma frase ou palavra :woozy_face:) e a edito pacientemente, o que não gosto porque também sou lento para escrever, ou a excluo e escrevo um novo tópico/postagem.

Como isso acontece frequentemente em mensagens longas, ou naquelas nas quais preciso refletir muito, ficaria feliz em ter um ícone de cadeado :locked_with_pen: alternável que impeça completamente o envio da mensagem.

Não estou sugerindo especificamente um recurso do Discourse para isso… A menos que aconteça com muitos usuários :smile:

É mais sobre compartilhar essa experiência, o subsequente constrangimento de envio prematuro no Discourse, obter as opiniões de outros membros e compartilhar ideias para evitar isso.

Quanto a mim, até um userscript resolveria. Infelizmente, não sei como impedir que o atalho de teclado do Discourse envie uma postagem, e a IA também não sabe.
Edição: veja The awkward mishap of premature posting - #10 by Canapin

Você é afetado por postagem prematura?

  • Sim
  • Não
0 voters

Você gostaria de poder “travar” um composer no Discourse?

  • Sim (integrado)
  • Sim (terceiros)
  • Não — Gosto de viver no limite
0 voters

Ansioso para ouvir seus pensamentos!

5 curtidas

Eu também — ao usar a tela sensível ao toque. Muito irritante.

2 curtidas

Isto é super identificável. Acontece comigo no Chat[1] também. Às vezes, eu gostaria de um pop-up de confirmação ou uma janela de 10 segundos para excluir permanentemente.


  1. Isto é, chat no Discourse ↩︎

4 curtidas

A postagem prematura realmente não acontece comigo (estou no desktop 99% do tempo), mas eu entendo o constrangimento. Faria sentido dar ao usuário um curto período de tempo para ocultar sua postagem para edição posterior – talvez apenas se não houver respostas?

Edição: é claro que isso ainda não ocultaria o histórico de edições… :sweat_smile:

2 curtidas

Eu respeito, mas não vivencio. Eu prefiro muito o período de carência para edição, já que posso reler e revisar quantas vezes eu quiser, e depois que uma postagem grande e importante é publicada, eu ainda estarei encontrando erros. A edição esconde bem meus crimes.

Diferentes pinceladas para diferentes erros de pincelada.

1 curtida

Eu uso um editor externo para preencher quaisquer campos de site um pouco longos, o que inclui, é claro, postagens no Discourse. No editor, tenho todas as minhas combinações de teclas habituais de editor de programador, então é melhor em todos os sentidos. Só quando estou satisfeito que o texto está completo eu uso copiar-colar para transferi-lo para o compositor e, em seguida, aperto o Grande Botão.

Vocês consideraram este fluxo de trabalho?

2 curtidas

É interessante ver muitas experiências diferentes. Eu nunca publico por engano no smartphone, apenas no desktop.

Sim, eu uso em outros contextos. Eu primeiro escrevo minha mensagem no Google Docs, antes de copiar e colar no aplicativo de mensagens de destino.

Mas no Discourse é um pouco chato quando preciso adicionar imagens, citações ou usar recursos específicos do Discourse na minha postagem.


Tenho escrito um rascunho por vários dias, e é sempre uma experiência um pouco estressante cada vez que trabalho nele, preciso ter constantemente o cuidado extra de não enviá-lo. :lolsob:

1 curtida

Quando estou escrevendo uma postagem mais longa, estou usando uma solução semelhante. Mas como estou tentando parar de usar o Google etc. e trabalho principalmente no iPad, minha ferramenta é o aplicativo Ulysses. Principalmente porque ele suporta markdown. Um tipo, com sintaxe não totalmente igual à que o Discourse usa.

Tenho sentimentos mistos sobre isso. Por um lado, não gosto quando preciso separar aplicativos (mas também o uso para o WordPress; criar conteúdo lá é doloroso hoje em dia), mas, ao mesmo tempo, tenho um ambiente um pouco mais robusto e centralizado.

Isso é uma questão maior para mim? Não, é apenas irritante. Quando o Discourse mudou o estilo de como deixar um trabalho não finalizado, foi mais catastrófico e perdi muitos rascunhos por causa da memória muscular :zany_face:

1 curtida

Uma solução pode ser compor uma MP para você mesmo que sirva como rascunho. Mesmo enviá-lo acidentalmente não causa danos, pois só é visível para você :slight_smile:

2 curtidas

Aqui está um userscript que adiciona um cadeado ativável/desativável no compositor.
Ele também desativa os atalhos de teclado e funciona no celular também.

IXlc8u1sm4

\u003chttps://greasyfork.org/en/scripts/566254-discourse-composer-safety-lock\u003e

Adicione ou remova linhas @match para ativá-lo nos fóruns que você usa.

// ==UserScript==
// @name         Discourse Composer Safety Lock
// @namespace    https://meta.discourse.org
// @version      2.0
// @description  Cadeado de segurança ativável/desativável no compositor para evitar o envio acidental de postagens
// @author       Canapin & AI
// @match        https://meta.discourse.org/*
// @grant        none
// @license MIT
// ==/UserScript==
(function () {
  "use strict";
 
  let locked = false;
 
  // Listener na fase de captura em #reply-control para bloquear Ctrl/Cmd/Alt+Enter
  function attachBlocker(replyControl) {
    if (replyControl._safetyLockAttached) return;
    replyControl._safetyLockAttached = true;
 
    replyControl.addEventListener(
      "keydown",
      function (e) {
        if (!locked) return;
        if (e.key === "Enter" && (e.ctrlKey || e.metaKey || e.altKey)) {
          e.stopImmediatePropagation();
          e.stopPropagation();
          e.preventDefault();
        }
      },
      true
    );
  }
 
  function updateButtons() {
    const rc = document.getElementById("reply-control");
    if (!rc) return;
    rc.querySelectorAll(".save-or-cancel .btn-primary").forEach((btn) => {
      if (locked) {
        btn.style.pointerEvents = "none";
        btn.style.filter = "grayscale(1) opacity(0.4)";
        btn.setAttribute("tabindex", "-1");
      } else {
        btn.style.pointerEvents = "";
        btn.style.filter = "";
        btn.removeAttribute("tabindex");
      }
    });
  }
 
  // Bloqueador de clique na fase de captura no botão de salvar
  document.addEventListener(
    "click",
    function (e) {
      if (!locked) return;
      if (e.target.closest(".save-or-cancel .btn-primary")) {
        e.stopImmediatePropagation();
        e.stopPropagation();
        e.preventDefault();
      }
    },
    true
  );
 
  // Bloqueador de tecla na fase de captura para Enter no botão de salvar focado
  document.addEventListener(
    "keydown",
    function (e) {
      if (!locked) return;
      if (
        e.key === "Enter" &&
        e.target.closest(".save-or-cancel .btn-primary")
      ) {
        e.stopImmediatePropagation();
        e.stopPropagation();
        e.preventDefault();
      }
    },
    true
  );
 
  function injectPadlock() {
    if (document.getElementById("composer-lock-btn")) return;
    const title = document.querySelector(".composer-action-title");
    if (!title) return;
 
    const btn = document.createElement("span");
    btn.id = "composer-lock-btn";
    btn.textContent = locked ? "\u{1F512}" : "\u{1F513}";
    btn.style.cssText =
      "cursor:pointer;margin-left:10px;font-size:1.1em;user-select:none;opacity:" +
      (locked ? "1" : "0.5");
 
    btn.addEventListener("click", (e) => {
      e.preventDefault();
      e.stopPropagation();
      locked = !locked;
      btn.textContent = locked ? "\u{1F512}" : "\u{1F513}";
      btn.style.opacity = locked ? "1" : "0.5";
      updateButtons();
    });
 
    title.appendChild(btn);
    updateButtons();
  }
 
  const observer = new MutationObserver(() => {
    const rc = document.getElementById("reply-control");
    if (rc && rc.classList.contains("open")) {
      attachBlocker(rc);
      injectPadlock();
      updateButtons();
    }
  });
 
  observer.observe(document.body, {
    childList: true,
    subtree: true,
    attributes: true,
    attributeFilter: ["class"],
  });
 
  const rc = document.getElementById("reply-control");
  if (rc && rc.classList.contains("open")) {
    attachBlocker(rc);
    injectPadlock();
    updateButtons();
  }
})();
5 curtidas

Este não é um problema que costumo ter. Não sei por quê! No entanto, já me aconteceu de enviar um e-mail por engano — mais frequentemente, devo dizer, tenho uma dúvida logo após enviar o e-mail (destinatário errado? Informação faltando?) que fico muito feliz em poder dissipar com o link “desfazer envio” que o Gmail oferece por alguns segundos. Não acontece com frequência, no entanto.

Então, talvez algo semelhante ao postar faria sentido. Alguns segundos para apertar o botão “ops, isso não deveria ter sido enviado assim” depois de postar.

Eu faço isso muito por causa dos atalhos shift-enter ctrl-enter.

Não é um grande problema, eu apenas edito a postagem.

Para coisas sensíveis, eu componho primeiro em um editor separado e colo no aplicativo antes de enviar.

Eu usei o userscript que postei no meta e ele realmente me tranquiliza quando escrevo!

Agora eu queria (mais do que antes) que houvesse um recurso nativo assim :face_with_tongue:

Mas eu vejo que o designer já falou!

image

:laughing:

1 curtida

Montei um TC simples que faz isso, com um botão de bloquear/desbloquear no compositor.

Postarei o tópico no Meta em breve.

1 curtida