2016-12-04 Making C-c C-j in AUCTeX do something more useful

In AUCTeX’s LaTeX mode, C-c C-j is by default bound to LaTeX-insert-item. By default, it just inserts an \item on a new line.

I thought that it would be cool to make it insert something else in non-itemize environments. It turns out that I was late, though – the functionality is already there! It is not widely known, however; in particular, it’s not mentioned in the manual. That does not mean, however, that you can’t discover it; the option is called LaTeX-item-list, and it can be found using M-x apropos or its more modern cousins, like Icicles or Ivy. Really, you should make a resolution to fire your favourite way of searching through commands and/or options once a day, with some meaningful regex, only to be surprised by some hidden cool functionality you never suspected to exist!

Basically, LaTeX-item-list is an alist whose keys are environment names and values are functions inserting that environment’s “variant” of \item. Unfortunately, just setting it accoridingly in init.el is not enough; the variable gets rebuilt in every new document. Actually, LaTeX mode initializaton is a complicated business. I know, because I grepped the source for LaTeX-item-list and found the LaTeX-common-initialization function. I could grep for that, too, or I could use debug-on-entry to look at the backtrace and see where it is called. Either way, it turns out that it is called by the TeX-latex-mode function, which starts the LaTeX mode. (For some strange reason, it is defined with an ordinary defun instead of define-derived-mode.) From that it is more or less clear that one good place to modify LaTeX-item-list is LaTeX-mode-hook.

As an example, consider this piece of code, which you can put in your init.el:

 (lambda ()
   (add-to-list 'LaTeX-item-list
		'("frame" . (lambda () (TeX-insert-macro "pause"))))))

This has an unwanted side effect of putting braces after \pause. This can also be helped, but that will be the topic of another post.

CategoryEnglish, CategoryBlog, CategoryEmacs, CategoryLaTeX