diff options
author | Adam Stankiewicz <sheerun@sher.pl> | 2018-12-26 11:36:38 +0100 |
---|---|---|
committer | Adam Stankiewicz <sheerun@sher.pl> | 2018-12-26 11:36:38 +0100 |
commit | e99f88ff0089ba78346143eaffaa7c8bf728dca2 (patch) | |
tree | d6bebce008b792a67bc1fe07fc3f47db27242889 /ftplugin | |
parent | cad135aa0193d450ddd7fb76201ceb2836ad5884 (diff) | |
download | vim-polyglot-e99f88ff0089ba78346143eaffaa7c8bf728dca2.tar.gz vim-polyglot-e99f88ff0089ba78346143eaffaa7c8bf728dca2.zip |
Add orgmode support
Diffstat (limited to 'ftplugin')
-rw-r--r-- | ftplugin/org.vim | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/ftplugin/org.vim b/ftplugin/org.vim new file mode 100644 index 00000000..6c7bd874 --- /dev/null +++ b/ftplugin/org.vim @@ -0,0 +1,173 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'org') == -1 + +" org.vim -- Text outlining and task management for Vim based on Emacs' Org-Mode +" @Author : Jan Christoph Ebersbach (jceb@e-jc.de) +" @License : AGPL3 (see http://www.gnu.org/licenses/agpl.txt) +" @Created : 2010-10-03 +" @Last Modified: Tue 13. Sep 2011 20:52:57 +0200 CEST +" @Revision : 0.4 +" vi: ft=vim:tw=80:sw=4:ts=4:fdm=marker + +if v:version > 702 + if has('python3') + let s:py_version = 'python3 ' + let s:py_env = 'python3 << EOF' + elseif has('python') + let s:py_version = 'python ' + let s:py_env = 'python << EOF' + else + echoerr "Unable to start orgmode. Orgmode depends on Vim >= 7.3 with Python support complied in." + finish + endif +else + echoerr "Unable to start orgmode. Orgmode depends on Vim >= 7.3 with Python support complied in." + finish +endif + +" Init buffer for file {{{1 +if ! exists('b:did_ftplugin') + " default emacs settings + setlocal comments=fb:*,b:#,fb:- + setlocal commentstring=#\ %s + setlocal conceallevel=2 concealcursor=nc + " original emacs settings are: setlocal tabstop=6 shiftwidth=6, but because + " of checkbox indentation the following settings are used: + setlocal tabstop=6 shiftwidth=6 + if exists('g:org_tag_column') + exe 'setlocal textwidth='.g:org_tag_column + else + setlocal textwidth=77 + endif + + " expand tab for counting level of checkbox + setlocal expandtab + + " enable % for angle brackets < > + setlocal matchpairs+=<:> + + " register keybindings if they don't have been registered before + if exists("g:loaded_org") + exe s:py_version . 'ORGMODE.register_keybindings()' + endif +endif + +" Load orgmode just once {{{1 +if &cp || exists("g:loaded_org") + finish +endif +let g:loaded_org = 1 + +" Default org plugins that will be loaded (in the given order) {{{2 +if ! exists('g:org_plugins') && ! exists('b:org_plugins') + let g:org_plugins = ['ShowHide', '|', 'Navigator', 'EditStructure', 'EditCheckbox', '|', 'Hyperlinks', '|', 'Todo', 'TagsProperties', 'Date', 'Agenda', 'Misc', '|', 'Export'] +endif + +" Default org plugin settings {{{2 +" What does this do? +if ! exists('g:org_syntax_highlight_leading_stars') && ! exists('b:org_syntax_highlight_leading_stars') + let g:org_syntax_highlight_leading_stars = 1 +endif + +" setting to conceal aggresively +if ! exists('g:org_aggressive_conceal') && ! exists('b:org_aggressive_conceal') + let g:org_aggressive_conceal = 0 +endif + +" Defined in separate plugins +" Adding Behavior preference: +" 1: go into insert-mode when new heading/checkbox/plainlist added +" 0: retain original mode when new heading/checkbox/plainlist added +if ! exists('g:org_prefer_insert_mode') && ! exists('b:org_prefer_insert_mode') + let g:org_prefer_insert_mode = 1 +endif + +" Menu and document handling {{{1 +function! <SID>OrgRegisterMenu() + exe s:py_version . 'ORGMODE.register_menu()' +endfunction + +function! <SID>OrgUnregisterMenu() + exe s:py_version . 'ORGMODE.unregister_menu()' +endfunction + +function! <SID>OrgDeleteUnusedDocument(bufnr) + exe s:py_env +b = int(vim.eval('a:bufnr')) +if b in ORGMODE._documents: + del ORGMODE._documents[b] +EOF +endfunction + +" show and hide Org menu depending on the filetype +augroup orgmode + au BufEnter * :if &filetype == "org" | call <SID>OrgRegisterMenu() | endif + au BufLeave * :if &filetype == "org" | call <SID>OrgUnregisterMenu() | endif + au BufDelete * :call <SID>OrgDeleteUnusedDocument(expand('<abuf>')) +augroup END + +" Start orgmode {{{1 +" Expand our path +exec s:py_env +import vim, os, sys + +for p in vim.eval("&runtimepath").split(','): + dname = os.path.join(p, "ftplugin") + if os.path.exists(os.path.join(dname, "orgmode")): + if dname not in sys.path: + sys.path.append(dname) + break + +from orgmode._vim import ORGMODE, insert_at_cursor, get_user_input, date_to_str +ORGMODE.start() + +from Date import Date +import datetime +EOF + +" 3rd Party Plugin Integration {{{1 +" * Repeat {{{2 +try + call repeat#set() +catch +endtry + +" * Tagbar {{{2 +let g:tagbar_type_org = { + \ 'ctagstype' : 'org', + \ 'kinds' : [ + \ 's:sections', + \ 'h:hyperlinks', + \ ], + \ 'sort' : 0, + \ 'deffile' : expand('<sfile>:p:h') . '/org.cnf' + \ } + +" * Taglist {{{2 +if exists('g:Tlist_Ctags_Cmd') + " Pass parameters to taglist + let g:tlist_org_settings = 'org;s:section;h:hyperlinks' + let g:Tlist_Ctags_Cmd .= ' --options=' . expand('<sfile>:p:h') . '/org.cnf ' +endif + +" * Calendar.vim {{{2 +fun CalendarAction(day, month, year, week, dir) + let g:org_timestamp = printf("%04d-%02d-%02d Fri", a:year, a:month, a:day) + let datetime_date = printf("datetime.date(%d, %d, %d)", a:year, a:month, a:day) + exe s:py_version . "selected_date = " . datetime_date + " get_user_input + let msg = printf("Inserting %s | Modify date", g:org_timestamp) + exe s:py_version . "modifier = get_user_input('" . msg . "')" + " change date according to user input + exe s:py_version . "newdate = Date._modify_time(selected_date, modifier)" + exe s:py_version . "newdate = date_to_str(newdate)" + " close Calendar + exe "q" + " goto previous window + exe "wincmd p" + exe s:py_version . "timestamp = '" . g:org_timestamp_template . "' % newdate" + exe s:py_version . "insert_at_cursor(timestamp)" + " restore calendar_action + let g:calendar_action = g:org_calendar_action_backup +endf + +endif |