Re: formatoptions: is there a way to disable "a" for a range?

2007-05-13 Thread Gary Johnson
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


formatoptions: is there a way to disable "a" for a range?

2007-05-12 Thread Allan Wind
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?


/Allan