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


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Kirill Frolov                        2:5030/827.2   12 Apr 2003  07:55:53
 To : Artem Chuprina
 Subject : Re: Фидоквотинг в vim'е
 -------------------------------------------------------------------------------- 
 
 
  RK>>> как). Фидошный квотинг можно настроить в виме безо всяких патчей, и
  RK>>> писать в нём независимо от ньюсридера вообще.
  DP>> Как?
   
  AC> В архиве то ли здесь, то ли RU.UNIX. Буквально только что свою функцию
  AC> постил.
 
   Это?   А как ей пользоваться?
  call CiteOriginal(jfsdfsfs) ничего не меняет. :-/
 
  
 if exists("b:did_ftplugin")
   finish
 endif source $VIMRUNTIME/ftplugin/mail.vim setlocal textwidth=56
 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
 
 -- 
 [ZX]
 --- ifmail v.2.14-tx8.10
  * Origin: zxlink (2:5030/827.2)
 
 

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

 Тема:    Автор:    Дата:  
 Re: Фидоквотинг в vim\'е   Kirill Frolov   12 Apr 2003 07:55:53 
 Re: Фидоквотинг в vim\'е   Artem Chuprina   14 Apr 2003 13:23:37 
Архивное /ru.linux/3833f04ef626.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional