[求助] Autohotkey 增强 Evernote 编辑器 - V2EX
xiaopenyou

[求助] Autohotkey 增强 Evernote 编辑器

  •  1
     
  •   xiaopenyou Apr 26, 2015 4419 views
    This topic created in 4047 days ago, the information mentioned may be changed or developed.

    我一直在用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>") 
    13 replies    2015-06-04 09:08:07 +08:00
    lsmgeb89
        1
    lsmgeb89  
       Apr 26, 2015
    擦,还可以这么搞!
    不过有时间的话还是自己折腾吧,像 HTML/CSS 基本看下 w3cschool 两三个小时就能初步学会了。
    xiaopenyou
        2
    xiaopenyou  
    OP
       Apr 26, 2015
    @lsmgeb89 style优先级和!Important能查的都查了。没搞定才来问
    我只能想到一个办法,删除内部冲突的重复格式,但这样代码就复杂了,作为非程序员,我hold不住。。。增强evernote编辑器这件事,有专业程序员来做,该多好。。
    lsmgeb89
        3
    lsmgeb89  
       Apr 26, 2015
    @xiaopenyou sorry 哈~~

    我看看,你有 fail 的 case 吗?共享出来。
    xiaopenyou
        4
    xiaopenyou  
    OP
       Apr 26, 2015
    @lsmgeb89 谢谢!这是case: http://www.evernote.com/l/AEdkshXC4ptEdLhY31hau9oBh9pSomy7mJ4/
    没写太规范,应该挺清楚

    完整脚本: http://pan.baidu.com/s/1c0AQE1U
    lsmgeb89
        5
    lsmgeb89  
       Apr 27, 2015
    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 多少?
    xiaopenyou
        6
    xiaopenyou  
    OP
       Apr 27, 2015
    @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有没有改变这里优先级/作用域的机制...
    xiaopenyou
        7
    xiaopenyou  
    OP
       Apr 27, 2015
    @lsmgeb89 谢谢帮助!除非高人点明路,可能没时间试错了,继续凑活用了呜呜。抛砖引玉,增强en编辑器的工具,希望有专业的盆友做……

    马克飞象之类的,和客户端集成不够无缝,需另开浏览器;为知又有某些一票否决型硬伤,例如不能搜索「带有标签A,且全文含有B」的笔记。印象大概还需用很多年……编辑增强工具迫切需要…
    lsmgeb89
        8
    lsmgeb89  
       Apr 27, 2015
    哈哈~~

    把这句话:
    t := WinClip.GetHtml3()

    改为:
    t := WinClip.GetText()

    测试了下,除了方框环绕都可以了。

    你自己检查下是不是方框环绕的样式太复杂了,有 evernote 不支持的 style 在里面。
    lsmgeb89
        9
    lsmgeb89  
       Apr 27, 2015
    测试了下方框环绕的样式 evernote 可以显示,那可能就是 _compileClipData 处理数据的时候出问题了。

    怎么能方便的把 ByRef 打印出来?
    xiaopenyou
        10
    xiaopenyou  
    OP
       Apr 27, 2015
    @lsmgeb89 最早的版本就是GetText(),缺点是会丢原格式。不保留原格式的话,用GetText()挺好
    lsmgeb89
        11
    lsmgeb89  
       Apr 27, 2015
    @xiaopenyou 这东西用 Autohotkey 写太折腾,用 C++ 或者 C# 什么的应该方便多了。
    xiaopenyou
        12
    xiaopenyou  
    OP
       Apr 27, 2015
    @lsmgeb89 哈哈,l兄有空写下吧!en的用户群这么大,编辑器差又众所周知,这块无缝集成的需求多年没人填。
    pheyer
        13
    pheyer  
       Jun 4, 2015
    @xiaopenyou LZ脚本下载不了
    About     Help     Advertise     Blog     API     FAQ     Solana     4523 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 49ms UTC 09:58 PVG 17:58 LAX 02:58 JFK 05:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86