(local M {})

(fn M.open-wrapwin []
  (let [curwin (vim.api.nvim_tabpage_get_win 0)
        newwin (vim.api.nvim_open_win 0 false { :split :left })
        winheight (vim.api.nvim_win_get_height 0)
        winbot (vim.fn.line :w$)
        targetline (+ winbot (math.floor (/ winheight 2) -1))]
    ; scroll new window page forward
    (vim.api.nvim_win_set_cursor 0 [targetline 1])
    (vim.cmd.normal :zz)
    ; enable scrollbind for both
    (tset vim :o :scrollbind true)
    (vim.api.nvim_tabpage_set_win 0 newwin)
    (tset vim :o :scrollbind true)
    ; delete only new window
    (vim.keymap.set :n :<c-c>
      #((vim.api.nvim_win_close newwin false)
        (vim.keymap.set :n :Q :ZZ))
      { :buffer true })
    ; delete both of windows
    (vim.keymap.set :n :Q
      #((vim.api.nvim_win_close newwin false)
        (vim.api.nvim_tabpage_set_win 0 curwin)
        (vim.cmd.quit))
      { :buffer true })

    (vim.keymap.set :n :<c-f> :2<c-f> { :buffer true })
    (vim.keymap.set :n :<c-b> :2<c-b> { :buffer true })
    (vim.keymap.set :n :<c-d> :<c-f> { :buffer true })
    (vim.keymap.set :n :<c-u> :<c-b> { :buffer true })))

M