V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xiaopenyou
V2EX  ›  问与答

[求助] Autohotkey 增强 Evernote 编辑器

  •  1
     
  •   xiaopenyou · 2015-04-26 21:05:24 +08:00 · 3774 次点击
    这是一个创建于 3288 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    完整脚本: http://pan.baidu.com/s/1c0AQE1U
    lsmgeb89
        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 多少?
    xiaopenyou
        6
    xiaopenyou  
    OP
       2015-04-27 03:50:31 +08:00
    @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
       2015-04-27 04:10:24 +08:00
    @lsmgeb89 谢谢帮助!除非高人点明路,可能没时间试错了,继续凑活用了呜呜。抛砖引玉,增强en编辑器的工具,希望有专业的盆友做……

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

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

    改为:
    t := WinClip.GetText()

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

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

    怎么能方便的把 ByRef 打印出来?
    xiaopenyou
        10
    xiaopenyou  
    OP
       2015-04-27 15:39:53 +08:00
    @lsmgeb89 最早的版本就是GetText(),缺点是会丢原格式。不保留原格式的话,用GetText()挺好
    lsmgeb89
        11
    lsmgeb89  
       2015-04-27 15:51:33 +08:00
    @xiaopenyou 这东西用 Autohotkey 写太折腾,用 C++ 或者 C# 什么的应该方便多了。
    xiaopenyou
        12
    xiaopenyou  
    OP
       2015-04-27 16:01:55 +08:00
    @lsmgeb89 哈哈,l兄有空写下吧!en的用户群这么大,编辑器差又众所周知,这块无缝集成的需求多年没人填。
    pheyer
        13
    pheyer  
       2015-06-04 09:08:07 +08:00
    @xiaopenyou LZ脚本下载不了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2736 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:32 · PVG 10:32 · LAX 19:32 · JFK 22:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.