By default <leader>o as mapped in ftplugin/changelog.vim opens the
file ChangeLog in the current directory. The following patch makes
this slightly more flexible.
#1
The name of the change log can be defined in b:changelog and can refer
to a file in a different directory.
#2
The variable b:changelog_entry_prefix can contain a function name that
will be called to create an appropriate prefix for the current entry.
If this variable isn't defined the "filename:" will be used instead.
This prefix can be inserted into entry templates with "%p".
For ruby, such a function could look like this:
if !exists('*RubyChangeLogEntry')
function! RubyChangeLogEntry() "{{{3
let e = expand('%:t')
let rx = '^\s*\(def\|module\|class\)\>\s\+\zs\([^[:space:]({]\+
\)'
let l = search(rx, 'bcnW')
if l
let e .= ' ('. matchstr(getline(l), rx) .'):'
endif
return e
endf
endif
This could be used to insert entries like
* file.rb (method_name):
Regards,
Thomas
--- src/vim/runtime/ftplugin/changelog.vim 2008-07-08
15:36:43.554801600 +0200
+++ ftplugin/changelog.vim 2008-07-08 16:12:49.278960000 +0200
@@ -116,12 +116,12 @@
" Format used for new date entries.
if !exists('g:changelog_new_date_format')
- let g:changelog_new_date_format = "%d %u\n\n\t* %c\n\n"
+ let g:changelog_new_date_format = "%d %u\n\n\t*%p %c\n\n"
endif
" Format used for new entries to current date entry.
if !exists('g:changelog_new_entry_format')
- let g:changelog_new_entry_format = "\t* %c"
+ let g:changelog_new_entry_format = "\t*%p %c"
endif
" Regular expression used to find a given date entry.
@@ -137,9 +137,9 @@
" Substitutes specific items in new date-entry formats and search
strings.
" Can be done with substitute of course, but unclean, and need [EMAIL
PROTECTED]
then.
- function! s:substitute_items(str, date, user)
+ function! s:substitute_items(str, date, user, prefix)
let str = a:str
- let middles = {'%': '%', 'd': a:date, 'u': a:user, 'c':
'{cursor}'}
+ let middles = {'%': '%', 'd': a:date, 'u': a:user, 'c':
'{cursor}', 'p': a:prefix}
let i = stridx(str, '%')
while i != -1
let inc = 0
@@ -165,7 +165,8 @@
endfunction
" Internal function to create a new entry in the ChangeLog.
- function! s:new_changelog_entry()
+ function! s:new_changelog_entry(...)
+ let prefix = a:0 >= 1 ? a:1 : ''
" Deal with 'paste' option.
let save_paste = &paste
let &paste = 1
@@ -173,7 +174,7 @@
" Look for an entry for today by our user.
let date = strftime(g:changelog_dateformat)
let search = s:substitute_items(g:changelog_date_entry_search,
date,
- \ g:changelog_username)
+ \ g:changelog_username, prefix)
if search(search) > 0
" Ok, now we look for the end of the date entry, and add an
entry.
call cursor(nextnonblank(line('.') + 1), 1)
@@ -182,7 +183,7 @@
else
let p = line('.')
endif
- let ls = split(s:substitute_items(g:changelog_new_entry_format,
'', ''),
+ let ls = split(s:substitute_items(g:changelog_new_entry_format,
'', '', prefix),
\ '\n')
call append(p, ls)
call cursor(p + 1, 1)
@@ -192,7 +193,7 @@
" No entry today, so create a date-user header and insert an
entry.
let todays_entry =
s:substitute_items(g:changelog_new_date_format,
- \ date,
g:changelog_username)
+ \ date,
g:changelog_username, prefix)
" Make sure we have a cursor positioning.
if stridx(todays_entry, '{cursor}') == -1
let todays_entry = todays_entry . '{cursor}'
@@ -240,10 +241,26 @@
nmap <silent> <Leader>o :call <SID>open_changelog()<CR>
function! s:open_changelog()
- if !filereadable('ChangeLog')
+ if exists('b:changelog')
+ let changelog = b:changelog
+ else
+ let changelog = 'ChangeLog'
+ endif
+ echom changelog
+ if !filereadable(changelog)
return
endif
- let buf = bufnr('ChangeLog')
+
+ if exists('b:changelog_entry_prefix')
+ let prefix = call(b:changelog_entry_prefix, [])
+ else
+ let prefix = expand('%:t') .':'
+ endif
+ if !empty(prefix)
+ let prefix = ' '. prefix
+ endif
+
+ let buf = bufnr(changelog)
if buf != -1
if bufwinnr(buf) != -1
execute bufwinnr(buf) . 'wincmd w'
@@ -251,9 +268,9 @@
execute 'sbuffer' buf
endif
else
- split ChangeLog
+ exec 'split '. fnameescape(changelog)
endif
-
- call s:new_changelog_entry()
+
+ call s:new_changelog_entry(prefix)
endfunction
endif
--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---