widecharwidth VS unicode-properties

Compare widecharwidth vs unicode-properties and see what are their differences.

widecharwidth

public domain wcwidth implementation (by ridiculousfish)

unicode-properties

Provides fast access to unicode character properties (by PerBothner)
InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
widecharwidth unicode-properties
2 1
50 0
- -
4.0 2.8
9 months ago 9 months ago
Python JavaScript
GNU General Public License v3.0 or later MIT License
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

widecharwidth

Posts with mentions or reviews of widecharwidth. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2022-01-28.
  • Terminal support for Emoji – or why terminals don't like families
    6 projects | news.ycombinator.com | 28 Jan 2022
    >For example, iTerm2 considers the "rosette" emoji to have width 1

    The reason for this is quite possibly that Unicode 9 changed the width for some codepoints (mostly emoji) from 1 to 2, and iTerm until very recently (don't know if it's released yet) defaulted to the Unicode 8 widths, with an opt-in escape sequence to change to Unicode 9.

    >This approach comes from the wcwidth utility, and the comment at the top of the C source file provides further insight into the difficulties faced here.

    That's link goes to Markus Kuhn's implementation from 2007. It supports Unicode 5, and is by now woefully out of date. You don't want to use it anymore.

    Most terminals have their own definition, and the annoying part is that the client application and the terminal need to have theirs in sync or they get weird glitches when moving the cursor.

    Shameless plug: Fish's solution is widecharwidth[0], which is a python script that parses the Unicode data files and generates a wcwidth for C++, Javascript and Rust. It's still a wcwidth, meaning that it has issues with joining code points, but it's at least a start. It's up-to-date with Unicode 14 and, unless they change the data format (again) should be easy to update to future Unicode releases.

    It's public domain and used by at least fish and WezTerm.

    [0]: https://github.com/ridiculousfish/widecharwidth

  • Mosh: The Mobile Shell
    15 projects | news.ycombinator.com | 11 Aug 2021
    With fish we've made the experience that relying on libc isn't good enough.

    Specifically in the case of connecting to a server that typically has an old libc with old unicode information, from a desktop that has a much newer system, or in case of ambiguous characters, where libc will just give you one width that might not match what the terminal actually renders (and they frequently have configuration options to change it!).

    So we've made something we call widecharwidth (https://github.com/ridiculousfish/widecharwidth), which is a python script that parses the unicode datafiles (UnicodeData.txt, emoji-data.txt and friends) and generates a header you can #include.

    And someone's opened a PR to mosh to integrate it: https://github.com/mobile-shell/mosh/pull/1143

unicode-properties

Posts with mentions or reviews of unicode-properties. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2022-01-28.
  • Terminal support for Emoji – or why terminals don't like families
    6 projects | news.ycombinator.com | 28 Jan 2022
    DomTerm (https://domterm.org) does a pretty good job IMNSO. See screenshot here: https://domterm.org/Features.html . DomTerm mostly delegates to the browser and the font how to compose extended Grapheme Clusters.

    Unfortunately, as far as I know there is no "complete" monospace font set that handles emoji. Ideally, you want a font with two character widths, with double-width for emoji, hanji (CJK characters), and similar. Instead the browser will substitute these characters from some variable-width font, and then the spacing will be off.

    DomTerm handles this by putting double-width characters as well as Extended Grapheme Clusters in a separate span that is forced to have the correct width. I created a library https://github.com/PerBothner/unicode-properties based on other people's code but optimized for DomTerm's needs: It provides both East Asian Width (for recognizing double-width characters) and character classes (for grapheme clusters) in a single efficient trie structure.

    The DomTerm equivalent of tmux's "select mode" is grapheme-cluster-aware, so left/right-arrow will correct move over an entire grapheme cluster.

What are some alternatives?

When comparing widecharwidth and unicode-properties you can also consider the following projects:

muxile - Putting tmux on your mobile - Muxile is a tmux plugin that lets you control a running tmux session with your phone, no app needed.

Windows Terminal - The new Windows Terminal and the original Windows console host, all in the same place!

DomTerm - DOM/JavaScript-based terminal-emulator/console

mosh - Mobile Shell

guardian-agent - [beta] Guardian Agent: secure ssh-agent forwarding for Mosh and SSH

mosh - Mobile Shell

Mosh - Mobile Shell