1 前言
忙了两天终于搭建了自己的博客,win下hexo+github+matery。其中踩坑不少,还要很多地方需要完善、精化。写下这篇有博客以来的第一篇文章以记录后续的改善。
先在此记录一下待解决问题:
- 使用官方推荐的插件代码高亮,{}不能被正确转义, 目前的方法是降 hexo 的版本(4.2没有这个问题),等GitHub的issue solution吧.
- valine 升级1.4.1后在Google中显示问题, Firefox倒是没有.
- 目录想设置个多级分类, finding
- 写个脚本, 在typora书写中,获取当前时间戳.
- 有时间搞个文章加密插件
- 针对特定文章关闭评论
- 关闭友链区的评论
- logo有时间精化一下
- seo优化,
- 百度统计,Google统计
- 再多就有点花里胡哨了,就这样
2 toc显示问题 以及 配置标题自动编号
发现一级标题不能在toc显示,以为是bug,后来发现主题默认toc开启的是h2,h3,h4, 于是修改为h1, h2, h3.
标题自动编号:
- win下 安装插件 hexo-heading-index
npm install hexo-heading-index --save
- 根目录配置:
关于具体的配置信息,参考hexo-heading-indexheading_index: enable: true index_styles: "{1} {1} {1} {1} {1} {1}" connector: "." global_prefix: "" global_suffix: " "
到此,clean, g, d 后,发现目录变成了这样:
但是,这个设置时针对全局的,这意味这只要在其他地方使用了层级符号,那么也会带有“数字”,为了避免这个情况,有两种解决办法。
- 在其他地方不使用层级符号 fh不是
- 设置heading-index 前几级编号,后几级使用肯定不会显示数字。
针对第二种方法,需要修改 hexo-heading-index/lib/index.js 文件
function updateHeadingIndexes(options, data) {
var $ = cheerio.load(data, { decodeEntities: false });
var headings = $('h1, h2, h3'); // 在这里, 保留几级看个人使用喜好
# end
3 利用脚本写入文章更新时间
想每次写完文章都记录一下文章的更新时间,方便纠错以及提供时间线。
此脚本可以给所有脚本加时间戳以及给单个文件加时间戳。
关于更多的实用 blog 脚本, 可以访问我的GitHub,地址:blog_script, 喜欢的话star一下,谢谢。
代码如下:
import time
import sys
import glob
import os
def get_stamp(post_name):
"""
:param post_name:
:return: null
"""
time_stamp = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time()))
def write_stamp(file_name):
"""
:param file_name:
:return: null
"""
with open(file_name, "a+", encoding='utf-8') as f:
f.write("\n")
f.write("> ___#end___ 以上内容于 " + time_stamp + " 更新")
return
""" 所有文件加时间戳 """
if post_name == "all":
filename = "../source/_posts/*.md"
for name in glob.glob(filename):
write_stamp(name)
else:
"""单个文件加时间戳 """
filename = "../source/_posts/" + post_name + ".md"
if os.path.exists(filename):
write_stamp(filename)
else:
print("filename error\n")
return
if __name__ == "__main__":
if len(sys.argv) == 2 and sys.argv[0] == "get_stamp.py":
get_stamp(sys.argv[1])
else:
print("command error\n")
首先在博客根目录下新建目录my_script,并将python脚本以get_stamp.py命名并放入此目录。在此目录下打开bash,运行以下命令
单个文件加时间戳,postname为你要加时间戳的md文件
python get_stamp.py postname
所有博客目录下所有md文件加时间戳
python get_stamp.py all
效果如下:
当然,你也可以在此脚本的基础上进行修改以适配其他情况, 以及增加功能
#end 以上内容于 2020-08-22-00-50-07 更新
4 关闭友链区评论,md页放上面。
5 文章加密
发现文章已经配置了加密功能,只需要在主题中开启配置即可。
简单写了个轮子,实用性一般般的样子,bash命令下给文档加密,缺点是需要一次性读文件,当文章特别长时。。。不过这种极端情况很少,折腾试试,直接贴代码 :
import hashlib
import sys
import glob
import os
import frontmatter
def encrypt_md(post_name, raw_pwd):
"""
generate and write hash256 pwd
:param post_name: md filename
:param raw_pwd:
:return: null
"""
def gen_pwd(raw_pwd):
"""
:param raw_pwd:
:return:
"""
hash256 = hashlib.sha256()
hash256.update((raw_pwd).encode('utf-8'))
return hash256.hexdigest()
def w_pwd(name, hash_pwd):
"""
:param name:
:param pwd:
:return:
"""
with open(name, "r+", encoding="utf-8") as f:
md = frontmatter.load(f)
md.metadata["password"] = hash_pwd
f.seek(0, 0)
f.write(frontmatter.dumps(md))
return
""" 所有文件加密 """
if post_name == "all":
dir_name = "../source/_posts/*.md"
for filename in glob.glob(dir_name):
w_pwd(filename, gen_pwd(raw_pwd))
else:
""" 单个文件加密"""
filename = "../source/_posts/" + post_name + ".md"
if os.path.exists(filename):
w_pwd(filename, gen_pwd(raw_pwd))
else:
print("filename error\n")
if __name__ == "__main__":
if len(sys.argv) == 3 and sys.argv[0] == "encrypt.py":
encrypt_md(sys.argv[1], sys.argv[2])
else:
print("command error\n")
使用方法:
如果你的根目录下还没有 _my_script_ 文件,那就新建一个,将代码写到该文件夹下,encrpt.py 命名,
- 单个文件加密,在
my_script
目录下开启bash, win下执行命令,其他环境参考
python encrypt.py postname password
- 多个 md 文件加密
python encrypt.py all password
其中,postname
加密的md文件名, password
是要 设置的密码,注意密码不能含有空格。另外,如果还没有 frontmatter 包,需要进行安装。另外,网站填写密码是原生 password
, 非md文件中的。
pip安装命令:
pip install python-frontmatter
关于更多的实用 blog 脚本, 可以访问我的GitHub,地址:blog_script, 喜欢的话 star一下,谢谢。
#end 以上内容于 2020-08-22-10-17-05 更新