mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-23 20:10:05 +08:00
246 lines
7.2 KiB
VimL
246 lines
7.2 KiB
VimL
" org.vim - VimOrganizer plugin for Vim
|
|
" -------------------------------------------------------------
|
|
" Version: 0.30
|
|
" Maintainer: Herbert Sitz <hesitz@gmail.com>
|
|
" Last Change: 2011 Nov 02
|
|
"
|
|
" Script: http://www.vim.org/scripts/script.php?script_id=3342
|
|
" Github page: http://github.com/hsitz/VimOrganizer
|
|
" Copyright: (c) 2010, 2011 by Herbert Sitz
|
|
" The VIM LICENSE applies to all files in the
|
|
" VimOrganizer plugin.
|
|
" (See the Vim copyright except read "VimOrganizer"
|
|
" in places where that copyright refers to "Vim".)
|
|
" http://vimdoc.sourceforge.net/htmldoc/uganda.html#license
|
|
" No warranty, express or implied.
|
|
" *** *** Use At-Your-Own-Risk *** ***
|
|
|
|
if exists("g:org_autoload_funcs")
|
|
finish
|
|
endif
|
|
|
|
let g:org_autoload_funcs=1
|
|
|
|
function! org#SetOrgFileType()
|
|
"if expand("%:e") == 'org'
|
|
"if exists("g:syntax_on") | syntax off | else | syntax enable | endif
|
|
"syntax enable
|
|
if &filetype != 'org'
|
|
execute "set filetype=org"
|
|
|
|
" if !exists('g:org_todo_setup')
|
|
" let g:org_todo_setup = 'TODO | DONE'
|
|
" endif
|
|
" if !exists('g:org_tag_setup')
|
|
" let g:org_tag_setup = '{home(h) work(w)}'
|
|
" endif
|
|
"
|
|
" call OrgProcessConfigLines()
|
|
" exec "syntax match DONETODO '" . b:v.todoDoneMatch . "' containedin=OL1,OL2,OL3,OL4,OL5,OL6"
|
|
" exec "syntax match NOTDONETODO '" . b:v.todoNotDoneMatch . "' containedin=OL1,OL2,OL3,OL4,OL5,OL6"
|
|
|
|
endif
|
|
|
|
"endif
|
|
runtime syntax/org.vim
|
|
"syntax enable
|
|
"call OrgSetColors()
|
|
endfunction
|
|
|
|
function! org#Pad(s,amt)
|
|
return a:s . repeat(' ',a:amt - len(a:s))
|
|
endfunction
|
|
|
|
function! org#Timestamp()
|
|
return strftime("%Y-%m-%d %a %H:%M")
|
|
endfunction
|
|
|
|
function! org#redir(command)
|
|
let save_a = @a
|
|
try
|
|
silent! redir @a
|
|
silent! exe a:command
|
|
redir END
|
|
finally
|
|
"let res = split(@a,"\n")
|
|
let res = @a
|
|
|
|
" restore register
|
|
let @a = save_a
|
|
return res
|
|
endtry
|
|
endfunction
|
|
|
|
function! org#GetGroupHighlight(group)
|
|
" this code was copied and modified from code posted on StackOverflow
|
|
" http://stackoverflow.com/questions/1331213/how-to-modify-existing-highlight-group-in-vim
|
|
" Redirect the output of the "hi" command into a variable
|
|
" and find the highlighting
|
|
redir => GroupDetails
|
|
try
|
|
exe "silent hi " . a:group
|
|
catch
|
|
" skip error message if no such group exists
|
|
endtry
|
|
redir END
|
|
|
|
" Resolve linked groups to find the root highlighting scheme
|
|
while GroupDetails =~ "links to"
|
|
let index = stridx(GroupDetails, "links to") + len("links to")
|
|
let LinkedGroup = strpart(GroupDetails, index + 1)
|
|
redir => GroupDetails
|
|
exe "silent hi " . LinkedGroup
|
|
redir END
|
|
endwhile
|
|
|
|
if GroupDetails ># ''
|
|
" Extract the highlighting details (the bit after "xxx")
|
|
let MatchGroups = matchlist(GroupDetails, '\<xxx\>\s\+\(.*\)')
|
|
let ExistingHighlight = MatchGroups[1] !~? 'cleared' ? MatchGroups[1] : ''
|
|
else
|
|
" Group does not exist
|
|
let ExistingHighlight = ''
|
|
endif
|
|
|
|
return ExistingHighlight
|
|
|
|
endfunction
|
|
|
|
function! org#ISODateToYWD(date)
|
|
"returns y,w,d which are iso week spec for date
|
|
let date = a:date
|
|
"let d = 1 + ((calutil#dow(date) + 4) % 7)
|
|
let d = 1 + calutil#dow(date)
|
|
let jul_nThur = calutil#jul(date) + 4 - d
|
|
let y = calutil#cal(jul_nThur)[0:3]
|
|
let julJan1 = calutil#jul(date[0:3] . '-01-01')
|
|
let w = 1 + ((jul_nThur - julJan1) / 7)
|
|
return [y,w,d]
|
|
endfunction
|
|
|
|
function! org#LocateFile(filename)
|
|
let filename = a:filename
|
|
|
|
if bufwinnr(filename) >= 0
|
|
silent execute bufwinnr(filename)."wincmd w"
|
|
else
|
|
if org#redir('tabs') =~ fnamemodify(filename, ':t')
|
|
" proceed on assumption that file is open
|
|
" if match found in tablist
|
|
let this_tab = tabpagenr()
|
|
let last_tab = tabpagenr('$')
|
|
for i in range(1 , last_tab)
|
|
exec i . 'tabn'
|
|
if bufwinnr(filename) >= 0
|
|
silent execute bufwinnr(filename)."wincmd w"
|
|
break
|
|
" if file not found then use tab drop to open new file
|
|
elseif i == last_tab
|
|
execute 'tab drop ' . filename
|
|
if (&ft != 'org') && (filename != '__Agenda__')
|
|
call org#SetOrgFileType()
|
|
endif
|
|
endif
|
|
tabn
|
|
endfor
|
|
else
|
|
exe 'tabn ' . tabpagenr('$')
|
|
execute 'tab drop ' . filename
|
|
if (&ft != 'org') && (filename != '__Agenda__')
|
|
call org#SetOrgFileType()
|
|
endif
|
|
endif
|
|
endif
|
|
if (&fdm != 'expr') && !exists('g:in_agenda_search')
|
|
set fdm=expr
|
|
set foldlevel=1
|
|
endif
|
|
|
|
endfunction
|
|
|
|
function! org#SaveLocation()
|
|
let file_loc = bufname('%') ==? '__Agenda__' ? '__Agenda__' : expand('%:p')
|
|
let g:location = [ file_loc , getpos('.') ]
|
|
endfunction
|
|
function! org#RestoreLocation()
|
|
if expand('%:p') != g:location[0]
|
|
call org#LocateFile( g:location[0] )
|
|
endif
|
|
call setpos( '.', g:location[1] )
|
|
endfunction
|
|
|
|
|
|
function! org#OpenCaptureFile()
|
|
call org#LocateFile(g:org_capture_file)
|
|
endfunction
|
|
|
|
function! org#CaptureBuffer()
|
|
if !exists('g:org_capture_file') || empty(g:org_capture_file)
|
|
echo 'Capture is not set up. Please read docs at :h vimorg-capture.'
|
|
return
|
|
endif
|
|
if bufnr('_Org_Capture_') > 0
|
|
exec 'bwipeout! ' . bufnr('_Org_Capture_')
|
|
endif
|
|
sp _Org_Capture_
|
|
autocmd BufWriteCmd <buffer> :call <SID>ProcessCapture()
|
|
"autocmd BufLeave <buffer> :bwipeout
|
|
autocmd BufUnload <buffer> :set nomodified
|
|
set nobuflisted
|
|
set ft=org
|
|
setlocal buftype=acwrite
|
|
setlocal noswapfile
|
|
command! -buffer W :call <SID>ProcessCapture()
|
|
" below is the basic template
|
|
" a first level head with date timestamp
|
|
normal ggVGd
|
|
normal i*
|
|
silent exec "normal o:<".org#Timestamp().">"
|
|
normal gg
|
|
set nomodified
|
|
startinsert!
|
|
|
|
endfunction
|
|
function! s:ProcessCapture()
|
|
"normal ggVG"xy
|
|
let curbufnr = bufnr(g:org_capture_file)
|
|
" check if capture file is already open or not
|
|
if curbufnr == -1
|
|
exe '1,$write >> ' . g:org_capture_file
|
|
bw! _Org_Capture_
|
|
else
|
|
normal ggVG"xy
|
|
bw! _Org_Capture_
|
|
call org#SaveLocation()
|
|
call org#LocateFile(g:org_capture_file)
|
|
normal G"xp
|
|
silent write
|
|
call org#RestoreLocation()
|
|
endif
|
|
exe 'bwipeout! ' . g:org_capture_file
|
|
|
|
endfunction
|
|
|
|
function! s:Pre0(s)
|
|
return repeat('0',2 - len(a:s)) . a:s
|
|
endfunction
|
|
function! org#randomData()
|
|
|
|
let date = string((2009 + org#util#random(3) - 1)).'-'.s:Pre0(org#util#random(12)).'-'.s:Pre0(org#util#random(28))
|
|
let dstring = ''
|
|
if org#util#random(3) == 3
|
|
let dstring = date. ' ' . calutil#dayname(date)
|
|
else
|
|
let dstring = date. ' ' . calutil#dayname(date).' '.s:Pre0(org#util#random(23)).':'.s:Pre0((org#util#random(12)-1)*5)
|
|
endif
|
|
if org#util#random(6) == 6
|
|
let dstring .= ' +'.org#util#random(4).['d','w','m'][org#util#random(3)-1]
|
|
endif
|
|
return '<'.dstring.'>'
|
|
"if a:date_type != ''
|
|
" call s:SetProp(a:date_type,date)
|
|
"else
|
|
" silent execute "normal A".date
|
|
"endif
|
|
endfunction
|