82 presentation.vim (6-1) とにかく明日使いたい

「はっきりいって自己満足」で有名(?)な presentation.vim 。今回のスクリプトはこれ。

http://d.hatena.ne.jp/maedana/20080529/1212059765

presentation.vim の更新は楽しみにしてる。だけど、明日の発表で使いたい。次を待てない!というわけで、とりあえずスライドを現在のバッファから作れるように、勝手に改造した。

現在のバッファを self.slides の形式にあわせて解釈する関数を定義。

" 現在のバッファを適当に解釈して、スライドの形式になおす手抜き関数
" ↓こんな感じで書いとくと良い
"   *タイトル
"   項目1
"   項目2
function! s:LoadSlides()
  let slides = []
  for line in getline(1, '$')
    if line =~ '^\*'
      call add(slides, {'title': strpart(line, 1)})
    else
      if empty(slides)
        let slide = {}
      else
        let slide = remove(slides, -1)
      endif
      if has_key(slide, 'contents')
        call add(slide['contents'], '* ' . line)
      else
        let slide['contents'] = ['* ' . line]
      endif
      call add(slides, slide)
    endif
  endfor
  return slides
endfunction

load() メソッドと Enable() 関数をサクっと書き換えて完成。

function! s:Presentation.load(slides)
  let self.slides = a:slides
  let self.current = 0
  let self.currentLine = 0
endfunction
" プレゼンテーションを有効化する
function! s:Enable()
  set paste
  set ve=all
  set laststatus=0
  set cursorline
  highlight CursorLine ctermfg=184

  map <buffer> <silent> j :call <SID>ShowNextLine()<CR>
  map <buffer> <silent> k :call <SID>ShowPrevLine()<CR>
  map <buffer> <silent> h :call <SID>ShowPrevPage()<CR>
  map <buffer> <silent> l :call <SID>ShowNextPage()<CR>

  let slides = s:LoadSlides()
  call s:Presentation.clearPage()
  call s:Presentation.load(slides)
  call s:Presentation.showPageTitle()
endfunction

テストデータを作って、動かした。一応動いたのでOK

*1ページ目
あー時間ないのに
彼をツンデレにするのはどうよ
はいはい、くふくふ
*2ページ目
ポパイ
オリーブ
オリーブ
オリーブ
ポパイ
*3ページ目
飛んだら負け
崩したら負け
諦めたら負け
*4ページ目
</presentation>とかしてる人が居た
開始タグは書かないんですね
*5ページ目
さよならByeBye

また本家が外部ファイルに対応したら、そっちにあわせま。時間ねぇ。