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