💾 Archived View for librehacker.com › gemlog › starlog › 20240212-0.gmi captured on 2024-08-25 at 00:17:20. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-05-10)
-=-=-=-=-=-=-
A great thing about gemtext is it is so simple I don't need a CMS. But it was still taking me a minute or two to create the new gemtext file on the server, as I had to login, navigate to the correct directory, and type a file name with the correct date and sequence number. I use a sequence number in my system in case there is more than one post a day. Naturally, the solution for me was an Emacs function.
Here is the function doing most of the work which finds, over SSH, the next unused path in my file naming scheme:
(defvar gemlog-directory "/ssh:yourdomainhere.example.com:/srv/gemini/gemlog/") (defun find-unused-gemlog-file (gemlog &optional time) "Return a string with the the path <gemlog-directory>/<gemlog>/YYYYMMDD-N.gmi, where the file does not yet exist and N is the lowest whole number possible in the range [0,inf)." (let* ((time (if time time (current-time))) (prefix (format-time-string "%Y%m%d-" time))) (cl-labels ((worker (seqnum) (let ((proposed-path (concat gemlog-directory gemlog "/" prefix (number-to-string seqnum) ".gmi"))) (if (file-exists-p proposed-path) (worker (1+ seqnum)) proposed-path)))) (worker 0))))
True lispy recursion going on there. Next is a function that actually creates the file:
(defun make-new-gemlog-file (gemlog) "Finds an unused file path using find-unused-gemlog-file and creates and opens it with find-file." (find-file (find-unused-gemlog-file gemlog)))
I have several gemlogs, but they are found at the same root directory, so I pass in the name of the specific gemlog directory. Finally I made a convenient interactive function to call it for a specific gemlog:
(defun make-new-starlog-entry () (interactive) (make-new-gemlog-file "starlog"))
So, now I just call make-new-starlog-entry (through Helm) to start a new starlog gemlog post. I'm working on another function that will add the entry to the gemfeed index, and some other convenience functions.
This work © 2024 by Christopher Howard is licensed under Attribution-ShareAlike 4.0 International.