ourongxing / ohmymn Goto Github PK
View Code? Open in Web Editor NEWMarginNote Addon Development Framework
Home Page: https://ohmymn.marginnote.cn/en/
License: MIT License
MarginNote Addon Development Framework
Home Page: https://ohmymn.marginnote.cn/en/
License: MIT License
开发者好,我当前使用时遇到一个问题:我想实现摘录一段中英混合文本时,自动用正则表达式提取英文并形成“英文;”这样的标题,同时也保留摘录。
在Autotitle功能中,我实现了提取英文并形成标题,但不能同时保留摘录。
我希望能够设置一个控制,让用户自主选择是否开启摘录转标题。如果配合正则表达式,实际上可以实现自动提取摘录中特定内容成为标题,这是比直接摘录转标题更高级的功能。
谢谢!
作者好,感谢快速回复!刚刚看到你之前在另一个加标签的插件里回复,这里想提一个ohmymn能实现的很实用的加标签功能,即用正则表达式筛选出包含特定字符的笔记(比如标题中有“自然语言处理”),然后再利用官方加标签的方式加入标签。
这个功能的用处在于,很多人不喜欢摘录时操作太多,但事后整理时需要用标签,所以事后添加标签是非常常见的。但问题在于标签需要选中大量笔记,这个耗时耗力,反而是ohmymn里的正则表达式可以实现很容易的批量筛选操作,所以只要选中后用官方的加标签方式加标签就很方便了。
希望作者考虑实现,应该非常容易。
谢谢!
ohmymn 中大量功能都是为中文用户设计的,如果单纯翻译为英文,会有大量功能无法使用。而且本身翻译的工作量就很大,还有文档也要翻译,不然他们还是不会用。
英文文档由 MN 工作人员翻译:英文文档
本来不想做选中文本就搜索的功能,因为需要用完就关,这是我非常讨厌的,一切应该在需要的时候自动出现,不需要的时候自动躲得远远的。不过我最近确实也有类似的需求,再加上我发现可以判断是从左到右选中还是从右到左选中,这样我可以把不常用的从右到左选中设置为触发条件,再加上正则来匹配不同的内容,长度来自定义,搜索 url,基本不会出现误触的问题,算是比较完美的解决方案。
随着 ohmymn 中各种 AutoX 的功能越来越多,用户也越来越希望能更精细化的处理摘录,比如现在按字数来判断是否转为标题,但是有人又希望按字数设置颜色,设置样式,那我就需要设置 3 次字数,判断 3 次字数。这其实会带来很多冗余,就像现在的正则一样,每次摘录都需要判断七八个正则,从而执行不同的处理。这不是一个很好的处理办法,更好的办法是一个条件执行多个操作,但由于插件无法实现这么复杂的 UI,基本不可能办到。
需求:能否在autoreplace上添加手动输入功能?
描述:比如制作选择题,在完成摘录后,弹出输入框,由用户手动输入/选择某些值,比如答题记录,然后通过预设的正则表达式合并成。这样可以边摘录边做题,提高效率。
我一直使用系统内置的词典查询功能,遇到需要记忆的单词则要复制释义到卡片评论中,能不能自动化这一过程?系统有没有相应的接口呢?
Mac正版 3.7.12
来自于 all in one
all in one 的策略是给整个 study view 添加手势的识别检测。但是由于 MN 本身的手势优先级更高,所有只有少数几个 UI 组件上执行手势才会生效。
notebookWillOpen: function(notebookid) {
var swipeGestureRecognizer4 = new UITapGestureRecognizer(self, 'handleSwipe4:');
swipeGestureRecognizer4.numberOfTapsRequired = 2;
Application.sharedInstance().studyController(self.window).view.addGestureRecognizer(swipeGestureRecognizer4);
var swipeGestureRecognizer5 = new UISwipeGestureRecognizer(self, 'handleSwipe5:');
swipeGestureRecognizer5.numberOfTouchesRequired = 1;
swipeGestureRecognizer5.direction = 1 << 0;
Application.sharedInstance().studyController(self.window).view.addGestureRecognizer(swipeGestureRecognizer5);
Application.sharedInstance().studyController(self.window).view.addSubview(self.webController.view);
self.layoutWebController();
var pan = new UIPanGestureRecognizer(self,'handlePan:');
pan.maximumNumberOfTouches = 1;
pan.minimumNumberOfTouches = 1;
self.webController.view.addGestureRecognizer(pan);
var LongPress = new UIPanGestureRecognizer(self,'handleLongPress:');
LongPress.maximumNumberOfTouches = 2;
LongPress.minimumNumberOfTouches = 2;
self.webController.view.addGestureRecognizer(LongPress);
if(self.hide == true){
self.webController.view.hidden = true;
}
else{
self.webController.view.hidden = false;};
Application.sharedInstance().studyController(self.window).refreshAddonCommands();
NSTimer.scheduledTimerWithTimeInterval(0.2,false,function(){
Application.sharedInstance().studyController(self.window).becomeFirstResponder(); //For dismiss keyboard on iOS
});
}
});
},
handleSwipe4:function(sender) {
if(self.hide == false){
self.hide = true;
self.webController.view.hidden = true;
NSUserDefaults.standardUserDefaults().setObjectForKey(true,'my_marginnote_hidden');
}
else{
self.hide = false;
self.webController.view.hidden = false;
NSUserDefaults.standardUserDefaults().setObjectForKey(false,'my_marginnote_hidden');};
},
handleSwipe5:function(sender) {
if(self.webController.view.hidden == true){
self.webController.view.hidden = false;}
else{
self.webController.view.hidden = true;
};
},
handlePan: function(sender) {
var point = sender.translationInView(sender.view);
var center = sender.view.center;
sender.view.center = {x: center.x + point.x, y: center.y + point.y};
sender.setTranslationInView({x: 0, y: 0}, sender.view);
self.movedposition = sender.view.frame
self.layoutWebController();
NSUserDefaults.standardUserDefaults().setObjectForKey(sender.view.frame,'my_marginnote_position');
},
handleLongPress: function(sender) {
var point = sender.translationInView(sender.view);
var movedframe = sender.view.frame;
sender.view.frame = {x: movedframe.x, y:movedframe.y, width: movedframe.width + point.x, height: movedframe.height + point.y};
sender.setTranslationInView({x: 0, y: 0}, sender.view);
self.movedposition = sender.view.frame
self.layoutWebController();
NSUserDefaults.standardUserDefaults().setObjectForKey(sender.view.frame,'my_marginnote_position');
},
};
大神甩我个链接可否
chatgpt解答很多问题需有公式识别会方便很多,不过百度马上要下线公式ocr的服务,mathpix api的也改成按次收费了,现在价格便宜还比较好用的公式ocr好像只有讯飞了,感觉加个讯飞的ocr会比较好
开发者你好!非常感谢你开发了一个这么好用的插件!这几天用下来感觉原地起飞爽死了!!!
目前遇到一个bug是,iPad版本批量重命名标题后弹出的对话框,无法使用外接键盘的左右方向键调整光标,而会移动后面的脑图画布。。。我不大清楚这个是插件的bug还是MN的bug,毕竟要在框内输入正则表达式,您看看能不能解决呢?麻烦啦!
希望在插件最上层添加一排小图标,对应下面功能中的摘录时自动执行的开关。
并且增加一个,一键关闭 和 一键恢复上次开启过 两个按钮。
这样就不用每次去翻页查找。
希望,控制界面可以做的更小一点,或者可以增加用户自定义调整大小。例如拖拽按比例调整。
最后感谢开发者的努力和共享。
最后希望以后可以按到正则表达式进行 搜索的插件可以出现。官方搜索,太难用了。
The text replacement only happens for the first match.
For example, (/a/, "")
only substitute the first letter a
in the excerpt, not every instance of a
.
暂时还在思考是否和 AutoColor 统一成 AutoStyle。
摘录样式具体指的是,摘录区域是填充还是边框。#25 提供了一个很有趣的需求,
建议:可以根据字数/单词数判断是否将mn的摘录样式设置为边框+填充/仅边框/仅填充;字数少的设置为边框+填充;字数多的设置为仅边框。既可以让少数重要的概念保持醒目,也避免大量摘录分散注意力。
我认为确实有必要,甚至框选的摘录也应该单独使用一种样式,因为框选的区域会很大一块。
而在颜色方面,由于会显示在脑图上,颜色会有更大的作用,也更需要更自由的修改。我现在能想到的是
这里面的逻辑非常的复杂,首先,一个卡片里可以包含多个摘录,而卡片的颜色是第一个摘录的颜色,之后的摘录其实只是作为评论存在。
由于我不常使用,目前优先级较低,可以先讨论讨论需要哪些预设条件和设置
基于彩云翻译 API 实现摘录英文自动翻译并设置为评论,或者设置英文为标题,翻译为摘录。这个模块需要与 AutoComplete 相协同。
用的是ipad2020,启用插件后没有任何插件面板图标的显示,其它插件启用后在文档内都会有相应的图标可以打开它
现在先记录一下,防止到时候搞忘了
可以尝试使用xregexp替代原生js引擎,有提供兼容层支持negative lookbehide等Safari不支持的高级功能,最后也会编译为原生RegExp对象
目前其实分为两种情况
标题摘录转为标题链接
,就会把符合条件的摘录变成标题链接。改进:添加一个设置项,有三个选项
已有标题,符合条件的摘录将
作者好,感谢你的工作!目前遇到一个问题,我使用AutoReplace实现了对ocr错误空格在摘录中的替换,但mn中经常存在的另一个操作是选中一段话设为标题,能否让AutoReplace实现对这种操作中错误的替换?谢谢~
The double quote ”
is not accepted in the replacement syntax.
For example, (/xxx/, "111")
would work but (/xxx/, ”111”)
wouldn’t. The difference is only the double quotes, "
vs ”
.
As ”
is the default double quote in iPad virtual keyboard, it creates a lot of confusion. It took me quite a while to realize what goes wrong with ”
.
1.需求:就功能而言就类似于一件更改摘录里面所有的颜色那种,选中后将摘录里面的字体更改为某一种字体
2.原因:有时候看多了某一种字体就习惯了,是我个人的不情之请,这个也没什么大不了的只是就我个人而言(。ì _ í。)
3.优先级:等大佬考研完再弄吧,这个我不清楚难度,看社区另一位开发者说法说是很难
需求:字数较少的单个生词,或者概念/定义,将其摘录样式设置为边框加填充;对于较长的句子,将其摘录样式设置为仅边框
现阶段mn的摘录样式好像是默认和上一次摘录样式保持一致,需要频繁的手动修改,实在是太过麻烦。现在用ohmymn可以在整理脑图的时候批量修改,但仍然需要自行判断、选中不同的卡片笔记需要什么样式;并且在阅读文档的过程中,摘录样式就会很影响阅读体验了,等到整理脑图笔记的时候再修改样式有一些亡羊补牢的感觉。
建议:可以根据字数/单词数判断是否将mn的摘录样式设置为边框+填充/仅边框/仅填充;字数少的设置为边框+填充;字数多的设置为仅边框。既可以让少数重要的概念保持醒目,也避免大量摘录分散注意力。
AutoComplete用来做英语阅读真的太棒了,感谢开发者。
反馈两个使用这一功能中遇到的两个小问题:
是我的问题,没看仔细,下面是解决方法:
是否开启了自动矫正
MagicAction
里面的补全单词词性
,这一功能包含了填充单词解释/词频dict.ts
,扩充词库是另外的工作了首先感谢大佬的付出😄,太厉害了!
需求:有时摘录一段文字后,因文字内容有错误或文字内容过于冗余,需要对其进行更改。更改完成后,常常因为文档中摘录选区的再调整(大部分是因为误触),使得摘录内容又变回原样。所以,有没有办法既保留文档的摘录选区,又能锁定脑图的摘录内容,使得脑图的摘录内容不因选区的调整而发生改变?
因为不懂编程,所以也不知道这个功能有没有可行性,难度大不大。再次谢谢!
目前ohmymn可以给英文单词自动补全词形作为标题别名,也可以通过AnotherAutoTitle插件把符合条件的摘录转换成标题别名。但是在一些外文/专业书籍里的专业名词,自动补全词形里的词汇量不能够涵盖到,而文章里也没有它的别名,只能从维基/Google/欧路词典里面把相应的中文/英文/其它外文的对应概念作为别名,目前把外部的文字内容拖拽进已有的摘录只能形成这个摘录的评论,而实际上是希望它作为标题别名的。现阶段AutoTitle只能把符合条件的摘录转成标题,摘录内容只能来自文章内部,能不能单独开发一个插件把符合条件的评论也转换成标题,或者把它整合到现在的AutoTitle里。感谢大神!
目前首先会有 Export to Anki
创作者好,感谢你最新的更新,实现了摘录标题自动化生成的功能!
目前使用中出现一个问题:即在只打开“摘录自动合并为标题”功能,却不打开“是单词”和“不含有点号”功能的时候,采用拖拽方式将文本拖入摘录的时候,文本无法自动转化为标题链。只有在打开上述两个功能的时候,才能实现拖拽转文本自动转化标题链的功能。
不知道这是否是一个bug?
希望创作者再接再厉!
没法解决,请升级到最新系统,至少是 Macos 12。
我这里有一个应wslldsdh的需求制作的小插件,打开后可以自动添加序列号到标题前,逻辑和功能都已经实现了,你假如有兴趣可以考虑集成进来,代码可以随意使用:ordered-list
Line 63 in 0a495d6
环境:macOS10.14 mn3从App Store下载的最新版本
能正常导入插件,但无法正常开启,按钮点开之后依然会自动变灰,插件无法正常使用
这涉及到的问题很复杂,我需要整个重构处理摘录这块的代码,这块的逻辑很混乱,需要一点时间。
建议能不打开自动矫正就不打开自动矫正。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.