7a3e11cfeb
Wire g:calendar_action/g:calendar_sign to nuwiki diary hooks that resolve diary paths from the wiki root config instead of calendar-vim's default ~/diary. Auto-detected on FileType vimwiki when calendar-vim is present; opt out with g:nuwiki_use_calendar=0 or g:nuwiki_no_calendar. - autoload/nuwiki/diary.vim: calendar_action/calendar_sign using wiki cfg; open diary in the previous window and close the calendar window after. - autoload/vimwiki/diary.vim: vimwiki# aliases for drop-in compatibility. - plugin/nuwiki.vim + lua/nuwiki/init.lua: auto-wire hooks, overwriting calendar-vim's defaults while respecting user-set custom hooks. - lua/nuwiki/config.lua: add use_calendar option (on by default). - development/start-*.sh + _common.sh: clone calendar-vim, fix vimrc var expansion, pass wiki root to the Vim/Neovim clients.
87 lines
3.8 KiB
VimL
87 lines
3.8 KiB
VimL
" plugin/nuwiki.vim — universal Vim/Neovim entry point.
|
|
"
|
|
" Neovim 0.11+ users are expected to call `require('nuwiki').setup({})` from
|
|
" their config (lazy.nvim does this automatically through `opts`). On Vim
|
|
" we start the LSP client when a vimwiki buffer is loaded.
|
|
"
|
|
" This file contains wiring only — all logic lives in
|
|
" the Rust language server.
|
|
|
|
if exists('g:loaded_nuwiki')
|
|
finish
|
|
endif
|
|
let g:loaded_nuwiki = 1
|
|
|
|
" Resolve the plugin root NOW, while this script is being sourced and
|
|
" <sfile> is still valid. Commands that need this path must reference
|
|
" s:plugin_root — re-expanding <sfile> inside a command body evaluates
|
|
" at execution time when there is no sourcing context, producing an
|
|
" empty path (hence the E484 "Cannot open ./scripts/…" error).
|
|
let s:plugin_root = fnamemodify(resolve(expand('<sfile>:p')), ':h:h')
|
|
|
|
" :NuwikiInstall — install the nuwiki-ls binary without needing a
|
|
" plugin-manager build hook. Available for both Vim and Neovim.
|
|
if has('nvim')
|
|
command! -nargs=0 NuwikiInstall lua require('nuwiki.install').install()
|
|
else
|
|
command! -nargs=0 NuwikiInstall execute 'source' fnameescape(s:plugin_root . '/scripts/download_bin.vim')
|
|
endif
|
|
|
|
" Calendar-Vim Integration — auto-detect when calendar-vim is loaded.
|
|
augroup nuwiki_calendar_detect
|
|
autocmd!
|
|
autocmd FileType vimwiki call s:nuwiki_setup_calendar()
|
|
augroup END
|
|
function! s:nuwiki_setup_calendar() abort
|
|
if !get(g:, 'nuwiki_use_calendar', 1) || get(g:, 'nuwiki_no_calendar', 0)
|
|
return
|
|
endif
|
|
if exists('*calendar#open') || exists(':Calendar') == 2
|
|
" Wire nuwiki's diary hooks unless the user set a custom (non-default) one.
|
|
" calendar-vim's own default is 'calendar#diary' (writes to ~/diary); we
|
|
" overwrite that so paths come from the wiki root config instead.
|
|
let l:act = get(g:, 'calendar_action', '')
|
|
if l:act ==# '' || l:act ==# 'calendar#diary'
|
|
let g:calendar_action = 'vimwiki#diary#calendar_action'
|
|
endif
|
|
let l:sign = get(g:, 'calendar_sign', '')
|
|
if l:sign ==# '' || l:sign ==# 'calendar#sign'
|
|
let g:calendar_sign = 'vimwiki#diary#calendar_sign'
|
|
endif
|
|
endif
|
|
endfunction
|
|
|
|
if has('nvim')
|
|
" Neovim path is initialised by `require('nuwiki').setup()`. Nothing else
|
|
" to do at vimscript boot — wait until the user runs setup.
|
|
finish
|
|
endif
|
|
|
|
" Vim path: start the LSP client the first time a vimwiki buffer is opened.
|
|
augroup nuwiki_vim_lsp_start
|
|
autocmd!
|
|
autocmd FileType vimwiki call nuwiki#lsp#start()
|
|
augroup END
|
|
|
|
" Global wiki-picker commands — available from any buffer so a wiki can be
|
|
" chosen before a .wiki file exists. The picker reads its list from config
|
|
" (no LSP); opening the chosen index then auto-starts the server. The
|
|
" buffer-local :VimwikiUISelect in ftplugin/vimwiki.vim shadows these inside
|
|
" wiki buffers but dispatches to the same function.
|
|
command! -nargs=0 VimwikiUISelect call nuwiki#commands#wiki_ui_select()
|
|
command! -nargs=0 NuwikiUISelect call nuwiki#commands#wiki_ui_select()
|
|
|
|
" Global entry-point mappings — work from any buffer, not just .wiki files.
|
|
" Files are opened directly from config (no LSP required); the server
|
|
" auto-starts via the FileType autocmd once the vimwiki buffer loads.
|
|
if !get(g:, 'nuwiki_no_default_mappings', 0)
|
|
nnoremap <silent> <Leader>ww :call nuwiki#commands#open_wiki_path(0)<CR>
|
|
nnoremap <silent> <Leader>wt :call nuwiki#commands#open_wiki_path(1)<CR>
|
|
nnoremap <silent> <Leader>ws :call nuwiki#commands#wiki_ui_select()<CR>
|
|
nnoremap <silent> <Leader>wi :call nuwiki#commands#open_diary_index_path()<CR>
|
|
nnoremap <silent> <Leader>w<Leader>w :call nuwiki#commands#open_diary_path(0)<CR>
|
|
nnoremap <silent> <Leader>w<Leader>y :call nuwiki#commands#open_diary_path(-1)<CR>
|
|
nnoremap <silent> <Leader>w<Leader>t :call nuwiki#commands#open_diary_path(1)<CR>
|
|
nnoremap <silent> <Leader>w<Leader>i :call nuwiki#commands#diary_generate_index()<CR>
|
|
endif
|