Skip to content

Instantly share code, notes, and snippets.

View nicksherman's full-sized avatar

Nick Sherman nicksherman

View GitHub Profile
from mojo.subscriber import Subscriber, registerRoboFontSubscriber
import pandas as pd
from AppKit import NSPasteboardTypeString, NSPasteboard
ATTRIBUTES = "name unicode width angledLeftMargin angledRightMargin".split(" ")
class contextual_auto_unicodes(Subscriber):
debug = True
# menuTitle: Fill Missing Anchors (All Fonts)
# author: Ryan Bugden
"""
Fill missing anchors using anchors in the same glyph across other open fonts.
Calculates x from the average proportional position across glyph widths,
or the average absolute x position for zero-width glyphs.
Accounts for italic angle and slant offset.
@ryanbugden
ryanbugden / pairless.py
Last active November 12, 2026 06:39
A simple window for manipulating pairlists, mostly the one currently active in MetricsMachine.
# menuTitle: Pairless
import os
import datetime
import unicodedata
import ezui
import metricsMachine
from mojo.UI import (
PutFile,
GetFile,

OpenType font name table notes

Provided are the name table record ID and instructions on how to fill it out. Arial is used as an example to show how the names records can be filled. You can see the example records here:

https://learn.microsoft.com/en-us/typography/opentype/spec/namesmp

There are also more exmaples added to the bottom of this file.

Why this document?

@sk22
sk22 / lastfm-remove-duplicates.js
Last active October 14, 2026 21:07
Last.fm duplicate scrobble deleter
var elements = Array.from(document.querySelectorAll('.js-link-block'))
elements.map(function (element) {
var nameElement = element.querySelector('.chartlist-name')
return nameElement && nameElement.textContent.replace(/\s+/g, ' ').trim()
}).forEach(function (name, i, names) {
if (name !== names[i + 1]) return
var deleteButton = elements[i].querySelector('[data-ajax-form-sets-state="deleted"]')
if (deleteButton) deleteButton.click()
location.reload()
})