WDTP:一款“三合一”的写作工具和桌面版静态网站生成器

2017-02-04 23:36:24 +08:00
 SwingCoder

谢谢 Akkuman 和 CoderZh 两位朋友的介绍和推荐,让我得知了 V2EX 这个尊重原创,热爱分享与创造的好网站。我想在此和大家分享一款我刚刚开发完成的软件(目前是内测版,正在不断完善更新),如有不妥,请管理员批评指正并谅解。

WDTP 是一款“三合一”的另类写作工具与桌面 GUI 单机性质的静态网站(博客)生成器,这个项目的主页是:

http://underwaysoft.com/works/wdtp/index.html

WDTP 昨天首发于国内的凯迪论坛,我将原帖复制粘贴在此吧。


WDTP :源于凯迪论坛的又一款写作利器

2016 年年初,我在凯迪论坛看帖的时候,意外地发现了一座高楼,所讨论的话题是我前几年很感兴趣的。于是开始关注,时不时也掺和几句,然后就和几位骨干帖友混了个脸熟——其中一位是陈坪先生。有天我去拜访他的博客,浏览文章的时候突然冒出一个 idea ,可能更像是一些自我觉察,大致如下:

诸如此类。相信其他一大批小众也会有这些想法。说实话,以上这些真心不好用,尤其是学习与使用成本,还有使用时的心情,数据的随时检视、备份、管理与迁移,远程修改、调试与刷新等等。很折磨人。它们或许非常适合更广泛的一大批用户,某些情况下肯定也是非用不可,但很多时候确实不再适合我,也没必要时时动用这些怪兽级的庞然大物。

更进一步,笔记、写书、博客、网站这几件看似互相割裂的事,其实完全可以也早就应该简简单单、清清爽爽地合而为一了。而写作时,“内容与样式分离、样式与模板分离”等程序员最熟悉的理念与常规做法,这么多年以来,我为什么没有在自己的文字写作过程中更深入地理解和贯彻呢?有点不应该。

想法中还包括了其他。比如:“静态网站生成器( Static Site Generator )”,这东西近两年在喜欢尝鲜的技术类博主中很受推崇。有媒体放言:“下一批互联网大事件中,新型的静态网页及其生成将位列其中”……据我所知,这类程序目前至少上百,采用了各种各样的编程语言,它们中比较知名的有: Jeklly 、 Hugo 、 Hexo 、 Octopress 、 Pelican 、 Hyde 等等。尤其是 Jekyll ,背靠 Github 这棵大树,几乎一夜之间风靡全球。我对此做了一些肤浅的调查,一个匪夷所思的事实是:就我所接触到的“对口者”,竟无一例外——清一色的命令行程序!没有 GUI ,没有文本编辑器与可视化的 TreeView ,有的居然还要安装整个语言环境或依赖库。动辄百兆以上,太让人愤慨了。大不说,还麻烦。无论获取、安装,还是设置、使用,都不直观,也不方便,对一般人来说门槛有点高。这就势必将更广泛的用户群(比如普通的写作者)排斥在外,使他们很难享受到文本标记语法、内容 /样式分离、高自由度和灵活随意的静态博客等另类而好玩的写作 /分享模式。

既然尚无,那迟早就会有人下手,不妨等等,于是我就把这个事搁置了。此期间,我曾加入一个推广某静态生成器的国内群,也在 Stack Overflow 上转了转,四下打探一番,无果。有人曾抱怨过,但最终也是不了了之。

浏览陈坪先生的文章时,以上想法突然变得强烈起来。我琢磨了一下,这个事技术含量虽不高,但并不轻巧。脏活总是让同行包揽始终让人过意不去,干脆我自己趟一次浑水,再造个轮子吧:写一款跨平台且简洁清爽的桌面版静态网页生成器,顺便糅合上面提到的那几个功能,尽量将它们捏到一起,争取做的轻巧点、优雅点,先把基础和架子搭起来,后续事务和细化处理慢慢再捯饬。

琢磨的七七八八后,就立项动工了。关于编程语言的选择,脚本不考虑,平台相关的谢绝,数据库滚蛋。这么一来,似乎只有 Java 或 C++了。 Java 一贯不是我篮子里的菜,就 C++吧。

然后……然后就是今天 WDTP 内测版的首发,地点就在凯迪论坛的猫眼看人版块。可能有点唐突违和,请允许我解释一下:一方面这个程序的诞生确实与凯迪有直接的关系;另一方面此处风云际会、藏龙卧虎,能写、会写、喜欢写的人非常多,给这批笔友提供另一件顺手的写作工具应该是一件有意思的事。此外,似乎还没有哪位同行在这样的大杂烩论坛里做过这种类型的“主播”。这事有挑战性,风险并不小。但我想试试。

产品的首发式上,一般都会真真假假、虚虚实实地谈谈愿景、希望什么的。我这会儿有点忐忑,不敢满口火车。现在最大的希望是:值班编辑此刻心情不错,不删改这个贴,也不打算将它转移到凯迪的其他版块里。

关于程序的授权方式和性质, GPL v3 ,开源免费。不光凯迪的网友,全世界任何个人和组织都可以随意使用、传播、解剖源码或 PR 贡献,也接受来自任何方面的捐助。这些没什么需要多解释的。该有的,《授权协议》里都提到了,不够我再加几条:)

项目开工后,中间曾停工 3 个多月。 2016 年我周围发生了几件悲伤的事,让人心碎,这几乎导致了项目的夭折。费了很大劲我才将自己振作起来,硬挺着把 WDTP 的第一个版本敲了出来。活干得如何,横竖不论,交给诸位评说。目前 Bugs 肯定一堆,代码急需规整,很多细节也亟待完善。我实在不好意思说自己是一个敲了整整 30 年代码的老一代苦逼程序员——面老色衰,人狗远之。大江东去,属于我们的时代过去了……滚出这个行业之前,尽力散发点余温吧。希望热情还在,理想还在,更希望能听到真实而有价值的反馈与意见,以及各位同行的 PR 提交、无私贡献。

可能有人对大部分开源软件的维护更新感到不放心。我在此表个态吧:未来很长一段时间内,我可能每天都要用它,而且是重度使用。无论作为设计人、开发者、项目的第一责任人,还是作为用户之一,我肯定不愿意为了它而过分难堪或郁闷,更不会让它在七歪八扭、一团乱麻的失控状态下无果而终。

关于 WDTP ,还有几个必须要感谢的人——期待未来会更多,以后有机会一定专门提及。

That's it. 谢谢所有看了此贴的人,谢谢即将成为 WDTP 用户的每一个人,谢谢陈坪先生和那个高楼长贴,以及该贴中所有让我感到温馨的人。

今日立春,使用愉快!

SwingCoder 2017.02.03 于凯迪论坛

本文已发布在凯迪论坛的猫眼看人版块: http://club.kdnet.net/dispbbs.asp?id=12102372&boardid=1


欢迎大家下载试用并提出宝贵意见!

谢谢!

SwingCoder

30302 次点击
所在节点    分享创造
651 条回复
SwingCoder
2017-02-12 07:22:29 +08:00
新增:非标准 Markdown 语法标记:“[TOC]”(目录)。可手工输入该标记,也可编辑器右键菜单插入。注:仅提取当前文档中的二级和三级标题。

一并更新了默认的样式表。
SwingCoder
2017-02-12 07:24:13 +08:00
@TheKiteRunner 谢谢您:)
SwingCoder
2017-02-12 21:26:23 +08:00
完善:目录提取与生成时包含一级标题。单独生成文档目录时,目录中不含本文标题(默认为本文档第一行的一级标题)。但是,整个项目或某个目录下的文档集中输出为一个大的 html 时(文档集成),则自动提取每个文档的标题作为一级目录,每个文档中的二级和三级标题自动提取为二级和三级目录。此时,该文档原有的目录将不再单独提取并生成。
SwingCoder
2017-02-12 21:48:06 +08:00
修复:文档集成时首篇标题没有被正确解析,未提取为一级目录的 bug 。
SwingCoder
2017-02-12 23:39:10 +08:00
实现:将所选文档导出为一个本地文本文件。可利用这一点,将 WDTP 作为一款方便的文本编辑器、 Markdown 编辑器来使用(特别在 macOS 平台下)。
SwingCoder
2017-02-13 01:02:26 +08:00
新增:快捷键“ Ctrl + F ”:激活文档搜索输入框。激活后,直接输入要搜索的关键字而后回车即可。
SwingCoder
2017-02-13 06:11:22 +08:00
• 新增 Markdown 语法:插入尾注(语法格式: [^注释内容] )。所插入的尾注自动编号,注释内容以列表的形式显示在本文档的最后[1]。可连续插入并列尾注。

◦ 注 1 :整个项目或某个目录下的文档集成输出时,所有文档的尾注统一编号,注释内容位于集成后的文档最后。这一点,对技术作家和文学评论家、文艺批评家来说非常方便(比如一章作为一个目录,这样可以按章输出,每一章的最后是本章的参考文献、正文注释、索引等)。

◦ 注 2 :根据 html 网页文档的特点, WDTP 使用“尾注”的同时舍弃了“脚注”这一标准。按行业规范,尾注有“温哥华体系(顺序编码)”与“哈弗体系(作者、译著、出版年制)”, WDTP 采用了前者(这种体系相对自由和随意一些,而后者主要用于列举参考文献,其格式比较严格)。

◦ 注 3 :尾注内容支持 Markdown 标记语法,但尾注中不可再嵌套尾注。
TheKiteRunner
2017-02-13 11:33:40 +08:00
1 当 enter 键产生下一段落符号,按 tab 键应该直接变为下级编号。目前的情况是,要选中该段落再 tab 才可以。
2 空格, tab ,回车等符号可选显示。
SwingCoder
2017-02-13 13:24:11 +08:00
• 实现:批量导入本地磁盘中的文档( UTF-8 格式的文本文档或网页文件)。
SwingCoder
2017-02-13 14:50:18 +08:00
@TheKiteRunner 先生。如果当前段落是有序列表或无序列表,第一次回车,下一段自动是平级列表,再次回车,变成次级列表。也等于是:连续按两下回车,下一段就是次级列表。不输入内容,第三次回车,取消列表标记,直接输入下一个正文段落。这不是更简单吗?:)

第二个问题 QQ 中已交流,此处不再重复了。谢谢:)
SwingCoder
2017-02-13 16:28:42 +08:00
实现:本地磁盘中的一个或多个文件用鼠标或手势拖放到文件树面板之后,自动导入所拖放文件中所有文本格式的文档。文档导入的具体位置(所在目录)将随着鼠标或手势的上下移动而实时提示。
TheKiteRunner
2017-02-13 17:01:48 +08:00
查找功能不知道是否会考虑加强,目前查不全,没有高亮查到的项目。
SwingCoder
2017-02-13 17:29:10 +08:00
@TheKiteRunner 先生,目前除了 Abbreviation 部分不能采用常规办法搜索之外,其余文档内容都可以通过两个搜索框和两组快捷键来搜索( F3 和 Shift + F3 是搜索选区内容,文档内)。搜索算法都是很成熟的古老技术了,应该不会有任何遗漏。

每个搜到的关键词,自动虚下划线醒目提示。全局搜索的第一处,默认不高亮,这个有特殊考虑,也防止键盘或手势误触,删改了高亮选择的部分。一般,全局搜索,很少改写(改写可通过替换实现),首次或更换文档搜到,第一处最好不要加高亮。以后的搜索,因为大脑已经有了警觉性记忆,而且首个已经找到,为防止眼睛遗漏,从本文档内第二个搜到的关键字开始加亮,同样,还是给出醒目的下划线。更换文档,重复以上。

网页 meta 属性这部分内容,也不在常规搜索之列,我觉得没必要搜索这部分内容,也不好展示搜索结果。 meta 的来源应该全部从文档中提取。文档修改后,重新提取或手工增删改。

网站本身的搜索功能,这个可以用 js 技术来实现,比如按 Doxygen 那种。 Doxygen 这个项目也是开源的,可以参考它这一块的算法。用模板,或者干脆用 WDTP 来写都行。事实上, WDTP 就是一个很方便的用于前端开发的简易版 IDE ……
TheKiteRunner
2017-02-13 19:25:22 +08:00
@SwingCoder

感谢回复。

1 虚线很不明显,几乎看不到。截图见 QQ 。

2 搜索框应该是全局搜索,但似乎默认只找到文件里的第一次出现的内容。同一文档中, f3 倒是很有效。左侧边栏全局搜索框和右侧边栏的文档内搜索框没有提示。

3 WDTP “多个文档的集中组织与结构化管理”,如果不能匹配查找,统计查找次数,替换,是不是有点遗憾?

4 对我个人而言,并没有最终放到网站的需求。只是组织和管理多个文档的写作内容,导出为 html ,最终放到印象笔记或者 kindle 里面。写作过程中,有跨文档的查找需求。您最后的解释,似乎并没有完全包含以下两条的内容。

“多年以来,在写稍微正规一点的东西时, Pages 或 Word 之类的巨无霸实在让人心累,可能也不是太必要。即便这些巨无霸,对多个文档的集中组织与结构化管理也不好使,更别说那些纯文本的编辑器和网页端基于各类脚本写就的编辑器;
平时读书、学习或做笔记时,除了我个人开发的一款同类软件, Evernote 等臃肿不堪的云笔记已经很难让我有愉悦的使用体验;”

5 当然,这个软件的开发肯定是为了实现您自身的构想,这可能还是得回到您最初的 idea 上去了。
SwingCoder
2017-02-14 01:07:28 +08:00
@TheKiteRunner 先生,第一个问题已经做了修正。

第二个问题: WDTP 的搜索是三种类型不同的搜索,这一点与常规软件不同。这三种各有适应的场景,但是核心思想都是效率和简洁。第一种是全局搜索,以文档为单位(如果首个找到后不切换为文档搜索的话)。第二种是文档内常规搜索。第三种是写作或编辑时文档内搜索选区。

The next: 搜索方面进行统计,我觉得不是很必要,属于功能冗余。它不能从本质上提高生产力和生产效率,只是让用户将更多时间花在软件操作上。项目中的数据是随时变化的,没必要时刻掌握某个关键字的出现频率。也就是,我希望用户更多将精力用于内容的生产与管理,而不是对内容本身的统计。这个看其他用户的需求吧,如果大多数人都需要,我可能会加上这个功能。

一些特殊目的的统计和分析,以及基于分析而给出的宏观提示或智能建议,这个功能我正在考虑。现在还没有特别好的想法。算法实现方面,也需要仔细斟酌。实际上,主要还是专业领域侧重点方面的问题没有想好。

4. WDTP 侧重于本机管理和备份数据。远程备份、数据同步、历史记录和版本管理等方面,我建议使用 git 或个人专属的 FTP 服务器。尤其是 git ,它的功能和便利处更强大。如此一来,如果不是非常特殊的目的,或者不走所见所得这个计算机数字化文本处理的“路子”, WDTP 完全可以取代其他云笔记——至少对我来说是这样。
SwingCoder
2017-02-14 01:10:24 +08:00
SwingCoder
2017-02-14 01:16:30 +08:00
补充两点吧:)

1. 用 git 进行备份和同步,还可很方便的实现数据回滚。

2. WDTP 的替换,也与“传统的”替换不一样。也是三种类型。基于文档、某个目录下的所有文档(含子目录及其文档)、整个项目。这一块,下一步需要完善的是:撤销替换。虽然没有撤销功能也无不可(再替换回来),但是可能有些用户会提出这个需求……
SwingCoder
2017-02-14 02:18:50 +08:00
• 实现:本地磁盘中的一个或多个图片拖拽到编辑器之后,自动将所拖拽的图片导入项目中并在编辑器的插字符光标处插入这些图片的 Markdown 标记文本(每一幅都包含图注标记)。
SwingCoder
2017-02-14 03:37:24 +08:00
修复:编辑状态下提取标题、关键字和描述后,文档设置面板没有及时刷新的 bug 。
SwingCoder
2017-02-14 08:13:50 +08:00
新增文档: WDTP 所支持的文本标记语法
http://underwaysoft.com/works/wdtp/syntaxMark.html

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/338138

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX