4

I work with source code and exotic world languages.

I want to edit my source code in a monospace font.

But I also want to be able to include arbitrary Unicode text in rare scripts that might only have one or two fonts to choose from.

Most source code editors only let you choose a single simple font.

(When I say exotic languages, I'm talking about ones much rarer than Chinese, Russian, or Arabic. So editors which specifically support those might not fulfil my needs.)

3

Rather than trying to find an IDE or editor that allows different projects/files to use different fonts while not try to find and use a Mono Spaced font that covers all of your required languages.

While not the prettiest font that I know you can always download and install Unifont and set that as your code editor front in any code editor that has UTF-8 support. It is mono-spaced, free, GPL 2+ with the GNU font embedding exception. Works on a variety of machines and has a huge range of the code pages supported and currently 114,428 glyphs in total at the moment.

Coverage as of Version 8.0.0.1

Unicode Basic Multilingual Plane

  Covered      Range       Script
  -------      -----       ------
   100.0%  U+0000..U+007F  C0 Controls and Basic Latin
   100.0%  U+0080..U+00FF  C1 Controls and Latin-1 Supplement
   100.0%  U+0100..U+017F  Latin Extended - A
   100.0%  U+0180..U+024F  Latin Extended - B
   100.0%  U+0250..U+02AF  IPA Extensions
   100.0%  U+02B0..U+02FF  Spacing Modifier Letters
   100.0%  U+0300..U+036F  Combining Diacritical Marks
   100.0%  U+0370..U+03FF  Greek and Coptic
   100.0%  U+0400..U+04FF  Cyrillic
   100.0%  U+0500..U+052F  Cyrillic Supplement
   100.0%  U+0530..U+058F  Armenian
   100.0%  U+0590..U+05FF  Hebrew
   100.0%  U+0600..U+06FF  Arabic
   100.0%  U+0700..U+074F  Syriac
   100.0%  U+0750..U+077F  Arabic Supplement
   100.0%  U+0780..U+07BF  Thaana
   100.0%  U+07C0..U+07FF  N'Ko
   100.0%  U+0800..U+083F  Samaritan
   100.0%  U+0840..U+085F  Mandaic
   100.0%  U+0860..U+089F  Unassigned
   100.0%  U+08A0..U+08FF  Arabic Extended - A
   100.0%  U+0900..U+097F  Devanagari
   100.0%  U+0980..U+09FF  Bengali
   100.0%  U+0A00..U+0A7F  Gurmukhi
   100.0%  U+0A80..U+0AFF  Gujarati
   100.0%  U+0B00..U+0B7F  Oriya
   100.0%  U+0B80..U+0BFF  Tamil
   100.0%  U+0C00..U+0C7F  Telugu
   100.0%  U+0C80..U+0CFF  Kannada
   100.0%  U+0D00..U+0D7F  Malayalam
   100.0%  U+0D80..U+0DFF  Sinhala
   100.0%  U+0E00..U+0E7F  Thai
   100.0%  U+0E80..U+0EFF  Lao
   100.0%  U+0F00..U+0FFF  Tibetan
   100.0%  U+1000..U+109F  Myanmar
   100.0%  U+10A0..U+10FF  Georgian
   100.0%  U+1100..U+11FF  Hangul Jamo
   100.0%  U+1200..U+137F  Ethiopic
   100.0%  U+1380..U+139F  Ethiopic Supplement
   100.0%  U+13A0..U+13FF  Cherokee
   100.0%  U+1400..U+167F  Unified Canadian Aboriginal Syllabics
   100.0%  U+1680..U+169F  Ogham
   100.0%  U+16A0..U+16FF  Runic
   100.0%  U+1700..U+171F  Tagalog
   100.0%  U+1720..U+173F  Hanunoo
   100.0%  U+1740..U+175F  Buhid
   100.0%  U+1760..U+177F  Tagbanwa
   100.0%  U+1780..U+17FF  Khmer
   100.0%  U+1800..U+18AF  Mongolian
   100.0%  U+18B0..U+18FF  Unified Canadian Aboriginal Syllabics Extended
   100.0%  U+1900..U+194F  Limbu
   100.0%  U+1950..U+197F  Tai Le
   100.0%  U+1980..U+19DF  New Tai Lue
   100.0%  U+19E0..U+19FF  Khmer Symbols
   100.0%  U+1A00..U+1A1F  Buginese
   100.0%  U+1A20..U+1AAF  Tai Tham
   100.0%  U+1AB0..U+1AFF  Combining Diacritical Marks Extended
   100.0%  U+1B00..U+1B7F  Balinese
   100.0%  U+1B80..U+1BBF  Sundanese
   100.0%  U+1BC0..U+1BFF  Batak
   100.0%  U+1C00..U+1C4F  Lepcha
   100.0%  U+1C50..U+1C7F  Ol Chiki
   100.0%  U+1C80..U+1CBF  Unassigned
   100.0%  U+1CC0..U+1CCF  Sundanese Supplement
   100.0%  U+1CD0..U+1CFF  Vedic Extensions
   100.0%  U+1D00..U+1D7F  Phonetic Extensions
   100.0%  U+1D80..U+1DBF  Phonetic Extensions Supplement
   100.0%  U+1DC0..U+1DFF  Combining Diacritical Marks Supplement
   100.0%  U+1E00..U+1EFF  Latin Extended Additional
   100.0%  U+1F00..U+1FFF  Greek Extended
   100.0%  U+2000..U+206F  General Punctuation
   100.0%  U+2070..U+209F  Superscripts and Subscripts
   100.0%  U+20A0..U+20CF  Currency Symbols
   100.0%  U+20D0..U+20FF  Combining Diacritical Marks for Symbols
   100.0%  U+2100..U+214F  Letterlike Symbols
   100.0%  U+2150..U+218F  Number Forms
   100.0%  U+2190..U+21FF  Arrows
   100.0%  U+2200..U+22FF  Mathematical Operators
   100.0%  U+2300..U+23FF  Miscellaneous Technical
   100.0%  U+2400..U+243F  Control Pictures
   100.0%  U+2440..U+245F  Optical Character Recognition
   100.0%  U+2460..U+24FF  Enclosed Alphanumerics
   100.0%  U+2500..U+257F  Box Drawing
   100.0%  U+2580..U+259F  Block Elements
   100.0%  U+25A0..U+25FF  Geometric Shapes
   100.0%  U+2600..U+26FF  Miscellaneous Symbols
   100.0%  U+2700..U+27BF  Dingbats
   100.0%  U+27C0..U+27EF  Miscellaneous Mathematical Symbols - A
   100.0%  U+27F0..U+27FF  Supplemental Arrows - A
   100.0%  U+2800..U+28FF  Braille Patterns
   100.0%  U+2900..U+297F  Supplemental Arrows - B
   100.0%  U+2980..U+29FF  Miscellaneous Mathematical Symbols - B
   100.0%  U+2A00..U+2AFF  Supplemental Mathematical Operators
   100.0%  U+2B00..U+2BFF  Miscellaneous Symbols and Arrows
   100.0%  U+2C00..U+2C5F  Glagolithic
   100.0%  U+2C60..U+2C7F  Latin Extended C
   100.0%  U+2C80..U+2CFF  Coptic
   100.0%  U+2D00..U+2D2F  Georgian Supplement
   100.0%  U+2D30..U+2D7F  Tifinagh
   100.0%  U+2D80..U+2DDF  Ethiopic Extended
   100.0%  U+2DE0..U+2DFF  Unassigned
   100.0%  U+2E00..U+2E7F  Supplemental Punctuation
   100.0%  U+2E80..U+2EFF  CJK Radicals Supplement
   100.0%  U+2F00..U+2FDF  Kangxi Radicals
   100.0%  U+2FE0..U+2FEF  Unassigned
   100.0%  U+2FF0..U+2FFF  Ideographic Description Characters
   100.0%  U+3000..U+303F  CJK Symbols and Punctuation
   100.0%  U+3040..U+309F  Hiragana
   100.0%  U+30A0..U+30FF  Katakana
   100.0%  U+3100..U+312F  Bopomofo
   100.0%  U+3130..U+318F  Hangul Compatibility Jamo
   100.0%  U+3190..U+319F  Kanbun
   100.0%  U+31A0..U+31BF  Bopomofo Extended
   100.0%  U+31C0..U+31EF  CJK Strokes
   100.0%  U+31F0..U+31FF  Katakana Phonetic Extensions
   100.0%  U+3200..U+32FF  Enclosed CJK Letters and Months
   100.0%  U+3300..U+33FF  CJK Compatibility
   100.0%  U+3400..U+4DBF  CJK Unified Ideographs Extension A
   100.0%  U+4DC0..U+4DFF  Yijing Hexagram Symbols
   100.0%  U+4E00..U+9FCF  CJK Unified Ideographs
   100.0%  U+9FD0..U+9FFF  Unassigned
   100.0%  U+A000..U+A48F  Yi Syllables
   100.0%  U+A490..U+A4CF  Yi Radicals
   100.0%  U+A4D0..U+A4FF  Lisu
   100.0%  U+A500..U+A63F  Vai
   100.0%  U+A640..U+A69F  Unassigned
   100.0%  U+A6A0..U+A6FF  Bamum
   100.0%  U+A700..U+A71F  Modifier Tone Letters
   100.0%  U+A720..U+A7FF  Latin Extended - D
   100.0%  U+A800..U+A82F  Syloti Nagri
   100.0%  U+A830..U+A83F  Common Indic Number Forms
   100.0%  U+A840..U+A87F  Phags-pa
   100.0%  U+A880..U+A8DF  Saurashtra
   100.0%  U+A8E0..U+A8FF  Devanagari Extended
   100.0%  U+A900..U+A92F  Kayah Li
   100.0%  U+A930..U+A95F  Rejang
   100.0%  U+A960..U+A97F  Hangul Jamo Extended - A
   100.0%  U+A980..U+A9DF  Javanese
   100.0%  U+A9E0..U+A9FF  Myanmar Extended - B
   100.0%  U+AA00..U+AA5F  Cham
   100.0%  U+AA60..U+AA7F  Myanmar Extended - A
   100.0%  U+AA80..U+AADF  Tai Viet
   100.0%  U+AAE0..U+AAFF  Meetei Mayek Extensions
   100.0%  U+AB00..U+AB2F  Ethiopic Extended - A
   100.0%  U+AB30..U+AB6F  Latin Extended - E
   100.0%  U+AB70..U+ABBF  Cherokee Supplement
   100.0%  U+AB70..U+ABBF  Unassigned
   100.0%  U+ABC0..U+ABFF  Meetei Mayek
   100.0%  U+AC00..U+D7AF  Hangul Syllables
   100.0%  U+D7B0..U+D7FF  Hangul Jamo Extended - B
     0.0%  U+D800..U+DFFF  Surrogate Pairs - Not Used
     0.0%  U+E000..U+F8FF  Private Use Area - drawn but not included
   100.0%  U+F900..U+FAFF  CJK Compatibility Ideographs
   100.0%  U+FB00..U+FB4F  Alphabetic Presentation Forms
   100.0%  U+FB50..U+FDFF  Arabic Presentation Forms - A
   100.0%  U+FE00..U+FE0F  Variation Selectors
   100.0%  U+FE10..U+FE1F  Vertical Forms
   100.0%  U+FE20..U+FE2F  Combining Half Marks
   100.0%  U+FE30..U+FE4F  CJK Compatibility Forms
   100.0%  U+FE50..U+FE6F  Small Form Variants
   100.0%  U+FE70..U+FEFF  Arabic Presentation Forms - B
   100.0%  U+FF00..U+FFEF  Halfwidth and Fullwidth Forms
   100.0%  U+FFF0..U+FFFF  Specials

Unicode Supplemental Multilingual Plane

  Covered        Range         Script
  -------        -----         ------
   100.0%  U+010000..U+01007F  Linear B Syllabary
   100.0%  U+010080..U+0100FF  Linear B Ideograms
   100.0%  U+010100..U+01013F  Aegean Numbers
   100.0%  U+010140..U+01018F  Ancient Greek Numbers
   100.0%  U+010190..U+0101CF  Ancient Symbols
   100.0%  U+0101D0..U+0101FF  Phaistos Disc
   100.0%  U+010280..U+01029F  Lycian
   100.0%  U+0102A0..U+0102DF  Carian
   100.0%  U+0102E0..U+0102FF  Coptic Epact Numbers
   100.0%  U+010300..U+01032F  Old Italic
   100.0%  U+010330..U+01034F  Gothic
   100.0%  U+010350..U+01037F  Old Permic
   100.0%  U+010380..U+01039F  Ugaritic
   100.0%  U+0103A0..U+0103DF  Old Persian
   100.0%  U+010400..U+01044F  Deseret
   100.0%  U+010450..U+01047F  Shavian
   100.0%  U+010480..U+0104AF  Osmanya
   100.0%  U+010500..U+01052F  Elbasan
   100.0%  U+010530..U+01056F  Caucasian Albanian
   100.0%  U+010600..U+01077F  Linear A
   100.0%  U+010800..U+01083F  Cypriot Syllabary
   100.0%  U+010840..U+01085F  Imperial Aramaic
   100.0%  U+010860..U+01087F  Palmyrene
   100.0%  U+010880..U+0108AF  Nabataean
   100.0%  U+0108E0..U+0108FF  Hatran
   100.0%  U+010900..U+01091F  Phoenecian
   100.0%  U+010920..U+01093F  Lydian
   100.0%  U+010980..U+01099F  Meroitic Hieroglyphs
   100.0%  U+0109A0..U+0109FF  Meroitic Cursive
   100.0%  U+010A00..U+010A5F  Kharoshthi
   100.0%  U+010A60..U+010A7F  Old South Arabian
   100.0%  U+010A80..U+010A9F  Old North Arabian
   100.0%  U+010AC0..U+010AFF  Manichaean
   100.0%  U+010B00..U+010B3F  Avestan
   100.0%  U+010B40..U+010B5F  Inscriptional Parthian
   100.0%  U+010B60..U+010B7F  Inscriptional Pahlavi
   100.0%  U+010B80..U+010BAF  Psalter Pahlavi
   100.0%  U+010C00..U+010C4F  Old Turkic
   100.0%  U+010C80..U+010CFF  Old Hungarian
   100.0%  U+010E60..U+010E7F  Rumi Numeral Symbols
   100.0%  U+011000..U+01107F  Brahmi
   100.0%  U+011080..U+0110CF  Kaithi
   100.0%  U+0110D0..U+0110FF  Sora Sompeng
   100.0%  U+011100..U+01114F  Chakma
   100.0%  U+011150..U+01117F  Mahajani
   100.0%  U+011180..U+0111DF  Sharada
   100.0%  U+0111E0..U+0111FF  Sinhala Archaic Numbers
   100.0%  U+011200..U+01124F  Khojki
     0.0%  U+011280..U+0112AF  Multani (Pending)
     0.0%  U+0112B0..U+0112FF  Khudawadi (Pending)
     0.0%  U+011300..U+01137F  Grantha (Pending)
     0.0%  U+011480..U+0114DF  Tirhuta (Pending)
   100.0%  U+011580..U+0115FF  Siddham
     0.0%  U+011600..U+01165F  Modi (Pending)
   100.0%  U+011680..U+0116CF  Takri
     0.0%  U+011700..U+01173F  Ahom (Pending)
     0.0%  U+0118A0..U+0118FF  Warang Citi (Pending)
     0.0%  U+011AC0..U+011AFF  Pau Cin Hau (Pending)
     0.0%  U+012000..U+0123FF  Cuneiform*
     0.0%  U+012400..U+01247F  Cuneiform Numbers and Punctuation*
     0.0%  U+012480..U+01254F  Early Dynastic Cuneiform
     0.0%  U+013000..U+01342F  Egyptian Hieroglyphs*
     0.0%  U+016800..U+0168BF  Bamum Supplement*
     0.0%  U+016A40..U+016A6F  Mro (Pending)
     0.0%  U+016AD0..U+016AFF  Bassa Vah (Pending)
   100.0%  U+016B00..U+016B8F  Pahawh Hmong
   100.0%  U+016F00..U+016F9F  Miao
   100.0%  U+01B000..U+01B0FF  Kana Supplement
     0.0%  U+01BC00..U+01BC9F  Duployan
   100.0%  U+01BCA0..U+01BCAF  Shorthand Format Controls
   100.0%  U+01D000..U+01D0FF  Byzantine Musical Symbols
   100.0%  U+01D100..U+01D1FF  Musical Symbols
   100.0%  U+01D200..U+01D24F  Ancient Greek Musical Notation
   100.0%  U+01D300..U+01D35F  Tai Xuan Jing Symbols
   100.0%  U+01D360..U+01D37F  Counting Rod Numerals
   100.0%  U+01D400..U+01D7FF  Mathematical Alphanumeric Symbols (Pending)
     0.0%  U+01D800..U+01DAAF  Sutton SignWriting
     0.0%  U+01E800..U+01E8DF  Mende Kikakui (Pending)
   100.0%  U+01EE00..U+01EEFF  Arabic Mathematical Alphabetic Symbols
   100.0%  U+01F000..U+01F02F  Mahjong Tiles
   100.0%  U+01F030..U+01F09F  Domino Tiles
   100.0%  U+01F0A0..U+01F0FF  Playing Cards
   100.0%  U+01F100..U+01F1FF  Enclosed Alphanumeric Supplement
   100.0%  U+01F200..U+01F2FF  Enclosed Ideographic Supplement
   100.0%  U+01F300..U+01F5FF  Miscellaneous Symbols and Pictographs
   100.0%  U+01F600..U+01F64F  Emoticons
   100.0%  U+01F650..U+01F67F  Ornamental Dingbats
   100.0%  U+01F680..U+01F6FF  Transport and Map Symbols
   100.0%  U+01F700..U+01F77F  Alchemical Symbols
   100.0%  U+01F780..U+01F7FF  Geometric Shapes Extended
   100.0%  U+01F800..U+01F8FF  Supplemental Arrows - C
     0.0%  U+01F900..U+01F9FF  Supplemental Symbols and Pictographs
  • Somehow I thought I was aware of all the fonts that attempted something like this and had found them unsatisfactory for my needs. But it seems I don't have this font installed and it does indeed cover the scripts I'm interested in. Downloading now and about to evaluate... – hippietrail Apr 4 '16 at 0:27
  • OK this font is surely useful for some intents and purposes but it seems to be a bitmap with only 12 point size and does not resize well. Combining characters seem only to render as a dotted circle with the rest missing. Google Chrome refuses to use it when I set as the font. For the languages I'm working with many of the glyphs are difficult to recognize. Definitely not a good font for editing source code or working with text in exotic languages. – hippietrail Apr 4 '16 at 0:57
  • 2
    @hippietrail - Fair enough - if you have no objection I will leave this up as it may be useful to those working in some other language sets. – Steve Barnes Apr 4 '16 at 6:00
1

Emacs configures its fonts through fontsets. 'nough said?

Emacs comes with a sample file called HELLO that contains the word “hello” in some common scripts. You can display it with C-h h (press Ctrl+H then H). Even those are often not all provided by the same font. You can run M-x describe-fontset (Alt+X describe-fontset Enter) to see what fonts are used for what code points. If you work with less common scripts, you may need to modify the default fontset in your configuration file. The details are in the Emacs Lisp manual; if you can't figure it out, there's a whole Stack Exchange site where you can ask for help¹.

You may want to define multiple fontsets, e.g. one with maximum breadth for writing linguistics texts and one that's ASCII-only, fixed-width and taking up less screen real estate for programming. If you do this, bind the command mouse-set-font to a keystroke or to a mouse button combination, to make the switch easier.

For programming, Emacs has support for syntax highlighting, automatic indentation, build automation, identifier completion, documentation lookup and other nice features, some of it built in, some more advanced stuff through third-party packages.

Emacs is free and open source. There are official Windows binaries as well as several third-party distributions which may have nicer installers or useful bundled tools.

¹ Disclosure notice: I'm a moderator there.

  • Actually I want to write code which contains liberal characters and strings in unusual languages. I want the code to be mostly monospace formatted but am happy to put up with those strings messing up the formatting to whatever degree necessary. (I'll be writing text processing code.) – hippietrail Apr 5 '16 at 8:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.