vfontxform(1)
π vfontxform β ok bestie, it's manual page o'clock π
So this is the manual for vfontxform, part of the PSF Tools family (like, the PSF Tools girlies π). It does exactly one thing and it does it iconically: it takes a BSD vfont file and transforms it. Slay.
β¨ NAME β¨
vfontxform β apply various transformations to a BSD vfont file. That's it, that's the job, and she eats every time π
πΈ SYNOPSIS πΈ
vfontxform [--first=FIRST] [--last=LAST] [--256] [--bold=RANGE]
[--double=RANGE] [--flip=RANGE] [--repeat=RANGE] [--thin=RANGE]
[--strip] [--codepage=CODEPAGE] [--setcodepage=CODEPAGE]
[--permute=FILE] [--v1] [--v2] [--big-endian] [--little-endian]
[INPUTFILE [OUTPUTFILE]]
Notice how --repeat shows up in the SYNOPSIS but not in OPTIONS? Yeah. Not me flagging that, just saying. π Anyway, moving on.
π¦ DESCRIPTION π¦
okay so. vfontxform extracts some or all characters from a font in the BSD vfont format, applies various transformations to them, and saves the result as another vfont font. Basically it's a glow-up machine for fonts β¨
You can pull out subsets as a range of characters, as a codepage, or honestly both if you're feeling main character energy. Go off.
Now β the character ranges you pass to --bold, --double and so on? They're optional bestie, you don't have to give one if you don't want to. But if you do, they're formed as a comma-separated list, and each element is either:
nnnfor a single characternnn-nnnfor a contiguous set of characters
For example π, to apply --repeat to characters 8, 10 and 179 to 223, you'd go:
--repeat=8,10,179-223
See? Comma-separated, like a little snack list. Periodt.
π OPTIONS π
Get comfy, this is the long part. Every single one, no skips, no cap.
--codepage=xβ Extracts only the characters in the given codepage. Heads up: this requires the source PSF file to have a Unicode directory. Any characters in the codepage that aren't present in the source font get replaced by blanks (rip to them π). You can specify the codepage by number or by name β peeppsfpages(1)for the list of acceptable codepage names.--setcodepage=xβ Replaces any Unicode information in the extracted font with the Unicode mappings for the specified codepage. Important vibe check: this option does not change the character bitmaps in any way. Not one pixel. She only touches the Unicode info.--stripβ Forces the output font to be written with no Unicode directory, even if the source font had one. Stripped. Naked. No Unicode for you. π--first=nβ Extracts characters starting at the specified character.--last=nβ Extracts characters up to and including the specified character. Inclusive, because she's generous.--256β Equivalent to--first=0 --last=255. Just a lil shortcut, iykyk.--permute=filenameβ Rearranges the character bitmaps in the output file. Note that this only affects the character bitmaps, not the Unicode directory β they are separate girlies and they do not speak. The filename you pass to--permutecan be"-"for standard input. Its format should be a series of lines, each one containing two numbers separated by a comma. The first number is the character number to change from, and the second is the number to change to. For example, two lines β the first reading65,66and the second reading66,65β will swap the glyphs for A and B π. Anything after a#or;is a comment (go ahead and annotate your chaos). The numbers used relate to the source file, before any subset is extracted.--bold=RANGEβ Makes characters bold by drawing them twice. β οΈ Note that if no--widthoption is supplied, this will make the target font one pixel wider than the source font. She's bulking, okay?--double=RANGEβ Doubles each row in the source character. Every row. Doubled. That's the whole thing. π--flip=RANGEβ Mirror characters left/right. Like a selfie camera but for glyphs πͺ--thin=RANGEβ Makes characters thin by reducing vertical lines wider than one pixel. The opposite of the bold glow-up. She's on a diet.--v1β Output in the originalvfont(5)format. But bestie, this format has limitations, so listen up: at most 256 characters, at most 127x127 pixels per character, and no Unicode directory. That's the deal. Take it or leave it.--v2β Output invfont2(5)format. This allows more characters, larger bitmaps, and Unicode π β but it's currently supported only by psftools utilities. So don't go expecting the whole world to read your fancy new file, ok? It's niche. It's exclusive. It's giving members-only.--big-endianβ When writing in the original vfont format, create a big-endian file (suitable for platforms such as SunOS). Throwback.--little-endianβ When writing in the original vfont format, create a little-endian file. Lil endian. Precious.
π One more thing, super important, don't scroll past this: If a codepage and--first/--lastare both specified, then the--first/--lastapply to the subset of characters extracted by the codepage. Similarly, all character ranges on--bold,--thinetc. apply to the extracted subset. So like, the codepage happens first and everything else is relative to that. Stacking order matters, bestie, it always does π
π SEE ALSO π
π«Ά AUTHOR π«Ά
John Elliott <seasip.webmaster@gmail.com>. Legend behavior, fr fr. Thank you for your service π
And that's the whole page! This little baddie is Version 1.1.3, dated 28 April, 2026 β mark your calendars, she's a PSF Tools icon and she knows it. Go transform something. Mwah πβ¨
π¦ where this page comes from
- nixpkgs unstable: psftools 1.1.3
- ubuntu stonking: psftools 1.1.3-1
- Copyright (c) 2005, 2007, 2024 John Elliott
- Copyright (C) 2005, 2007, 2024 John Elliott
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms