Skip to content

支持粘贴转义文本 #5073

Closed
Closed
@oott123

Description

@oott123

在什么情况下你需要该特性?In what scenarios do you need this feature?

Markdown 语法很好,但有时我们只需要纯文本。特别是思源使用的 markdown 语法,标记较多,有时候需要大量手工转义。

例如:

07:00~07:30 早自习
07:30~08:10 第一节课

其中两个波浪号 ~ 之间的文字会被渲染成下标:

image

如果支持纯文本块,那么它就可以渲染成正确的纯文本,而不需要手动转义。

描述可能的最优解决方案 Describe the optimal solution

支持一种纯文本叶子节点,作为块级元素。

描述候选的解决方案 Describe the candidate solution

或者在粘贴为纯文本的时候自动转义 markdown 特殊字符,这样我可以复制文本内容到其它编辑器里,编辑好之后再粘贴回来。虽然有一点不方便,但也是比较容易的解决方案。

现在直接用粘贴为纯文本,特殊字符还是会被识别为 markdown 标记。

其他信息 Other information

目前其实也可以通过 html 块实现:

image

但毕竟需要手动输入 <pre> 标签,而且字体也不好看,编辑也不够方便。

Activity

88250

88250 commented on Jun 1, 2022

@88250
Member

从 Markdown 语法规范来说,里面没有这样的设计,只能转义,否则可能会有很多语法冲突无法解决。

候选方案中提到的“或者在粘贴为纯文本的时候自动转义 markdown 特殊字符,这样我可以复制文本内容到其它编辑器里,编辑好之后再粘贴回来。虽然有一点不方便,但也是比较容易的解决方案。”这一点我们有在考虑,即支持 转义粘贴:将剪切板中的行级元素内容自动转义,转换为普通文本行级节点。比如剪切板中是 foo~bar~baz,使用 转义粘贴 时自动转换为 foo\~bar\~baz

可行性还需要一些时间评估,我们先完成其他任务,谢谢。

changed the title [-]Feature Request: 纯文本叶子节点[/-] [+]支持转义粘贴[/+] on Jun 1, 2022
Temacc0531

Temacc0531 commented on Jun 2, 2022

@Temacc0531

可以直接写到代码块里面来达到目的

oott123

oott123 commented on Jun 2, 2022

@oott123
Author

@Temacc0531 代码块确实能达成。但毕竟有时候不是贴代码,只是纯文本而已,不希望等宽或者有额外背景。

@88250 我是在想,新增一个纯文本节点,像 HTML 这样操作,是不是也可以考虑呢,这就绕过了 markdown 的规范问题。

88250

88250 commented on Jun 2, 2022

@88250
Member

@oott123 感觉绕不过去,因为 Markdown 本身就是纯文本的规则……

oott123

oott123 commented on Jun 2, 2022

@oott123
Author

@88250 我简单设想的两个办法,只是从数据层面上看,不知道是否可行:

  • 增加 NodePlainText,和 NodeText 平级,里面的 Data 当成纯文本处理,不经过 markdown 渲染。不过编辑器不知道该怎么处理……
  • 增加 NodePlainTextBlock,和 NodeParagraph 平级,里面 Data 直接是纯文本,就像 HTML 那样。对编辑器来说就和挂件或者 HTML 块差不多,单独做编辑功能

我的绕过的意思是,完全不把这类内容送进 markdown 解析器……

88250

88250 commented on Jun 2, 2022

@88250
Member

@oott123 大概明白你的思路了,但是从目前编辑器的设计上看已经是办不到啊,整个编辑器的逻辑都是基于标记符解析渲染的,要添加节点的话必须要有一个符合文本标记符的规则与其对应。

目前看来,HTML 块其实还是比较适合的,不一定用 <pre>,用 <div> 也行。

oott123

oott123 commented on Jun 2, 2022

@oott123
Author

@88250 编辑器的话,像 HTML 块那样弹窗的话应该是一个解决方案?

<div> 的主要问题是我要手动 <br> ……好吧目前看应该是我自己写点 css 比较简单。

88250

88250 commented on Jun 2, 2022

@88250
Member

@oott123 主要的问题就是没有解析规则(标记符)与其对应。

ssfdust

ssfdust commented on Jun 7, 2022

@ssfdust
Contributor

最简单的解决方案可能是用户把~输入成,其实还更美观了。

所以一种可行的方案是把提供一种叫做全角粘贴的方式,将用户输入半角符号转换为全角?

function special_to_fullwidth (input) {
    var offset = 65248;  // offset between halfwidth and fullwidth
    var output = "";
    var char_ranges = [
        [33, 47],        // Range from `!` to `/`
        // [59, 64],        // Range from `:` to `@`
        [91, 96],        // Range from `[` to '`'
        [123, 126]       // Range from '{' to '~'
    ];
    var matched = 0;
    for (let i = 0; i < input.length; i++) {
        chcode = input.charCodeAt(i);
        for (j = 0; j < char_ranges.length; j++) {
            if (chcode >= char_ranges[j][0] && chcode <= char_ranges[j][1]) {
                matched = 1;
                break;
            }
        }
        if (matched == 1) {
            output += String.fromCharCode(chcode + offset)
        } else {
            output += String.fromCharCode(chcode)
        }
        matched = 0;
    }
    return output;
}

覆盖范围可能要调整一下

mlzxy

mlzxy commented on Jun 14, 2022

@mlzxy

感觉合理的解法应该是提供【粘贴】和【转义粘贴】两种功能,让用户选择用哪一种,因为何时需要转义只有用户自己清楚

可能大部分用户只会用到【粘贴】,但有一部分用户经常需要【转义粘贴】。

modified the milestones: 2.0.22, 2.0.23 on Jun 16, 2022
changed the title [-]支持转义粘贴[/-] [+]支持粘贴转义文本[/+] on Jun 22, 2022
added a commit that references this issue on Jun 22, 2022
Maigq

Maigq commented on Jul 6, 2022

@Maigq

2.0.22时我也想反映这个问题...

jabobian

jabobian commented on Jul 21, 2022

@jabobian

测试了右键菜单的转义粘贴,好像不行的啊

mzcxiaohuanxiong

mzcxiaohuanxiong commented on Oct 31, 2022

@mzcxiaohuanxiong

您好,2.4.7版本开始,粘贴为转义文本,不自动转义了。从zotero粘贴过来的注释。

ippreacher

ippreacher commented on Nov 1, 2022

@ippreacher

没错,目前版本确实无法自动转义了。

mzcxiaohuanxiong

mzcxiaohuanxiong commented on Nov 1, 2022

@mzcxiaohuanxiong

没错,目前版本确实无法自动转义了。

建议:粘贴为纯文本时不自动转义;粘贴为转义文本时自动转义。分别对应不同的快捷键会更方便。谢谢。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

No projects

Relationships

None yet

    Development

    No branches or pull requests

      Participants

      @88250@oott123@Vanessa219@ssfdust@mlzxy

      Issue actions

        支持粘贴转义文本 · Issue #5073 · siyuan-note/siyuan