|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/3833557cc2d4.html, оценка из 5, голосов 10
|