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」って書いただけ。これで要望どおり、プレビューが消えるようになったはず。やったね!