动手向 ---Jetbrains 系编辑器与思源的“无缝”打通

本贴最后更新于 889 天前,其中的信息可能已经事过景迁

前言

最近刚从使用了一年多 wolai 的家庭版(充了 三年)转到思源笔记,吸引我的主要就是思源的引用链接是可以浮窗展示的,并且思源的本地文档也是我看中的功能,因为我本人主要就是使用笔记整理学习笔记,记录一些日常心得,对实时协作需求几乎没有(主要是家庭版的另一位成员我的女票,我安利了他一年 wolai,不为所动,钉在飞书文档不走了)还有就是一些隐私笔记不想上传云端(因为我本人做医疗云的开发,就算对外宣传如何保密啥的,但是真实生产环境开发人员还是可以看到病人的一些私密信息)。在这一周的时间简单的逛了下社区和论坛,其中有 2 个帖子( 技巧分享:让思源笔记作为学习编程语言的笔记本技巧分享:在任意地方用 ahk 打开思源链接 )对我挺有启发的,间接的促使我完成了他们的“未完成的使命”。

Jetbrains 系软件(视频演示的 Intellij Idea,其它的应该同理),只要是做软件开发的小伙伴应该都熟悉,这个帖子主要讲解的是如何从 IDEA 里面跳转到思源笔记以及在思源笔记里面如何跳转到 IDEA 编辑器里面。这种思路的受这位同学的启发 技巧分享:让思源笔记作为学习编程语言的笔记本 。因为我们日常开发有些核心代码觉得写的不错或者记一些代码笔记以供后续参考,我们不可能把代码的上下文语义代码都抄到思源笔记里面去(笔记软件不是 IDE 工具!!!),另一种在 IDE 编辑器里面对代码做注释笔记又不方便后续复习和调用。本帖子主要就是对 2 者“无缝”跳转方案做一个具体演示。最终完整版效果还得依赖开发者完善 siyuan:// 协议的跳转(问题见 思源协议 siyuan:// 打开笔记,窗口不显示的解决办法 ),(目前我是使用了油猴软件写了一个 js 脚本过渡的)。具体演示视频如下:

重中之重

我的订阅码:JSa9h5M

(等我成了恶龙,所有相关快捷动作都上传论坛,其实自己动手一步一步也不难)

基本工具

  1. macos 系统(没试过 window)
  2. nginx(通过 brew 安装,可百度)
  3. Keyboard Masetro
  4. Chrome 浏览器
  5. Chrome 浏览器 Tampermonkey 插件(油猴)

具体操作

第一步:idea 编辑器调转思源笔记,上面 2 位同学都是用 ahk 实现的。基于快捷键实现了编辑器跳转到思源笔记。我这里提供 2 个解决办法:

  1. 第 1 种是使用 Keyboard Masetro
    image.png
    说明一下步骤(具体 Keyboard Masetro 教程可自行百度):

    1. 首先定义一个快捷键触发器,我定义的是 shift + command + J(在你选中的类似于 siyuan://blocks/20211118110307-8ke34or 文本上操作)
    2. Keyboard Masetro 执行 command + C 操作(会复制你链接)
    3. 将系统剪切板复制到变量 Text 上去(也就是具体的 类似于 siyuan://blocks/20211118110307-8ke34or 的链接)
    4. Keyboard Masetro 打开具体的链接
    5. 激活思源笔记(主要是目前 siyuan:// 的 url scheme 跳转不完善)

    这种办法是参考了上述 2 位同学的思路。确定是每次都要找到具体链接,然后按住 shift + command + J 才能完成 IDEA 编辑器跳转到思源笔记,优点是跳转比较丝滑。

  2. 第 2 种是使用 nginx,谷歌浏览器插件 Tampermonkey 插件。

    1. 给予 IDEA 编辑器会识别 http:// 协议的特性
      image.png
      IDEA 的注释会识别 http://,https://,mailto:// 这些协议,昨晚逛了一晚上 jetbrain 的官网社区,没有找到怎么支持 siyuan:// 这种第三方的 url scheme 协议。所以我们得从 http:// 做跳板。用这种 http://localhost?location=siyuan://xxxx 这种格式
    2. 启动 nginx(主要起的是一个本地 web 服务的作用,不至于上面那位同学要部署一个网站那么夸张)
    3. 在谷歌浏览器油猴插件上新增一个脚本,拦截 http://localhost/*(路径自己可定义只要和上面 nginx 保持一致即可),截取 location 后面的 siyuan:// 的内容,让 js 完成唤起思源软件的作用,然后关闭当前的 浏览器 http://localhost?location=siyuan://xxxx 的页面image.png
    4. 使用 Keyboard Masetro 将思源笔记拉到窗口的最前面(主要还是这个问题 思源协议 siyuan:// 打开笔记,窗口不显示的解决办法
      定义 Keyboard Masetro 的 url shceme 动作触发image.png

    这种办法主要的好处就是可以直接在 IDEA 编辑器通过超链接的形式点击跳转到思源笔记(不像第一种方式要首先选择文本,在去按 shift + command + J 快捷键),缺点是不够丝滑,但也能接受, 0.5 之内就完成跳转了,窗口有跳转痕迹。这是因为 siyuan:// 协议本身不完善以及 IDEA 注释里面不支持第三方 shceme 导致的。这种方案应该算是独创吧。。

第二步:思源笔记跳转到 IDEA 编辑器,这是重点!!!,有哪位老铁想要订阅用我的推荐码哈

  1. 还是通过 Keyboard Masetro,如图
    image.png
    image.png
    1. 首先定义一个 IDEA 中没有占用的快捷键(command + escape)作为触发器
    2. 在 Keyboard Masetro 中执行 shift + cammand + C 操作,主要是模拟 IDEA 中复制文件绝对路径的快捷键(会复制成/Users/xxx/Documents/workspace/idea-workspace/java-gradle-learning/src/main/java/com/sunxu/java/chap05/Mapping.java)这种 java 文件的绝对地址。image.png
    3. 复制剪切板到变量 Absolute 中去
    4. 在 Keyboard Masetro 中执行 option +shift + cammand + C 操作,主要是模拟 IDEA 中复制文件引用的快捷键(com/xxx/java/chap05/Mapping.java:18)这种形式image.png
    5. 复制剪切板到变量 Column 中去
    6. 使用 shell 脚本截取(com/xxx/java/chap05/Mapping.java:18)得到最后面的代码的行号 18 保存到变量 ColumnNum 中去
    7. 最终将上面的 Absolute 变量和 ColumnNum 变量组合成 markdown 形式的超链接文本【代码链接】()(这里防止它自动变成超链接手动用了中文的【】)
    8. 将变量 url 复制到系统剪切板上
    9. 在思源笔记里面复制,效果如下image.png

至此 2 个方向的流动均已打通,兄弟们可以方便的边敲代码,边记笔记了。不说了,我要愉快地敲代码去了,现在的目标就是想成为 D 大和 V 姐那样,做自己想做的产品。。正在安利女票转成前端。哈哈

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    18694 引用 • 69785 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • buzzingbee

    小伙子,做的好,我就是在等你出现!下午回复你

  • buzzingbee

    小伙子,你的技术能力值得夸赞,所以我下午一有空如约来回复你。我主要说一下从思源跳到程序编辑器的方案中的一些问题。我提这些问题,不是说你的方案不好,只是说如果进一步解决这些问题,则会更好。主要问题有:

    1. 跳转链接依赖本地绝对路径是行不通的,因为时间久了之后本地绝对路径肯定会变,到时候等着你的是一堆堆死链。
    2. 在思源中手工添加源代码的链接是不必要的。一个是添加的时候多了一个步骤,繁琐。二是占用了思源笔记中不必要的空间。因为已经在源代码中添加了思源地块链接,那么从思源到原代码的链接应该采用反链技术自动化的解决。
    3. 第 3 条,理论上讲笔记和代码之间的双链应该是网状的,有可能会出现一对多的关系。如果不采用自动化的方法,一旦出现一对多,手工双链的工作量就完全无法接受。

    我构想的解决方案,有一定的技术难度,所以我说等着你这样的技术能手,设想如下:

    1. 改跳转目标由依赖绝对路径为依赖文件标志符。在本地建立一个类似网页的服务,它会预先扫描指定源代码目录中含有思源路径的文件,建立数据库,并生成访问目标地,类似于:
    2. 当你在外部访问上述的链接时,可以打开一个页面,它可以是网页,展示的是对应的代码页;
    3. 在思源笔记中注入一个插件(未必可行),其功能是监视思源笔记当前面的所有 blockid,在需要时,实时查询第 1 步建立的数据库,返回所有链接及其摘要。

    最后一步最难,可能需要思源笔记的支持,但应该在可实现的范围内。我的技术水平太有限,只是把方案贡献出来,期望有能力的人能够实现。