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


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Kirill Frolov                        2:5030/827.2   20 Jun 2003  12:25:57
 To : Ruslan Kosolapov
 Subject : Re: slrn
 -------------------------------------------------------------------------------- 
 
 
 On Tue, 17 Jun 03 09:20:22 +0400, Ruslan Kosolapov wrote:
 
  AS>> 2) взять макрос для vim, который использовать как редактор для slrn.
  RK>   Вот где его взять?  Hа vim.org не нашёл.
 
    В дебрях гугля.
 
    Как этим пользоваться я не знаю.
 
 === цут хере ===
 
 "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
 
 === цут хере ===
  AS>> 3) взять патчи на http://smile.org.ua/~andy/prj/slrn
  RK>   Hе хотелось бы патчить...
 
    Это самое простое и результат не самый плохой. Получаешь ещё возможность
 форвардить сообщения (то-есть ответ без квотинга). Без патча можно только
 отвечать с квотингом.
     
    Можно ещё в ~/.vimrc вставить:
 
 autocmd BufRead ~/.followup* execute '%!~/bin/quoting' | set noautoindent |
 redraw!
 
 === цут хере ===
 #!/usr/bin/perl
 
 use locale;
 
 $header=1;
 undef $to;
 while (<>) {
 if ($header) {
   print $_;
   if (m/^\s*$/) {
    $header=0;
    if (defined($to)) {
       $to=~s/(\S)\S*\s*/$1/g;
       $to=~s/^(..).*/$1/ if (length($to)>3);
    } else { 
       $to="";
    }
    next;
   }
   $to=$2 if (m/[A-Z](\w|-)*-To: (.*)$/);
   next;
 }
   s/\n//;
   s/^>\s*$// || s/^>\s{0,4}(\w{1,7}>{1,8})\s?/$1> / ||
 s/^>\s{0,4}(>{1,8})\s/$to$1> / || s/^>(.*)/$to>$1/;
   print "$_\n";
 }
 
 === цут хере ===  
         
 
 --- [ZX]
  * Origin: на пц мы ставим крест, speccy поколенье next! (2:5030/827.2)
 
 

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

 Тема:    Автор:    Дата:  
 Re: slrn   Kirill Frolov   20 Jun 2003 12:25:57 
Архивное /ru.linux/3833557cc2d4.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional