33 howm-mode.vim (2-11) 検索結果から新しい窓を開く2

http://d.hatena.ne.jp/eclipse-a/20080129/1201584967 の続き。

前回「検索結果から新しい窓を開く」を書いたところ、新しい窓で開くときにプレビューを消したいという意見があったので、それを踏まえて修正を加えた。s:OpenSearchLine() と、呼び出し側の二点の変更。

まずは s:OpenSearchLine()。

" 検索結果の一覧を表示するためウィンドウから, 検索結果のファイルに飛ぶために使
" われている関数.
"
" 第1引数: 新しいウィンドウで開くか否か
"   ( 既定値: 0 ( 現在のウィンドウで開く ) )
" 第2引数: プレビューを閉じるか否か
"   ( 既定値: 1 ( プレビューを閉じる ) )
"
" 第1引数は実装的には検索結果を閉じるか否かなので, 真偽を逆にして解釈している.
" 第2引数の既定値は :autocmd で検索結果を閉じる際に, 同時に閉じられるため 1 に
" した. 
function! s:OpenSearchLine(...)
  let file = b:file{line('.')}
  let line = b:line{line('.')}
  let bCloseSearchWindow = (exists('a:1') ? !a:1 : 1)
  let bClosePreviewWindow = (exists('a:2') ? a:2 : 1)
  if bCloseSearchWindow | call s:EliminateWindow(bufname("%")) | endif
  if bClosePreviewWindow | call s:EliminateWindow(escape(s:prefix_howm.s:buftitle_preview, " ")) | endif
  " TODO:テキトー.バグありそう.
  if line == 0
    let ft = substitute(file, '.*\.\(.\{-}\)', '\1', '')
    if exists('g:howm_opencmd_'.ft)
      let file = escape(file, '~&')
      let cmd = substitute(g:howm_opencmd_{ft}, '%s', file, 'g')
    else
      " 以前開いたカーソル位置を有効にする
      let cmd = "call s:OpenMemo(file, -1)"
    endif
  else
    let cmd = "call s:OpenMemo(file, line)"
  endif
  exe cmd
endfunction

今回は関数全体を引用。変更点は4行くらい。変更内容は、前回の変更を分かりやすい形にしたことと、今回の変更(引数の追加)と、改造内容のコメントを追加したこと。この関数を定義するだけなら動作は一切変更されないはず。次に、呼び出し側の修正。

function! s:OpenSearchWindow(searchWord, ...)
  " ...
  nnoremap <silent> <buffer> <S-CR> :call <SID>OpenSearchLine(1, 1)<CR>
  " ...
endfunction

こちらは変更部分のみの引用。s:OpenSearchLine() に追加した引数を使う変更。「, 1」って書いただけ。これで要望どおり、プレビューが消えるようになったはず。やったね!