logseq-plugin-vim-shortcuts icon indicating copy to clipboard operation
logseq-plugin-vim-shortcuts copied to clipboard

功能设想:实现在命令模式保留光标

Open j2wyatt opened this issue 3 years ago • 2 comments

您好,我是您软件的用户,这是一个优秀的软件,我也想尽我的一份力. 因为没有堪比 vim 的编辑体验,所以我一直没有使用 logseq. 在遇到您的插件后,我本以为这个障碍终于消失了, 但令人遗憾的是它缺少在命令模式控制光标的功能.我知道在未来软件可能会实现这个功能,但是我等不及了.

所以,我找到一个关于实现在命令模式依然保留光标的想法,我在今天验证了它是可用的,我在尝试自己实现. 但我对 logseq 还不够了解,所以想请教您,要是能帮上忙就最好不过了. 它的内容如下.

// 监听主页面的按键输入
top.document.onkeydown = async function (e) {
  console.log(e)

  // 阻止按键在文本框输入字符,然后识别成命令
  e.preventDefault()

  // 在按下 esc 键后,因为没有拦截到它,所以光标还是消失了
  let blockUUID = await logseq.Editor.getCurrentBlock();
  // 现在使用这个方法,重新进入编辑模式,它会复现光标
  await logseq.Editor.editBlock(blockUUID.uuid);
}

要点就是 top 这个对象,根据我了解它有这样的缺憾.

  • 发布在市场中的 Logseq 插件默认情况是运行在独立域名中的 iframe 沙盒里,所以访问 主视图 top 引用(指向到主视图的 window 对象)的能力被跨域安全策略禁止.
  • 目前只有在本地通过 Load unpacked plugin 的方式加载插件,才能访问到 top 引用。
  • 因为用的不是 api,所以稳定性存疑

最后, happy hacking!

j2wyatt avatar Jun 07 '22 09:06 j2wyatt

我用了你的代码,没有看到光标效果,关于光标我也希望官网能够尽快支持,另外 在vim之外模拟vim是不可能尽善尽美的,我的原则是差不多就行。不过还是谢谢你的建议,等官方支持了光标和API,我这边的快捷键会尽快跟进。

vipzhicheng avatar Jun 20 '22 03:06 vipzhicheng

感谢回复,最终我还是没有忍住自己写了些代码:https://github.com/j-wyatt-a/vim-wyatt-logseq-plugin,自用完全够了。 另外 top 对象在发布之后的版本里应该是能用的,我在其它的插件里看到过。

不得不说自己写功能真是很舒服,logseq 让我得到了在 emacs 里没有的自由和享受。

希望 logseq 的功能尽快完善,发展越来越好。

j2wyatt avatar Jun 29 '22 02:06 j2wyatt