Skip to content

Commit

Permalink
Fix for the latest denops
Browse files Browse the repository at this point in the history
  • Loading branch information
Shougo committed Dec 31, 2023
1 parent 9c5457b commit 3dd13e5
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 107 deletions.
112 changes: 21 additions & 91 deletions autoload/ddu.vim
Original file line number Diff line number Diff line change
Expand Up @@ -6,134 +6,78 @@ function ddu#start(options = {}) abort
return
endif

call ddu#_notify('start', [a:options])
call ddu#denops#_notify('start', [a:options])
endfunction
function ddu#redraw(name, options = {}) abort
if a:name ==# ''
return
endif
call ddu#_notify('redraw', [a:name, a:options])
call ddu#denops#_notify('redraw', [a:name, a:options])
endfunction
function ddu#redraw_tree(name, mode, items) abort
if a:name ==# ''
return
endif
call ddu#_notify('redrawTree', [a:name, a:mode, a:items])
call ddu#denops#_notify('redrawTree', [a:name, a:mode, a:items])
endfunction
function ddu#event(name, event) abort
if a:name ==# ''
return
endif
call ddu#_request('event', [a:name, a:event])
call ddu#denops#_request('event', [a:name, a:event])
endfunction
function ddu#pop(name, options = {}) abort
if a:name ==# ''
return
endif
if a:options->get('sync', v:false)
call ddu#_request('pop', [a:name, a:options])
call ddu#denops#_request('pop', [a:name, a:options])
else
call ddu#_notify('pop', [a:name, a:options])
call ddu#denops#_notify('pop', [a:name, a:options])
endif
endfunction
function ddu#ui_async_action(name, action, params = {}) abort
if a:name ==# ''
return
endif
call ddu#_notify('uiAction', [a:name, a:action, a:params])
call ddu#denops#_notify('uiAction', [a:name, a:action, a:params])
endfunction
function ddu#ui_sync_action(name, action, params = {}) abort
if a:name ==# ''
return
endif
call ddu#_request('uiAction', [a:name, a:action, a:params])
call ddu#denops#_request('uiAction', [a:name, a:action, a:params])
endfunction
function ddu#item_action(name, action, items, params = {}) abort
call ddu#_request('itemAction', [a:name, a:action, a:items, a:params])
call ddu#denops#_request(
\ 'itemAction', [a:name, a:action, a:items, a:params])
endfunction
function ddu#get_context(name) abort
if a:name ==# ''
return
endif
return ddu#_request('getContext', [a:name])
return ddu#denops#_request('getContext', [a:name])
endfunction
function ddu#register(type, path) abort
call ddu#_notify('register', [a:type, a:path])
call ddu#denops#_notify('register', [a:type, a:path])
endfunction
function ddu#load(type, names) abort
call ddu#_notify('loadExtensions', [a:type, a:names])
call ddu#denops#_notify('loadExtensions', [a:type, a:names])
endfunction
function ddu#set_static_import_path() abort
call ddu#_notify('setStaticImportPath', [])
call ddu#denops#_notify('setStaticImportPath', [])
endfunction
function ddu#get_items(options = {}) abort
return ddu#_request('getItems', [a:options])
return ddu#denops#_request('getItems', [a:options])
endfunction


function ddu#_request(method, args) abort
if s:init()
return {}
endif

if !ddu#_denops_running()
" Lazy call request
execute printf('autocmd User DenopsPluginPost:ddu call '
\ .. 's:notify("%s", %s)', a:method, a:args->string())
return {}
endif

if denops#plugin#wait('ddu')
return {}
endif
return denops#request('ddu', a:method, a:args)
endfunction
function ddu#_notify(method, args) abort
if s:init()
return {}
endif

if !ddu#_denops_running()
" Lazy call notify
execute printf('autocmd User DenopsPluginPost:ddu call '
\ .. 's:notify("%s", %s)', a:method, a:args->string())
return {}
endif

return s:notify(a:method, a:args)
endfunction

function s:notify(method, args) abort
if denops#plugin#is_loaded('ddu')
call denops#notify('ddu', a:method, a:args)
else
call denops#plugin#wait_async('ddu',
\ { -> denops#notify('ddu', a:method, a:args) })
endif
endfunction

const s:root_dir = '<sfile>'->expand()->fnamemodify(':h:h')
const s:sep = has('win32') ? '\' : '/'
function ddu#_register() abort
call denops#plugin#register('ddu',
\ [s:root_dir, 'denops', 'ddu', 'app.ts']->join(s:sep),
\ #{ mode: 'skip' })

autocmd ddu User DenopsClosed call s:stopped()
endfunction

function ddu#_denops_running() abort
return 'g:loaded_denops'->exists()
\ && denops#server#status() ==# 'running'
\ && denops#plugin#is_loaded('ddu')
endfunction

function ddu#_lazy_redraw(name, args = {}) abort
call timer_start(0, { -> ddu#redraw(a:name, a:args) })
endfunction

function s:init() abort
if 's:initialized'->exists()
function ddu#_init() abort
if 'g:ddu#_initialized'->exists()
return
endif

Expand All @@ -145,32 +89,18 @@ function s:init() abort

augroup ddu
autocmd!
autocmd User DenopsPluginPost:ddu let s:initialized = v:true
autocmd User DenopsPluginPost:ddu let g:ddu#_initialized = v:true
autocmd User Ddu:redraw :
augroup END

let g:ddu#_started = reltime()
if !'g:ddu#_mods'->exists()
const g:ddu#_mods = [s:root_dir, 'denops', 'ddu', '_mods.js']->join(s:sep)
endif

" NOTE: ddu.vim must be registered manually.

" NOTE: denops load may be started
autocmd ddu User DenopsReady silent! call ddu#_register()
if 'g:loaded_denops'->exists() && denops#server#status() ==# 'running'
silent! call ddu#_register()
silent! call ddu#denops#_register()
else
autocmd ddu User DenopsReady silent! call ddu#denops#_register()
endif
endfunction

function s:stopped() abort
unlet! s:initialized

" Restore custom config
for custom in g:->get('ddu#_notifies', [])
call ddu#_notify(custom.method, custom.args)
endfor
for custom in g:->get('ddu#_requests', [])
call ddu#_request(custom.method, custom.args)
endfor
endfunction
24 changes: 12 additions & 12 deletions autoload/ddu/custom.vim
Original file line number Diff line number Diff line change
Expand Up @@ -65,25 +65,25 @@ endfunction
" This should be called manually, so wait until DenopsPluginPost:ddu by the
" user himself.
function ddu#custom#get_global() abort
return ddu#_request('getGlobal', [])
return ddu#denops#_request('getGlobal', [])
endfunction
function ddu#custom#get_local() abort
return ddu#_request('getLocal', [])
return ddu#denops#_request('getLocal', [])
endfunction
function ddu#custom#get_default_options() abort
return ddu#_request('getDefaultOptions', [])
return ddu#denops#_request('getDefaultOptions', [])
endfunction
function ddu#custom#get_current(name = b:->get('ddu_ui_name', '')) abort
return a:name ==# '' ? {} : ddu#_request('getCurrent', [a:name])
return a:name ==# '' ? {} : ddu#denops#_request('getCurrent', [a:name])
endfunction
function ddu#custom#get_names() abort
return ddu#_request('getNames', [])
return ddu#denops#_request('getNames', [])
endfunction
function ddu#custom#get_source_names() abort
return ddu#_request('getSourceNames', [])
return ddu#denops#_request('getSourceNames', [])
endfunction
function ddu#custom#get_alias_names(type) abort
return ddu#_request('getAliasNames', [a:type])
return ddu#denops#_request('getAliasNames', [a:type])
endfunction

function s:normalize_key_or_dict(key_or_dict, value) abort
Expand Down Expand Up @@ -113,15 +113,15 @@ function s:notify(method, args) abort
endif
call add(g:ddu#_notifies, #{ method: a:method, args: a:args })

return ddu#_notify(a:method, a:args)
return ddu#denops#_notify(a:method, a:args)
endfunction

function s:request(method, args) abort
" Save args
if !'g:ddu#_requests'->exists()
let g:ddu#_requests = []
if !'g:ddu#denops#_requests'->exists()
let g:ddu#denops#_requests = []
endif
call add(g:ddu#_requests, #{ method: a:method, args: a:args })
call add(g:ddu#denops#_requests, #{ method: a:method, args: a:args })

return ddu#_request(a:method, a:args)
return ddu#denops#_request(a:method, a:args)
endfunction
73 changes: 73 additions & 0 deletions autoload/ddu/denops.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
const s:root_dir = '<sfile>'->expand()->fnamemodify(':h:h:h')
const s:sep = has('win32') ? '\' : '/'
function ddu#denops#_register() abort
if !'g:ddu#_mods'->exists()
const g:ddu#_mods = [s:root_dir, 'denops', 'ddu', '_mods.js']->join(s:sep)
endif

call denops#plugin#register('ddu',
\ [s:root_dir, 'denops', 'ddu', 'app.ts']->join(s:sep),
\ #{ mode: 'skip' })

autocmd ddu User DenopsClosed call s:stopped()
endfunction

function s:stopped() abort
unlet! g:ddu#_initialized

" Restore custom config
for custom in g:->get('ddu#_notifies', [])
call ddu#denops#_notify(custom.method, custom.args)
endfor
for custom in g:->get('ddu#denops#_requests', [])
call ddu#denops#_request(custom.method, custom.args)
endfor
endfunction

function ddu#denops#_running() abort
return 'g:loaded_denops'->exists()
\ && denops#server#status() ==# 'running'
\ && denops#plugin#is_loaded('ddu')
endfunction

function ddu#denops#_request(method, args) abort
if ddu#_init()
return {}
endif

if !ddu#denops#_running()
" Lazy call request
execute printf('autocmd User DenopsPluginPost:ddu call '
\ .. 's:notify("%s", %s)', a:method, a:args->string())
return {}
endif

if denops#plugin#wait('ddu')
return {}
endif
return denops#request('ddu', a:method, a:args)
endfunction
function ddu#denops#_notify(method, args) abort
if ddu#_init()
return {}
endif

if !ddu#denops#_running()
" Lazy call notify
execute printf('autocmd User DenopsPluginPost:ddu call '
\ .. 's:notify("%s", %s)', a:method, a:args->string())
return {}
endif

return s:notify(a:method, a:args)
endfunction

function s:notify(method, args) abort
if denops#plugin#is_loaded('ddu')
call denops#notify('ddu', a:method, a:args)
else
call denops#plugin#wait_async('ddu',
\ { -> denops#notify('ddu', a:method, a:args) })
endif
endfunction

8 changes: 4 additions & 4 deletions autoload/ddu/ui.vim
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ endfunction

function ddu#ui#visible(
\ name=b:->get('ddu_ui_name', ''), tabnr = tabpagenr()) abort
return ddu#_denops_running() ?
\ ddu#_request('uiVisible', [a:name, a:tabnr]) : v:false
return ddu#denops#_running() ?
\ ddu#denops#_request('uiVisible', [a:name, a:tabnr]) : v:false
endfunction

function ddu#ui#winids(name=b:->get('ddu_ui_name', '')) abort
return ddu#_denops_running() ?
\ ddu#_request('uiWinids', [a:name]) : []
return ddu#denops#_running() ?
\ ddu#denops#_request('uiWinids', [a:name]) : []
endfunction

0 comments on commit 3dd13e5

Please sign in to comment.