我的写作环境搭建思路

Posted by LuckXiang on May 5, 2016

看了就忘,看了就忘,折腾了大半个月的东西,细节说忘就忘,人的脑子不是机器,没必要记住所有东西。以前的博学之人,都是拿笔写在纸上,一叠一叠,非堆成山不可。现在好了,打开电脑,啪啪,啪啪,方便快捷。我想写的东西,分为两类,一类是博客,一类是book。所以我的写作环境由三个部分组成,Jekyll搭建的博客+gitbook+github。我用Jekyll把博客搭在github上,相关的搭建资料网上太多,略过不提。我博客的书写工具用的是vim,为了方便写文章,写了一个小脚本创建post。

#!/usr/bin/env python3.5
# coding=utf-8
import time
import os

title = input('Creat new blog post\nPlease enter blog post title:')
tags = input('Please enter tags:')
ISOTIMEFORMAT = '%Y-%m-%d'
date = time.strftime(ISOTIMEFORMAT, time.localtime(time.time()))
filename = '_posts/%s-%s.md' % (date,title)
with open(filename, 'w') as f:
    f.write('---\n')
    f.write('layout: post\n')
    f.write('title: %s\n' % title)
    f.write('date: %s\n' % date)
    f.write('categories: blog\n')
    f.write('tags: [%s]\n' % tags)
    f.write('description: \n')
    f.write('---\n\n\n')
sys = 'vi  "%s"' % filename
os.system(sys)

接下来是gitbook,gitbook用vim来写感觉不够便捷,我用的官方的编辑器gitbook editor。这个工具本身会用git来管理每一个book,而我又在gitgub上创建了一个gitbook仓库来存放所有的book。这样就会造成git仓库嵌套。嵌套可以用submodule来处理,这个方式用起来不舒服,所以我从gitbook的目录下做了一次拷贝再上传到github上。此外我还需要把gitbook编译成html文件放入博客工程中,这样就可以在markdown文件中通过下面相似的语句来访问gitbook文档了

 [《时雨君的软件使用记录》](/gbook/app)

考虑到这是一个重复操作,写个脚本处理,这个脚本可以接受命令行参数,build指定的book。

#!/usr/bin/env python3.5
# coding=utf-8

import os 
import sys
from bs4 import BeautifulSoup

gbookpath = '/Users/xiang/Workspace/github/luckxiang.github.io/gbook'

def replace_tags(path):
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.endswith('.html'):
                filename = os.path.join(root, file)
                fp = open(filename)
                soup = BeautifulSoup(fp, 'lxml')
                fp.close()
                tags = soup.find_all(href='https://www.gitbook.com')
                for tag in tags:
                    tag['class'] = 'homepage-back'
                    tag['target'] = '_self'
                    tag['href'] = 'http://www.bigxiangbaobao.com/book/'
                    tag.string = '\n                        Back to Book'
                fp = open(filename, 'w')
                fp.write(str(soup))
                fp.close()

os.system('cp -rf /Users/xiang/GitBook/Library/Import/ ./')
os.system('find . -name  ".git"  -mindepth 2|xargs rm -rf')
os.system('git add .')
os.system('git commit -m "add"')
os.system('git push origin master')

if len(sys.argv) < 2:
    paths = os.popen('ls -F |grep "/"').readlines()
else:
    paths = sys.argv
    paths.pop(0)

for path in paths:
    path = path.strip('/\n')
    sys = 'cd %s;gitbook build;mv _book  %s;cp -rf %s/ /Users/xiang/Workspace/github/luckxiang.github.io/gbook/%s;rm -rf %s'%(path,path,path,path,path)
    os.system(sys)

replace_tags(os.path.abspath(gbookpath))

脚本后期还可以扩展,比如添加自动监测文件变化的功能,但是感觉现在还不需要,就这样了,轻巧的东西用post写,庞大一些的东西用gitbook记录更方便,两个东西都是markdown格式的,而且通过github可以进行版本控制,与朋友合作完成文档,十分优雅简洁。写好的东西,在一个博客中展示出来,利于同别人分享和自己梳理。已经完全可以满足我的需求了。