Giter Club home page Giter Club logo

window-picker.nvim's Introduction

nvim-window-picker

hint = 'floating-big-letter'

window-picker-float-demo.mp4

hint = 'statusline-winbar'

window-picker-winbar-demo.mp4

This plugins prompts the user to pick a window and returns the window id of the picked window.

Install

lazy

{
  "vqcuong/window-picker.nvim",
  name = "window-picker",
  event = "VeryLazy",
  version = false,
  opts = {}
}

packer

use {
  "vqcuong/window-picker.nvim",
  branch = "master",
  config = function()
    require("window-picker").setup()
  end,
}

How to use

You can put the picked window id to good use

local picked_window_id = require('window-picker').pick_window()

Configuration

If you want to have custom properties just for one time, you can pass any of following directly to pick_window() function itself to override the default behaviour. Here is the default configurations:

require 'window-picker'.setup({
  -- when you go to window selection mode, status bar will show one of
  -- following letters on them so you can use that letter to select the window
  selection_chars = "QWEASDZXCRTYFGHVBNUIOPJKLM",

  -- type of hints you want to get
  -- following types are supported
  -- 'statusline-winbar' | 'floating-big-letter'
  -- 'statusline-winbar' draw on 'statusline' if possible, if not 'winbar' will be
  -- 'floating-big-letter' draw big letter on a floating window
  hint = "statusline-winbar",
  floating_big_letter = {
    -- window picker plugin provides bunch of big letter fonts
    -- fonts will be lazy loaded as they are being requested
    -- additionally, user can pass in a table of fonts in to font
    -- property to use instead
    -- currently only support 'ansi-shadow'
    font = "ansi-shadow",
  },

  -- This section contains picker specific configurations
  statusline_winbar = {
    -- You can change the display string in status bar.
    -- It supports '%' printf style. Such as `return char .. ': %f'` to display
    -- buffer file path. See :h 'stl' for details.
    -- window id also passed in as second argument
    selection_display = function(char)
      return "%=" .. char .. "%="
    end,

    -- whether you want to use winbar instead of the statusline
    -- "always" means to always use winbar,
    -- "never" means to never use winbar
    -- "smart" means to use winbar if cmdheight=0 and statusline if cmdheight > 0
    use_winbar = "never", -- "always" | "never" | "smart"
  },

  -- whether to show 'Pick window:' prompt
  show_prompt = true,

  -- prompt message to show to get the user input
  prompt_message = "Pick window: ",

  -- auto select the only window without prompting the user to select
  autoselect_one = true,

  filter = {
    -- if you want to manually filter out the windows, pass in a function that
    -- takes two parameters. You should return window ids that should be
    -- included in the selection
    -- EX:-
    -- function(window_ids)
    --    -- input with the list of window_id
    --    -- return only the ones you want to include
    --    -- return {1000, 1001}
    filter_func = nil,

    -- If you pass in a function to "filter_func" property, you are on your own
    -- exclude windows satisfied following rules
    excluded = {
      -- filter using buffer options
      buffer_opts = {
        -- if the file type is one of following, the window will be ignored
        filetype = { "NvimTree", "neo-tree", "notify" },

        -- if the file type is one of following, the window will be ignored
        buftype = { "terminal" },
      },

      -- filter using window options
      window_opts = {},
    },

    -- whether you want to include the window you are currently on to window selection or not
    include_current_win = false,
  },

  -- You can pass in the highlight name or a table of content to set as highlight
  highlights = {
    enabled = true,
    statusline = {
      focused = {
        fg = "#ededed",
        bg = "#e35e4f",
        bold = true,
      },
      unfocused = {
        fg = "#ededed",
        bg = "#44cc41",
        bold = true,
      },
    },
    winbar = {
      focused = {
        fg = "#ededed",
        bg = "#e35e4f",
        bold = true,
      },
      unfocused = {
        fg = "#ededed",
        bg = "#44cc41",
        bold = true,
      },
    },
  },
})

Theming

If you just want to define the colors using Neovim Highlights, then it's totally possible. You can set following highlights manually.

  • WindowPickerStatusLine (currently focused window statusline highlights)
  • WindowPickerStatusLineNC (currently unfocused window statusline highlights)
  • WindowPickerWinBar (currently focused window winbar highlights)
  • WindowPickerWinBarNC (currently unfocused window winbar highlights)

Statusline

Return value of selection_display will be passed directly to the status line or winbar. This allows all the customizations available from statusline syntax. You can check :help statusline for more info.

window-picker.nvim's People

Contributors

vqcuong avatar

Stargazers

Yuta Katayama avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.