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

29841 次点击
所在节点    分享创造
651 条回复
SwingCoder
2017-02-09 04:47:58 +08:00
- 新增:模板标签{{contentDesc}}。模板制作者可利用此提取文档或目录的描述,默认为 html 的引用格式。
- 更新:默认的 blog 模板。此更新将影响所有使用 blog 默认模板的用户。解决方案:升级本程序后,执行系统菜单下的“重置 /修复系统模板”,而后重新生成整站。
SwingCoder
2017-02-09 05:09:28 +08:00
• 改进:项目数据打包备份时, zip 文件名中给出备份的时间戳信息。
SwingCoder
2017-02-09 07:07:41 +08:00
新增:文本高亮的 Markdown 语法( WDTP 所自定义)。格式“~~需要高亮突出的文本~~,显示效果:需要高亮突出的文本。快捷键: Ctrl + U 。编辑器右键菜单中也有对应的菜单项。

注:传统 Markdown 语法中的“~~”为文字删除线标记——就我个人的体验来说,阅读网络文章时遇到一段文本被划上删除线总是感觉很诡异,不清楚这段文字到底还有没有阅读价值,或者揣摩作者来这么一手究竟何意(好在这种情况极少)。如果作者将该文作为多次修改、甚至数易其稿的写作艰辛之痛苦展示,可能目的达到了,但是这对读者来说肯定不是良好的阅读体验,也不公平。

删除线有时也有用,比如:原价 xxxx 元,现价 xxx 元……或者还有其他一些必须使用的场景,此时可使用 html 标签中的< s />
SwingCoder
2017-02-09 07:12:01 +08:00
勘个误:“~~”删除线格式并非 Markdown 的“正统”语法,属于 MD “方言”的一种。
TheKiteRunner
2017-02-09 09:31:48 +08:00
说到使用快捷键,似乎有个比较尴尬的问题。许多笔记软件所支持的快捷键是不同的,比如 ctrl+K ,在印象笔记和 typora 中是插入链接,在此是插入代码块,不过 markdown pad 与您的软件一致。不知道开发者在设计快捷键的时候是否会考虑同类软件的快捷键布置,以减小软件迁移成本。
SwingCoder
2017-02-09 11:30:25 +08:00
Kite 先生,您好。快捷键这些,基本都是随意定义的:)确保不与软件中已有的发生冲突,能 F 就 F ,能首字母就尽量首字母,能字母就不数字,能 cmd 就不 shift ,能两个一组就不搞三个……大概就是这个原则吧:)字母键一共就那么三排,除了约定俗成的那几个,剩下的,翻来覆去,肯定会和其他软件定义的一致,或者完全不一致,呵呵。

可以搞一个对话框,罗列所有的快捷键,除了没必要更改的之外,其他允许用户编辑、自定义、启动时自动加载、导入导出等等……大伙如果需要,我就加上这个功能吧:)不过, WDTP 就越来越庞杂,越来越让用户“用软件、玩电脑”,而不是“出活、享受生活”了,并且有些脱离它的核心操作理念和开发初衷:)

Markdown 等文本编辑,包括大多数内容样式分离这种文字处理和编辑方式,大量使用格式的场景很少……印刷和出版级的专业性要求, Markdown 和 Html 都不能胜任。它们的目的和应用场景不是这个方面:)
SwingCoder
2017-02-09 11:56:36 +08:00
另外,我个人的肤浅之见,除了格式,一份文档的最终呈现,样式这个方面更加重要。 Markdown 借助于 html ,配合强大的 css (静态)、 js (动态),基本可以做到接近完美。

样式方面,我曾考虑过为 WDTP 写一个可视化的 css 编辑器和模板制作 /修改器(或者单独执行的通用型 CSS 编辑 /生成器),采用所设即所得这个模式。由于太费时间,精力不够,就搁置了:)
TheKiteRunner
2017-02-09 13:56:49 +08:00
嗯,理解并支持。
hezhile
2017-02-09 14:13:15 +08:00
已经下载试用了,果然很强大。

貌似发现一个小 bug :
在修改 UI color 之后,再选择恢复到默认的颜色,程序会有几分钟的没有响应。
系统是 win 10 pro 64 位
TheKiteRunner
2017-02-09 15:43:52 +08:00
# WDTP 使用反馈

**编辑**

- 选中内容,希望键入` ,\*,\*\* 等键将对应内容自动包围
- tab 键
- 选中内容, tab 键增加缩进,避免手打缩进
- 此时如果上级内容为段落编号, tab 键产生下一层级
- 特殊符号没有自动去掉\,如\*等
- enter 键自动延续段落编号
- 链接
- 插入链接前若剪贴板有内容,剪贴板内容进入小括号
- 插入链接前若选中文字,文字进入方括号
- 插入[长链接]( https://zh.wikipedia.org/w/index.php?title=Help:%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F&oldid=34379459)这种情况,为节约书写空间,可否考虑隐藏长链接部分(或以省略号形式实现)?
- 编辑时可否 *一定程度* 上 **突出各部分** ,如 **加粗**、*斜体*和 [长链接]( https://zh.wikipedia.org/w/index.php?title=Help:%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F&oldid=34379459)?

![](D:\Git_Repository\ScreenShots\WDTP\sublime-MarkdownEditing 效果.png)
^^ 上图:风景照片(本行是自动插入的图注)

其它:

- 新打开程序,没有自动出现在当前窗口前面,而是后台
- ctrl + c 复制时常失效,右键点选正常
- 存在这样的情况,光标在预览视图激活时,无法 ctrl+s 切换到编辑视图,光标在工具栏激活后,才正常
TheKiteRunner
2017-02-09 15:44:27 +08:00
上面的图注没有修改。
anyforever
2017-02-09 16:01:46 +08:00
很快就能扔掉 WP 了。:)
arens
2017-02-09 16:47:23 +08:00
好东西,支持楼主已 Star
SwingCoder
2017-02-09 21:01:14 +08:00
@hezhile 谢谢您的宝贵意见。稍后我仔细跟一下,解决后及时列出更新记录:)这个功能的代码:
https://github.com/LegendRhine/WDTP/blob/master/Source/TopToolBar.cpp
Line 666~685
该函数执行后,会回调本类的 paint()方法。都发生在主线程上。
SwingCoder
2017-02-09 21:15:45 +08:00
@TheKiteRunner 谢谢您的宝贵意见。 Markdown 字符转义,上一个工作日补上去了,可能还有遗漏,稍后全面测试这一块的时候再完善一下吧:
https://github.com/LegendRhine/WDTP/commit/1c3f9fbbadd88df715a7612e06ee769dd6418abf

编辑器的智能判断和“人性化”方面,这个是一个很细微的琐碎活,程序的主要功能完成并稳定后,我会一点点加进去。

启动后没有位于最前,一般和操作系统的当前状态有关系,似乎 Windows 10 之前的系统,经常出现这个问题。可以强制程序最前,但是这个做法有点“太霸道”了:)稍后我跟一下代码,应该有更好的思路。主要是这个问题在我的本地机上很难重现。

Ctrl + C 复制,还没有发现过这个问题,稍后我仔细试一下。

Windows 平台下,预览模块调用的系统浏览器内核,默认使用 IE 11 。 Windows 这方面很霸道,用了它的东西后,它就会吃掉用户的键盘事件,而后自己消化了。这个目前没有很好的解决办法,一个比较 Ugly 的做法是专门针对 Windows 写一段代码……或者用户将焦点转移到程序的其他地方,或者触摸 /点击“大眼睛”,等等。
SwingCoder
2017-02-09 21:16:59 +08:00
@anyforever @arens 谢谢二位的支持和鼓励:)
SwingCoder
2017-02-09 21:20:54 +08:00
V2EX 的回复,最新的在最下面,各个回复之间区别也不太明显,浏览起来有点不顺手,我还需要进一步习惯:)
大家有问题或 bug 提交,也可以到 github 上,直接针对具体的代码问题更欢迎:)

目前 WDTP 已开放 PR 提交和问题讨论:)项目地址:
https://github.com/LegendRhine/WDTP

谢谢关注!
SwingCoder
2017-02-09 22:47:36 +08:00
关于 TheKiteRunner 先生提出的编辑器的智能判断和“人性化”等方面的建议,我刚才考虑了一下。还有一个比较“传统”的思路是使用“配置机制”,类似微软 VS 的做法,可以设置、编辑、导入和导出自定义的配置和操作习惯——因为各个平台下的用户习惯都不一样,有些熟悉了某些编辑工具的用户,也会有比较本能的思维定式和操作习惯。采用某种固定的配置,强制意味太浓,也可能会让一大批用户感到困惑或感觉功能冗余。

使用“配置机制”最大的问题是又回到了主程序不断弹出对话框或小窗口这个烂泥潭中,窗口套窗口,使用体验很差。而且会让一款主打简洁的开源软件变得很“商业”,这一点与 Markdown 的核心原则也是冲突的,会让整个程序显得风格不统一,设计思想混乱。

另一个比较常规的做法就是用户根据已有代码,自行 HACK 或写出适合自己的配置模式。这一点也是开源软件最鼓励的。

比较先进的做法,目前来说是采用基于某些相对成熟的 AI 算法中的“机器学习、策略选择”。也就是:让软件学习并适应用户的习惯,而后在不同的场景和情况下,自动选择最合适的策略。这个方面,我也正在不断学习和领会,之前做的一些商业项目中也有应用,如有可能,希望尽快转化为开源项目的生产力吧:)

关于编辑器“人性化”方面的问题,有时间我再仔细考虑一下。欢迎大家讨论交流,批评指正。
SwingCoder
2017-02-09 23:51:29 +08:00
@hezhile 朋友,刚才我逐行调试并仔细测试了 UI color 设置及恢复默认这两处,也委托两三位朋友做了黑盒测试,均正常,无法重现您的问题。

您能详细告知该问题出现的“上下文”或“背景情况”吗?或者您再试试看?
SwingCoder
2017-02-10 00:05:29 +08:00
- 改进:确保 Windows 平台下本程序启动后显示在桌面上并位于最前(强占焦点)。

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

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

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

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

© 2021 V2EX