]> git.r.bdr.sh - rbdr/blog.unlimited.pizza/blob - posts/1/blog-tooling.gmi
9f7900f7057f7fd74f672a7d66d35a028eebe06c
[rbdr/blog.unlimited.pizza] / posts / 1 / blog-tooling.gmi
1 # Blog Tooling
2
3 With so many of the bloggers I follow talking about the the latest release of MarsEdit[1], I've been getting tooling envy. While my blog[2] is a full-featured enterprise-grade state-of-the-art piece of software, it's not compatible with any of these tools :(. Surely, a lack of appropriate tooling is the real reason why I don't update as often.
4
5 => https://redsweater.com/marsedit/ [1] MarsEdit
6 => https://git.sr.ht/~rbdr/blog [2] Blog
7
8 After a dozen misguided minutes of reading the atompub spec[3], I decided to integrate my tooling directly to my editor of choice: `nvim`.
9
10 => https://datatracker.ietf.org/doc/rfc5023/ [3] The atompub spec
11
12 Thanks to the marvels of VimScriptâ„¢ I can now add a text file to my blog with `:Blog add`, update the latest post with `:Blog update`, and publish to staging and live with `:Blog stage` and `:Blog publish`. And all it took was a couple of hours of searching how to write commands in vim[4], learning the difference between `<args>` and `<q-args>`, and a ton of sunken cost bias.
13
14 => https://vimhelp.org/usr_40.txt.html#40.2 [4] How to write commands in vim
15
16 Here you can see the code in its entirety (with a couple replacements):
17
18
19 ```
20 command -nargs=? Blog :call Blog(<q-args>)
21
22 function! Blog(...)
23
24 let command = get(a:, 1, 0)
25 let path = expand("%:p")
26
27 if command == "add"
28 if path == ""
29 echo "This buffer is not a text file"
30 else
31 echo "Adding ".path." to blog"
32 call system("blog --add ".path)
33 endif
34 return
35 endif
36
37 if command == "update"
38 if path == ""
39 echo "This buffer is not a text file"
40 else
41 echo "Updating ".path." to blog"
42 call system("blog --update ".path)
43 endif
44 return
45 endif
46
47 if command == "stage"
48 echo "Publishing blog to staging"
49 call system("blog --publish <staging_url>")
50 return
51 endif
52
53 if command == "publish"
54 echo "Publishing blog"
55 call system("blog --publish <blog_url>")
56 call system("blog --publish-archive <gemini_url>")
57 return
58 endif
59
60 if command == "help"
61 echo "Available commands:"
62 echo "\tadd\t\tadds current file to blog"
63 echo "\tupdate\t\tupdates latest entry of blog with current file"
64 echo "\tstage\t\tpublish blog to staging"
65 echo "\tpublish\t\tpublish blog to production"
66 echo "\thelp\t\tthis message"
67 return
68 endif
69
70 echo "Unknown command, run :Blog help for help"
71
72 endfunction
73 ```
74
75 Surely, this is all I need to form a publishing habit.
76
77 Written, published, edited, republished, debugged, and republished with nvim.