Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Artem Chuprina                       2:5020/400     11 Apr 2003  12:32:05
 To : Dmitry Pyzhov
 Subject : Re: vim + fido quoting
 -------------------------------------------------------------------------------- 
 
 Здравствуй, Dmitry Pyzhov.
 
 DP> Как вим научить понимать фидошный квотинг? Чтоб при разбитии строки на две
 DP> в новой автоматом прописывались инициалы, а при слиянии - удалялись...
 DP> Короче - чтоб редактирование было как в голделе :) Если к gvim ещё и цвето-
 DP> выделение фидошное можно прикрутить, то вообще здорово.
 
 ==== 8< [.vim/ftplugin/mail.vim] ====
 if exists("b:did_ftplugin")
   finish
 endif
 source $VIMRUNTIME/ftplugin/mail.vim
 setlocal textwidth=78 formatoptions=tcrqn2
 
 function! CiteOriginal (...) abort
   if a:0 && match(a:1, '\<keep_headers\>') != -1
    let keep_headers = 1
   endif
   let word_char = '[[:alnum:]]'
   let non_word_char = '[^[:alnum:]]'
   let quote_element = word_char . '\{1,9}>'
   let &comments = "n:>"
   let l = 1
   let is_followup = 0
   let is_reply = 0
   let newsgroup = ''
   " skip our header
   while strlen(getline(l))
    let line = getline(l)
    if line =~? '^references:'
       let is_followup = 1
    elseif line =~? '^in-reply-to:'
       let is_reply = 1
    elseif line =~? '^\(x-\)\=newsgroups:'
       let newsgroup = matchstr(line,'\S\+$')
    endif
    let l = l+1
   endwhile
   let l = l+1
   while (l<=line('$') && !strlen(getline(l)))
    let l = l+1
   endwhile
   " analyze and handle original header
   let body_start = l
   let b:from_name = ''
   let b:to_name = ''
   let b:from_addr = ''
   let b:initials = ''
   let citing=0
   if (getline(body_start) =~ '^[A-Za-z-]\+:')
    let citing=1
    exe body_start
    while strlen(getline(l))
       let line = getline(l)
       if ! strlen(b:from_addr)
        \&& line =~? '^from:.*<\S\+@[A-Za-z0-9.-]\+>'
        let b:from_addr = matchstr(line,'<\S\+@[A-Za-z0-9.-]\+>')
        let b:from_addr = strpart(b:from_addr,1,strlen(b:from_addr)-2)
        let b:from_name = matchstr(line,':[^<]\+')
        let b:from_name = strpart(b:from_name,
           \matchend(b:from_name,'^:\s*["'."'".']\='),
           \strlen(b:from_name))
        let b:from_name = strpart(b:from_name,0,
           \match(b:from_name,'["'."'".']\=\s*$'))
       elseif ! strlen(b:from_addr)
        \&& line =~? '^from:\s*\S\+@[A-Za-z0-9.-]\+\s*(.*)'
        let b:from_addr = matchstr(line,'\S\+@[A-Za-z0-9.-]\+')
        let b:from_name = matchstr(line,'(.*)')
        let b:from_name = strpart(b:from_name,1,strlen(b:from_name)-2)
       elseif ! strlen(b:to_name)
        \&& line =~? '^\(x-comment-\)\=to:.*<\S\+@[A-Za-z0-9.-]\+>'
        let b:to_name = matchstr(line,':[^<]\+')
        let b:to_name = strpart(b:to_name,
           \matchend(b:to_name,'^:\s*["'."'".']\='),
           \strlen(b:to_name))
        let b:to_name = strpart(b:to_name,0,
           \match(b:to_name,'["'."'".']\=\s*$'))
       elseif ! strlen(b:to_name) &&
        \line =~? '^\(x-comment-\)\=to:\s*\S\+@[A-Za-z0-9.-]\+\s*(.*)'
        let b:to_name = matchstr(line,'(.*)')
        let b:to_name = strpart(b:to_name,1,strlen(b:to_name)-2)
       endif
       let l = l+1
    endwhile
    let b:initials = substitute(b:from_name,'.\{-}\<\(.\).\{-}\>','\1','g')
    let b:initials = substitute(b:initials,non_word_char.'*','','g')
    if !strlen(b:initials)
       let b:initials = matchstr(b:from_addr,'^'.word_char.'*')
    endif
    let body_header_end = l
   endif
   let l = line('$')
   while l >= body_start
    let line = getline(l)
    if citing
       if line == '-- '
        execute l.',$d s'
        let l = l-1
        continue
       elseif line =~ '^[ \t>]*'.quote_element
        let line = substitute(line,'>','>>','')
       else
        let line = b:initials.'> '.line
       endif
       call setline(l,line)
    endif
    let line_len = strlen(line)
    let prefix = matchstr(line,'^[ \t>]*'.quote_element)
    while strlen(prefix)
       let line = strpart(line,strlen(prefix),line_len)
       let prefix = substitute(prefix,'^[ \t>]*','','')
       if match(&comments,':'.prefix.'\($\|,\)') < 0
        let &comments = &comments.',n:'.prefix
       endif
       let prefix = matchstr(line,'^[ \t>]*'.quote_element)
    endwhile
    if citing && line =~ '^\s*$'
       call setline(l,'')
    endif
    let l = l-1
   endwhile
   if exists("body_header_end") && (!exists("keep_headers") || !keep_headers)
    execute body_start.','.body_header_end.' d h'
   endif
   if citing
    if strlen(b:from_name)
       call append(body_start-1,'')
       call append(body_start-1,'Здравствуй, '.b:from_name.'.')
    endif
    call append(line('$'),'')
    call append(line('$'),'-- ')
    $r ~/.signature
    exec body_start+2
   else
    exec body_start-2
   endif
   normal zb
 endfunction
 
 ==== >8 [.vim/ftplugin/mail.vim] ====
 
 Оно, правда, делает несколько больше, чем надо... Hо не я же буду выкусывать
 лишнее для _тебя_?
 
 А что ты понимаешь под фидошным цветовыделением? Свое почтовое у него работает
 весьма неплохо, если б еще не идиотская манера голого деда делать цитате
 горизонтальный отступ. Лечится исправлением соответствующего места в системном
 mail.vim на
 
 syn match  mailQuoted1 "^\s*\([[:alpha:]]\+>\|[]|}>]\).*$"
 syn match  mailQuoted2 "^\(\s*\([[:alpha:]]\+>\|[]|}>]\)\)\{2}.*$"
 syn match  mailQuoted3 "^\(\s*\([[:alpha:]]\+>\|[]|}>]\)\)\{3}.*$"
 syn match  mailQuoted4 "^\(\s*\([[:alpha:]]\+>\|[]|}>]\)\)\{4}.*$"
 syn match  mailQuoted5 "^\(\s*\([[:alpha:]]\+>\|[]|}>]\)\)\{5}.*$"
 syn match  mailQuoted6 "^\(\s*\([[:alpha:]]\+>\|[]|}>]\)\)\{6}.*$"
 
 -- 
 Artem Chuprina
 RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757
 --- ifmail v.2.15dev4
  * Origin: Leninsky 45 home network (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 vim + fido quoting   Dmitry Pyzhov   10 Apr 2003 22:48:01 
 Re: vim + fido quoting   Artem Chuprina   11 Apr 2003 12:32:05 
 Re: vim + fido quoting   Oleg Sheremetinsky   11 Apr 2003 00:21:52 
Архивное /ru.linux/1147790ad4e80.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional