الخطأ المحرج للنشر المبكر

يبدو أنني أعاني من علة “النشر المبكر” في تطبيقات مختلفة لا تركز على الدردشة.

بشكل أساسي رسائل البريد الإلكتروني (Gmail) و Discourse.

ما يحدث هو أنني أكتب رسالتي، وأقوم بإرسالها عن طريق الخطأ. هذا الإزعاج يحدث في كثير من الأحيان أكثر مما يعجبني، وربما يكون ذلك بسبب اختصار لوحة مفاتيح، مثل Ctrl + Enter، أو (ربما الأكثر شيوعًا؟) Tab ↹ ثم Enter.

يمكنني التعامل مع الأمر في Gmail: هناك نافذة قصيرة يمكنك خلالها إلغاء إرسال البريد الإلكتروني. يا له من حظ! :raising_hands:
لتجنب إرسال منشوري تمامًا أثناء الكتابة، لا أقوم بملء حقل المستلم. أفعل ذلك أخيرًا، قبل إرسال البريد الإلكتروني مباشرة.

ولكن في Discourse، بالنسبة للمشاركات العامة، هذا غير ممكن. حاولت إزالة الفئة الافتراضية من محدد الفئة، لذلك من المحتمل أن أواجه رسالة “لا يمكن أن تكون الفئة فارغة” عند إرسال منشوري، ولكن للأسف، لا يمكنني ذلك.

من المحرج تقديم موضوع أو رد مبكرًا. يمكنني حذفه على الفور، لكن المحتوى يظل مرئيًا للآخرين (عليهم فقط النقر على أيقونة التعديل) لأن هذا هو السلوك الافتراضي لـ Discourse. ولا يمكنني إكمال المحتوى أثناء حذفه، للتراجع عن الحذف لاحقًا.

في النهاية، إما أن أترك منشوري غير مكتمل (عادة في منتصف جملة أو كلمة :woozy_face:) وأقوم بتعديله بصبر، وهو ما لا يعجبني لأنني بطيء أيضًا في الكتابة، أو أحذفه وأكتب موضوعًا/منشورًا جديدًا بدلاً من ذلك.

نظرًا لأنه يحدث غالبًا في الرسائل الطويلة، أو تلك التي أحتاج إلى بذل الكثير من التفكير فيها، سأكون سعيدًا بوجود أيقونة قفل :locked_with_pen: قابلة للتبديل تمنع إرسال الرسالة تمامًا.

لست أقترح ميزة خاصة بـ Discourse لهذا… إلا إذا كانت تحدث للعديد من المستخدمين :smile:

الأمر يتعلق أكثر بمشاركة هذه التجربة، والإحراج اللاحق للإرسال المبكر في Discourse، والحصول على آراء الأعضاء الآخرين، ومشاركة الأفكار لمنع ذلك.

أما بالنسبة لي، حتى برنامج نصي للمستخدم (userscript) يمكن أن يفي بالغرض. للأسف، لا أعرف كيف أمنع اختصار لوحة المفاتيح الخاص بـ Discourse من إرسال منشور، وكذلك الذكاء الاصطناعي.
تعديل: انظر The awkward mishap of premature posting - #10 by Canapin

هل تتأثر بالإرسال المبكر؟

  • نعم
  • لا
0 voters

هل تود أن تكون قادرًا على “قفل” المنشئ في Discourse؟

  • نعم (مدمج)
  • نعم (طرف ثالث)
  • لا - أحب أن أعيش على الحافة
0 voters

أتطلع إلى سماع آرائكم!

5 إعجابات

وأنا أيضاً — عند استخدام شاشة اللمس. مزعج للغاية.

إعجابَين (2)

هذا أمر يمكن الارتباط به حقًا. يحدث لي أيضًا في الدردشة[1]. أتمنى أحيانًا ظهور نافذة تأكيد منبثقة أو نافذة لمدة 10 ثوانٍ للحذف بشكل دائم.


  1. أي الدردشة في ديسكورس ↩︎

4 إعجابات

لا يحدث النشر المبكر بالنسبة لي حقًا (أنا أستخدم سطح المكتب 99% من الوقت) ولكني أتفهم الإحراج. هل سيكون من المنطقي منح المستخدم فترة قصيرة من الوقت لإخفاء منشوره لمزيد من التعديل - ربما فقط إذا لم تكن هناك أي ردود؟

تعديل: بالطبع هذا لن يخفي سجل التعديلات… :sweat_smile:

إعجابَين (2)

أنا أحترمه، ولكني لا أختبره. أنا أفضل فترة السماح للتعديل، حيث يمكنني إعادة القراءة والتدقيق قدر ما أريد، وبمجرد نشر منشور كبير ومهم، سأظل أجد أخطاء. التعديل يخفي جرائمي جيدًا.

اختلاف الأساليب يولد اختلاف الأخطاء.

إعجاب واحد (1)

أستخدم محررًا خارجيًا لملء أي حقول طويلة في مواقع الويب، والتي تشمل بالطبع منشورات ديسكورس. في المحرر، لدي جميع اختصارات لوحة المفاتيح المعتادة لمحرر المبرمجين، لذا فهو أفضل من كل النواحي تقريبًا. فقط عندما أكون راضيًا عن اكتمال النص، أستخدم النسخ واللصق لنقله إلى المؤلف، ثم أضغط على الزر الكبير.

هل فكرت في سير العمل هذا؟

إعجابَين (2)

من المثير للاهتمام رؤية العديد من التجارب المختلفة. أنا لا أنشر عن طريق الخطأ أبدًا من الهاتف الذكي، بل فقط من سطح المكتب.

نعم، أستخدمه في سياقات أخرى. أكتب رسالتي أولاً في مستندات Google، قبل نسخها ولصقها في تطبيق المراسلة المستهدف.

ولكن على ديسكورس (Discourse)، يصبح الأمر مزعجًا بعض الشيء عندما أحتاج إلى إضافة صور أو اقتباسات أو استخدام ميزات خاصة بـ ديسكورس (Discourse) في منشوري.


لقد كنت أكتب مسودة لعدة أيام، وهي دائمًا تجربة مرهقة بعض الشيء في كل مرة أعمل عليها، أحتاج إلى توخي الحذر الشديد باستمرار حتى لا أرسلها. :lolsob:

إعجاب واحد (1)

عندما أكتب منشورًا أطول، أستخدم حلاً مشابهًا. ولكن لأنني أحاول التوقف عن استخدام جوجل وما إلى ذلك، وأعمل في الغالب على جهاز iPad، فإن أداتي هي تطبيق Ulysses. والسبب الأكبر هو أنه يدعم لغة ماركداون (markdown). نوع واحد، ليس مطابقًا تمامًا للصيغة التي يستخدمها Discourse.

لدي بعض المشاعر المختلطة حيال ذلك. من ناحية، أكره عندما أحتاج إلى فصل التطبيقات (لكني أستخدمه أيضًا لـ WordPress؛ إنشاء المحتوى هناك مؤلم في الوقت الحالي)، ولكن في الوقت نفسه لدي بيئة أكثر قوة ومركزية.

هل هذا سؤال كبير بالنسبة لي؟ لا، إنه مجرد أمر مزعج. عندما غير Discourse الأسلوب المتبع لترك عمل غير مكتمل، كان الأمر كارثيًا وفقدت الكثير من المسودات بسبب ذاكرة العضلات :zany_face:

إعجاب واحد (1)

قد يكون الحل هو إنشاء رسالة خاصة لنفسك تعمل كمسودة. حتى الإرسال العرضي لا يسبب ضررًا لأنه مرئي لك فقط :slight_smile:

إعجابَين (2)

إليك سكريبت مستخدم يضيف قفلاً قابلاً للتبديل إلى مُنشئ المحتوى.
كما أنه يعطل اختصارات لوحة المفاتيح، ويعمل على الهاتف المحمول أيضًا.

IXlc8u1sm4

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

أضف أو أزل أسطر @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;
 
  // مُستمع مرحلة الالتقاط على #reply-control لحظر 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");
      }
    });
  }
 
  // مانع النقر في مرحلة الالتقاط على زر الحفظ
  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 على زر الحفظ المُركّز
  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 لبضع ثوانٍ. ومع ذلك، لا يحدث ذلك كثيرًا.

لذا، ربما يكون شيء مشابه عند النشر منطقيًا. بضع ثوانٍ للضغط على زر “يا إلهي، لم يكن ينبغي أن يخرج بهذا الشكل” بعد النشر.

أفعل هذا كثيرًا بسبب اختصارات shift-enter ctrl-enter.

ليست مشكلة كبيرة، أنا فقط أعدل المنشور.

بالنسبة للأشياء الحساسة، أقوم بالتأليف في محرر منفصل أولاً ثم ألصق في التطبيق قبل الإرسال.

لقد استخدمت السكريبت الذي نشرته على الميتا وهو حقًا يريح بالي عند الكتابة!

الآن أتمنى (أكثر من ذي قبل) أن تكون هناك ميزة مدمجة كهذه :face_with_tongue:

لكنني أرى أن المصمم قد تحدث!

image

:laughing:

إعجاب واحد (1)

لقد قمت بتجميع TC بسيط يقوم بذلك، مع زر قفل/فتح في المنشئ.

سأقوم بنشر موضوع ميتا قريبًا.

إعجاب واحد (1)