Ryan Barrett's blog

filling code in emacs

Emacs
has a massive feature set, and there’s also an endless supply of
elisp out
there. However, for a long time, there was one feature on my Emacs wish list
that I hadn’t found yet.

Update: After lots of procrastination, I finally broke down and wrote
fillcode. It tackles the problem described here.

I want Emacs to be able to correctly fill code, not just text. For example,
when I press M-q in c-mode, I want Emacs to fill this:

public static void foo(int i, float f, String s) {

to this:

public static void foo(int i, float f,
String s) {

Filling is Emacs’ term for word wrapping. M-q is bound to fill-paragraph, which
fills the current paragraph. However, Emacs only knows how to word wrap text. If
you’re in any of the code modes, like c-mode, python-mode, and sgml-mode, Emacs
will only fill if it detects that you’re in a comment. It’s smart enough to know
its limits, but it would be even smarter if it didn’t have those limits. Filling
code may not be as dirt-simple as filling text, but it’s not hard.

As a start, I’d love the ability to fill function declarations and calls. The
algorithm, starting from the beginning of the line, is:

Find an open parenthesis.

Find a comma.

If you hit another open parenthesis, push the stack and go to step 1.

If you hit a close parenthesis, pop the stack and return.

If the first non-whitespace character after the comma is beyond the fill
column, insert a newline and indent to the column after the open parenthesis in
step 1. (If this is beyond the fill column, you’re hosed.)

2 thoughts on “filling code in emacs”

Sounds cool. Even better would be if it only DISPLAYED your code to fit the width of the window without actually changing the contents of the buffer/file. This would completely solve the debate over maximum line length, as long as everyone uses an editor that does this. Dinosaurs who pine for the 1970’s could set their windows to 80 char without infecting the rest of us.

Just installed it from the emacs package archive and found it to be really useful. To be honest I am totally amazed that no one else has addressed this problem so far and that filling code paragraphs is not a standard option in emacs. Although it is hard to get it right in every programming language that is out there. Just tossing that in: I am currently configuring an “uncrustify” for my code and thought that a “uncrustify-region” function might be the next step in evolution.