Discourse 将复制粘贴的制表符分隔列表自动转换为表格

如果用户在 Discourse 的编辑表单中复制粘贴

	```sh
	systemctl reboot
	```

那么该内容会变成

||```sh|
|---|---|
||systemctl reboot|
||```|

这是错误的——这显然是一个列表,而不是一个表格。

我已在 discuss.kde.orgmeta.discourse.org 上测试过。

	```sh
	systemctl reboot
	```
	```sh
	systemctl reboot
	```

@JammyDodger,再试一次。我已经删除了列表编号。现在似乎可以可靠地工作了。


顺便说一下,选择引用你的评论会给我

[quote="JammyDodger, post:2, topic:266325"]
重启:

0. ```
systemctl reboot
```

```
0.	重启:
	```sh
	systemctl reboot
	```
```
[/quote]

……这是正确的吗?

我得承认,我不太确定我这个时候应该复制粘贴什么。:slight_smile:

哈哈。

	```sh
	systemctl reboot
	```

从页面上拖动选择文本进行复制时,我会得到:

但是使用复制按钮复制时:

粘贴后我能正确地只得到预期的文本。

使用“复制”按钮时的剪贴板内容是:

TEXT:
b'```sh\\n\\tsystemctl reboot\\n\\t```'
text/plain:
b'```sh\\n\\tsystemctl reboot\\n\\t```'

通过在页面上拖动选择时的剪贴板内容是:

TEXT:
b'\\t```sh\\n\\tsystemctl reboot\\n\\t```'
text/html:
b'<span style="color: rgb(199, 199, 199); font-family: Consolas, Menlo, Monaco, &quot;Lucida Console&quot;, &quot;Liberation Mono&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Bitstream Vera Sans Mono&quot;, &quot;Courier New&quot;, monospace; font-size: 17.008px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(60, 60, 60); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">\\t```sh\\n\\tsystemctl reboot\\n\\t```</span>'
text/plain:
b'\\t```sh\\n\\tsystemctl reboot\\n\\t```'

这可能是每行开头的制表符在混淆视听——也许在解析剪贴板内容时,如果第一列总是为空,我们就不将其视为列表。

这似乎是一个非常特殊的情况——有没有可能自然出现这种情况?通常帖子中不会有制表符。

对于计算机来说,它看起来完全像一个带有空白第一列的制表符分隔的表格。

7 个赞

多年来我学到的一件事就是永远不要相信拖动选择的复制和粘贴……

这应该由用户来决定,使用

```tsv
```

毕竟,制表符分隔的表格不应该启用自动换行,所以它最好被包含在强制滚动的东西里。

而且,也因为缩进(用于分隔列表或围栏代码块)

也是非常有效的(而且常见的)markdown。