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

29897 次点击
所在节点    分享创造
651 条回复
SwingCoder
2017-02-10 01:06:11 +08:00
@TheKiteRunner 先生, Ctrl + C ,无论是复制所选内容,还是不选任何文本状态下复制当前整个段落,我这里测试都正常,无法重现您说的问题。能详细告知该问题出现的“上下文”或“背景情况”吗?或者您再试试看?

预览模式下,如果预览区获取或霸占了键盘焦点, Ctrl + S 快捷键切换模式失效的问题,上面做了回复,不再赘言:)
SwingCoder
2017-02-10 02:20:42 +08:00
• 实现: Markdown 标记输入时的自动包裹功能。详解:
◦ 如果当前选择了文本,则输入*,`,~等 Markdown 标记之后,该标记成对出现并自动包裹所选文本。
◦ 输入一个~即可实现双~包裹
◦ 输入`和~之后,插字符光标自动位于结束标记之后,便于用户继续输入
◦ 第一次输入*之后,自动选择原有文本,等待用户输入第二个*。第二个*输入之后,插字符光标自动位于结束标记之后,便于用户继续输入
SwingCoder
2017-02-10 04:25:56 +08:00
• 实现:编辑模式,按下 tab 键后缩进所有已选择的文本(四个空格,以段落为单位集体缩进)。如果此时未选择任何文本,并且上一行是一级列表,则按下 tab 键之后,自动给出同类型二级列表的 Markdown 标记(注意,以上一行为判断依据,而非上一段)。

• 实现:编辑模式,按下 Shift+tab 后,如果未选择任何文本并且当前行有缩进(无论是否 4 个空格),均取消当前行的缩进(注意:此时以插字符所在行为判断依据,而非本段)。按下 Shift + tab 后,如果当前有所选文本,则取消所有已选择文本的缩进(无论是否 4 个空格)。此时,以段落为单位集体“反缩进”。以上情况,如缩进大于 4 个空格,则最多反缩进 4 个空格(正常写作而非展示代码的情况下, 5 个空格以上的缩进应该极罕见,在 Markdown 中也没什么意义)。

• 注:当前有所选内容并且按下 tab 或 Shift +tab 后,完成上述功能的同时,取消选择任何文本。
SwingCoder
2017-02-10 05:48:17 +08:00
改进:上一段是一级列表时,下一段按 TAB 键之后,是否自动给出同类型二级列表的判断标准由行改为段
SwingCoder
2017-02-10 06:39:14 +08:00
• 实现:编辑模式下回车键的多功能。如果当前段落是一级或二级列表,按下回车键之后,插字符开启下一段,该段落自动成为与上一段平级的列表。此时如果不输入任何内容,再次按下回车键,则该段落自动成为二级列表(如果上一段是一级列表的话)。如还是不输入任何内容,第三次按下回车键,则清除本段的列表标记,插字符自动开启并进入下一段。更详细的解释:

◦ 某一段是一级列表,如果下一段也是一级列表,直接回车。
◦ 某一段是一级列表,如果要在它下面增加二级列表,本段输入完成后,连续两次回车。
◦ 某一段是二级列表,如果下一段也是二级列表,直接回车。
◦ 某一段是二级列表,如果取消列表输入,开启正常段落,不输入任何内容,直接回车。
SwingCoder
2017-02-10 06:51:46 +08:00
补充:回车键的行为,不仅作用于段尾,也适用于断行操作。回车断行后,插字符后面的内容成为下一段,该段自动继承上一段的列表级别。不仅如此,再次回车,可将该段降级(如果是一级列表的话)。再次回车(或先前已是二级列表,此时就无需第三次回车了),则使其成为正常段落。
hezhile
2017-02-10 09:21:32 +08:00
@SwingCoder 你好,我刚才试了好多次,再也没有出现程序没有响应的情况,可能是昨天下午还有别的软件同时运行造成的影响。
TheKiteRunner
2017-02-10 09:51:15 +08:00
@SwingCoder sublimetext 有 default setting 和 user setting , user setting 默认为空,用户修改后差异部分以用户为准。

工作效率真高,而且还能在其中梳理出思路,并且流利表达,赞一个。

预览视图界面太窄,浏览时效果不好;写作窗口建议设置全屏无干扰模式;文章目录功能有无必要考虑?
SwingCoder
2017-02-10 10:42:45 +08:00
•实现:智能粘贴(使用快捷键 Ctrl + V 时)。详情:

◦如果系统剪贴板中的数据是项目内部链接(文件树-右键菜单-Get Path 所获取的),则插入该文档或目录 Markdown 格式的内部链接
◦如果系统剪贴板中的数据是一个合法的 http/https 网址,则插入此网址 Markdown 格式的链接。此时,如果未选择任何文本,则给出“ Click here (点此访问)”的链接文字,并自动选择之,以便用户输入改写。如果插入网址前选择了文本,则所选文本成为链接文字。
◦如果系统剪贴板中的数据是网络图片的地址,则插入显示此图片的 Markdown 格式(此图片不拉回本地)。
◦以上粘贴,仅适用于快捷键 Ctrl + V 。如使用右键菜单中的“ Paste ”菜单命令,则不做任何处理(某些时候需要“原始粘贴”)。
SwingCoder
2017-02-10 11:34:11 +08:00
@hezhile 谢谢反馈情况。祝您使用愉快:)
SwingCoder
2017-02-10 11:59:46 +08:00
@TheKiteRunner 先生,我没有用过 sublimetext 这个软件,不清楚它的设置机制和操作模式。如果是编辑器配置方面的,我又考虑了一下,采用 VS 那种机制,或者窗口套窗口那种做法,让用户玩软件,而不是享受工具的便利,不行。主要是理念、技术和实现方式都太老了。比较先进和理想的做法还是机器学习与策略选择,我打算慢慢给 WDTP 加入一些这方面的东西。已经开始了:)

可以分别调整文件树、编辑 /预览区、设置区这三块的宽度,每个之间都是用 layoutBar 隔开的。触摸的话可能有点不方便(过段时间可能调整一下),鼠标容易调整。预览区的“页宽”,是 css 控制的,可以自行修改。欢迎各位朋友制作并分享模板:)做好后,直接导出即可(系统菜单-导出当前模板集)。

可以加一个功能:自动熟悉并记忆用户所调整的窗口大小、位置、三个主要工作区的宽度,等等。稍后我琢磨一下:)

全屏后的写作模式( WDTP 中是安静模式),如果用户的计算机屏幕是宽屏横放的,体验不太好,行太长了。有一篇较新的 GUI 设计和人机工程方面的论文给出过一个理论,大致是:计算机写作 /阅读,比较合适且科学的做法(大屏横放为例):屏幕一半的 70~80%区域,竖直页面, 4:3 或 5:3 比例。页面位于计算机桌面上,最喜爱的静态桌面背景,无其他窗口或元素干扰。职业作家或技术作家,或者需要不时查阅资料,或者有需要再开一个文档做笔记、备注的用户,可另开一个大小基本一致的程序窗口。二者并列。任何时候,不要同时看到或操作 3 个以上的窗口。

WDTP 允许多个实例同时运行,也就是:同时打开两个项目进行编辑处理。分别进入安静模式,左右并列(横屏的前提下)。

您说的“文章目录功能”指的是什么?能否具体告知?

谢谢!
SwingCoder
2017-02-10 12:30:25 +08:00
补:彻底无干扰的安静模式,在 macOS 下可以很方便地做到,有一点小技巧,算是 WDTP 隐含的一个小 cake 吧:)

启动软件后,最大化,在系统新开的独立桌面上跑,而后 cmd + D 或点击顶部工具栏的“双向箭头”图标……:)
TheKiteRunner
2017-02-10 13:44:29 +08:00
1 get√
2 文章目录是指 TOC ,即一片长文的标题链接集。
dimlau
2017-02-10 14:10:01 +08:00
大约是上世纪,有个 java 程序,全平台,静态内容生成器, ftp 发布……
SwingCoder
2017-02-10 14:25:51 +08:00
@TheKiteRunner 先生在 50 楼所提出的建议中,能解决的全部解决了。有些实现可能还不够完美,有些也可能有 bug ,欢迎各位同行和老师审阅、调试并纠错:)

50 楼的建议中,有两个不是无法实现或不想实现,而是不能实现、不敢实现:)这两个问题是: WDTP 的文本编辑器中,将一段文本或部分文本隐藏、缩略,以及编辑器中实现文字外观、样式的不统一或单独设置。如果按这个思路, WDTP 就又跳到 WYSIWYG 这个烂坑里了,整个 WDTP 的设计、架构、开发与维护,完告失败,动机和目的也变得可疑与不纯粹了…… Markdown 的发明人要是知道,肯定会骂我:)

还有技术方面的原因,要将目前的纯文本编辑器改成基本可用的 WYSIWYG 编辑器,如果不使用其他基于 GPL 或 MIT 的跨平台开源库,整个底层得全部改写,代码量将百倍以上。压缩后的二进制发布文件也将超过经典的 1.44M …… WYSIWYG 这一块,可能全球最顶尖的开源者凑到一块,也未必能干过微软搞 Word 的那帮人……

这事目前不敢想……:)先搁置,好不好?:)

再次感谢!
SwingCoder
2017-02-10 14:29:18 +08:00
@TheKiteRunner 好主意!我就知道您一定会提出这个:)

这个事已经在 memo list 中了,我再往前拉它一把,很快就会轮到它:)
SwingCoder
2017-02-10 14:40:05 +08:00
@dimlau 是的。以前和目前都有很多基于静态的网页制作器、生成器,大部分都有 FTP 功能。未来也会有更多出色的同类产品:)到时候,人们的选择会更丰富:)

我前几年还在用一款很老的建站软件, iw 这个项目的英文站点就是用它做的(很丑陋:)):
http://www.underwaysoft.com/en/index-en.html

这个软件的名字叫 Freeway ,当年 mac 下很火的一款静态建站器,我感觉比很久之前 Windows 平台下微软的 FrontPage 好用。它们的功能都很强大,很多到最后我也没完全搞明白:)用了 Freeway 很久之后,我想买一份 pro 版的,去访问它的官网。然后……然后就没有然后了,这个公司倒闭了……
TheKiteRunner
2017-02-10 15:21:44 +08:00
@SwingCoder 您按既定计划来,不着急,我这种爱折腾工具的人不够纯粹,不能代表目标用户群,可能还是得回归写作内容本身。
SwingCoder
2017-02-10 15:53:03 +08:00
@TheKiteRunner 不,您的建议十足珍贵和及时,从产品方来说,遇到了非常有价值的黄金用户。我感到很幸运:)

我刚才一直琢磨如何用最简洁的办法,不用所见所得来实现您的需求(长链接缩略,不影响写作体验。确实,很长的链接看起来很头疼,非常影响编辑时的页面观感)。

我一定把这个事给您解决了,请放心:)
SwingCoder
2017-02-10 16:50:53 +08:00
这个工作日又干了 18.5 个小时了,实在撑不住了。下去眯一会。
稍后上来继续玩命:)

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

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

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

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

© 2021 V2EX