Canapin
(Coin-coin le Canapin)
1
我似乎在各种非聊天类的应用中患上了“过早发送”的毛病。
主要是在电子邮件(Gmail)和 Discourse 中。
发生的情况是,我写完信息,然后不小心就发送出去了。这种不便发生得太频繁了,超出了我的接受范围,这很可能是因为一个键盘快捷键,比如 \text{Ctrl} + \text{Enter},或者(可能更常见的是?)$\text{Tab ↹} 然后 \text{Enter}$。
在 Gmail 上我可以应对:有一个很短的时间窗口可以取消邮件发送。太棒了!
为了完全避免在写作时发送帖子,我不会填写收件人输入框。我会在发送邮件前最后一步才做这件事。
但在 Discourse 上,对于非私信(PM),这是不可能的。我试过从“分类”选择器中移除默认分类,这样发送帖子时我可能会遇到“分类不能为空”的消息,但唉,我做不到。
过早提交一个主题或回复是很尴尬的。我可以立即删除它,但内容仍然对其他人可见(他们只需点击编辑图标),因为这是 Discourse 的默认行为。而且我无法在它被删除时完成内容,以便之后撤销删除。
最后,我只能选择让我的帖子保持不完整(通常是在一个句子或一个单词中间
),然后耐心地编辑它,我不太喜欢这样做,因为我写字也慢,或者我删除它,然后写一个新的主题/帖子来代替。
由于这种情况经常发生在长消息上,或者是我需要深思熟虑的消息上,我很高兴能有一个可切换的锁定
图标,可以完全阻止消息发送。
我并不是特别建议在 Discourse 中添加这个功能……除非很多用户也遇到这种情况 
这更多是关于分享这种经历,以及在 Discourse 中过早发送帖子所带来的后续尴尬,听取其他成员的意见,并分享防止这种情况发生的想法。
至于我自己,即使是一个用户脚本(userscript)也能解决问题。不幸的是,我不知道如何阻止 Discourse 的键盘快捷键发送帖子,人工智能也不知道。
编辑:请看 The awkward mishap of premature posting - #10 by Canapin
你是否也受到过早发送的困扰?
你是否希望能够在 Discourse 中“锁定”编辑器?
- 是的(内置功能)
- 是的(第三方)
- 不——我喜欢冒险
期待听到你们的想法!
5 个赞
这太有共鸣了。在 Chat 中也会发生这种情况。有时我希望有一个确认弹出窗口或一个 10 秒的窗口来进行永久删除。
4 个赞
ToddZ
4
对我来说,过早发布的情况并不常见(我 99% 的时间都在使用桌面版),但我能理解那种尴尬。是否可以给用户一个很短的时间来隐藏他们的帖子以便进一步编辑——也许只有在没有回复的情况下?
编辑:当然,那样也无法隐藏编辑历史记录…… 
2 个赞
我尊重它,但没有亲身体验过。我更喜欢编辑宽限期,因为这样我可以随意重读和校对,而且一旦一个重要的大帖子发布了,我仍然会发现错误。编辑能很好地掩盖我的“罪行”。
人各有异,犯错也各有不同。
1 个赞
nobrowser
(Ian Zimmerman)
6
我使用外部编辑器来填写任何较长的网站字段,这当然也包括 Discourse 帖子。在编辑器中,我拥有我所有常用的程序员编辑器快捷键绑定,所以它在各个方面都更好。只有当我确定文本完成后,我才会使用复制粘贴将其传输到编辑器中,然后按下那个大按钮。
您考虑过这种工作流程吗?
2 个赞
Canapin
(Coin-coin le Canapin)
7
看到很多不同的经历很有趣。我从不在智能手机上发帖出错,只在桌面上会。
是的,我在其他场景下会使用它。我先在 Google Docs 上写好消息,然后再复制粘贴到目标消息应用程序中。
但在 Discourse 上,如果我需要在帖子中添加图片、引用或使用特定于 Discourse 的功能时,会有点烦人。
我已经写草稿好几天了,每次修改它都总是一种有点紧张的体验,我需要时刻保持格外小心,以免发送出去。
1 个赞
Jagster
(Jakke Flemming)
8
当我写一篇较长的帖子时,我使用类似的解决方案。但由于我正试图停止使用 Google 等服务,并且主要在 iPad 上工作,我的工具是 Ulysses 应用。主要是因为它支持 Markdown。一种与 Discourse 使用的语法不完全相同的语法。
我对这一点有复杂的感受。一方面,我不喜欢需要分离应用程序(但我也将其用于 WordPress;现在在那里创建内容很痛苦),但另一方面,我拥有一个稍微更强大和集中的环境。
这对我是个大问题吗?不,这只是令人恼火。当 Discourse 更改了留下未成熟作品的样式时,情况更糟,我因为肌肉记忆丢失了太多草稿 
1 个赞
一个可能的解决方法是给自己发一个私信(PM)作为草稿。即使不小心发送了,也不会造成任何伤害,因为它只对你自己可见 
2 个赞
Canapin
(Coin-coin le Canapin)
10
这是一个添加了可切换锁定功能的撰写器(composer)的用户脚本。
它还会禁用键盘快捷键,并且也适用于移动设备。

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 Togglable padlock on the composer to prevent accidental post submission
// @author Canapin & AI
// @match https://meta.discourse.org/*
// @grant none
// @license MIT
// ==/UserScript==
(function () {
"use strict";
let locked = false;
// Capture-phase listener on #reply-control to block 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");
}
});
}
// Capture-phase click blocker on save button
document.addEventListener(
"click",
function (e) {
if (!locked) return;
if (e.target.closest(".save-or-cancel .btn-primary")) {
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
}
},
true
);
// Capture-phase keydown blocker for Enter on focused save button
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 个赞
stephtara
(Stephanie Booth)
11
我通常不会遇到这个问题。不确定为什么!不过,我确实有过不小心发送电子邮件的情况——更常见的是,在发送邮件后我马上会产生疑问(收件人错误?信息遗漏?),我非常庆幸 Gmail 在几秒钟内提供了“撤销发送”链接来解除我的疑虑。但这并不经常发生。
所以,发布时也许可以有类似的功能。发布后有几秒钟的时间可以点击“哎呀,这不该这么发出去”的按钮。
Isambard
(Isambard)
12
我经常因为 shift-enter ctrl-enter 快捷键而这样做。
不是大问题,我只是编辑帖子。
对于敏感内容,我先在单独的编辑器中撰写,然后粘贴到应用程序中再发送。
Canapin
(Coin-coin le Canapin)
13
我使用了我在元(meta)上发布的那个用户脚本,它真的让我在写作时感到安心!
现在我更希望(比以前更希望)有一个内置的功能 
但我看到设计师已经发话了!


1 个赞
我做了一个简单的TC来实现这个功能,并在编辑器中添加了一个锁定/解锁按钮。
稍后会发布Meta主题。
1 个赞