插件 API 的一些使用问题

insertBatchBlock

  1. 第一层的 children 为空数组会报错,children 里面的 children 为空数组是正常的
logseq.Editor.insertBatchBlock(srcBlock, {
  content: "text",
  children: [], // children 为空数组会报错,必须得改为 children: undefined
});
  1. before 参数不管用,不管怎么设置都是在 srcBlock 下方插入

  2. sibling 默认是 falseinsertBlocksibling 默认是 true ,有点不统一,另外可选参数默认值文档里面没体现出来

  3. 无法往空页面里面写入
    insertBatchBlock 的第一个参数需要一个 block uuid ,但空页面是没有 block 的,尝试填 pageblock uuid 调用没报错,但是没效果
    现在只能判断如果是空页面就把页面删掉,然后重新 createPage ,设置 createFirstBlock: true

const lastBlock = await getLastBlock(pageName);
if (lastBlock === null) {
  // 无法往空页面写入 block
  await logseq.Editor.deletePage(pageName);
  await logseq.Editor.createPage(
    pageName,
    {},
    {
      createFirstBlock: true,
      redirect: false,
    }
  );
}

createPage

  • format 参数问题
    设置里面的首选格式是markdown格式,createPage 的时传的也是 markdown,然后 insertBatchBlock ,插入的 block 变成了 list 格式(content 前面多了一个 * ),如果不传 format 参数,表现是正常的
await logseq.Editor.createPage(
  pageName,
  {},
  {
    createFirstBlock: true,
    redirect: false,
    format: "markdown",
  }
);
await logseq.Editor.insertBatchBlock(srcBlock, batchBlocks, {
  sibling: true,
});

moveBlock

试用了下没成功,logseq 版本是 0.3.9

Undo

  • 之前也提到过,插件每一次操作都需要一次 undo 恢复,执行了一个插件提供的命令之后得按好多次 ctrl z 才能恢复。一个想法是允许插件临时将 undo 的行为改为覆盖新的 undo 状态而不是增加新状态

已确认大部分提到的问题, 会尽快修复,感谢! 另外几个问题:

  1. 无法往空页面里面写入
    这个后面支持用 pageName 亦可作为srcBlock标识。

  2. 插入的 block 变成了 list 格式(content 前面多了一个 *
    目前logseq里面 * list 确实是渲染成列表的,可以自己手动输入试试。不过,尝试下来仍然是有个渲染bug。

  3. 插件每一次操作都需要一次 undo 恢复,执行了一个插件提供的命令之后得按好多次 ctrl z 才能恢复
    这个是目前undo/redo设计原理导致的,当前还不是很稳定。稳定点后会给插件提供控制undo/redo栈的API。