The first step in making a Webmention is to express that intent in our
Org Mode source files. indie-org implements this by
See Adding Hyperlink
Types in Adding Hyperlink Types, Adding Hyperlink Types.
When the site author invokes
indie-org-webmentions-enable four new link types will be
defined:
Each link type has a few properties, in particular :follow and
:export. indie-org’s link types all implement follow in
the same way as standard HTML links; it’s the export aspect in which
they differ. While they will all render as standard HTML, they will
take the opportunity to note each of them via
indie-org-webmentions-record-webmention
For example, the author can indicate a mention like so:
I am mentioning Alice's [[mention:https://alice.net/i-made-a-thing.html][post]].
The site author shall include their publication state’s
indie-org-webmentions-made (see Publication Environments & State) in the project properties (under the name
:indie-org/webmentions-made); at export time, the custom link
types will, first, produce See Microformats appropriate to the sort
of webmention being made, then invoke
indie-org-webmentions-record-webmention to record them in the
current publication environment’s state:
(defun iosh/publish (prod)
"Publish indie-org.sh to production if PROD is non-nil, locally else."
(indie-org-enable)
;; ...
(let* ((env (if prod :prod :local))
(pub-states
(if (file-exists-p publication-state-file)
(indie-org-state-read publication-state-file)
`(:prod ,(indie-org-state-make) :local ,(indie-org-state-make))))
(publication-state (plist-get pub-states env))
(webmentions-made
(or (indie-org-state-v2-webmentions-made publication-state)
(indie-org-webmentions-make-made)))
;; ...
)
;; This is all to setup the call to `org-publish-all'.
(let* (
;; ...
(org-publish-project-alist
`(("indie-org.sh" :components ("h-feed" "pages" "posts" "rss"))
("posts"
;; ...
:indie-org/webmentions-made ,webmentions-made))))
(org-publish-all t)
;; During the course of publication, we may have updated state: in
;; particular, we may have made new webmentions & POSSE requests. Update
;; the publication state's most recent publication time...
(setf (indie-org-state-v2-last-published publication-state) (current-time)
;; along with new requests:
(indie-org-state-v2-webmentions-made publication-state) webmentions-made)
(plist-put pub-states env publication-state)
;; and write it all out to disk.
(indie-org-state-write pub-states publication-state-file))))
You can see an example on indie-org.sh here.