Le maladroit incident de publication prématurée

Je suis apparemment affecté par le syndrome de la « publication prématurée » dans diverses applications qui ne sont pas axées sur le chat.

Principalement les e-mails (Gmail) et Discourse.

Ce qui se passe, c’est que j’écris mon message et je l’envoie accidentellement. Ce désagrément arrive trop souvent à mon goût, et c’est probablement dû à un raccourci clavier, comme Ctrl + Entrée, ou (peut-être plus couramment ?) Tab ↹ puis Entrée.

Je peux gérer cela sur Gmail : il y a une courte fenêtre pendant laquelle vous pouvez annuler l’envoi de l’e-mail. Hourra ! :raising_hands:
Pour éviter complètement d’envoyer mon message pendant que j’écris, je ne remplis pas le champ du destinataire. Je le fais en dernier, juste avant d’envoyer l’e-mail.

Mais sur Discourse, pour les messages non privés, ce n’est pas possible. J’ai essayé de supprimer la catégorie par défaut du sélecteur de catégorie, de sorte que je devrais probablement rencontrer un message « la catégorie ne peut pas être vide » lors de l’envoi de mon message, mais hélas, je ne peux pas.

C’est embarrassant de soumettre prématurément un sujet ou une réponse. Je peux le supprimer immédiatement, mais le contenu reste visible pour les autres (il leur suffit de cliquer sur l’icône d’édition) car c’est le comportement par défaut de Discourse. Et je ne peux pas compléter le contenu pendant qu’il est supprimé, pour annuler la suppression par la suite.

En fin de compte, soit je laisse mon message incomplet (généralement au milieu d’une phrase ou d’un mot :woozy_face:) et je l’édite patiemment, ce que je n’aime pas car je suis aussi lent à écrire, soit je le supprime et j’écris un nouveau sujet/message à la place.

Comme cela arrive souvent avec les messages longs, ou ceux auxquels je dois consacrer beaucoup de réflexion, je serais heureux d’avoir une icône de cadenas :locked_with_pen: commutable qui empêche complètement l’envoi du message.

Je ne suggère pas particulièrement une fonctionnalité Discourse pour cela… À moins que cela n’arrive à de nombreux utilisateurs :smile:

Il s’agit plutôt de partager cette expérience, l’embarras qui en résulte d’une soumission prématurée dans Discourse, d’obtenir l’avis des autres membres et de partager des idées pour l’éviter.

Pour ma part, même un userscript ferait l’affaire. Malheureusement, je ne sais pas comment empêcher le raccourci clavier de Discourse d’envoyer un message, et l’IA non plus.
Edit : voir The awkward mishap of premature posting - #10 by Canapin

Êtes-vous affecté par la publication prématurée ?

  • Oui
  • Non
0 voters

Aimerez-vous pouvoir « verrouiller » un compositeur dans Discourse ?

  • Oui (intégré)
  • Oui (tiers)
  • Non — J’aime vivre dangereusement
0 voters

J’ai hâte de lire vos réflexions !

5 « J'aime »

Moi aussi — lorsque j’utilise l’écran tactile. Très ennuyeux.

2 « J'aime »

C’est super facile à comprendre. Cela m’arrive aussi dans le Chat[1]. Parfois, j’aimerais avoir une fenêtre de confirmation ou une fenêtre de 10 secondes pour supprimer définitivement.


  1. c’est-à-dire le chat dans Discourse ↩︎

4 « J'aime »

La publication prématurée ne m’arrive pas vraiment (je suis sur ordinateur 99 % du temps), mais je peux comprendre le malaise. Serait-il judicieux de donner à l’utilisateur une courte période pour masquer sa publication pour une édition ultérieure, peut-être seulement s’il n’y a pas eu de réponses ?

Edit : bien sûr, cela ne masquerait toujours pas l’historique des modifications… :sweat_smile:

2 « J'aime »

Je respecte cela, mais je ne le vis pas. Je préfère de loin la période de grâce d’édition, car je peux relire et corriger autant que je le souhaite, et une fois qu’une publication importante est publiée, je trouverai toujours des erreurs. L’édition cache bien mes crimes.

Chacun ses goûts pour les fautes de frappe.

1 « J'aime »

J’utilise un éditeur externe pour remplir tous les champs de site web un peu longs, ce qui inclut bien sûr les publications Discourse. Dans l’éditeur, j’ai toutes mes combinaisons de touches d’éditeur de programmeur habituelles, c’est donc meilleur à peu près à tous égards. Ce n’est que lorsque je suis satisfait que le texte est complet que j’utilise copier-coller pour le transférer vers le compositeur, puis que j’appuie sur le gros bouton.

Avez-vous envisagé ce flux de travail ?

2 « J'aime »

Il est intéressant de voir de nombreuses expériences différentes. Je ne publie jamais par erreur sur smartphone, seulement sur ordinateur de bureau.

Oui, je l’utilise dans d’autres contextes. J’écris d’abord mon message sur Google Docs, avant de le copier-coller dans l’application de messagerie cible.

Mais sur Discourse, c’est un peu ennuyeux lorsque je dois ajouter des images, des citations ou utiliser des fonctionnalités spécifiques à Discourse dans mon message.


Je rédige un brouillon depuis plusieurs jours, et c’est toujours une expérience un peu stressante chaque fois que j’y travaille, je dois constamment faire très attention à ne pas l’envoyer. :lolsob:

1 « J'aime »

Lorsque j’écris un message plus long, j’utilise une solution similaire. Mais comme j’essaie d’arrêter d’utiliser Google etc. et que je travaille principalement sur iPad, mon outil est l’application Ulysses. Principalement parce qu’elle supporte le markdown. Une sorte de syntaxe, pas totalement identique à celle utilisée par Discourse.

J’ai des sentiments mitigés à ce sujet. D’un côté, je n’aime pas devoir séparer les applications (mais je l’utilise aussi pour WordPress ; créer du contenu y est pénible de nos jours), mais d’un autre côté, j’ai un environnement un peu plus robuste et centralisé.

Est-ce une grande question pour moi ? Non, c’est juste agaçant. Quand Discourse a changé le style pour laisser un travail non finalisé, ce fut plus catastrophique et j’ai perdu beaucoup trop de brouillons à cause de la mémoire musculaire :zany_face:

1 « J'aime »

Une solution pourrait être de vous composer un MP qui sert de brouillon. Même l’envoyer par accident ne cause aucun tort car il n’est visible que par vous :slight_smile:

2 « J'aime »

Voici un userscript qui ajoute un verrou commutable sur le compositeur.
Il désactive également les raccourcis clavier et fonctionne également sur mobile.

IXlc8u1sm4

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

Ajoutez ou supprimez des lignes @match pour l’activer sur les forums que vous utilisez.

// ==UserScript==
// @name         Discourse Composer Safety Lock
// @namespace    https://meta.discourse.org
// @version      2.0
// @description  Verrou commutable sur le compositeur pour empêcher la soumission accidentelle de messages
// @author       Canapin & AI
// @match        https://meta.discourse.org/*
// @grant        none
// @license MIT
// ==/UserScript==
(function () {
  "use strict";
 
  let locked = false;
 
  // Écouteur en phase de capture sur #reply-control pour bloquer Ctrl/Cmd/Alt+Entrée
  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");
      }
    });
  }
 
  // Bloqueur de clic en phase de capture sur le bouton d'enregistrement
  document.addEventListener(
    "click",
    function (e) {
      if (!locked) return;
      if (e.target.closest(".save-or-cancel .btn-primary")) {
        e.stopImmediatePropagation();
        e.stopPropagation();
        e.preventDefault();
      }
    },
    true
  );
 
  // Bloqueur de touche en phase de capture pour Entrée sur le bouton d'enregistrement focalisé
  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 « J'aime »

Ce n’est pas un problème que j’ai habituellement. Je ne sais pas pourquoi ! Il m’est cependant arrivé d’envoyer un e-mail par erreur — plus souvent, je dois le dire, j’ai un doute juste après avoir envoyé l’e-mail (mauvais destinataire ? Information manquante ?) que je suis très heureux de pouvoir dissiper avec le lien « annuler l’envoi » que Gmail propose pendant quelques secondes. Cela n’arrive pas souvent, cependant.

Donc, peut-être que quelque chose de similaire lors de la publication aurait du sens. Quelques secondes pour appuyer sur le bouton « oups, ça n’aurait pas dû être envoyé comme ça » après avoir publié.

Je fais cela souvent à cause des raccourcis maj + entrée et ctrl + entrée.

Ce n’est pas un gros problème, j’édite simplement la publication.

Pour les choses sensibles, je compose d’abord dans un éditeur séparé et je colle dans l’application avant d’envoyer.

J’ai utilisé le userscript que j’ai posté sur meta et il soulage vraiment mon esprit lorsque j’écris !

Maintenant, je souhaite (plus que jamais) qu’il y ait une fonctionnalité intégrée comme celle-ci :face_with_tongue:

Mais je vois que le designer a parlé !

image

:laughing:

1 « J'aime »

J’ai mis au point un TC simple qui fait cela, avec un bouton verrouiller/déverrouiller dans le compositeur.

Je publierai bientôt le sujet Meta.

1 « J'aime »