Initial commit.
This commit is contained in:
167
vim/autoload/railmoon/widget/window.vim
Executable file
167
vim/autoload/railmoon/widget/window.vim
Executable file
@@ -0,0 +1,167 @@
|
||||
" Author: Mykola Golubyev ( Nickolay Golubev )
|
||||
" Email: golubev.nikolay@gmail.com
|
||||
" Home: www.railmoon.com
|
||||
" Module: railmoon#widget#window
|
||||
" Purpose: util functions for work with widget windows id
|
||||
"
|
||||
|
||||
" -
|
||||
" [ public library function ]
|
||||
" Name: railmoon#widget#window#find_on_tab
|
||||
" Purpose: determine window number on given tab with pointed id
|
||||
" [ parameters ]
|
||||
" tabpage_number number of tabpage
|
||||
" variable_name name of window id variable
|
||||
" id window id to search
|
||||
" -
|
||||
function! railmoon#widget#window#find_on_tab(tabpage_number, variable_name, id)
|
||||
let windows_count = tabpagewinnr(a:tabpage_number, '$')
|
||||
let window_number = 1
|
||||
|
||||
while window_number <= windows_count
|
||||
let window_id = gettabwinvar(a:tabpage_number, window_number, a:variable_name)
|
||||
|
||||
if a:id == window_id
|
||||
return window_number
|
||||
endif
|
||||
|
||||
let window_number += 1
|
||||
|
||||
endwhile
|
||||
|
||||
return 0
|
||||
endfunction
|
||||
|
||||
" -
|
||||
" [ public library function ]
|
||||
" Name: railmoon#widget#window#find
|
||||
" Purpose: determine tabpage number and window number as list of two elements with pointed id
|
||||
" [ parameters ]
|
||||
" id widget id to search
|
||||
" -
|
||||
function! railmoon#widget#window#find(id)
|
||||
let tabpage_count = tabpagenr('$')
|
||||
let tabpage_number = 1
|
||||
while tabpage_number <= tabpage_count
|
||||
let window_number = railmoon#widget#window#find_on_tab(tabpage_number, 'widget_id', a:id)
|
||||
if window_number
|
||||
return [ tabpage_number, window_number ]
|
||||
endif
|
||||
let tabpage_number += 1
|
||||
endwhile
|
||||
|
||||
throw 'window with "widget_id" = '.a:id.' not found'
|
||||
return [0, 0]
|
||||
endfunction
|
||||
|
||||
" -
|
||||
" [ public library function ]
|
||||
" Name: railmoon#widget#window#visible
|
||||
" Purpose: determine visible or not widget window with pointed id
|
||||
" [ parameters ]
|
||||
" id widget id to select
|
||||
" -
|
||||
function! railmoon#widget#window#visible(id)
|
||||
if exists('w:widget_id') && w:widget_id == a:id
|
||||
return 1
|
||||
endif
|
||||
|
||||
let window_number = railmoon#widget#window#find_on_tab(tabpagenr(), 'widget_id', a:id)
|
||||
|
||||
return window_number > 0
|
||||
endfunction
|
||||
|
||||
" -
|
||||
" [ public library function ]
|
||||
" Name: railmoon#widget#window#select
|
||||
" Purpose: make window with given widget id active
|
||||
" [ parameters ]
|
||||
" id widget id to select
|
||||
" -
|
||||
function! railmoon#widget#window#select(id)
|
||||
call railmoon#trace#push('window#select')
|
||||
call railmoon#trace#debug('id = '.a:id)
|
||||
try
|
||||
|
||||
if exists('w:widget_id') && w:widget_id == a:id
|
||||
return 1
|
||||
endif
|
||||
|
||||
let tabpage_and_window_number = railmoon#widget#window#find(a:id)
|
||||
|
||||
if tabpage_and_window_number[0] == 0
|
||||
return 0
|
||||
endif
|
||||
|
||||
call s:select_window(tabpage_and_window_number[0], tabpage_and_window_number[1])
|
||||
return 1
|
||||
|
||||
finally
|
||||
call railmoon#trace#debug('...')
|
||||
call railmoon#trace#pop()
|
||||
endtry
|
||||
endfunction
|
||||
|
||||
|
||||
" -
|
||||
" [ public library function ]
|
||||
" Name: railmoon#widget#window#save_selected
|
||||
" Purpose: save current tabpage number, window mark id, position, mode
|
||||
" -
|
||||
function! railmoon#widget#window#save_selected()
|
||||
call railmoon#trace#push('window#save_selected')
|
||||
try
|
||||
|
||||
if ! exists('w:railmoon_window_mark_id')
|
||||
let w:railmoon_window_mark_id = railmoon#id#acquire('railmoon_window_mark_id')
|
||||
endif
|
||||
return [tabpagenr(), w:railmoon_window_mark_id, getpos('.'), mode()]
|
||||
|
||||
finally
|
||||
call railmoon#trace#debug('...')
|
||||
call railmoon#trace#pop()
|
||||
endtry
|
||||
endfunction
|
||||
|
||||
" -
|
||||
" [ public library function ]
|
||||
" Name: railmoon#widget#window#load_selected
|
||||
" Purpose: select tabpage number, window number, position, mode
|
||||
" [ parameters ]
|
||||
" selection list with four elements: tabpage number, window mark id,
|
||||
" position, mode
|
||||
" -
|
||||
function! railmoon#widget#window#load_selected(selection)
|
||||
call railmoon#trace#push('window#load_selected')
|
||||
try
|
||||
|
||||
exec a:selection[0].'tabnext'
|
||||
let window_number =
|
||||
\ railmoon#widget#window#find_on_tab(a:selection[0],
|
||||
\ 'railmoon_window_mark_id',
|
||||
\ a:selection[1])
|
||||
|
||||
exec window_number.'wincmd w'
|
||||
|
||||
if a:selection[3] == 'n'
|
||||
stopinsert
|
||||
elseif a:selection[3] == 'i'
|
||||
startinsert
|
||||
endif
|
||||
call setpos('.', a:selection[2])
|
||||
|
||||
finally
|
||||
call railmoon#trace#debug('...')
|
||||
call railmoon#trace#pop()
|
||||
endtry
|
||||
endfunction
|
||||
|
||||
" -
|
||||
" [ internal usage ]
|
||||
" Purpose: open tabpage number and select window number
|
||||
" -
|
||||
function! s:select_window(tabpage_number, window_number)
|
||||
exec a:tabpage_number . 'tabnext'
|
||||
exec a:window_number.'wincmd w'
|
||||
endfunction
|
||||
|
||||
Reference in New Issue
Block a user