Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mortepau/codicons.nvim
A plugin simplifying the task of working with VS Code codicons in Neovim
https://github.com/mortepau/codicons.nvim
codicons lua neovim plugin vim vscode
Last synced: 3 months ago
JSON representation
A plugin simplifying the task of working with VS Code codicons in Neovim
- Host: GitHub
- URL: https://github.com/mortepau/codicons.nvim
- Owner: mortepau
- License: mit
- Created: 2021-04-06T15:22:17.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-03-18T17:43:25.000Z (8 months ago)
- Last Synced: 2024-05-22T17:31:26.487Z (6 months ago)
- Topics: codicons, lua, neovim, plugin, vim, vscode
- Language: Lua
- Homepage:
- Size: 78.1 KB
- Stars: 39
- Watchers: 3
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# codicons.nvim
A small library containing the [codicons](https://microsoft.github.io/vscode-codicons/dist/codicon.html)
from VS Code and some functions to simplify the usage of them.## Table of Contents
- [Requirements](#requirements)
- [Installation](#Installation)
- [Usage](#usage)
- [Configuration](#configuration)
- [API](#api)
- [Extensions](#extensions)
- [How to patch fonts](#how-to-patch-fonts)
- [Inspiration](#Inspiration)
- [Todo](#todo)
- [License](#license)## Requirements
A font patched with codicons.
Note:
[Nerd Fonts](https://www.nerdfonts.com) do not normally have these patched.
See [how to patch fonts](#how-to-patch-fonts) for more information.## Installation
Install this plugin using your preferred package/plugin manager.
[packer.nvim](https://github.com/wbthomason/packer.nvim)
```lua
use 'mortepau/codicons.nvim'
```[vim-plug](https://github.com/junegunn/vim-plug)
```vim
Plug 'mortepau/codicons.nvim'
```## Usage
### Configuration
If there is differences between the patched font and the default values in the
library it is possible to fix that by calling `setup`.```lua
local codicons = require('codicons')codicons.setup({
-- Override by mapping name to icon
['account'] = '',
-- Or by name to hexadecimal/decimal value
['comment'] = 0xEA6B, -- hexadecimal
['archive'] = 60056, -- decimal
})
```### API
The library provide two primary functions for retrieving a single, or multiple
codicons.The first function is `get(identifier, retval)`.
This functions finds a single `codicon` by a unique `identifier` which can be
name, hexadecimal value, or decimal value.
The second parameter to `get` `retval` is used to decide what should be returned.```lua
local codicons = require('codicons')-- Index by name, hexadecimal value, or decimal value
local icon = codicons.get('comment') -- ''
icon = codicons.get(60011) -- ''
icon = codicons.get(0xEA6B) -- ''-- The second parameter `retval` defaults to 'icon'
icon = codicons.get('comment', 'icon') -- ''-- Get the unicode value instead
local unicode = codicons.get('comment', 'unicode') -- 60011-- Or the name if indexing using a numerical value
local name = codicons.get(60011, 'name') -- 'comment'
name = codicons.get(0xEA6B, 'name') -- 'comment'-- 'full' returns the full codicon configuration
local comment = codicons.get('comment', 'full') -- { icon = '', unicode = 60011 }-- Invalid identifiers simply return nil
local invalid = codicons.get('invalid') -- nil
```The second function is `query(pattern_range, retval)`, which returns all
`codicons` matching the first parameter.The first parameter `pattern_range` can either be a `pattern` or a `range`.
`pattern` : `vim-regex` like `string`
`range` : `table` on the form `{number, number}`
While the second parameter `retval` is similar as for `get`.
```lua
local codicons = require('codicons')-- Regex matching all codicons with comment in it
codicons.query('comment')
--[[
{
['comment'] = '',
['comment-discussion'] = ''
}
--]]-- Same, but return the full codicon configuration table for each match
codicons.query('comment', 'full')
--[[
{
['comment'] = { icon = '', unicode = 60011 },
['comment-discussion'] = { icon = '', unicode = 60103 }
}
--]]-- Use a range and return all matches inside range
-- The bounds are inclusive
codicons.query({0xEA6E, 0xEA70}, 'full')
codicons.query({60014, 60016}, 'full')
--[[
{
[60014] = { icon = '', name = 'sign-out' },
[60015] = { icon = '', name = 'sign-in' },
[60016] = { icon = '', name = 'eye' }
}
--]]-- An invalid query returns an empty table
codicons.query('invalid') -- {}
```For both of these methods, the `retval` parameter has to be one of
- `icon` - Codicon icon (`string`)
- `name` - Codicon name (`string`)
- `unicode` - Codicon unicode value (`number`)
- `full` - Full codicon configuration (`table`)### Extensions
Currently a few built-in extensions exist, mainly focused around the VS Code
editor.- CompletionItemKind
- VSCodeProductIcons## How to patch fonts
To check if your font has patched codicons copy/paste this snippet into your
terminal, or where you intend to use the codicons, and ensure that they are displayed
correctly.` `
The snippet should be displayed as
![Codicon snippet](./media/codicons_snippet.png)
If the snippet is displayed differently on your screen, you either haven't
patched your font with the codicons or they are in the wrong range (`0xEA60 -
0xEBC3`).If the codicons are in the wrong range it is possible to override them as shown
in [Configuration](#configuration).This explanation uses the `font-patcher` from
[ryanoasis/nerd-fonts](https://github.com/ryanoasis/nerd-fonts), so clone the
repository or download the necessary files and do as explained
[here](https://github.com/ryanoasis/nerd-fonts#font-patcher).1. Download `font-patcher` from
[ryanoasis/nerd-fonts](https://github.com/ryanoasis/nerd-fonts)
2. Download `devicons.ttf` and `original-source.otf` from
[ryanoasis/nerd-fonts](https://github.com/ryanoasis/nerd-fonts)
3. (Optional) Download some of the other fonts located in `src/glyphs`
4. Download `codicons.ttf` artifact from any of the "Codicons build" runs at
[microsoft/vscode-codicons](https://github.com/microsoft/vscode-codicons/actions/workflows/build.yml?query=is%3Asuccess+branch%3Amain)
5. Copy/move `codicons.ttf` to `src/glyphs`Repository structure
```
nerd-fonts
├── font-patcher
└── src
└── glyphs
├── codicons.ttf
├── devicons.ttf
├── original-source.otf
└── Other font files
```6. Execute `./font-patcher --custom codicons.ttf` or `fontforge
-script font-patcher --custom codicons.ttf`
7. The patched font will now be located in the current directory## Inspiration
[kyazdani42/nvim-web-devicons](https://github.com/kyazdani42/nvim-web-devicons)
[onsails/lspkind-nvim](https://github.com/onsails/lspkind-nvim)
## Todo
- [ ] Improve extension API
- [x] Document built-in extensions
- [x] Add tests
- [x] Add documentation for vim, `doc/codicons.txt`
- [x] Use `codicons.table` instead of hardcoded values in
`codicons.completion_item_kind`
- [x] Add Code of Conduct
- [x] Add License## Contributing
All contributions are welcome.
If you notice any bugs or possible improvements please leave an issue describing
the bug/feature.For pull requests, please read [CONTRIBUTING.md](./CONTRIBUTING.md)
## License
[MIT](./LICENSE)