我一直在用Autohotkey增强印象笔记的编辑器,最终效果类似 (抱歉不重新截中文图了):
基本能用,但是,一直有Bug:
图可能不清楚,就是说有时候刷不上格式;对多行刷格式时,也可能样式错位。
暂时猜测,可能是内联样式的优先级最高,导致包裹在外面的标签中,定义的内联样式没有生效(!Important经测试也无效)。
这个脚本天天用,所以有Bug还是挺烦的。有熟悉HTML/CSS的盆友能帮忙看看吗?怎么完善?
主要代码:
;把原先的文本,带格式拷出来,外面裹上新格式html,再粘贴回去
evernoteEdit(eFoward, eEnd)
{
clipboard =
Send ^c ;copy chosen text in evernote
ClipWait, ,
t := WinClip.GetHTML_DOM() ;get text with format from clipbd
html = %eFoward%%t%%eEnd% ;add new format
WinClip.Clear()
WinClip.SetHTML(html) ;return new format text to clipbd
Sleep, 300
Send ^v ;paste to evernote
Return
}
#1::evernoteEdit("<div style='color: #F02E37;'><b>", "</b></div>")
!1::evernoteEdit("<div style='background: #FFFAA5;'>", "</div>")
!f::evernoteEdit("<div style='margin-top: 5px; margin-bottom: 9px; word-wrap: break-word; padding: 8.5px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(245, 245, 245); border: 1px solid rgba(0, 0, 0, 0.148438)'>", "</div>")
1
lsmgeb89 2015-04-26 21:09:35 +08:00
擦,还可以这么搞!
不过有时间的话还是自己折腾吧,像 HTML/CSS 基本看下 w3cschool 两三个小时就能初步学会了。 |
2
xiaopenyou OP @lsmgeb89 style优先级和!Important能查的都查了。没搞定才来问
我只能想到一个办法,删除内部冲突的重复格式,但这样代码就复杂了,作为非程序员,我hold不住。。。增强evernote编辑器这件事,有专业程序员来做,该多好。。 |
3
lsmgeb89 2015-04-26 21:44:15 +08:00
|
4
xiaopenyou OP @lsmgeb89 谢谢!这是case: http://www.evernote.com/l/AEdkshXC4ptEdLhY31hau9oBh9pSomy7mJ4/
没写太规范,应该挺清楚 完整脚本: http://pan.baidu.com/s/1c0AQE1U |
5
lsmgeb89 2015-04-27 00:44:06 +08:00
Evernote 是用的 ENML 作为格式的,并不和 html 完全一样,下面是它的格式标准:
http://xml.evernote.com/pub/enml2.dtd 下面这个网站可以把你的 note 显示为 ENML 格式,你可以用这个来调试: https://evernote-ascii.appspot.com/ 由于我不懂 Autohotkey 代码,大概看下可能是这句代码 return doc.all.tags("span")[0].InnerHtml 出了问题,因为你给我的这个 note 里根本没有 span tag,它用的是 div tag。 所以你最好在 return 之前把数据打印出来看看,到底拿到的是什么? 你 QQ 多少? |
6
xiaopenyou OP @lsmgeb89 源ENML和函数GetHtml读出的,不完全一致。加打印`MsgBox, % WinClip.GetHtml3()`可以看到,后者最外层都是带span的。
个人感觉,原因是内层样式覆盖了外层,像这是GetHtml读出的: ```<SPAN style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; DISPLAY: inline !important; FONT: medium 微软雅黑; WHITE-SPACE: normal; ORPHANS: 2; FLOAT: none; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">鼠标选中这句话</SPAN>``` 这是加入新样式,准备写回evernote的: ```<div style='color: #F02E37;'><b><SPAN style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; DISPLAY: inline !important; FONT: medium 微软雅黑; WHITE-SPACE: normal; ORPHANS: 2; FLOAT: none; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">鼠标选中这句话</SPAN></b></div>``` 可发现,这步出问题了,内层span的COLOR,覆盖了外层新添加的div的color,但我不知道怎么fix。不知道html/enml有没有改变这里优先级/作用域的机制... |
7
xiaopenyou OP @lsmgeb89 谢谢帮助!除非高人点明路,可能没时间试错了,继续凑活用了呜呜。抛砖引玉,增强en编辑器的工具,希望有专业的盆友做……
马克飞象之类的,和客户端集成不够无缝,需另开浏览器;为知又有某些一票否决型硬伤,例如不能搜索「带有标签A,且全文含有B」的笔记。印象大概还需用很多年……编辑增强工具迫切需要… |
8
lsmgeb89 2015-04-27 11:36:33 +08:00
哈哈~~
把这句话: t := WinClip.GetHtml3() 改为: t := WinClip.GetText() 测试了下,除了方框环绕都可以了。 你自己检查下是不是方框环绕的样式太复杂了,有 evernote 不支持的 style 在里面。 |
9
lsmgeb89 2015-04-27 11:49:00 +08:00
测试了下方框环绕的样式 evernote 可以显示,那可能就是 _compileClipData 处理数据的时候出问题了。
怎么能方便的把 ByRef 打印出来? |
10
xiaopenyou OP @lsmgeb89 最早的版本就是GetText(),缺点是会丢原格式。不保留原格式的话,用GetText()挺好
|
11
lsmgeb89 2015-04-27 15:51:33 +08:00
@xiaopenyou 这东西用 Autohotkey 写太折腾,用 C++ 或者 C# 什么的应该方便多了。
|
12
xiaopenyou OP @lsmgeb89 哈哈,l兄有空写下吧!en的用户群这么大,编辑器差又众所周知,这块无缝集成的需求多年没人填。
|
13
pheyer 2015-06-04 09:08:07 +08:00
@xiaopenyou LZ脚本下载不了
|