Hugo博客图形化写作工具
这篇文章介绍了一个 Hugo 博客自动化写作工具链,包含命令行核心 QtRun 与图形化外壳 QtRunBlog 的协同设计。工具定位与组成QtRun 负责命令行自动生成文章,处理标题、分类、日期、封面图等模板替换。QtRunBlog 提供图形界面,底层仍调用 QtRun,并依赖本地 git 工具。同时给出 AutoH…
软件使用 视频教程 image-20220212141742071项目介绍 项目所在地 温馨提示:如果本地还未搭建 hugo 博客,可以使用我的另一个 hugo 博客自动搭建工具 AutoHugoWrite QtRun: 介绍:一个用纯 C++ 写的命令行工具。 主要作用:根据提供的 hugo 博客本地地址进行命令行式的自动化写作,会把每一篇文章的图片、分类、标题等内容自动化完成。 构建方式:确保生成 exe 文件的目录下含有以下文件,且确保编译器支持 C++17。BlogPath.txt #提供本地hugo博客路径 categories.txt #提供可供选择的分类(没有也没关系) initImg.txt #提供可选择的图片 mob.txt #提供用于生成的模板 ed_Path.txt #提供打开的编辑器路径(没有也没关系) 使用方式:可查看源码得到更详尽的解答 QtRun [title name] [category name] Qtrun [-op] QtRunBlog:介绍:使用 Qt+cmake 搭建的图形化 hugo 自动化工具,写作的相关部分都是调用的 QtRun ,所以运行时 QtRun 的配置文件和 QtRun 都必须在它的 exe 目录之下。而其他其他部分调用的 git 命令行,所以需要本地有 git 工具。主要作用:提供图形化的 hugo 写作体验。构建方式:本地需要 Qt6 环境,选择本项目目录便可完成构建。QtRun C++ 源代码 实现了自动化命令行写作,QtRunBlog图形化界面调用的就是它的命令行// // Created by Alone on 2022-1-24. // //TODO aaaaaaa得出感悟:1.数据较为复杂的情况下尽量不要使用全局变量 2.在构造函数初始化的时候千万不要直接new空间给它,记得随时随地nullptr #include <fstream> #include <iostream> #include <string> #include <sys/stat.h> #include <unistd.h> #include <windows.h> #include <vector> #include <unordered_map> #include <ctime> #include <filesystem> #include <random> #define IMGS_PATH "./initImg.txt" #define MOB_PATH "./mob.txt" #define CATEGORIES_PATH "./categories.txt" #define BLOG_SRC "./BlogPath.txt" std::filesystem::path POSTS_PATH;//用于获取post_path using namespace std; //TODO 建立枚举映射 enum class SHOW_ARGS : int { EMPTY, CATEGORIES, IMG, BLOG_PATH }; //TODO 命令行参数的枚举映射 unordered_map<string, SHOW_ARGS> MAP{ {"-sc", SHOW_ARGS::CATEGORIES}, {"-si", SHOW_ARGS::IMG}, {"-sp", SHOW_ARGS::BLOG_PATH} }; //TODO 封装文件读取类 class FileReader { stringstream in_buf; ifstream reader; public: FileReader() = default; FileReader(const FileReader &) = delete; FileReader(FileReader &&) = delete; ~FileReader() { if (reader.is_open()) reader.close(); } void open(const string &path) { reader.open(path); if (!reader.is_open()) { perror("reader open failed"); exit(1); } in_buf << reader.rdbuf(); } bool readAll(string &dst) { if (in_buf.good()) dst = in_buf.str(); else return false; return true; } bool readline(string &dst) { if (in_buf.good()) getline(in_buf…
正在初始化 WebAssembly 引擎…
首次编译原生模块可能需要数秒
就绪后,页面交互将以接近原生的速度运行