El incómodo percance de la publicación prematura

Aparentemente, me veo afectado por la dolencia de “publicación prematura” en varias aplicaciones que no están enfocadas en el chat.

Principalmente correos electrónicos (Gmail) y Discourse.

Lo que sucede es que escribo mi mensaje y accidentalmente lo envío. Este inconveniente ocurre con demasiada frecuencia para mi gusto, y probablemente se deba a un atajo de teclado, como Ctrl + Enter, o (¿quizás más comúnmente?) Tab ↹ seguido de Enter.

Puedo manejarlo en Gmail: hay una breve ventana en la que puedes cancelar el envío del correo electrónico. ¡Genial! :raising_hands:
Para evitar por completo enviar mi publicación mientras escribo, no completo el campo del destinatario. Lo hago al final, justo antes de enviar el correo electrónico.

Pero en Discourse, para las publicaciones no privadas, no es posible. Intenté eliminar la categoría predeterminada del selector de Categoría, por lo que probablemente me encontraría con un mensaje de “la categoría no puede estar vacía” al enviar mi publicación, pero, ¡ay!, no puedo.

Es vergonzoso enviar un tema o una respuesta prematuramente. Puedo eliminarlo de inmediato, pero el contenido permanece visible para otros (solo tienen que hacer clic en el icono de editar) debido al comportamiento predeterminado de Discourse. Y no puedo completar el contenido mientras está eliminado, para revertir la eliminación después.

Al final, o mantengo mi publicación incompleta (generalmente a mitad de una oración o una palabra :woozy_face:) y la edito pacientemente, lo cual no me gusta porque también soy lento para escribir, o la elimino y escribo un nuevo tema/publicación en su lugar.

Dado que a menudo sucede con mensajes largos, o aquellos en los que tengo que pensar mucho, estaría encantado de tener un icono de candado :locked_with_pen: conmutable que evite por completo el envío del mensaje.

No estoy sugiriendo particularmente una función de Discourse para esto… A menos que le suceda a muchos usuarios :smile:

Se trata más de compartir esta experiencia, la vergüenza posterior de la publicación prematura en Discourse, obtener las opiniones de otros miembros y compartir ideas para prevenirla.

En cuanto a mí, incluso un userscript serviría. Desafortunadamente, no sé cómo evitar que el atajo de teclado de Discourse envíe una publicación, y la IA tampoco.
Edición: ver The awkward mishap of premature posting - #10 by Canapin

¿Te afecta la publicación prematura?

  • No
0 voters

¿Te gustaría poder “bloquear” un compositor en Discourse?

  • Sí (integrado)
  • Sí (de terceros)
  • No, me gusta vivir al límite
0 voters

¡Espero escuchar tus pensamientos!

5 Me gusta

Yo también, cuando uso la pantalla táctil. Muy molesto.

2 Me gusta

Esto es súper identificable. Me pasa también en el chat[1]. A veces desearía una ventana emergente de confirmación o una ventana de 10 segundos para eliminar permanentemente.


  1. Es decir, el chat en Discourse ↩︎

4 Me gusta

La publicación prematura realmente no me sucede (estoy en el escritorio el 99% del tiempo), pero puedo entender lo incómodo que es. ¿Tendría sentido darle al usuario un corto período de tiempo para ocultar su publicación para una edición posterior, quizás solo si no ha habido respuestas?

Edición: por supuesto, eso todavía no ocultaría el historial de ediciones… :sweat_smile:

2 Me gusta

Lo respeto, pero no lo experimento. Prefiero mucho el período de gracia de edición, ya que puedo releer y corregir todo lo que quiera, y una vez que se publica una publicación importante, seguiré encontrando errores. La edición oculta bien mis crímenes.

Diferentes estilos para diferentes errores.

1 me gusta

Utilizo un editor externo para rellenar cualquier campo de sitio web un poco largo, lo que por supuesto incluye las publicaciones de Discourse. En el editor tengo todos mis atajos de teclado habituales del editor de programador, por lo que es mejor en casi todos los sentidos. Solo cuando estoy satisfecho de que el texto está completo, utilizo copiar y pegar para transferirlo al compositor y luego presiono el Gran Botón.

¿Han considerado este flujo de trabajo?

2 Me gusta

Es interesante ver muchas experiencias diferentes. Nunca publico por error en el smartphone, solo en el escritorio.

Sí, lo uso en otros contextos. Primero escribo mi mensaje en Google Docs, antes de copiarlo y pegarlo en la aplicación de mensajería de destino.

Pero en Discourse es un poco molesto cuando necesito agregar imágenes, citas o usar funciones específicas de Discourse en mi publicación.


He estado escribiendo un borrador durante varios días, y cada vez que trabajo en él es una experiencia un poco estresante, necesito tener constantemente mucho cuidado de no enviarlo. :lolsob:

1 me gusta

Cuando escribo una publicación más larga, utilizo una solución similar. Pero como estoy tratando de dejar de usar Google, etc., y trabajo principalmente en el iPad, mi herramienta es la aplicación Ulysses. Principalmente porque puede usar markdown. Un tipo, con una sintaxis no totalmente igual a la que usa Discourse.

Tengo sentimientos encontrados al respecto. Por otro lado, no me gusta cuando necesito separar aplicaciones (pero también la uso para WordPress; crear contenido allí es doloroso hoy en día), pero al mismo tiempo tengo un entorno un poco más robusto y centralizado.

¿Es esta una pregunta importante para mí? No, es solo molesto. Cuando Discourse cambió el estilo de cómo dejar un trabajo no maduro, fue más catastrófico y perdí demasiados borradores debido a la memoria muscular :zany_face:

1 me gusta

Una solución podría ser redactar un mensaje privado (MP) para ti mismo que sirva como borrador. Incluso si lo envías por accidente, no causa ningún daño ya que solo es visible para ti :slight_smile:

2 Me gusta

Aquí hay un userscript que añade un bloqueo conmutar en el compositor.
También deshabilita los atajos de teclado y funciona en dispositivos móviles.

IXlc8u1sm4

https://greasyfork.org/en/scripts/566254-discourse-composer-safety-lock

Añada o elimine líneas @match para habilitarlo en los foros que utilice.

// ==UserScript==
// @name         Discourse Composer Safety Lock
// @namespace    https://meta.discourse.org
// @version      2.0
// @description  Candado conmutable en el compositor para evitar el envío accidental de publicaciones
// @author       Canapin & AI
// @match        https://meta.discourse.org/*
// @grant        none
// @license MIT
// ==/UserScript==
(function () {
  "use strict";
 
  let locked = false;
 
  // Oyente de fase de captura en #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 clics en fase de captura en el botón de guardar
  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 presionado en fase de captura para Enter en el botón de guardar enfocado
  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 Me gusta

Este no es un problema que suelo tener. ¡No sé por qué! Sin embargo, me ha pasado que envío un correo electrónico por error; más a menudo, debo decir, tengo una duda justo después de enviar el correo electrónico (¿destinatario equivocado? ¿información faltante?) que me alegra mucho poder disipar con el enlace de «deshacer envío» que Gmail ofrece durante unos segundos. Aunque no sucede a menudo.

Así que, tal vez algo similar al publicar tendría sentido. Unos segundos para pulsar el botón de «ups, eso no debería haberse enviado así» después de publicar.

Hago esto a menudo debido a los atajos de teclado de shift-enter y ctrl-enter.

No es un gran problema, simplemente edito la publicación.

Para contenido sensible, compongo primero en un editor separado y luego lo pego en la aplicación antes de enviarlo.

¡He usado el userscript que publiqué en meta y realmente me tranquiliza cuando escribo!

Ahora deseo (más que antes) que hubiera una función integrada así :face_with_tongue:

¡Pero veo que el diseñador ha hablado!

image

:laughing:

1 me gusta

He preparado un TC simple que hace esto, con un botón de bloquear/desbloquear en el compositor.

Publicaré el tema de Meta en breve.

1 me gusta