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

29917 次点击
所在节点    分享创造
651 条回复
dimlau
2017-02-10 18:19:29 +08:00
@SwingCoder 我说的这个和你说的 freeway 或者 frontpage 之类的可视化网页编辑软件不一样,而是,基本上就和你现在在做的事情一样的一种存在。

我 07 年写过一篇介绍:
http://kaix.in/daddy/old/blog/2007/02/thingamablog.html
dimlau
2017-02-10 18:23:08 +08:00
当然,新的创造会更先进,加入了更先进的特性,但是大概老物身上也有值得借鉴之处。
祝好!

另,感觉介绍文章里界面展示基本是缺失的,看上去有些枯燥
TheKiteRunner
2017-02-10 19:55:27 +08:00
@SwingCoder 注意休息和运动。***加粗并斜体***,个人需求,不知道是否有价值;另外,渲染上,感觉删除线和高亮且加粗还是可以支持一下的,图片见 QQ 。
TheKiteRunner
2017-02-10 21:15:30 +08:00
@TheKiteRunner @SwingCoder

- 发现是支持的。但 html 标记毕竟较长,建议快捷触发,比如说输入 u+tab 就产生<u></u>,如果已有选中内容,将其包裹。不过这一部分我是可以用我的 PhraseExpress 来快捷出发的,所以不考虑也没关系。

- 脚注是不是不支持啊。
SwingCoder
2017-02-10 23:47:02 +08:00
@dimlau 先生,谢谢您的推荐和文章:)我仔细地看了。我没有用过 thingamablog 这个软件,但相信一定非常优秀:)
更难得的是,一款优秀的软件被优秀的用户所发现、使用并向更多有需求的人们推荐介绍。这是一段佳话。

我想, thingamablog 的开发者非常幸运,能得到您的青睐和撰文。对一款产品的设计、开发和维护者来说,这是最高的荣誉。我很羡慕他(们):)
SwingCoder
2017-02-10 23:57:49 +08:00
@TheKiteRunner 先生,好的。您的建议总是很及时:)我昨天刚刚把脚注这个事加到 todo list 中:)

加粗同时斜体,当时写 Markdown 解析这个模块时考虑了。我个人觉得不是非常必要,页面中有这种样式的文字,看起来怪怪的,显得过分突出,不搭调。而且也不是“正统” Markdown 所定义的标准,于是就没有写这个标记的解析。实际上说来说去,还是 Markdown 这种标记语法的目的、应用场景与核心思路的问题。它不是追求专业级排版格式和样式的文本标记语言,在方便和简约的同时,肯定会牺牲并放弃一些这样那样的需求。也就是说,有些需求的解决方案,不能依赖于 Markdown 本身……

WDTP 的文本编辑器中可以直接输入 html 、 css 和 js ,能实现很丰富的效果。有些不常用但有需要的应用场景,可以用这三者解决,可以做到基本逼近完美:)
SwingCoder
2017-02-11 03:25:08 +08:00
- 改进: Ctrl + 回车在当前段落之前插入新段落,不再自动添加隔行,而是紧邻当前段落。即: Ctrl + 回车相当于正常回车键的反功能。正常回车是在下面插入新行,而 Ctrl + 回车则在上面插入新行。所不同的: Ctrl + 回车是以当前段落为单位,在段落之前插入新行,而不是在当前行之前插入新行。
SwingCoder
2017-02-11 03:33:10 +08:00
• 实现:每个项目都可以记忆用户调好的窗口大小及屏幕位置并自动使用之。 WDTP 允许操作系统同时运行多个程序实例,这样可以同时打开并处理多个项目,每个项目都可以有自己的大小和位置。如果同时打开的项目较多, WDTP 会智能调整每个实例,在使用其自身所记忆的位置的同时,如可能有完全重叠或覆盖,则自动微调。微调结果并不影响该项目已经熟悉并记忆的原有窗口大小及位置。

以上这些都是程序内部运作的,用户无需设置或进行任何这方面的操作。甚至完全可以不知道有此功能。
SwingCoder
2017-02-11 04:13:00 +08:00
• 新增:非标准 Markdown 语法标记:加粗同时斜体。语法格式:***要加粗并倾斜的文字***,效果:要加粗并倾斜的文字。因该格式不常用,故编辑器中没有定义其快捷键,也没有定义其智能化输入模式(比如选定文本后按三下*号完成自动包裹这个功能)。使用方法:可手工输入,也可利用编辑器右键菜单中的“ Format (格式)”菜单项来完成(当前有选择的文本时,该文本自动被三星包裹;如没有选择任何文本,则给出六个星,插字符光标自动定位到需要输入文本的六个星的最中间)。
SwingCoder
2017-02-11 07:50:38 +08:00
实现:缩略语功能。详解如下:

编辑文档时,部分内容可能太“碍眼”,不想时时看到;或者无需经常改动(防止误编辑);或者由于非阅读性字符太多、太难看而破坏编辑时版面的美感(比如包含非标字符的 UTF-8 转义或复杂参数的较长网址、代码等等),此时可用一个自定义的短语来代替这部分内容。

文档属性面板,“ Abbrev (缩略语)”专司其职。格式为:“缩略语(空格)所代表的原始内容”。一行一个,行与行之间可使用空行隔开,以便区别。
设置好缩略语之后,编辑模式下,可将要缩略显示的内容删掉,代之以刚刚自定义的缩略语。

原始内容虽然在编辑模式下看不到了(看到的是缩略语),但预览时会出现。即:原始的文档中虽然已经找不到这些内容,但预览并生成网页时,这些内容还是会出现(此时网页中不出现这些内容的缩略语)。

也可以用这个思路理解:编辑模式下,缩略语用来替代它所代表的原始内容;而预览并生成的网页中,原始内容反过来再替代它所对应的缩略语。
可在文档属性面板的“ Abbrev (缩略语)”中增删改已有的缩略语,即改即生效(预览模式下按 F5 刷新当前页面即可)。

注 1 :如果某个文档定义的缩略语太多,可能会出现缩略语重复的情况(此时它们所代表的原始内容有可能一致,也可能不一致)。此时,软件不进行校验、提醒或干扰,以第一个为准。

注 2 :一个文档中,同一个缩略语可多次出现。所有出现的地方,在预览或生成网页时全部替换为该缩略语所代表的原始内容。

注 3 :所定义的缩略语,请不要和文档中已有的语句或短语相同,否则,这些内容也将成为缩略语(原因见注 2 )。此外,为了便于阅读、编辑和理解,可使用自己习惯的前缀和后缀来包裹缩略语。比如:“_长链 01_”、“@该处不宜改动 @”、“ AbbrevOfSomeFunnyThings ”……等等。

注 4 :缩略语所代表的原始内容中可包含 Markdown 或任意 html 、 css 、 js 等标记 /代码。这些标记和代码在预览或生成网页时和普通内容一样,将被正确识别和处理。这一点在编辑高级功能的文档时非常实用(比如动态网页或格式与样式非常丰富的个性化 /专业性文档 /网页,编辑时不破坏版面的可读性与美观度)。还可以用该功能实现 Code snippets 展示……玩法很多,敬请摸索:)

注 5 :采用缩略语后,无论整个项目的搜索替换,还是当前文档的搜索替换,都无法再针对缩略前的原始内容进行。这一点我稍后将予以改进。

注 6 :下一步有可能拓展缩略语功能。目前先把大体的架构与功能拿出来。欢迎提供宝贵意见和建议。
SwingCoder
2017-02-11 07:53:39 +08:00
@TheKiteRunner 先生,长链接碍眼的问题解决了:)可能思路和模式还不够理想,有点笨拙。欢迎提出宝贵意见和建议:)
SwingCoder
2017-02-11 08:26:33 +08:00
发布: WDTP 0.9.170211 (内测版)

主要更新记录: http://underwaysoft.com/works/wdtp/updateList.html
下载页: http://underwaysoft.com/works/wdtp/download.html
TheKiteRunner
2017-02-11 08:50:48 +08:00
效率好高,加油,希望注意多运动。
TheKiteRunner
2017-02-11 10:53:50 +08:00
1 首行缩进两个字符其实有点问题。首先,这只是中文正文段落里的一种格式,不宜用于英文,也不应该用在所有的正文和标题上。

2 链接渲染之后,没有突出显示,比如“ Windows 下载”不仔细看都找不到。

3 功能逐渐完善之后,界面可以考虑优化一下,比如考虑几个模板选项。如果担心会增大文件体积,可以考虑另置模板下载链接,需要的话从中下载。我将 typora 的 css 文件及字体文件复制进来,显示效果有优化,只是跟侧边栏的配合不太好。可以考虑参考其它优秀界面的模板。
SwingCoder
2017-02-11 10:56:22 +08:00
发布: 0.9.170211 Windows 32 位版本

使用 32 位 Windows 操作系统的用户请确保本机已安装了 IE 11 浏览器和微软雅黑字体。
SwingCoder
2017-02-11 11:20:33 +08:00
@TheKiteRunner 先生,网页渲染结果,也就是格式和样式,是通过 css 和模板来完成的,这个和程序本身没有关系。 css 中的 text indent 属性,很难兼顾中英混排或纯中 /纯英这种网页格式的文档需求。我对前端技术不是非常了解,但一个传统的解决思路是判断字符集属性,而后调用不同的 css 。您可以根据自己的需要来改。

网页前端这一块,我的想法是和目前流行的其他控制台静态生成器程序保持一致,交给用户和贡献者来负责。我个人非常希望能有更多的网页设计师、前端工程师和行业高手参与进来。按照 html 5 标准中新增的东西,包括这个标准以后肯定会不断丰富的拓展与规范,加上 js 和 css ,前端这一块可以实现很惊人的功能和效果,甚至完全可以写一个功能更强大的网页版 WDTP ,或其他各种类型的 app ,帮助人们更好的工作、学习、生活、娱乐。

说实话,这一块也确实不是程序母体维护者能做到的。太多专业领域,太多专业需求了,没办法兼顾。很多领域的专业常识我也不具备,没办法把握客户的真正所需。

WDTP 的模板制作和应用非常简单,这个模块是完全开放的。模板中可调用的标签,可在开发文档中找到。这个肯定不够,如有需要,请告诉我,我觉得可行或想法不错,就一定及时定义新的 Tag ,写出这部分代码,而后加到开发文档中供更多人使用。

开发文档:
https://github.com/LegendRhine/WDTP/blob/master/Source/memo.md

WDTP 开发的初衷有四大核心需求。基本功能和架构完善后,我想拿第一大块开刀:面向职业文艺家、小说家、剧作家和技术类作家的新一代创作利器。这个我本人也有强烈需求,平时也要用到。希望一切顺利:)
SwingCoder
2017-02-11 22:15:45 +08:00
• 修复: Markdown 行内代码解析与`转义方面的一个 bug
SwingCoder
2017-02-11 22:29:02 +08:00
• 智能包裹标记添加两个快捷键: Ctrl + 8 (等同于 Shift + 8 ), Ctrl + `(等同于 Shift + `)。这个快捷键用于解决编辑器处于非“自然状态”下的键盘快捷键输入不被识别与认可的问题(比如处于中文输入状态时)
◦ 注: cmd + `在 macOS 安装了某些特定中文输入法的前提下不可用
SwingCoder
2017-02-12 02:47:46 +08:00
- 更新:软件自带模板的样式表。如打算用之,请先导出或备份您当前所修改并使用的样式表,而后点击系统菜单中的“ Reset/Repair Default Templates (重置 /修复系统模板)”。
- 本次更新的样式表,主要是对页面正文区的文字链接添加下虚线,使之醒目,起到引导用户去点击的作用。该样式对使用 WDTP 建站或建博客的用户可能有用。
TheKiteRunner
2017-02-12 06:13:23 +08:00
@SwingCoder 加油

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

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

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

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

© 2021 V2EX