早すぎる投稿の気まずい失敗

私は、チャット以外のさまざまなアプリケーションで、いわゆる「早すぎる投稿」の症状に見舞われているようです。

主にメール(Gmail)とDiscourseです。

起こるのは、メッセージを書き終える前に、誤って送信してしまうことです。この不便さは私の好みにはあまりにも頻繁に起こり、おそらくキーボードショートカット、例えば <kbd>Ctrl</kbd> + <kbd>Enter</kbd> や(おそらくより一般的な)<kbd>Tab ↹</kbd> の後に <kbd>Enter</kbd> のようなものが原因でしょう。

Gmailでは対処できます。メール送信を取り消せる短い時間があるからです。やったね!:raising_hands:
投稿中に送信されるのを完全に避けるために、私は受信者入力欄を埋めません。メールを送信する直前に最後に入力します。

しかし、Discourseでは、プライベートメッセージでない限り不可能です。カテゴリーセレクターからデフォルトのカテゴリーを削除してみましたが、投稿を送信しようとすると「カテゴリーは空にできません」というメッセージが表示されるはずですが、残念ながらできませんでした。

トピックや返信を早まって送信するのは恥ずかしいことです。すぐに削除することはできますが、Discourseのデフォルトの動作により、コンテンツは他の人に見えるままです(編集アイコンをクリックするだけで見えます)。そして、後で削除を取り消すために、削除した状態でコンテンツを完成させることはできません。

結局のところ、不完全な投稿(通常は文の途中や単語の途中 :woozy_face:)のままにしておいて、辛抱強く編集するか、削除して新しいトピック/投稿として書き直すかのどちらかになります。

長文のメッセージや、熟考する必要のあるメッセージで頻繁に発生するため、メッセージ送信を完全に防ぐ切り替え可能なロック :locked_with_pen: アイコンがあれば嬉しいです。

これは特にDiscourseの機能として提案しているわけではありません… もし多くのユーザーに起こっているのであれば別ですが :smile:

これは、この経験を共有すること、Discourseでの早すぎる送信によるその後の恥ずかしさ、他のメンバーの意見を聞くこと、そしてそれを防ぐためのアイデアを共有することに関係しています。

私個人としては、userscriptでも構いません。残念ながら、Discourseのキーボードショートカットが投稿を送信するのを防ぐ方法がわかりませんし、AIもわかりません。
編集:The awkward mishap of premature posting - #10 by Canapin を参照してください。

早すぎる投稿の影響を受けていますか?

  • はい
  • いいえ
0 voters

Discourseでコンポーザーを「ロック」できるようにしたいと思いますか?

  • はい(組み込み)
  • はい(サードパーティ)
  • いいえ—エッジの効いた生活が好き
0 voters

皆さんのご意見を楽しみにしています!

「いいね!」 5

私も同じです。タッチスクリーンを使用しているときに発生します。非常に迷惑です。

「いいね!」 2

これは非常に共感できます。Discourseのチャットでも同様のことが起こります。確認のポップアップか、永久に削除するための10秒間の猶予期間が欲しいと時々思います。

「いいね!」 4

私の場合、早すぎる投稿(デスクトップでの利用が99%のため)はあまりありませんが、その気まずさは理解できます。ユーザーに、さらなる編集のために投稿を非表示にする短い期間を与えるのは意味があるでしょうか。おそらく、返信がない場合にのみ?

編集:もちろん、それでも編集履歴は非表示になりませんね… :sweat_smile:

「いいね!」 2

私はそれを尊重しますが、それを経験しません。編集猶予期間の方がずっと好きです。なぜなら、何度でも読み返して校正できますし、重要で大きな投稿をした後でも間違いを見つけることになるからです。編集は私の過ちをうまく隠してくれます。

人それぞれ、打ち間違いへの対応も違います。

「いいね!」 1

私は、長めのウェブサイトのフィールドに入力する際に、外部エディタを使用しています。もちろん、これにはDiscourseの投稿も含まれます。エディタでは、いつものプログラマー用エディタのキーバインドがすべて利用できるため、あらゆる面で優れています。テキストが完成したと満足したときだけ、コピー&ペーストでコンポーザーに転送し、「大きなボタン」を押します。

このワークフローを検討したことはありますか?

「いいね!」 2

スマートフォンでの投稿ミスは一度もなく、デスクトップでのみあります。

はい、他の状況では使用しています。まずGoogleドキュメントにメッセージを書き、その後ターゲットのメッセージングアプリケーションにコピー&ペーストします。

しかし、Discourseでは、投稿に画像や引用を追加したり、Discourse固有の機能を使ったりする必要がある場合に少し面倒です。


数日間ドラフトを書いていますが、送信しないように常に細心の注意を払う必要があり、作業するたびに少しストレスを感じます。:lolsob:

「いいね!」 1

長い投稿を書くときは、同様の解決策を使っています。しかし、Googleなどの利用をやめようとしており、主にiPadで作業しているため、私のツールはアプリのUlyssesです。主にMarkdownが使えるからです。Discourseが使用するものとは構文が完全に同じではない、ある種の一種です。

これについては複雑な心境です。一方で、アプリを分けるのは好きではありません(しかし、WordPressにも使っています。最近のWordPressでのコンテンツ作成は苦痛です)が、同時に、より堅牢で一元化された環境を少しだけ得られます。

これは私にとって大きな問題でしょうか?いいえ、ただ面倒なだけです。Discourseが未完成の作業を残す方法のスタイルを変更したときの方が壊滅的で、筋肉の記憶のせいでドラフトを失いすぎました🤪

「いいね!」 1

解決策として、自分宛てのプライベートメッセージ(PM)を作成してドラフトとして利用する方法があります。誤って送信してしまっても、自分にしか見えないので害はありません :slight_smile:

「いいね!」 2

ここに、切り替え可能なロックをコンポーザーに追加するユーザースクリプトがあります。
キーボードショートカットも無効になり、モバイルでも動作します。

IXlc8u1sm4

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

使用するフォーラムで有効にするには、@match 行を追加または削除してください。

// ==UserScript==
// @name         Discourse Composer Safety Lock
// @namespace    https://meta.discourse.org
// @version      2.0
// @description  意図しない投稿送信を防ぐための、切り替え可能なコンポーザーの南京錠
// @author       Canapin & AI
// @match        https://meta.discourse.org/*
// @grant        none
// @license MIT
// ==/UserScript==
(function () {
  "use strict";
 
  let locked = false;
 
  // Ctrl/Cmd/Alt+Enter をブロックするために #reply-control でキャプチャフェーズのリスナーを設定
  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");
      }
    });
  }
 
  // 保存ボタンでのキャプチャフェーズのクリックブロッカー
  document.addEventListener(
    "click",
    function (e) {
      if (!locked) return;
      if (e.target.closest(".save-or-cancel .btn-primary")) {
        e.stopImmediatePropagation();
        e.stopPropagation();
        e.preventDefault();
      }
    },
    true
  );
 
  // フォーカスされた保存ボタンでの Enter キーのキャプチャフェーズの keydown ブロッカー
  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

これは私が普段抱える問題ではありません。なぜだかわかりません!しかし、メールを誤って送信してしまうことはありました。むしろ、メールを送信した直後に(宛先が違う?情報が抜けている?)疑問に思うことが多く、Gmailが数秒間提供してくれる「送信取り消し」リンクでそれを解消できることに非常に満足しています。ただし、それは頻繁には起こりません。

ですから、投稿時にも同様のことがあっても良いかもしれません。投稿後すぐに「しまった、あれは送信すべきではなかった」ボタンを押すための数秒間です。

私はシフト+エンターとCtrl+エンターのショートカットを多用するため、これをよくやってしまいます。

大きな問題ではありません。投稿を編集するだけです。

機密性の高い内容については、まず別のエディタで作成し、送信前にアプリケーションに貼り付けます。

私がメタに投稿したユーザースクリプトは、書くときに本当に気が楽になります!

今では(以前よりもさらに)組み込み機能があればいいのにと思います :face_with_tongue:

しかし、デザイナーが発言したのを見ました!

image

:laughing:

「いいね!」 1

これを行うシンプルなTCを作成し、コンポーザーにロック/アンロックボタンを付けました。

まもなくMetaトピックを投稿します。

「いいね!」 1