BlogMax: Blogging in Emacs
A great way to maintain a blog





Templates | Contents | RSS

This page documents the macros you can use on your pages. If you know Emacs lisp, you can easily define new macros, but this page just tells you how to use the ones I've thought of so far.

Macros are invoked by including their name and parameters between curly brackets. For example {calendar} inserts a calendar (only useful on a top-level weblog page). Macros can expand into text that includes another macro. It will work the way you expect it to. Macros, however, are NOT expanded in the arguments to a macro.

If you want to insert a curly bracket or a backslash in the text, escape it with a backslash. For example, to make "{calendar}" appear in the paragraph above (and this one) instead of a calendar, I had to type "\{calendar}".

There are two special "macros":

{@shortcut} is replaced by the value of the shortcut named shortcut. If there is no such shortcut, the substitution doesn't happen.

{=forms...} read's and eval's the lisp list (forms...) and princ's it into the buffer replacing the macro call. If an error happens, no replacement happens. Eventually, I may put the error message and stack backtrace in the buffer, but I haven't needed it yet. In order to get the value of a variable, use the identity function. For example, "{identity *weblog-story-file*}" becomes "{=identity *weblog-story-file*}" on my machine.

Note that the open and close curly bracket need to be on the same line in order for BlogMax to interpret this as denoting a macro call.

{macro args...} read's and eval's the lisp list (weblog-macro-macro args...) and princ's it into the buffer replacing the macro call. Again, if an error happens, the replacement is skipped. Some macros have no arguments. Some have optional arguments. Just like the lisp functions defining them.

The following are the macros currently defined by blogmax.el:

Insert the contents of the content template file. This is "content-template.tmpl" for a file in the weblog directory or "story-template.tmpl" for a file in a sub-directory.

Insert the contents of the day template file. This is "day-template.tmpl".

Insert the contents of the buffer that was current when the outermost interactive BlogMax command ran. I.e. the contents of your ".txt" file.

Insert the story title. This is the text of the HTML comment at the beginning of the ".txt" file, if there is one.

Insert the site name, from the weblog.ini file.

Insert the byline, from the weblog.ini file.

Insert the author, from the weblog.ini file.

Insert the email address, from the weblog.ini file.

Insert the site's URL, from the weblog.ini file.

Insert the mod time of the ".txt" file, formatted the way I like it.

Insert a calendar. This is only useful for day pages (or in the "content-template.tmpl" file). It inserts a nice calendar with links for days that have a day file. It won't create links for days in the future. This allows you to stage future stories without letting people get to them until the day comes. Dave Winer added quite a few ways to customize the calendar. I'll probably end up doing that too, but for now it's the way I like it.

The calendar macro takes two optional arguments: file and start-day. file defaults to the current weblog story file. You will rarely if ever need to specify it. Use nil to get the default. start-day is the day of the week for the first column of the calendar. 0 is Sunday, 1 is Monday, ..., 6 is Saturday. The default is 0, Sunday. Hence to put in a calendar starting on Monday, you would place the following in one of your template files:

{calendar nil 1}

Saturday, January 1, 2000
The date of the current day file, formatted like "Monday, June 4, 2001". Europoeans will probably want to change this or ask me to make it a parameter in the weblog.ini file.

{blogToplevel &optional dir}
Insert a relative pathname from the current directory to DIR, or, if DIR is not specified, to the weblog directory. This is useful in shortcuts and templates to make them directory-independent. For example, if I want to reference the file "macros.tml" in the "stories" sub-directory of the weblog directory (this file), I would type {blogToplevel "stories/"}macros.html. The quotes and the trailing slash are necessary.

Insert a link to the current story. This is mostly useful in day files, so that people can easily get the current link from one of the days in the top-level index.

{pl "name"}
Inserts a "permalink" into the file with the given name. The text of the link comes from the "pl-macro-text" parameter in weblog.ini. It defaults to the sharp character ("#") if there is no such parameter. For example, the following text:

{pl "foo"}
expands into:
<a name="foo"><a href="#foo">#</a></a>
The macro does the right thing in the index and RSS files, referencing the day file. For example, if today's source file is 040103.txt, then the macro above will expand into the following in today's index.html:
<a href="040103.html#foo">#</a>
C-M-L inserts {pl ""} in the buffer and puts the insertion point between the two double-quotes.

The year that the current buffer's file was last modified. Useful for copyrights.

{img name &optional alignment}
Inserts an "img" tag from a shortcut and optionally modifies it with an alignment. For example, if the shortcut "billstclair" had a value of <img src="mymug.jpg">, which it doesn't, then the following:

{img "billstclair" "right"}
would become:
<img src="mymug.jpg" align="right">
The alignment is inserted just before the first greater-than sign after the first instance of "<img" in the shortcut's value.

{include file &optional neuter pre}
Include FILE, from the same directory as the current buffer's file. If NEUTER is true, change characters that would confuse HTML into the corresponding entities. If PRE is true, add a space at the beginning of blank lines to prevent them from being turned into paragraph tags. Hence, the following:

{include "../content-template.tmpl" t t}
BlogMax is an Emacs package that aids in the creation of a
weblog. News below. See the
<a href="{blogToplevel "docs/index.html"}">Docs</a> page
for details.
<td valign="top">

{txtLink &optional link-text}
Generate a link to the source ".txt" file, using that file's name unless link-text is specified.

{bugmenot domain}
Generates a link to a BugMeNot database lookup for the given domain. For example, {bugmenot ""} generates: BugMeNot (click the red circle-slash see what I'm talking about). The circle-slash icon, bugmenot.png, must be in your weblog directory. You can enable automatic generation of BugMeNot links by uncommenting and augmenting the bugmenot-auto-list in your weblog.ini file.

Templates | Contents | RSS

emacs Copyright © 2004 by Bill St. Clair <> source