Kazuo Teramoto wrote:
Hi,
I love the Bram fortune file (I read it all, is fun) but now looks it
be updated (with From "know your smileys" and jokes about proofs...)
but it is not updated in Bram site, anyone know from are Bram take the
'know your smileys'?

Bye.

PS. I love the vim list, really, I read it for fun, I don't post so
much but I think we have one of the best ml or better one of the best
user community.


Here's a variation on Bram's "fortunes.vim" script for use when not using Vim to write mail: I wrote this into my vimrc and checked that it works:

if has("autocmd")
    augroup vimrclocal
        " move first fortune (with initial sig delimiter)
        " to the bottom and the clipboard
        au BufRead fortunes.txt
        \ map <buffer> <F5>
        \  :1;/^-- $/-1d +
        \  <Bar>$put +
        \  <Bar>w
        \  <CR>
    augroup END
endif

This is not perfect: you may want to create a more complex mapping to insert your fixed sig after the "-- " line after moving the fortune. The above requires:

1. modification of the fortunes.txt file (as follows) to use "proper" sig delimiters as separators:

        :1,$s/^--$/-- /

This adds 529 (decimal) bytes to the file, which I think is acceptable.

2. a Vim version with access to the clipboard (i.e., any version of gvim, or a console Vim compiled with clipboard support and running in a terminal with access to the clipboard). This should also be a Vim version 6.1 or later, and preferably 6.1.092 or later, because of the ":map <buffer>" command. ;-)

To use it, open fortunes.txt in Vim, hit F5, then go to your mailer, place the cursor on an empty line after last line, and paste. You may then add the fixed part of your sig below the delimiter. (Of course, replace <F5> by another key to map it to something else.)

Note: I just found that on Linux systems such as mine, the "fortune" shell command will deliver random aphorisms. Use "fortune -f" to list fortune files, "fortune" for a random non-offensive fortune, "man fortune" for details. However I don't know how to add a database (a pair of files, "something" in text format and "something.dat" in binary format) to the list. I think I'll write a function to get fortunes from both Bram's and the Linux lists.

... Done (I think I put the necessary safeguards into it to make it portable). Two status variables are remembered across Vim runs if the viminfo is enabled. Two more varaiables are initialized at first call. With the settings below, Bram's fortunes will happen 20% of the time (on Unix when both ~/fortunes.txt and the fortune program are present). Change g:FortuneCycle to alter that. Each call to the function Fortune() returns a new fortune both as the return value and in the clipboard, except when neither source of aphorisms is installed, in which case it returns the empty string. -- Replace ":echo" by ":call" in the mapping to avoid displaying the fortune in Vim.

if has("viminfo") && (&viminfo != "")
        " append at left end because the viminfo name (if present)
        " must be last
        set viminfo-=!
        set viminfo^=!
endif
function Fortune()
        " In order to remember them in the viminfo,
        " the first two variables defined below
        " must have names starting with an uppercase letter
        " and containing no lowercase letters.
        if !exists("g:FORTUNE")
                let g:FORTUNE = 0
        endif
        if !exists("g:FORTUNECYCLE")
                let g:FORTUNECYCLE = 5
        endif
        if !exists("s:sysFortunes")
                let s:sysFortunes =
                \ (system("which fortune") != "") && (!v:shell_error)
        endif
        if !exists("s:bramFortunes")
                let s:bramFortunes =
                \ filereadeable(expand("~/fortunes.txt"))
        endif
        if s:sysFortunes && (g:FORTUNE || (!s:bramFortunes))
                let @+ = "-- \n" . system("fortune -a")
        elseif s:bramFortunes
                new ~/fortunes.txt
                silent 1;/^-- $/-1d +
                $put +
                wq
        else
                let @+ = ""
        endif
        let g:FORTUNE = g:FORTUNE + 1
        if g:FORTUNE >= g:FORTUNECYCLE
                let g:FORTUNE = 0
        endif
        return @+
endfunction
map <F5> :echo Fortune()<CR>

--
Best regards,
Tony.

Too clever is dumb.
                -- Ogden Nash

Reply via email to