做笔记需要插入大量的图片,我想要我的笔记显示的更加简洁,去除拖动加入图片时附带的超链接
图片加入附带的超链接影响我阅读我的笔记,以及也会影响选择输入的行
我选择的版本是v1.6.5,还没有下载任何插件,比较的小白如果你能帮助我的话非常感谢!!
做笔记需要插入大量的图片,我想要我的笔记显示的更加简洁,去除拖动加入图片时附带的超链接
图片加入附带的超链接影响我阅读我的笔记,以及也会影响选择输入的行
我选择的版本是v1.6.5,还没有下载任何插件,比较的小白如果你能帮助我的话非常感谢!!
你是指这个吗?
这个去不掉,ob默认是实时预览模式,点击图片会显示源码
如果你觉得有影响,可以选择阅读模式
然后再配合一个插件使用,具体什么插件忘记了,它的功能是点击编辑器任意位置可以从阅读模式进入编辑模式,但选中文字则不受影响。你可以找找看。
非常感谢,虽然我还没有查到具体的插件,但是非常感谢你能帮助我,阅读模式下确实好一些了
很抱歉,我也没找到那个插件的名字,是论坛里的网友推荐的,忘了当时那个帖子叫啥了。反正只在论坛中,帖多不知处。
不过,我当时大致浏览了下那个插件的实现原理。然后我根据那个插件的原理简单实现了下,希望对你有帮助!可以把它放到quickadd或runjs中加载时执行就行了。
这里以runjs为例说明:
```js RunJS="load"
let lastLeafTimer;
const onActiveLeafChange = async (activeLeaf) => {
// 定时防止无效触发,只取最后一个触发
if(lastLeafTimer) clearTimeout(lastLeafTimer)
lastLeafTimer = setTimeout(async () => {
// 监控视图内容被点击
const viewContentClickHandler = (e) => {
if(activeLeaf?.view.getViewType()!=="markdown"){
return;
}
const state = activeLeaf?.view.getState();
// 如果不是预览视图则跳过
if(state.mode !== "preview") {
return;
}
// 选中文本跳过
if(app.workspace.activeEditor?.getSelection() !== ''){
return;
}
// 把预览视图转换为编辑视图
state.mode = "source"
activeLeaf?.setViewState({type: "markdown", state: state});
// 通过鼠标点击获取光标位置
const cursorPos = activeLeaf.view?.editor.posAtMouse(e);
const ephemeralState = activeLeaf?.getEphemeralState();
ephemeralState.cursor.from = cursorPos;
ephemeralState.cursor.to = cursorPos;
//delete ephemeralState.scroll;
// 设置光标位置
activeLeaf?.setEphemeralState(ephemeralState)
};
activeLeaf.view.contentEl.removeEventListener('click', viewContentClickHandler);
activeLeaf.view.contentEl.addEventListener('click', viewContentClickHandler);
}, 42);
};
// 打开时监听一次
this.app.workspace.off("active-leaf-change", onActiveLeafChange);
this.app.workspace.on('active-leaf-change', onActiveLeafChange);
//加载时监听一次
onActiveLeafChange(this.app.workspace.activeLeaf);
```
然后在runjs设置中把名为load的代码块加入到插件加载时执行即可,如图
重启obsidian即可
有个小问题:可能是由于预览模式和编辑器模式文本长度不一致的原因吧,通过鼠标定位光标位置时,可能会有上下几行的错误发生,不过感觉影响不大。不知道原插件是否有这个问题,当时没仔细看具体实现过程,只是匆匆浏览了下核心代码。