diff options
Diffstat (limited to 'configs/nvim/lua/crupest')
| -rw-r--r-- | configs/nvim/lua/crupest/nvim.lua | 39 | ||||
| -rw-r--r-- | configs/nvim/lua/crupest/system.lua | 7 | 
2 files changed, 34 insertions, 12 deletions
diff --git a/configs/nvim/lua/crupest/nvim.lua b/configs/nvim/lua/crupest/nvim.lua index 2eea4f1..c47b7d5 100644 --- a/configs/nvim/lua/crupest/nvim.lua +++ b/configs/nvim/lua/crupest/nvim.lua @@ -37,6 +37,7 @@ local function get_previous_buffer(buf)      return bufs[index - 1]  end +-- list the windows that are currently editing the given buffer  local function list_wins_editing_buf(buf)      local wins = vim.api.nvim_list_wins()      local result = {} @@ -48,25 +49,28 @@ local function list_wins_editing_buf(buf)      return result  end +-- Delete current buffer and jump back. +-- If no previous jump, switch to previous buffer. +-- If no previous buffer (no other buffers), create a unnamed one. (So the window does not quit.)  local function win_close_buf() -    local current_buffer = vim.api.nvim_get_current_buf() +    local buf = vim.api.nvim_get_current_buf()      local jumps_info = vim.fn.getjumplist() -    local old_jump_list = { unpack(jumps_info[1], 1, jumps_info[2]) } -    while #old_jump_list ~= 0 do -        local last_jump = old_jump_list[#old_jump_list] -        if last_jump.bufnr ~= current_buffer and vim.fn.bufexists(last_jump.bufnr) ~= 0 and vim.fn.buflisted(last_jump.bufnr) ~= 0 then +    local old_jumps = { unpack(jumps_info[1], 1, jumps_info[2]) } +    while #old_jumps ~= 0 do +        local last_jump = old_jumps[#old_jumps] +        if last_jump.bufnr ~= buf and vim.fn.bufexists(last_jump.bufnr) ~= 0 and vim.fn.buflisted(last_jump.bufnr) ~= 0 then              break          end -        table.remove(old_jump_list, #old_jump_list) +        table.remove(old_jumps, #old_jumps)      end -    if #old_jump_list ~= 0 then -        local last_jump = old_jump_list[#old_jump_list] +    if #old_jumps ~= 0 then +        local last_jump = old_jumps[#old_jumps]          vim.api.nvim_win_set_buf(0, last_jump.bufnr)          vim.api.nvim_win_set_cursor(0, {last_jump.lnum, last_jump.col})      else -        local previous_buf = get_previous_buffer(current_buffer) +        local previous_buf = get_previous_buffer(buf)          if previous_buf then              vim.api.nvim_win_set_buf(0, previous_buf)          else @@ -75,13 +79,26 @@ local function win_close_buf()          end      end -    vim.api.nvim_buf_delete(current_buffer, {}) +    local wins = list_wins_editing_buf(buf) +    if #wins == 0 then +        vim.api.nvim_buf_delete(buf, {}) +    end +end + +local function close_float() +    local wins = vim.api.nvim_list_wins() +    for _, v in ipairs(wins) do +        if vim.api.nvim_win_get_config(v).relative ~= '' then +            vim.api.nvim_win_close(v, false) +        end +    end  end  return {      list_listed_bufs = list_listed_bufs,      get_previous_buffer = get_previous_buffer,      list_wins_editing_buf = list_wins_editing_buf, -    win_close_buf = win_close_buf +    win_close_buf = win_close_buf, +    close_float = close_float,  } diff --git a/configs/nvim/lua/crupest/system.lua b/configs/nvim/lua/crupest/system.lua index 74f8670..a5a90a6 100644 --- a/configs/nvim/lua/crupest/system.lua +++ b/configs/nvim/lua/crupest/system.lua @@ -59,11 +59,16 @@ local function find_npm_exe(path, exe)      return nil  end +local function escape_space(str) +    return (string.gsub(str, " ", "\\ " )) +end +  return {      clean_path = clean_path,      get_exe = get_exe,      walk_up = walk_up,      find_node_modules = find_node_modules, -    find_npm_exe = find_npm_exe +    find_npm_exe = find_npm_exe, +    escape_space = escape_space  }  | 
