On 2007-05-12, Allan Wind <[EMAIL PROTECTED]> wrote:
> I would like to auto-wrap emails and set formatoptions to tcqlaqw with:
>
> autocmd FileType mail set formatoptions+=aw
>
> Other than missing the mentioned "j" in vim 7.0 to make join remove
> comment leaders this works great for the body of the message. Trouble
> is that I have mutt configured to pass in headers, and obviously do not
> want header lines wrapped.
>
> Any ideas on how to configure vim to not wrap the header but do wrap the
> body of a mail automatically? mail syntax already knows what a header
> looks like including quoted headers, so perhaps there is a way to use
> that?
I've played with this a little, with mixed success. My solution
works well enough most of the time that I haven't taken the time to
make it better, but it doesn't work well enough that I would post it
as a plugin.
I use this autocommand,
au CursorHold * if &ft == 'mail' | call flowed_context() | endif
and a function, s:flowed_context(), that attempts to determine which
part of the message the cursor is in by executing
let syn_name = synIDattr(synID(line("."), col("."), 1), "name")
if syn_name =~ "^mailHeader" || syn_name == "mailEmail" || syn_name ==
"mailSubject"
let l:msg_part = "header"
let in_body = 0
elseif syn_name == "mailSignature"
let l:msg_part = "signature"
let in_body = 0
else
let l:msg_part = "body"
let in_body = 1
endif
and then sets 'formatoptions' with or without 'aw' depending on the
value of 'in_body'.
One of the problems with it is that sometimes, as I'm editing the
header, the text is no longer identified by the syntax rules as part
of the header, so 'aw' gets added to 'formatoptions' and the header
text gets messed up.
If I were to work on this more, I think I would search the buffer to
find the boundaries between parts instead of using the syntax
highlighting and use the new winsaveview() and winrestview()
functions to more completely save and restore the window and cursor
states at the start and end of the flowed_context() function. Those
functions weren't available when I first wrote the function, which
is why I used syntax highlighting to determine where the cursor was
in order to avoid moving the cursor during the autocommand.
HTH,
Gary
--
Gary Johnson | Agilent Technologies
[EMAIL PROTECTED] | Mobile Broadband Division
| Spokane, Washington, USA