nanozuki / tabby.nvim

A declarative, highly configurable, and neovim style tabline plugin. Use your nvim tabs as a workspace multiplexer!
MIT License
577 stars 21 forks source link

[Feature] Functions to expose window manager mappings #9

Closed EdenEast closed 2 years ago

EdenEast commented 2 years ago

First off great plugin!

As a window manager user I see these tabs like workspaces. It would be great to have functions to manipulate tabs. For example selecting a tab based on a number. So you can map something like <leader>1 to jump to the first workspace. What are your thoughts on this?

nanozuki commented 2 years ago

I just found that, nvim already has key mapping for change tabs. In :help tabpage:

gt                  *i_CTRL-<PageDown>* *i_<C-PageDown>*
        Go to the next tab page.  Wraps around from the last to the
        first one.
{count}gt   Go to tab page {count}.  The first tab page has number one.
g<Tab>      Go to previous (last accessed) tab page.
gT      Go to the previous tab page.  Wraps around from the first one
        to the last one.

One thing should be noticed that, the count of {count}gt is the position of a tab in tabline, not the tab id (displayed in presets). In nvim, there are not a keymapping or API for goto tab by tab id. It has some confuse but more useful. Because the tab id is only use for distinguish tab in script or use by unique name.

nanozuki commented 2 years ago

Maybe I should display the {count} , tab number in the label, instead of id.

EdenEast commented 2 years ago

From looking at the tabpage help it does look like the count is the number that is used for navigation. If you move your tabs around then the counts might not be in order. Having a way to select the tab based on where it is visually would be a nice helper function. Example:

function focus_tab(n)
  local list = vim.api.nvim_list_tabpages()
  if n > #list then
    return
  end
  vim.api.nvim_set_current_tabpage(list[n])
end

Having some helper functions that work on the visual location of the tabs instead of their id's or count's would be useful for mappings. Also if you allow the tab to be renamed.

nanozuki commented 2 years ago

The APIs of tab may be design many years before in vim, so it is a little confusing. In the {count}gt I mentioned below , {count} is what you want. When i first time writle tabby I don't know this, so the number in presets is tab id, it is not useful to nav in tabs. I'm considering to replace to tab's position number. So, you can made it by using {count}gt or remap it.

nanozuki commented 2 years ago

Maybe I should display the {count} , tab number in the label, instead of id.

Updated. The number in tabs' label of presets is tab number now. You can use {number}gt to nav in tabs.