npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

cellwidths-gen

v0.1.0

Published

CLI tool for generating Vim's `setcellwidths` configuration

Readme

cellwidths-gen / CLI tool for generating Vim's setcellwidths configuration

cellwidths-gen is a CLI tool that generates a Vim script to configure character widths for a given TrueType font file (.ttf). This script helps Vim correctly distinguish between half-width and full-width characters, which is essential for proper alignment and display of text, especially in CJK environments.

Features

  • Parses TrueType font files to extract character width information.
  • Generates a Vim script that defines character width rules using the setcellwidths() function.
  • Automatically detects the font name and creates a self-contained Vim script that applies the settings only when the specified font is in use.

Usage

cellwidths-gen <path-to-font-file> [options]

Arguments

  • <path-to-font-file>: The path to the TrueType font file (.ttf) you want to process.

Options

  • -o, --output <path>: The path to the output Vim script file. (Default: ./cellwidths.vim)
  • -h, --help: Show help.

Example

cellwidths-gen /path/to/your/font.ttf -o ~/.vim/plugin/cellwidths_myfont.vim

Or, if you're using Neovim:

cellwidths-gen /path/to/your/font.ttf -o ~/.config/nvim/plugin/cellwidths_myfont.vim

This command will generate a cellwidths.vim file in your Vim's plugin directory. When you start Vim, this script will automatically be loaded. It will check if the guifont option is set to the font you specified, and if so, it will apply the correct character width settings.

How it works

The tool reads the hmtx (Horizontal Metrics) and cmap (Character to Glyph Mapping) tables from the TrueType font file. It determines the advance width of each character and groups them into two categories: half-width and full-width. Based on this information, it generates a Vim script that uses the setcellwidths() function to tell Vim how to treat each character.

The generated script is designed to be "smart" - it only applies the settings when the guifont option matches the font name extracted from the font file. This means you can have multiple cellwidths.vim files for different fonts, and the correct one will be used automatically.

License

This project is licensed under the MIT License. See the LICENSE file for details.