On Wed, 21 Dec 2011 09:40:08 -0500, Austin Clements <amdragon@MIT.EDU> wrote: > I would definitely go with the latter. > > It might feel less unwieldy with a shorter variable name than > "filename", since that has to be repeated so many times. (It's also > not really a filename in the middle of the replace process.) > > This is splitting hairs, but in my original suggestion, I was thinking > something like > > (let* ((s subject) > (s (replace-regexp-in-string "^ *\\(\\[[^]]*\\]\\)? *" "" s)) > (s (replace-regexp-in-string "[. ]*$" "" s)) > (s (replace-regexp-in-string "[^A-Za-z0-9._-]+" "-" s)) > (s (replace-regexp-in-string "\\.+" "." s)) > (s (substring s 0 (min (length s) 50)))) > (concat s ".patch")) > > Out of curiosity, where'd the regexps come from? They all seem > reasonable, but some of them seem somewhat arbitrary. The regexps should definitely have some explanation. I tried to mimic the 'git format-patch' behaviour [1] using as simple and straightforward regexps as possible. For simplicity, there's no creation of patch sequence numbers. The max length is the same as in git, excluding the sequence number. If the patch was sent using git format-patch/send-email, this should result in re-creation of the same filename as the sender had (apart from the sequence number, obviously). I seem to be missing the trimming of any trailing '.' and '-' after truncating the string to max length, though. BR, Jani. [1] https://github.com/gitster/git/blob/master/pretty.c#L712