" Delete the next line to avoid the special indention of items if !exists("g:org_indent") let g:org_indent = 0 endif setlocal foldtext=GetOrgFoldtext() setlocal fillchars-=fold:- setlocal fillchars+=fold:\ setlocal foldexpr=GetOrgFolding() setlocal foldmethod=expr setlocal indentexpr=GetOrgIndent() setlocal nolisp setlocal nosmartindent setlocal autoindent if has('python3') let s:py_env = 'python3 << EOF' else let s:py_env = 'python << EOF' endif function! GetOrgIndent() if g:org_indent == 0 return -1 endif exe s:py_env from orgmode._vim import indent_orgmode indent_orgmode() EOF if exists('b:indent_level') let l:tmp = b:indent_level unlet b:indent_level return l:tmp else return -1 endif endfunction function! GetOrgFolding() let l:mode = mode() if l:mode == 'i' " the cache size is limited to 3, because vim queries the current and " both surrounding lines when the user is typing in insert mode. The " cache is shared between GetOrgFolding and GetOrgFoldtext if ! exists('b:org_folding_cache') let b:org_folding_cache = {} endif if has_key(b:org_folding_cache, v:lnum) if match(b:org_folding_cache[v:lnum], '^>') == 0 && \ match(getline(v:lnum), '^\*\+\s') != 0 " when the user pastes text or presses enter, it happens that " the cache starts to confuse vim's folding abilities " these entries can safely be removed unlet b:org_folding_cache[v:lnum] " the fold text cache is probably also damaged, delete it as " well unlet! b:org_foldtext_cache else return b:org_folding_cache[v:lnum] endif endif exe s:py_env from orgmode._vim import fold_orgmode fold_orgmode(allow_dirty=True) EOF else exe s:py_env from orgmode._vim import fold_orgmode fold_orgmode() EOF endif if exists('b:fold_expr') let l:tmp = b:fold_expr unlet b:fold_expr if l:mode == 'i' if ! has_key(b:org_folding_cache, v:lnum) if len(b:org_folding_cache) > 3 let b:org_folding_cache = {} endif let b:org_folding_cache[v:lnum] = l:tmp endif endif return l:tmp else return -1 endif endfunction function! SetOrgFoldtext(text) let b:foldtext = a:text endfunction function! GetOrgFoldtext() let l:mode = mode() if l:mode == 'i' " add a separate cache for fold text if ! exists('b:org_foldtext_cache') || \ ! has_key(b:org_foldtext_cache, 'timestamp') || \ b:org_foldtext_cache['timestamp'] > (localtime() + 10) let b:org_foldtext_cache = {'timestamp': localtime()} endif if has_key(b:org_foldtext_cache, v:foldstart) return b:org_foldtext_cache[v:foldstart] endif exe s:py_env from orgmode._vim import fold_text fold_text(allow_dirty=True) EOF else unlet! b:org_foldtext_cache exec s:py_env from orgmode._vim import fold_text fold_text() EOF endif if exists('b:foldtext') let l:tmp = b:foldtext unlet b:foldtext if l:mode == 'i' let b:org_foldtext_cache[v:foldstart] = l:tmp endif return l:tmp endif endfunction