My Blogging Workflow

Youku/Youtube

之前在 Twitter 上放出这段视频得到不少朋友的反馈,虽然 Jekyll 和 Octopress 算是小众,不过相信还是有些朋友会感兴趣的,因此花些时间写一写。

自从迁到 Octopress 之后,之前在 Wordpress 下的一些发布习惯都被迫要改动一下,虽然整个过程只要 Terminal 和文本编辑器就可以完成,但有些步骤还是太过繁琐,需要太多手动输入了。于是 Lucifr 便利用手头的一些工具软件(主要是 AlfredTextExpander)对流程中的一些步骤进行了简化,在此分享一下,因为纯粹是自己用的,所以全供大家借鉴,毕竟适合自己的才是最好的。

建立新文章

建立一篇新的 post,如果和 Lucifr 一样是使用 Octopress 的话,需要在终端里输入 rake post["<文章名>"],再到相应目录中找到新生成的文章并打开,过程过于繁琐。

我这里精简为一个 Alfred 的 Workflow 插件 New Post,只需要调出 Alfred 输入 po <文章名> 就可以自动生成新文章并同时用 Sublime Text 2 (文本编辑器)和 Marked (Markdown 呈现工具)打开且分左右排列窗口。

建立新的链接文章(Link Post)

Lucifr 在之前的文章中提到过 link post,著名的博客 Daring Fireball 是大量使用这一类型的代表。这个类型的文章的标题直接链接到外部的链接,而内容相对简短,用于进行推介等。Lucifr 在 Octopress 也引入了这一方式,只需要在 yaml 头部的信息中加入 external-url: <目标链接> 就可以达成了,但显然这也不够方便。

这一过程被我整合成了另一个插件 New Link Post,整体上是从上面的 New Post 上改动而来的,不同的是它会获取 Safari/Chrome 当前标签页的 URL 和标题(借鉴了 drdrangte-url-snippets),并自动填入 yaml 头部的 external-url 和 title 字段中,文章的文件名可以通过 Alfred 进行指定,如果没有指定则是用当前标签页的标题。这样当在浏览器中看到值得推介的内容时,直接调用 Alfred 就可以建立一篇新的链接文章了。

打开以往的文章

打开并编辑以往文章的过程用到了两个 Alfred 插件,一个是 Filter 类型的 Octopress Posts,可以通过 p <文章名> 对 octopress/source/_posts 中的文章进行筛选,按下回车后调用另一个 Workflow 插件 Open Post,后者就和之前的 New Post 差不多,只是用相应的软件打开并排列窗口。

以上三个插件在使用时请根据自己的情况进行修改。其中三个 Workflow 类型需要在 Alfred 的插件页面中找到对应的插件,在名字上点右键选择 “Show in Finder”,就可以定位到对应的 workflow 文件了。

Alfred Extension Show in Finder

你可能需要修改 Folder 这个变量所指向的 octopress 的目录位置,也可能会使用其它的 Markdown 编辑器(比如 Mou)或是不会用到 Marked,这些都可以通过修改 workflow 文件来完成。而 Octopress Posts 这个插件中只要在 Alfred 插件页面 Scope 那里修改 Octopress 的目录位置就可以了。

快速输入 Tag 和 Category

默认情况下 Octopress 只有 category(分类),不过 Lucifr 为了和之前的 Wordpress 保持一致还是加入了 tag(标签),这个 Github 上有相应的 fork 我就不缀述了。我所苦恼的是 tag 和 category 的输入。和 Wordpress 可以选择不同,Octopress 因为全是纯文本编辑,经常在 yaml 头中打错一个字母或是文字,这篇文章就变成了一个新的类/标签,每次还要确认有没有写错又是很麻烦的一件事,所以有了现在的这两个 TextExpander 脚本,都是用 AppleScript 实现的。

原理上很简单,在 rake generate 之后 Octopress 会在本地的 public 目录中生成 category/tag 目录,文章中的类和标签都以文件夹的形式存在,这两个脚本就是获取这些文件夹的名称并生成一个选择菜单,选择相应的类/标签(可多选)后按下 OK 就会自动展开成所需的格式了(当然像是 Lucifr 这样 tag 太多的情况这么搞也不算方便,抛砖引玉算是)。

同样,你需要在 TextExpander 中修改 thePath 变量所指向的目录位置。

Status 和 Push

另外两个 shell 脚本类的插件就很简单了:

  • Git Status 用来通过 Growl 显示 Octopress 的文件状态。
  • Push 这个插件可能不适用于其它的 Octopress 使用者,除非你和 Lucifr 一样把生成过程放到了远端的服务器上,我只需在 Alfred 中输入 push <commit 信息> 它就会帮助我完成 add、commit 和 push 的过程,而远端的服务器则完成之后的生成静态页面的过程,并同样通过 Growl 输出结果(当然因为生成时间比较长,这个结果返回的时间也会长一些)。

总之吧

还是要重复一下开头的话,这些插件脚本什么的都像是自制工具,可能只适合 Lucifr 自己用,分享出来只是为了和大家交流借鉴,因此不提供技术支持、售后服务什么的,各位对哪个部分不满意完全可以自行修改,不用客气。

若嫌一个个下载太麻烦,可以直接 clone 这个 repo:my-blogging-workflow

Lucifr

Read more posts by this author.

Beijing, China http://lucifr.com