Automating Promotion of Jekyll Posts from Draft to Post

When I used to use Jekyll, I had a workflow where a post would start as a draft, sitting in the _drafts folder, and once it was ready, I would "promote" it to a full-blown post.

This started to get a bit painful, so I automated the process with a little helper script.

Although this is fairly straightforward, the bit that I was really proud of was being able to use my shell's auto-complete to make this an easier process for me.

For instance:

$ ls _drafts
$ jekyll_promote <TAB>
# auto-completes the `test`
$ jekyll_promote test<TAB>
completing file

You can see the below Asciicast for a more visual example of the flow:

Let's assume that we have a function jekyll_promote which performs the following:

jekyll_promote() {
	git mv "_drafts/$1" "_posts/$(date -I)-$1"


I'm running Zsh as my shell, which has a really straightforward autocomplete syntax which tells it to just autocomplete the files in the _drafts directory:

compdef '_path_files -W $PWD/_drafts' jekyll_promote


However, I know that lots of people are not using Zsh but instead use Bash, so I've also created the following autocomplete magic for Bash. This is a little more involved, and adapts a StackOverflow answer of a similar type:

# Adapted from
_jekyll_promote () {
	local cur
	for draft in $( compgen -f "$drafts_dir/$cur" ); do
		[[ -d "$draft" ]] && continue
		COMPREPLY[k++]=${draft#$drafts_dir/} # remove the directory prefix from the array
	return 0

complete -o nospace -F _jekyll_promote jekyll_promote

Written by Jamie Tanna on , and last updated on .

Content for this article is shared under the terms of the Creative Commons Attribution Non Commercial Share Alike 4.0 International, and code is shared under the GNU General Public License v3.0 or later.



Other posts you may be interested in:

Interactions with this post

This post has had 0 WebMention interactions, as of Sun, 24 Mar 2019 13:54:25 +0000.

Have you written a response to this post? Let me know the URL: