summary refs log tree commit diff
path: root/.vim/autoload/popup.vim
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2021-02-20 21:27:26 +0100
committerRobert Günzler <r@gnzler.io>2021-04-26 02:09:43 +0200
commit1996ef15613f2d4773017128bba1a719a1b63a19 (patch)
treeaa291b56947f0f710c96c62758990de3b2939bba /.vim/autoload/popup.vim
parent30451238df36d238fea816f01ca987853c6562a5 (diff)
Move to lua based vimrc
Diffstat (limited to '.vim/autoload/popup.vim')
-rw-r--r--.vim/autoload/popup.vim215
1 files changed, 0 insertions, 215 deletions
diff --git a/.vim/autoload/popup.vim b/.vim/autoload/popup.vim
deleted file mode 100644
index e9f27d4..0000000
--- a/.vim/autoload/popup.vim
+++ /dev/null
@@ -1,215 +0,0 @@
-if !(has('nvim') && exists('*nvim_win_set_config'))
-    echoerr "floating window not supported"
-    finish
-endif
-
-if exists('g:nvim_popup_loaded')
-    finish
-endif
-let g:nvim_popup_loaded = 1
-
-let s:popup = {}
-
-function! s:popup__floating_win_opts(width, height) dict abort
-    let bottom_line = line('w0') + winheight(0) - 1
-    if self.opened_at[1] + a:height <= bottom_line
-        let vert = 'N'
-        let row = 1
-    else
-        let vert = 'S'
-        let row = 0
-    endif
-    if self.opened_at[2] + a:width <= &columns
-        let hor = 'W'
-        let col = 0
-    else
-        let hor = 'E'
-        let col = 1
-    endif
-    return {
-    \ 'style': 'minimal',
-    \ 'relative': 'cursor',
-    \ 'anchor': vert.hor,
-    \ 'row': row,
-    \ 'col': col,
-    \ 'width': a:width,
-    \ 'height': a:height,
-    \ }
-endfunction
-let s:popup.floating_win_opts = funcref('s:popup__floating_win_opts')
-
-function! s:popup__window_size() dict abort
-    let max_width = winwidth(0) / 2
-    let max_height = winheight(0) / 3
-    let width = 0
-    let height = 0
-    for line in self.contents
-	let lw = strdisplaywidth(line)
-	if lw > width
-	    if lw > max_width
-		let height += lw / popup_max_width + 1
-		let width = popup_max_width
-		continue
-	    endif
-	    let width = lw
-	endif
-        let height += 1
-    endfor
-    let width += 1
-
-    if height > max_height
-	let height = max_height
-    endif
-
-    return [width, height]
-endfunction
-let s:popup.window_size = funcref('s:popup__window_size')
-
-function! s:popup__get_winnr() dict abort
-    return win_id2win(self.win_id)
-endfunction
-let s:popup.get_winnr = funcref('s:popup__get_winnr')
-
-function! s:popup__get_opener_winnr() dict abort
-    let winnr = win_id2win(self.opener_winid)
-    if winnr != 0
-        return winnr
-    endif
-    let winnr = bufwinnr(self.opener_bufnr)
-    if winnr > 0
-        return winnr
-    endif
-    return 0
-endfunction
-let s:popup.get_opener_winnr = funcref('s:popup__get_opener_winnr')
-
-function! s:popup_open() dict abort
-    let self.opened_at = getpos('.')
-    let self.opener_bufnr = bufnr('%')
-    let self.opener_winid = win_getid()
-    let self.type = 'floating'
-
-    let [w, h] = self.window_size()
-
-    if self.type ==# 'floating'
-	let opts = self.floating_win_opts(w, h)
-	let win_id = nvim_open_win(self.opener_bufnr, v:true, opts)
-    endif
-
-    enew!
-    let popup_bufnr = bufnr('%')
-    setlocal
-        \ buftype=nofile bufhidden=hide nomodified nobuflisted noswapfile nonumber
-        \ nocursorline wrap nonumber norelativenumber signcolumn=no nofoldenable
-        \ nospell nolist nomodeline
-    if has_key(self.opts, 'filetype')
-	let &l:filetype = self.opts.filetype
-    endif
-
-    call setline(1, self.contents)
-    setlocal nomodified nomodifiable
-
-    if has('nvim')
-	setlocal winhl=Normal:NormalFloat,NormalNC:NormalFloat
-    endif
-
-    nnoremap <buffer><silent><nowait><Esc> :<C-u>call b:__popup.close()<CR>
-    nnoremap <buffer><silent><nowait>q :<C-u>call b:__popup.close()<CR>
-
-    let b:__popup = self
-    execute 'autocmd BufWipeout,BufLeave <buffer> call getbufvar(' . popup_bufnr . ', "__popup").close()'
-
-    if has_key(self.opts, 'enter') && !self.opts.enter
-	wincmd p
-    endif
-    
-    let self.bufnr = popup_bufnr
-    let self.win_id = win_id
-endfunction
-let s:popup.open = funcref('s:popup_open')
-
-function! s:popup__close() dict abort
-    if !has_key(self, 'bufnr')
-	return
-    endif
-
-    let winnr = self.get_winnr()
-    if winnr > 0
-	noautocmd execute winnr . 'wincmd c'
-    endif
-
-    unlet self.bufnr
-    unlet self.win_id
-endfunction
-let s:popup.close = funcref('s:popup__close')
-
-function! s:popup__scroll(map) dict abort
-    let winnr = self.get_winnr()
-    if winnr == 0
-        return
-    endif
-    execute winnr . 'wincmd w'
-    sandbox let input = eval('"\<'.a:map.'>"')
-    execute 'normal!' input
-    wincmd p
-endfunction
-let s:popup.scroll = funcref('s:popup__scroll')
-
-function! s:popup__update() dict abort
-    " Note: `:noautocmd` to prevent BufLeave autocmd event (#13)
-    " It should be ok because the cursor position is finally back to the first
-    " position.
-
-    let prev_winnr = winnr()
-
-    let popup_winnr = self.get_winnr()
-    if popup_winnr == 0
-        return
-    endif
-    let opener_winnr = self.get_opener_winnr()
-    if opener_winnr == 0
-        return
-    endif
-
-    if opener_winnr != prev_winnr
-        noautocmd execute opener_winnr . 'wincmd w'
-    endif
-
-    try
-        let [width, height] = self.window_size()
-
-        " Window must be configured in opener buffer since the window position
-        " is relative to cursor
-        if self.type ==# 'floating'
-            let id = win_getid(popup_winnr)
-            if id == 0
-                return
-            endif
-            let opts = self.floating_win_opts(width, height)
-            call nvim_win_set_config(id, opts)
-        endif
-
-        noautocmd execute popup_winnr . 'wincmd w'
-
-        if self.type ==# 'preview'
-            execute height . 'wincmd _'
-        endif
-
-        setlocal modifiable
-        silent %delete _
-        call setline(1, self.contents)
-        setlocal nomodified nomodifiable
-    finally
-        if winnr() != prev_winnr
-            noautocmd execute prev_winnr . 'wincmd w'
-        endif
-    endtry
-endfunction
-let s:popup.update = funcref('s:popup__update')
-
-function! popup#new(opts) abort
-    let p = deepcopy(s:popup)
-    let opts = { 'floating': v:true }
-    let p.opts = extend(opts, a:opts)
-    return p
-endfunction