L'imbarazzante inconveniente della pubblicazione prematura

Sono apparentemente affetto dal disturbo del “messaggio prematuro” in varie app non focalizzate sulla chat.

Principalmente email (Gmail) e Discourse.

Quello che succede è che scrivo il mio messaggio e lo invio accidentalmente. Questo inconveniente accade troppo spesso per i miei gusti, ed è probabilmente dovuto a una scorciatoia da tastiera, come Ctrl + Invio, o (forse più comunemente?) Tab ↹ seguito da Invio.

Riesco a gestirlo su Gmail: c’è una breve finestra in cui puoi annullare l’invio dell’email. Evviva! :raising_hands:
Per evitare completamente di inviare il mio post mentre sto scrivendo, non compilo il campo del destinatario. Lo faccio per ultimo, appena prima di inviare l’email.

Ma su Discourse, per i messaggi non privati, non è possibile. Ho provato a rimuovere la categoria predefinita dal selettore di Categoria, in modo da incorrere probabilmente in un messaggio “la categoria non può essere vuota” quando invio il mio post, ma ahimè, non ci riesco.

È imbarazzante inviare prematuramente un argomento o una risposta. Posso eliminarlo subito, ma il contenuto rimane visibile agli altri (devono solo cliccare sull’icona di modifica) perché questo è il comportamento predefinito di Discourse. E non posso completare il contenuto mentre è eliminato, per annullare l’eliminazione in seguito.

Alla fine, o lascio il mio post incompleto (di solito nel mezzo di una frase o di una parola :woozy_face:) e lo modifico pazientemente, cosa che non mi piace perché sono lento anche a scrivere, oppure lo elimino e scrivo un nuovo argomento/post invece.

Dato che succede spesso con messaggi lunghi, o quelli su cui devo riflettere molto, sarei felice di avere un’icona a forma di lucchetto :locked_with_pen: disattivabile che impedisca completamente l’invio del messaggio.

Non sto suggerendo in particolare una funzionalità di Discourse per questo… A meno che non succeda a molti utenti :smile:

Si tratta più di condividere questa esperienza, l’imbarazzo che ne consegue per l’invio prematuro in Discourse, raccogliere le opinioni degli altri membri e condividere idee per prevenirlo.

Per quanto mi riguarda, anche uno userscript farebbe al caso mio. Purtroppo, non so come impedire alla scorciatoia da tastiera di Discourse di inviare un post, e nemmeno l’IA lo sa.
Modifica: vedi The awkward mishap of premature posting - #10 by Canapin

Siete affetti dall’invio prematuro?

  • No
0 voters

Vorreste poter “bloccare” un compositore in Discourse?

  • Sì (integrato)
  • Sì (di terze parti)
  • No, mi piace vivere pericolosamente
0 voters

Non vedo l’ora di sentire i vostri pensieri!

5 Mi Piace

Anch’io — quando uso il touchscreen. Molto fastidioso.

2 Mi Piace

Questo è super riconoscibile. Succede anche a me in Chat[1]. A volte desidererei un popup di conferma o una finestra di 10 secondi per eliminare definitivamente.


  1. ovvero, chat in Discourse ↩︎

4 Mi Piace

La pubblicazione prematura non mi capita molto spesso (sono sul desktop il 99% delle volte), ma capisco l’imbarazzo. Avrebbe senso dare all’utente un breve periodo di tempo per nascondere il suo post per ulteriori modifiche, magari solo se non ci sono state risposte?

Modifica: ovviamente questo non nasconderebbe comunque la cronologia delle modifiche… :sweat_smile:

2 Mi Piace

Lo rispetto, ma non lo sperimento. Preferisco di gran lunga il periodo di grazia per la modifica, poiché posso rileggere e correggere quanto voglio, e una volta che un post importante e corposo è pubblicato troverò ancora errori. La modifica nasconde bene i miei crimini.

Gusti diversi per errori diversi.

1 Mi Piace

Utilizzo un editor esterno per compilare tutti i campi del sito web un po’ lunghi, il che include ovviamente i post di Discourse. Nell’editor ho tutte le mie solite scorciatoie da tastiera dell’editor per programmatori, quindi è migliore sotto quasi ogni aspetto. Solo quando sono soddisfatto che il testo è completo, uso copia-incolla per trasferirlo al compositore e poi premo il Grande Pulsante.

Avete considerato questo flusso di lavoro?

2 Mi Piace

È interessante vedere esperienze così diverse. Non pubblico mai per sbaglio da smartphone, solo da desktop.

Sì, lo uso in altri contesti. Scrivo prima il mio messaggio su Google Docs, prima di copiarlo e incollarlo nell’applicazione di messaggistica di destinazione.

Ma su Discourse è un po’ fastidioso quando devo aggiungere immagini, citazioni o usare funzionalità specifiche di Discourse nel mio post.


Scrivo una bozza da diversi giorni, ed è sempre un’esperienza un po’ stressante ogni volta che ci lavoro, devo stare costantemente molto attento a non inviarla. :lolsob:

1 Mi Piace

Quando scrivo un post più lungo, uso una soluzione simile. Ma dato che sto cercando di smettere di usare Google ecc. e lavoro principalmente su iPad, il mio strumento è l’app Ulysses. Principalmente perché supporta markdown. Un tipo, la sintassi non è totalmente identica a quella usata da Discourse.

Ho sentimenti contrastanti a riguardo. Da un lato non mi piace dover separare le app (ma lo uso anche per WordPress; creare contenuti lì è doloroso al giorno d’oggi), ma allo stesso tempo ho un ambiente un po’ più robusto e centralizzato.

Questa è una domanda importante per me? No, è solo fastidioso. Quando Discourse ha cambiato lo stile per lasciare un lavoro non finito, è stato più catastrofico e ho perso troppe bozze a causa della memoria muscolare :zany_face:

1 Mi Piace

Una soluzione potrebbe essere comporre un messaggio privato a te stesso che funga da bozza. Anche inviarlo accidentalmente non causa danni poiché è visibile solo a te :slight_smile:

2 Mi Piace

Ecco uno userscript che aggiunge un blocco attivabile/disattivabile sul compositore.
Disabilita anche le scorciatoie da tastiera e funziona anche su dispositivi mobili.

IXlc8u1sm4

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

Aggiungi o rimuovi le righe @match per abilitarlo sui forum che utilizzi.

// ==UserScript==
// @name         Discourse Composer Safety Lock
// @namespace    https://meta.discourse.org
// @version      2.0
// @description  Padlock attivabile/disattivabile sul compositore per prevenire l'invio accidentale dei post
// @author       Canapin & AI
// @match        https://meta.discourse.org/*
// @grant        none
// @license MIT
// ==/UserScript==
(function () {
  "use strict";
 
  let locked = false;
 
  // Listener in fase di cattura su #reply-control per bloccare Ctrl/Cmd/Alt+Invio
  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");
      }
    });
  }
 
  // Blocco del click in fase di cattura sul pulsante di salvataggio
  document.addEventListener(
    "click",
    function (e) {
      if (!locked) return;
      if (e.target.closest(".save-or-cancel .btn-primary")) {
        e.stopImmediatePropagation();
        e.stopPropagation();
        e.preventDefault();
      }
    },
    true
  );
 
  // Blocco del keydown in fase di cattura per Invio sul pulsante di salvataggio focalizzato
  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 Mi Piace

Questo non è un problema che ho di solito. Non so perché! Mi è capitato, tuttavia, di inviare un’email per errore — più spesso, devo dire, ho un dubbio subito dopo aver inviato l’email (destinatario sbagliato? Informazioni mancanti?) che sono molto felice di poter dissipare con il link “annulla invio” che Gmail offre per pochi secondi. Non capita spesso, però.

Quindi, forse qualcosa di simile quando si pubblica avrebbe senso. Pochi secondi per premere il pulsante “ops, questo non doveva uscire così” dopo aver pubblicato.

Faccio questo spesso a causa delle scorciatoie shift-invio ctrl-invio.

Non è un grosso problema, modifico semplicemente il post.

Per le cose sensibili, compongo prima in un editor separato e incollo nell’applicazione prima di inviare.

Ho usato lo userscript che ho pubblicato su meta e mi alleggerisce davvero la mente quando scrivo!

Ora desidero (intendo più di prima) che ci sia una funzionalità integrata del genere :face_with_tongue:

Ma vedo che il designer ha parlato!

image

:laughing:

1 Mi Piace

Ho preparato un semplice TC che fa questo, con un pulsante di blocco/sblocco nel compositore.

Pubblicherò a breve l’argomento su Meta.

1 Mi Piace