You may remember one of my previous posts on a Vim script I wrote to quickly open an issue in the browser from the OOo sources. As the patches/dev300/apply file is containing issues numbers formatted differently (in the form i#XXXXX instead of #iXXXXX#), I decided to tweak my script to support this other issues format.
The previous OpenIssue function was using expand("\<cword>") in order to get the selected issue. This is not working for the new format I wanted to support as # is a words delimiter. Thanks to word_tools.vim from Luc Hermitte, I have written a new function getting all the issues formats. Here is the new code:
" Get the issue number under the cursor. An issue number is containing
" digits, lating letters and #. The # characters are removed from the result.
"
" Code heavily inspired from the words_tools.vim of Luc Hermitte
" http://hermitte.free.fr/vim/ressources/dollar_VIM/plugin/words_tools_vim.html
function! GetCurrentIssueText()
let c = col ('.')-1
let l = line('.')
let ll = getline(l)
let ll1 = strpart(ll,0,c)
let ll1 = matchstr(ll1,'[0-9#a-zA-Z]*$')
if strlen(ll1) == 0
return ll1
else
let ll2 = strpart(ll,c,strlen(ll)-c+1)
let ll2 = strpart(ll2,0,match(ll2,'$\|[^0-9#a-zA-Z]'))
let text = ll1.ll2
let text = substitute( text, "#", "", "g" )
return text
endif
endfunction
" Open IssueZilla / Bugzilla for the selected issue
function! OpenIssue( )
let s:browser = "firefox"
let s:issueText = GetCurrentIssueText( )
let s:urlTemplate = ""
let s:pattern = "\\(\\a\\+\\)\\(\\d\\+\\)"
let s:prefix = substitute( s:issueText, s:pattern, "\\1", "" )
let s:id = substitute( s:issueText, s:pattern, "\\2", "" )
if s:prefix == "i"
let s:urlTemplate = "http://qa.openoffice.org/issues/show_bug.cgi?id=%"
elseif s:prefix == "n"
let s:urlTemplate = "https://bugzilla.novell.com/show_bug.cgi?id=%"
endif
if s:urlTemplate != ""
let s:url = substitute( s:urlTemplate, "%", s:id, "g" )
let s:cmd = "silent !" . s:browser . " " . s:url . "&"
execute s:cmd
endif
endfunction
map :call OpenIssue()