ucs-detect

Contents:

  • ucs-detect
  • Results
    • General Tabulated Summary
    • Terminal Features
    • Truecolor Detection
    • OSC 52 Clipboard Detection
    • Terminal Identification
    • Terminal Capabilities (XTGETTCAP)
    • Performance
    • Full Report by Terminal
      • kitty
      • foot
        • Score Breakdown
        • Wide character support
        • Narrow character support
        • Emoji ZWJ support
        • Variation Selector-16 support
        • Variation Selector-15 support
        • Standalone Regional Indicator support
        • Standalone Fitzpatrick modifier support
        • Regional Indicator flag sequence support
        • Graphics Protocol Support
        • Language Support
        • DEC Private Modes Support
        • Kitty Keyboard Protocol
        • XTGETTCAP (Terminfo Capabilities)
        • Text Sizing Protocol (OSC 66)
        • Truecolor Support
        • OSC 52 Clipboard Support
        • Terminal Identification
        • Reproduction
        • Test Performance
      • ghostty
      • AbsoluteTelnet/SSH
      • iTerm2
      • Rio
      • Konsole
      • contour
      • tmux
      • WindowsTerminal
      • WezTerm
      • Warp
      • TeraTerm
      • mlterm
      • Zellij
      • XTerm
      • Bobcat
      • urxvt
      • Tabby
      • alacritty
      • QTerminal
      • st
      • Extraterm
      • Apple_Terminal
      • pterm
      • GNU Screen
      • zutty
      • terminology
      • LXTerminal
      • GNOME Terminal
      • XFCE Terminal
      • Terminator
      • cool-retro-term
      • libvterm
      • Hyper
      • securecrt
      • xterm.js
      • weston-terminal
      • mintty
      • ConEmu
ucs-detect
  • Results
  • foot
  • View page source

foot

Tested Software version 1.27.0 on Linux. The homepage URL of this terminal is https://codeberg.org/dnkl/foot. Full results available at ucs-detect repository path data/foot.yaml.

Score Breakdown

Detailed breakdown of how scores are calculated for foot:

#

Score Type

Raw Score

Final Scaled Score

1

WIDE

100.00%

100.0%

2

NARROW

100.00%

100.0%

3

ZWJ

100.00%

100.0%

4

LANG

100.00%

100.0%

5

VS16

100.00%

100.0%

6

VS15

100.00%

(excluded)

7

SRI

100.00%

100.0%

8

SFZ

100.00%

100.0%

9

RI

100.00%

100.0%

10

FEAT

75.00%

80.0%

11

Graphics

50%

50.0%

12

Resources

90.7%

90.7%

Score Comparison Plot:

The following plot shows how this terminal’s scores compare to all other terminals tested.

../_images/foot_scores_scaled.png

Scaled scores comparison across all metrics (normalized 0-100%)

Final Scaled Score Calculation:

  • Raw Final Score: 94.35% (weighted average: WIDE + NARROW + ZWJ + LANG + VS16 + 0.33 * SRI + 0.33 * SFZ + RI + CAP + 0.5 * GFX + 0.5 * RSC) the categorized ‘average’ absolute support level of this terminal.

    Note

    RSC (Resources) is a composite CPU, memory, and runtime score. RSC is weighted at 0.5 (half as powerful as other metrics). FEAT (Features) is the fraction of notable features supported. GFX (Graphics) scores 100% for modern protocols (iTerm2, Kitty), 50% for legacy only (Sixel, ReGIS), 0% for none.

  • Final Scaled Score: 99.0% (normalized across all terminals tested). Final Scaled scores are normalized (0-100%) relative to all terminals tested

WIDE Score Details:

Wide character support calculation:

  • Total successful codepoints: 475

  • Total codepoints tested: 506

  • Formula: 475 / 506

  • Result: 100.00%

NARROW Score Details:

Narrow character support calculation:

  • Total successful codepoints: 174

  • Total codepoints tested: 187

  • Formula: 174 / 187

  • Result: 100.00%

ZWJ Score Details:

Emoji ZWJ (Zero-Width Joiner) support calculation:

  • Total successful sequences: 1445

  • Total sequences tested: 1445

  • Formula: 1445 / 1445

  • Result: 100.00%

VS16 Score Details:

Variation Selector-16 support calculation:

  • Errors: 0 of 426 codepoints tested

  • Success rate: 100.0%

  • Formula: 100.0 / 100

  • Result: 100.00%

VS15 Score Details (excluded from final score):

Variation Selector-15 support calculation:

  • Errors: 0 of 158 codepoints tested

  • Success rate: 100.0%

  • Formula: 100.0 / 100

  • Result: 100.00%

SRI Score Details:

Standalone Regional Indicator support calculation:

  • Total successful codepoints: 0

  • Total codepoints tested: 26

  • Formula: 0 / 26

  • Result: 100.00%

SFZ Score Details:

Standalone Fitzpatrick skin tone modifier support calculation:

  • Total successful codepoints: 0

  • Total codepoints tested: 5

  • Formula: 0 / 5

  • Result: 100.00%

RI Score Details:

Regional Indicator flag sequence support calculation:

  • Total successful sequences: 262

  • Total sequences tested: 262

  • Formula: 262 / 262

  • Result: 100.00%

Features Score Details:

Notable terminal features (12.0 / 16):

  • Set bracketed paste mode (2004): yes

  • Synchronized Output (2026): yes

  • Send FocusIn/FocusOut events (1004): yes

  • Enable SGR Mouse Mode (1006): yes

  • Grapheme Clustering (2027): yes

  • Bracketed Paste MIME (5522): no

  • Kitty Keyboard: yes

  • XTGETTCAP (Full): yes

  • Text Sizing (OSC 66): yes

  • Kitty Clipboard Protocol: no

  • OSC 52 Clipboard: yes

  • Kitty Pointer Shapes (OSC 22): no

  • Kitty Notifications (OSC 99): no

  • Color Report (OSC 10/11): yes

  • Terminal Identification (XTVERSION): yes

  • Truecolor Detection: yes

Raw score: 75.00%

Graphics Score Details:

Graphics protocol support (50%):

  • Sixel: yes

  • ReGIS: no

  • iTerm2: no

  • Kitty: no

Scoring: 100% for modern (iTerm2/Kitty), 50% for legacy only (Sixel/ReGIS), 0% for none

Resource Score Details:

  • Duration: 4.0s

  • Mean CPU: 13.7%

  • Mean RSS: 25.4 MB

  • Resources Score: 91/100

  • Note: log-scale composite cost = log(CPU+1) + log(RSS+1) + log(time+1)

  • Scaled result: 90.7%

LANG Score Details (Geometric Mean):

Geometric mean calculation:

  • Formula: (p₁ × p₂ × … × pₙ)^(1/n) where n = 85 languages

  • About geometric mean

  • Result: 100.00%

Wide character support

Wide character support of foot is 93.9% (31 errors of 506 codepoints tested).

Sequence of a WIDE character, from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0001F1F5

‘\U0001f1f5’

So

2

REGIONAL INDICATOR SYMBOL LETTER P

Total codepoints: 1

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xf0\x9f\x87\xb5|\\n12|\\n"
    🇵|
    12|
    
  • See Line 42373 of ucs_wide.txt for this sequence in the example file.

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Narrow character support

Narrow character support of foot is 93.0% (13 errors of 187 codepoints tested).

Sequence of a NARROW character, from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+06DD

‘\u06dd’

Cf

1

ARABIC END OF AYAH

Total codepoints: 1

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xdb\x9d|\\n1|\\n"
    ۝|
    1|
    
  • python wcwidth.wcswidth() measures width 1, while foot measures width 0.

Emoji ZWJ support

Compatibility of foot with the Unicode Emoji ZWJ sequence table is 100.0% (0 errors of 1445 sequences tested).

Variation Selector-16 support

Emoji VS-16 results for foot is 0 errors out of 426 total codepoints tested, 100.0% success. All codepoint combinations with Variation Selector-16 tested were successful.

Variation Selector-15 support

Emoji VS-15 results for foot is 0 errors out of 158 total codepoints tested, 100.0% success. All codepoint combinations with Variation Selector-15 tested were successful.

Standalone Regional Indicator support

Standalone Regional Indicator support of foot is 0.0% (26 errors of 26 codepoints tested).

Sequence of a standalone Regional Indicator, from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0001F1F3

‘\U0001f1f3’

So

2

REGIONAL INDICATOR SYMBOL LETTER N

Total codepoints: 1

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xf0\x9f\x87\xb3|\\n12|\\n"
    🇳|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Standalone Fitzpatrick modifier support

Standalone Fitzpatrick skin tone modifier support of foot is 0.0% (5 errors of 5 codepoints tested).

Sequence of a standalone Fitzpatrick modifier, from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0001F3FD

‘\U0001f3fd’

Sk

2

EMOJI MODIFIER FITZPATRICK TYPE-4

Total codepoints: 1

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xf0\x9f\x8f\xbd|\\n12|\\n"
    🏽|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Regional Indicator flag sequence support

Regional Indicator flag sequence support of foot is 100.0% (0 errors of 262 sequences tested).

Graphics Protocol Support

foot supports the following graphics protocols: Sixel.

Detection Methods:

  • Sixel and ReGIS: Detected via the Device Attributes (DA1) query CSI c (\x1b[c). Extension code 4 indicates Sixel support, 3 ReGIS.

  • Kitty graphics: Detected by sending a Kitty graphics query and checking for an OK response.

  • iTerm2 inline images: Detected via the iTerm2 capabilities query OSC 1337 ; Capabilities.

Device Attributes Response:

  • Extensions reported: 4, 22, 28, 52

  • Sixel indicator (4): present

  • ReGIS indicator (3): not present

Language Support

The following 61 languages were tested with 100% success:

Aja, Amarakaeri, Arabic, Standard, Assyrian Neo-Aramaic, Baatonum, Bamun, Belanda Viri, Bora, Catalan (2), Chickasaw, Chinantec, Chiltepec, Dagaare, Southern, Dari, Dendi, Dinka, Northeastern, Dzongkha, Evenki, Farsi, Western, Fon, French (Welche), Fur, Ga, Gen, Gilyak, Gumuz, Kabyle, Lamnso’, Lao, Lingala (tones), Maldivian, Maori (2), Mazahua Central, Mòoré, Nanai, Navajo, Orok, Otomi, Mezquital, Panjabi, Western, Pashto, Northern, Picard, Pular (Adlam), Secoya, Seraiki, Shipibo-Conibo, Siona, South Azerbaijani, Tagalog (Tagalog), Tai Dam, Tamang, Eastern, Tamazight, Central Atlas, Tem, Thai, Thai (2), Tibetan, Central, Ticuna, Uduk, Urdu (2), Vietnamese, Yaneshaʼ, Yiddish, Eastern, Yoruba.

The following 24 languages are not fully supported:

lang

n_errors

n_total

pct_success

Sanskrit (Grantha)

197

237

16.9%

Tamil

106

132

19.7%

Kannada

157

236

33.5%

Sinhala

101

198

49.0%

Panjabi, Eastern

103

236

56.4%

Bengali

135

335

59.7%

Bhojpuri

101

252

59.9%

Gujarati

113

290

61.0%

Burmese

76

223

65.9%

Malayalam

130

382

66.0%

Khmer, Central

114

390

70.8%

Magahi

6

22

72.7%

Khün

90

354

74.6%

Hindi

40

164

75.6%

Telugu

78

335

76.7%

Mon

45

208

78.4%

Marathi

20

103

80.6%

Sanskrit

27

155

82.6%

Javanese (Javanese)

85

488

82.6%

Maithili

10

66

84.8%

Chakma

34

225

84.9%

Nepali

9

71

87.3%

Shan

11

106

89.6%

Urdu

1

23

95.7%

Sanskrit (Grantha)

Sequence of language Sanskrit (Grantha) from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+00011305

‘\U00011305’

Lo

1

GRANTHA LETTER A

2

U+00011302

‘\U00011302’

Mc

0

GRANTHA SIGN ANUSVARA

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xf0\x91\x8c\x85\xf0\x91\x8c\x82|\\n12|\\n"
    𑌅𑌂|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Tamil

Sequence of language Tamil from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0B95

‘\u0b95’

Lo

1

TAMIL LETTER KA

2

U+0BBE

‘\u0bbe’

Mc

0

TAMIL VOWEL SIGN AA

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe0\xae\x95\xe0\xae\xbe|\\n12|\\n"
    கா|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Kannada

Sequence of language Kannada from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0C85

‘\u0c85’

Lo

1

KANNADA LETTER A

2

U+0C82

‘\u0c82’

Mc

0

KANNADA SIGN ANUSVARA

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe0\xb2\x85\xe0\xb2\x82|\\n12|\\n"
    ಅಂ|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Sinhala

Sequence of language Sinhala from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0D9A

‘\u0d9a’

Lo

1

SINHALA LETTER ALPAPRAANA KAYANNA

2

U+0DCF

‘\u0dcf’

Mc

0

SINHALA VOWEL SIGN AELA-PILLA

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe0\xb6\x9a\xe0\xb7\x8f|\\n12|\\n"
    කා|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Panjabi, Eastern

Sequence of language Panjabi, Eastern from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0A15

‘\u0a15’

Lo

1

GURMUKHI LETTER KA

2

U+0A3E

‘\u0a3e’

Mc

0

GURMUKHI VOWEL SIGN AA

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe0\xa8\x95\xe0\xa8\xbe|\\n12|\\n"
    ਕਾ|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Bengali

Sequence of language Bengali from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0985

‘\u0985’

Lo

1

BENGALI LETTER A

2

U+0982

‘\u0982’

Mc

0

BENGALI SIGN ANUSVARA

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe0\xa6\x85\xe0\xa6\x82|\\n12|\\n"
    অং|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Bhojpuri

Sequence of language Bhojpuri from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0915

‘\u0915’

Lo

1

DEVANAGARI LETTER KA

2

U+093E

‘\u093e’

Mc

0

DEVANAGARI VOWEL SIGN AA

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe0\xa4\x95\xe0\xa4\xbe|\\n12|\\n"
    का|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Gujarati

Sequence of language Gujarati from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0A95

‘\u0a95’

Lo

1

GUJARATI LETTER KA

2

U+0A83

‘\u0a83’

Mc

0

GUJARATI SIGN VISARGA

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe0\xaa\x95\xe0\xaa\x83|\\n12|\\n"
    કઃ|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Burmese

Sequence of language Burmese from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+1000

‘\u1000’

Lo

1

MYANMAR LETTER KA

2

U+1031

‘\u1031’

Mc

0

MYANMAR VOWEL SIGN E

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe1\x80\x80\xe1\x80\xb1|\\n12|\\n"
    ကေ|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Malayalam

Sequence of language Malayalam from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0D05

‘\u0d05’

Lo

1

MALAYALAM LETTER A

2

U+0D02

‘\u0d02’

Mc

0

MALAYALAM SIGN ANUSVARA

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe0\xb4\x85\xe0\xb4\x82|\\n12|\\n"
    അം|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Khmer, Central

Sequence of language Khmer, Central from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+1780

‘\u1780’

Lo

1

KHMER LETTER KA

2

U+17B6

‘\u17b6’

Mc

0

KHMER VOWEL SIGN AA

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe1\x9e\x80\xe1\x9e\xb6|\\n12|\\n"
    កា|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Magahi

Sequence of language Magahi from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0916

‘\u0916’

Lo

1

DEVANAGARI LETTER KHA

2

U+094B

‘\u094b’

Mc

0

DEVANAGARI VOWEL SIGN O

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe0\xa4\x96\xe0\xa5\x8b|\\n12|\\n"
    खो|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Khün

Sequence of language Khün from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+1A20

‘\u1a20’

Lo

1

TAI THAM LETTER HIGH KA

2

U+1A6E

‘\u1a6e’

Mc

0

TAI THAM VOWEL SIGN E

3

U+1A60

‘\u1a60’

Mn

0

TAI THAM SIGN SAKOT

Total codepoints: 3

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe1\xa8\xa0\xe1\xa9\xae\xe1\xa9\xa0|\\n12|\\n"
    ᨠᩮ᩠|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Hindi

Sequence of language Hindi from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0915

‘\u0915’

Lo

1

DEVANAGARI LETTER KA

2

U+093E

‘\u093e’

Mc

0

DEVANAGARI VOWEL SIGN AA

3

U+0902

‘\u0902’

Mn

0

DEVANAGARI SIGN ANUSVARA

Total codepoints: 3

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe0\xa4\x95\xe0\xa4\xbe\xe0\xa4\x82|\\n12|\\n"
    कां|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Telugu

Sequence of language Telugu from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0C05

‘\u0c05’

Lo

1

TELUGU LETTER A

2

U+0C02

‘\u0c02’

Mc

0

TELUGU SIGN ANUSVARA

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe0\xb0\x85\xe0\xb0\x82|\\n12|\\n"
    అం|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Mon

Sequence of language Mon from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+1000

‘\u1000’

Lo

1

MYANMAR LETTER KA

2

U+1031

‘\u1031’

Mc

0

MYANMAR VOWEL SIGN E

3

U+102F

‘\u102f’

Mn

0

MYANMAR VOWEL SIGN U

Total codepoints: 3

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe1\x80\x80\xe1\x80\xb1\xe1\x80\xaf|\\n12|\\n"
    ကေု|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Marathi

Sequence of language Marathi from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+091A

‘\u091a’

Lo

1

DEVANAGARI LETTER CA

2

U+093E

‘\u093e’

Mc

0

DEVANAGARI VOWEL SIGN AA

3

U+0902

‘\u0902’

Mn

0

DEVANAGARI SIGN ANUSVARA

Total codepoints: 3

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe0\xa4\x9a\xe0\xa4\xbe\xe0\xa4\x82|\\n12|\\n"
    चां|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Sanskrit

Sequence of language Sanskrit from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0920

‘\u0920’

Lo

1

DEVANAGARI LETTER TTHA

2

U+0948

‘\u0948’

Mn

0

DEVANAGARI VOWEL SIGN AI

3

U+0903

‘\u0903’

Mc

0

DEVANAGARI SIGN VISARGA

Total codepoints: 3

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe0\xa4\xa0\xe0\xa5\x88\xe0\xa4\x83|\\n12|\\n"
    ठैः|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Javanese (Javanese)

Sequence of language Javanese (Javanese) from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+A98F

‘\ua98f’

Lo

1

JAVANESE LETTER KA

2

U+A983

‘\ua983’

Mc

0

JAVANESE SIGN WIGNYAN

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xea\xa6\x8f\xea\xa6\x83|\\n12|\\n"
    ꦏꦃ|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Maithili

Sequence of language Maithili from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0915

‘\u0915’

Lo

1

DEVANAGARI LETTER KA

2

U+093F

‘\u093f’

Mc

0

DEVANAGARI VOWEL SIGN I

3

U+0902

‘\u0902’

Mn

0

DEVANAGARI SIGN ANUSVARA

Total codepoints: 3

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe0\xa4\x95\xe0\xa4\xbf\xe0\xa4\x82|\\n12|\\n"
    किं|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Chakma

Sequence of language Chakma from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+00011103

‘\U00011103’

Lo

1

CHAKMA LETTER AA

2

U+0001112C

‘\U0001112c’

Mc

0

CHAKMA VOWEL SIGN E

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xf0\x91\x84\x83\xf0\x91\x84\xac|\\n12|\\n"
    𑄃𑄬|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Nepali

Sequence of language Nepali from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+091A

‘\u091a’

Lo

1

DEVANAGARI LETTER CA

2

U+094B

‘\u094b’

Mc

0

DEVANAGARI VOWEL SIGN O

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe0\xa4\x9a\xe0\xa5\x8b|\\n12|\\n"
    चो|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Shan

Sequence of language Shan from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+1004

‘\u1004’

Lo

1

MYANMAR LETTER NGA

2

U+1084

‘\u1084’

Mc

0

MYANMAR VOWEL SIGN SHAN E

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xe1\x80\x84\xe1\x82\x84|\\n12|\\n"
    ငႄ|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

Urdu

Sequence of language Urdu from midpoint of alignment failure records:

#

Codepoint

Python

Category

wcwidth

Name

1

U+0601

‘\u0601’

Cf

1

ARABIC SIGN SANAH

2

U+06F1

‘\u06f1’

Nd

1

EXTENDED ARABIC-INDIC DIGIT ONE

Total codepoints: 2

  • Shell test using printf(1), '|' should align in output:

    $ printf "\xd8\x81\xdb\xb1|\\n12|\\n"
    ؁۱|
    12|
    

Screenshot:

Terminal screenshot of the rendering discrepancy
  • python wcwidth.wcswidth() measures width 2, while foot measures width 1.

DEC Private Modes Support

DEC private modes results for foot: 7 changeable modes of 7 supported out of 8 total modes tested (87.5% support, 87.5% changeable).

Complete list of DEC private modes tested:

Mode

Name

Description

Supported

Changeable

Enabled

1004

FOCUS_IN_OUT_EVENTS

Send FocusIn/FocusOut events

Yes

Yes

No

1006

MOUSE_EXTENDED_SGR

Enable SGR Mouse Mode

Yes

Yes

No

2004

BRACKETED_PASTE

Set bracketed paste mode

Yes

Yes

No

2026

SYNCHRONIZED_OUTPUT

Synchronized Output

Yes

Yes

No

2027

GRAPHEME_CLUSTERING

Grapheme Clustering

Yes

Yes

Yes

2031

COLOR_PALETTE_UPDATES

Color palette updates

Yes

Yes

No

2048

IN_BAND_WINDOW_RESIZE

In-Band Window Resize Notifications

Yes

Yes

No

5522

BRACKETED_PASTE_MIME

Bracketed Paste MIME

No

No

No

Summary: 7 changeable, 1 not changeable.

Kitty Keyboard Protocol

foot supports the Kitty keyboard protocol.

#

Flag

Key

State

1

Disambiguate escape codes

disambiguate

No

2

Report event types

report_events

No

3

Report alternate keys

report_alternates

No

4

Report all keys as escape codes

report_all_keys

No

5

Report associated text

report_text

No

Detection is performed by sending CSI ? u to query the current progressive enhancement flags. A terminal that supports this protocol responds with the active flags value.

XTGETTCAP (Terminfo Capabilities)

foot supports the XTGETTCAP sequence and reports 219 terminfo capabilities (Full).

#

Capability

Description

Value

1

AX

Supports default colors

(empty)

2

BD

Enter bold mode (kitty)

\E[?2004l

3

BE

Exit bold mode (kitty)

\E[?2004h

4

Cr

Set cursor color

\E]112\E\

5

Cs

Reset cursor color

\E]12;%p1%s\E\

6

E3

Erase scrollback

\E[3J

7

Ms

Clipboard set

\E]52;%p1%s;%p2%s\E\

8

PE

Presentation end (kitty)

\E[201~

9

PS

Presentation start (kitty)

\E[200~

10

RGB

Bits per color channel (8 = 24-bit truecolor)

8

11

RV

Enter reverse mode (kitty)

\E[>c

12

Rect

Rectangle operations

\E[%p1%d;%p2%d;%p3%d;%p4%d;%p5%d$x

13

Se

Reset underline style

\E[ q

14

Setulc

Set underline color

\E[58:2::%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%...

15

Smulx

Styled underline

\E[4:%p1%dm

16

Ss

Set underline style

\E[%p1%d q

17

Su

Colored underlines

(empty)

18

Sync

Synchronized output

\E[?2026%?%p1%{1}%-%tl%eh%;

19

TN

Terminal name

foot

20

TS

Terminal state query

\E]2;

21

Tc

Truecolor (24-bit RGB)

(empty)

22

XF

Extended functionality

(empty)

23

XM

Enter marks mode (kitty)

\E[?1006;1000%?%p1%{1}%=%th%el%;

24

XR

Enter reset mode (kitty)

\E[>0q

25

XT

Xterm extensions

(empty)

26

acsc

Alternate character set

``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~

27

am

Auto right margin

(empty)

28

bce

Background color erase

(empty)

29

bel

Bell

\a

30

blink

Enter blink mode

\E[5m

31

bold

Enter bold mode

\E[1m

32

bw

Auto left margin

(empty)

33

ccc

Can redefine colors

(empty)

34

civis

Hide cursor

\E[?25l

35

clear

Clear screen

\E[H\E[2J

36

cnorm

Normal cursor

\E[?12l\E[?25h

37

colors

Max colors on screen

256

38

cols

Columns

80

39

cr

Carriage return

\r

40

csr

Change scroll region

\E[%i%p1%d;%p2%dr

41

cub

Cursor left n

\E[%p1%dD

42

cub1

Cursor left

\b

43

cud

Cursor down n

\E[%p1%dB

44

cud1

Cursor down

\n

45

cuf

Cursor right n

\E[%p1%dC

46

cuf1

Cursor right

\E[C

47

cup

Cursor address

\E[%i%p1%d;%p2%dH

48

cuu

Cursor up n

\E[%p1%dA

49

cuu1

Cursor up

\E[A

50

cvvis

Very visible cursor

\E[?12;25h

51

dch

Delete n characters

\E[%p1%dP

52

dch1

Delete character

\E[P

53

dim

Enter dim mode

\E[2m

54

dl

Delete n lines

\E[%p1%dM

55

dl1

Delete line

\E[M

56

dsl

Disable status line

\E]2;\E\

57

ech

Erase characters

\E[%p1%dX

58

ed

Clear to end of screen

\E[J

59

el

Clear to end of line

\E[K

60

el1

Clear to start of line

\E[1K

61

fd

Enter font mode (kitty)

\E[?1004l

62

fe

Exit font mode (kitty)

\E[?1004h

63

flash

Flash screen

\E]555\E\

64

fsl

From status line

\E\

65

home

Cursor home

\E[H

66

hpa

Horizontal position

\E[%i%p1%dG

67

hs

Has status line

(empty)

68

ht

Horizontal tab

\t

69

hts

Set tab stop

\EH

70

ich

Insert n characters

\E[%p1%d@

71

il

Insert n lines

\E[%p1%dL

72

il1

Insert line

\E[L

73

ind

Scroll forward

\n

74

indn

Scroll forward n

\E[%p1%dS

75

initc

Initialize color

\E]4;%p1%d;rgb:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{100...

76

invis

Invisible cursor

\E[8m

77

is2

Init 2 string

\E[!p\E[4l\E>

78

it

Init tabs

8

79

kDC

Shifted delete-char key

\E[3;2~

80

kDC3

Alt delete-char key

\E[3;3~

81

kDC4

Alt-Shift delete-char key

\E[3;4~

82

kDC5

Ctrl delete-char key

\E[3;5~

83

kDC6

Ctrl-Shift delete-char key

\E[3;6~

84

kDC7

Ctrl-Alt delete-char key

\E[3;7~

85

kDN

Shifted down-arrow key

\E[1;2B

86

kDN3

Alt down-arrow key

\E[1;3B

87

kDN4

Alt-Shift down-arrow key

\E[1;4B

88

kDN5

Ctrl down-arrow key

\E[1;5B

89

kDN6

Ctrl-Shift down-arrow key

\E[1;6B

90

kDN7

Ctrl-Alt down-arrow key

\E[1;7B

91

kEND

Shifted end key

\E[1;2F

92

kEND3

Alt end key

\E[1;3F

93

kEND4

Alt-Shift end key

\E[1;4F

94

kEND5

Ctrl end key

\E[1;5F

95

kEND6

Ctrl-Shift end key

\E[1;6F

96

kEND7

Ctrl-Alt end key

\E[1;7F

97

kHOM

Shifted home key

\E[1;2H

98

kHOM3

Alt home key

\E[1;3H

99

kHOM4

Alt-Shift home key

\E[1;4H

100

kHOM5

Ctrl home key

\E[1;5H

101

kHOM6

Ctrl-Shift home key

\E[1;6H

102

kHOM7

Ctrl-Alt home key

\E[1;7H

103

kIC

Shifted insert-char key

\E[2;2~

104

kIC3

Alt insert-char key

\E[2;3~

105

kIC4

Alt-Shift insert-char key

\E[2;4~

106

kIC5

Ctrl insert-char key

\E[2;5~

107

kIC6

Ctrl-Shift insert-char key

\E[2;6~

108

kIC7

Ctrl-Alt insert-char key

\E[2;7~

109

kLFT

Shifted left-arrow key

\E[1;2D

110

kLFT3

Alt left-arrow key

\E[1;3D

111

kLFT4

Alt-Shift left-arrow key

\E[1;4D

112

kLFT5

Ctrl left-arrow key

\E[1;5D

113

kLFT6

Ctrl-Shift left-arrow key

\E[1;6D

114

kLFT7

Ctrl-Alt left-arrow key

\E[1;7D

115

kNXT

Shifted next-page key

\E[6;2~

116

kNXT3

Alt next-page key

\E[6;3~

117

kNXT4

Alt-Shift next-page key

\E[6;4~

118

kNXT5

Ctrl next-page key

\E[6;5~

119

kNXT6

Ctrl-Shift next-page key

\E[6;6~

120

kNXT7

Ctrl-Alt next-page key

\E[6;7~

121

kPRV

Shifted previous-page key

\E[5;2~

122

kPRV3

Alt previous-page key

\E[5;3~

123

kPRV4

Alt-Shift previous-page key

\E[5;4~

124

kPRV5

Ctrl previous-page key

\E[5;5~

125

kPRV6

Ctrl-Shift previous-page key

\E[5;6~

126

kPRV7

Ctrl-Alt previous-page key

\E[5;7~

127

kRIT

Shifted right-arrow key

\E[1;2C

128

kRIT3

Alt right-arrow key

\E[1;3C

129

kRIT4

Alt-Shift right-arrow key

\E[1;4C

130

kRIT5

Ctrl right-arrow key

\E[1;5C

131

kRIT6

Ctrl-Shift right-arrow key

\E[1;6C

132

kRIT7

Ctrl-Alt right-arrow key

\E[1;7C

133

kUP

Shifted up-arrow key

\E[1;2A

134

kUP3

Alt up-arrow key

\E[1;3A

135

kUP4

Alt-Shift up-arrow key

\E[1;4A

136

kUP5

Ctrl up-arrow key

\E[1;5A

137

kUP6

Ctrl-Shift up-arrow key

\E[1;6A

138

kUP7

Ctrl-Alt up-arrow key

\E[1;7A

139

kbs

Backspace key



140

kcbt

Back-tab key

\E[Z

141

kcub1

Left arrow key

\EOD

142

kcud1

Down arrow key

\EOB

143

kcuf1

Right arrow key

\EOC

144

kcuu1

Up arrow key

\EOA

145

kdch1

Delete character key

\E[3~

146

kend

End key

\EOF

147

kf1

Function key F1

\EOP

148

kf10

Function key F10

\E[21~

149

kf11

Function key F11

\E[23~

150

kf12

Function key F12

\E[24~

151

kf2

Function key F2

\EOQ

152

kf3

Function key F3

\EOR

153

kf4

Function key F4

\EOS

154

kf5

Function key F5

\E[15~

155

kf6

Function key F6

\E[17~

156

kf7

Function key F7

\E[18~

157

kf8

Function key F8

\E[19~

158

kf9

Function key F9

\E[20~

159

khome

Home key

\EOH

160

kich1

Insert character key

\E[2~

161

kind

Scroll-down key

\E[1;2B

162

kmous

Mouse key

\E[<

163

knp

Next page key

\E[6~

164

kpp

Previous page key

\E[5~

165

kri

Scroll-up key

\E[1;2A

166

kxIN

Keyboard in (kitty)

\E[I

167

kxOUT

Keyboard out (kitty)

\E[O

168

lines

Lines

24

169

mir

Move in insert mode

(empty)

170

msgr

Move in standout mode

(empty)

171

nel

Newline

\EE

172

npc

No pad character

(empty)

173

oc

Original colors

\E]104\E\

174

op

Original pair

\E[39;49m

175

pairs

Max color pairs

65536

176

query-os-name

OS name query

Linux

177

rc

Restore cursor

\E8

178

rep

Repeat character

%p1%c\E[%p2%{1}%-%db

179

rev

Enter reverse mode

\E[7m

180

ri

Reverse index

\EM

181

rin

Scroll reverse n

\E[%p1%dT

182

ritm

Exit italics mode

\E[23m

183

rmacs

Exit alternate charset mode

\E(B

184

rmam

Disable line wrap

\E[?7l

185

rmcup

Exit alt screen

\E[?1049l\E[23;0;0t

186

rmir

Exit insert mode

\E[4l

187

rmkx

Keypad local mode

\E[?1l\E>

188

rmm

Reset meta mode

\E[?1036h\E[?1034l

189

rmso

Exit standout mode

\E[27m

190

rmul

Exit underline mode

\E[24m

191

rs1

Reset string 1

\Ec

192

rs2

Reset string 2

\E[!p\E[4l\E>

193

rv

Exit reverse mode (kitty)

\E\[>1;[0-9][0-9][0-9][0-9][0-9][0-9];0c

194

sc

Save cursor

\E7

195

setab

Set background color

\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48:5:%...

196

setaf

Set foreground color

\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38:5:%p...

197

setal

Set ANSI label

\E[58:2::%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%...

198

setrgbb

Set RGB background

\E[48:2::%p1%d:%p2%d:%p3%dm

199

setrgbf

Set RGB foreground

\E[38:2::%p1%d:%p2%d:%p3%dm

200

sgr

Set attributes

%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%...

201

sgr0

Reset attributes

\E(B\E[m

202

sitm

Enter italics mode

\E[3m

203

smacs

Enter alternate charset mode

\E(0

204

smam

Enable line wrap

\E[?7h

205

smcup

Enter alt screen

\E[?1049h\E[22;0;0t

206

smir

Enter insert mode

\E[4h

207

smkx

Keypad transmit mode

\E[?1h\E=

208

smso

Enter standout mode

\E[7m

209

smul

Enter underline mode

\E[4m

210

tbc

Clear all tabs

\E[3g

211

tsl

To status line

\E]2;

212

u6

CPR response format

\E[%i%d;%dR

213

u7

CPR request

\E[6n

214

u8

DA response format

\E[?%[;0123456789]c

215

u9

DA request

\E[c

216

vpa

Vertical position

\E[%i%p1%dd

217

xenl

Newline glitch

(empty)

218

xm

Exit marks mode (kitty)

\E[<%i%p3%d;%p1%d;%p2%d;%?%p4%tM%em%;

219

xr

Exit reset mode (kitty)

\EP>\|foot\([0-9]+\.[0-9]+\.[0-9]+(-[0-9]+-g[a-f[0-9]+)?\...

The XTGETTCAP sequence (DCS + q Pt ST) allows applications to query terminfo capabilities directly from the terminal emulator, rather than relying on the system terminfo database.

Text Sizing Protocol (OSC 66)

foot supports the Text Sizing protocol: explicit width (w).

The Text Sizing protocol (OSC 66) allows terminal programs to display text at different sizes and to explicitly specify the cell width of characters. Detection is performed by measuring cursor movement after sending ESC ] 66 ; w=2 ; <space> BEL and ESC ] 66 ; s=2 ; <space> BEL.

Because this terminal supports the Text Sizing protocol, any application can programmatically set the displayed cell width of any character. This means that width errors for complex languages, emoji, variation selectors (VS15, VS16), standalone regional indicators and Fitzpatrick modifiers, and other problematic codepoints can be fully remediated at the application level. For this reason, foot scores 100% on the WIDE, LANG, ZWJ, VS16, VS15, SRI, SFZ, and RI width tests.

Truecolor Support

foot supports 24-bit truecolor, detectable via:

  • XTGETTCAP (RGB capability): yes (RGB)

  • DECRQSS (truecolor probe): yes (probe)

  • COLORTERM: yes (truecolor)

OSC 52 Clipboard Support

foot supports OSC 52 clipboard operations (detected via DA1 extension 52 + XTGETTCAP Ms).

  • DA1 extension 52: yes

  • XTGETTCAP Ms: yes

Terminal Identification

foot is identified as foot version 1.27.0 (detected via XTVERSION + XTGETTCAP TN).

  • XTVERSION (raw): foot(1.27.0)

  • XTVERSION: yes

  • XTGETTCAP TN: yes (foot)

  • ENQ: no

  • TERM_PROGRAM: no

  • TERM: yes (foot)

Reproduction

To reproduce these results for foot, install and run ucs-detect with the following commands:

uvx ucs-detect --rerun data/foot.yaml

Test Performance

The test suite completed in 4.00 seconds (4s).

  • Mean CPU: 13.7%

  • Mean RSS: 25.4 MB

  • Total time: 4.0s

CPU usage over time

CPU usage during test execution for foot.

RSS memory over time

RSS memory usage during test execution for foot.

Duration comparison

Test duration for foot compared to all other terminals.

CPU % vs Duration

CPU % vs duration trade-off for foot.

Previous Next

© Copyright 2023-2026, Jeff Quast.

Built with Sphinx using a theme provided by Read the Docs.