I work with several devices, some Windows, some Android, and sometimes I have time to write on my articles at home (Notebook, Tablet), in my spare time in the office (Desktop, Laptop) or on my way to somewhere (Smartphone). Right now I’m am in a barber shop, waiting for my haircut and write these lines. So, wherever I am, I need the Hexo project locally, but in sync on a digital device.
The blog is synced via Dropbox, but hosted on GitHub Pages, so on every device I need the publishing functions of Git too.
Best option for me to achieve this was Dropbox. Another benefit on that is: I can work on the structure of the blog wherever I am and commit when the new feature or improvement is done, because all Git related files are always in sync too.
My preferred editor is Visual Studio Code. Good file handling, easy writing, full Git integration and tons of other plugins and helpers. Chapeau Microsoft, well done.
Some of the following VS Code plugins makes working with Hexo on GitHub pages a breeze:
With this editor and its helpers, I’m just two clicks away from publishing a new article or even a new version of the Hexo blog itself.
There are a lot of Markdown editors available on Google Play, but one is outstanding: iA Writer for Android. I can open my posts or drafts directly from Dropbox, without the need of any sychronization. Open, write, close, done.
There are some Git related Android apps out there, but no solution was satisfying. Furthermore, I didn’t really need Git here, because I didn’t want to have all source files on my smartphone. I’m working directly on the Dropbox stored MD files via iA Writer. Finally and most important, Git won’t be enough, because before publishing, I have to run
hexo generate! Therefore some sort of automatic transfer from Dropbox to GitHub is also out of the game.
What I needed, was to tell a server at a certain point of time ‘Hey, please publish for me’, using the only connection I have: Dropbox.
I have a little media server, running on Windows, and he is synchronizing some folders with Dropbox. He could do the job! After I installed all necessary packages, like NodeJS, Hexo and Git, I included the project folder into the sync.
Next step was to design a so called Hexo Command File, a simple TXT file, which holds commands in single lines, extended with execution times, when they were successfully running.
These commands are predefined, because they bundle several real commands and I didn’t want to deal with real commands, due to security reasons.
The unprocessed commands are standing at the top of the file (in execution order!) and parameters are separated from the command by a colon and delimited by commas.
<command>: [<param1>, ...] @ <execution time>
Next step was to create a program to work as an executing demon, who monitors the Hexo Command File (synced by Dropbox) on my server and executes commands without execution dates.
It expects the Hexo Command File to be named
hexo-commands.txt, located in the same folder, and provides the following commands:
newdraft: “<title>” … runs
hexo new draft "<title>"
Creates a new draft.
postdraft: “<filename without extension>” … runs
hexo publish "<filename without extension>"
Makes a post out of a draft.
regenerate … runs
Wipes all Hexo static pages and generates them new.
publish … runs
git add "source/*" "docs/*"
git commit -m "Remote publication via HexoCommander"
git push origin master
Generates Hexo static pages, stage changes on drafts, posts and static pages, commits the changes with a generic message and pushes them to the server.
I would have never expected, that the trickiest part was to get HexoCommander running via Windows Task Scheduler. What a mess! I finally find the solution here:
Compile HexoCommander in a x86 configuration
Create a new task in Task Scheduler with
- Recur every 1 days
- Repeat task every 2 minutes for a duration of 1 day
- Program/Script: %systemroot%\Syswow64\cmd.exe
- Add Arguments: /C “C:\MyPath\HexoCommander.exe /workdir=C:\MyPath”
- Start In: **%systemroot%\Syswow64\**
Because some executing commands in the chain are NOT 64-bit, I had to force Task Scheduler to run the 32-bit Command Shell in its own path (see ‘Start In’ and don’t forget the closing backslash) and take the 32-bit compiled HexoCommander as argument after the parameter
/C (forcing command to terminate), including its own argument for defining the real working directory. Mind bending, but works…