終端字體 | Terminal Fonts

終端字體 | Terminal Fonts

終端字體和代碼字體一樣同衣,也是編程愛好者常用的字體,很多人不會(huì)細(xì)分這兩種字體辛孵,但知?jiǎng)t認(rèn)為有必要區(qū)分這兩種需求。代碼字體主要是用于看代碼的轩娶,所顯示的內(nèi)容對象主要是各類代碼文件或者文本數(shù)據(jù)文件儿奶。但是編程并不是僅僅和文本文件打交道,還需要構(gòu)建和調(diào)試鳄抒。這就會(huì)用到虛擬終端和用于虛擬終端的字體嘁酿。

終端小史

所謂終端機(jī)娱仔,就是一種由鍵盤和顯示器以及必要的通信組件組成的古老設(shè)備牲迫,用于和計(jì)算機(jī)的主體連接盹憎,并于與其中的程序以文本形式進(jìn)行交流铐刘。后來隨著技術(shù)發(fā)展,這類設(shè)備逐漸被淘汰盼产。但是侨核,和計(jì)算機(jī)程序進(jìn)行文本交流的需求還是存在的,于是就有了軟件模擬的虛擬終端設(shè)備,稱為“虛擬終端”轴总。

這些虛擬終端程序本身就是圖形化界面的一個(gè)窗體怀樟,但是窗體內(nèi)部不顯示圖片和動(dòng)畫,僅僅有文本虑灰。和 Word 或者記事本這類文本編輯軟件的不同之處在于字旭,這個(gè)僅僅能顯示文本的窗口并不具有復(fù)雜的樣式和排版功能。所有字符都像大小固定的馬賽克瓷磚一樣整整齊齊地嵌入其中拆讯。這種功能退化一方面是為了準(zhǔn)確還原物理終端機(jī)的使用體驗(yàn)种呐,另一方面則是為了限制整個(gè)設(shè)備的復(fù)雜度——功能越受限堕油、設(shè)備就越簡單卜录、操作也越容易艰毒。如果上手寫過一些簡單的 demo 程序就會(huì)知道柑土,讓程序往虛擬終端輸出點(diǎn)信息可比繪制一個(gè)圖形化界面的窗體簡單多了稽屏。因?yàn)檫@里沒有復(fù)雜的坐標(biāo)获雕、花哨的動(dòng)畫和多變的事件響應(yīng)。

由于這些特性,虛擬終端一直是程序調(diào)試時(shí)的重要工具。所以程序員在編程時(shí),會(huì)非常頻繁地用到虛擬終端直奋。而終端字體弥搞,就是專門用于這些虛擬終端的字體顾腊。

終端字體的需求

用于終端的字體的需求其實(shí)有很多與代碼字體重合杂靶。因?yàn)榻K端輸出的內(nèi)容也是以 ASCII 可打印字符為主凹髓,其他非 ASCII 字符為輔,同時(shí)又要求字符等寬,盡量容易對齊。但終端和代碼編輯的需求有所不同——代碼編輯時(shí),不論是代碼文件還是文本數(shù)據(jù)文件痪署,大體來說都是人能寫,人能讀,同時(shí)大概率要交給程序處理的;但除了人以外,計(jì)算機(jī)程序也能向終端機(jī)輸出文本,而且這些呈現(xiàn)在終端上的文本主要是給人看摔桦,不一定需要交給程序處理兄世。簡單(且不嚴(yán)謹(jǐn)?shù)兀﹣碚f就是鸥拧,代碼是人寫給機(jī)器看的氛驮,為了保證機(jī)器能看懂唉铜,盡量不出現(xiàn)非 ASCII 字符幻枉;而終端是機(jī)器寫給人看的瞻颂,不會(huì)再經(jīng)由機(jī)器處理盖矫,更注重直觀和人方便理解,只要能正常輸出,具體使用了哪些字符關(guān)系不大担映。

因此,終端字體覆蓋非 ASCII 字符的需求其實(shí)要比一般的代碼字體強(qiáng)烈忿危。而且這些額外的字體還不僅僅包括各種自然語言文字,更多地是一些圖標(biāo)符號。因?yàn)橄啾扔谝蛔忠痪涞奈谋荆烁敢饪磮D使碾。

這里簡單解釋一下兄朋,為什么號稱處理純文本的終端機(jī)能夠顯示圖像障本。首先强霎,其實(shí)每一個(gè)文字的字形就是一幅圖,字體文件就是一個(gè)圖片集伐弹。和一般的圖集不同之處在于景馁,這個(gè)圖集中每張圖都有編號笨使,而且那個(gè)編號映射哪個(gè)字都是有專門規(guī)定的。如果你希望利用這套機(jī)制顯示某一個(gè)圖奕翔,那么只需要給這個(gè)圖分配一個(gè)合適的編號,然后把這個(gè)圖放進(jìn)字體文件里拳锚。(這些圖轉(zhuǎn)化成的字符一般不會(huì)在代碼中出現(xiàn),更少由人主動(dòng)鍵入举娩。)

其次,虛擬終端的界面是若干字符像馬賽克瓷磚一樣拼起來的平面區(qū)域滔韵。每一個(gè)字符相對于整個(gè)區(qū)域來說就類似一個(gè)像素點(diǎn)父丰。如果以字符為邊框紋理魏滚,按一定規(guī)則組合排列惠拭,那么整個(gè)區(qū)域就能拼湊出表格甚至圖形的效果。

這些虛擬終端支持的額外字符的寬度一般來說應(yīng)當(dāng)和等寬字體的半角字符一致扛禽。但是有的字體中將其實(shí)現(xiàn)為和全角字符一致锋边。后續(xù)會(huì)根據(jù)類別特殊說明。

表格邊框

描述和來源詳見: https://www.unicode.org/versions/Unicode15.0.0/ch22.pdf

虛擬終端中里雖然用字符當(dāng)馬賽克拼成網(wǎng)格狀编曼,但是卻不能直接把網(wǎng)格邊框顯示出來豆巨。因此要在虛擬終端中表現(xiàn)出表格的效果,就需要讓一些行列的字符顯示為橫線掐场、豎線或者轉(zhuǎn)角來湊成邊框往扔。在 ASCII 字符集中也能用 -|+ 之類的字符大概實(shí)現(xiàn)這個(gè)效果,但是總顯得不夠自然熊户。于是當(dāng)年一些終端機(jī)就增加了一些專用于繪制表格的邊框零件的字符萍膛。這些字符也被后來的 Unicode 的 Box Drawing 區(qū)域收錄(分布在 U+2500U+257F)。以下是一個(gè)用這些字符繪制表格邊框的例子(在文本編輯器中看時(shí)可能有一些空白間隔嚷堡,在終端中則會(huì)連在一起):

╒═════╕
│ Z Z │
╞═════╡
│ZhiZe│
╘═════╛

在終端中繪制表格確實(shí)能讓信息輸出更加條理蝗罗,甚至還能模擬 GUI 的窗口效果,因此不少終端程序都熱衷于使用這些字符蝌戒。

目前據(jù)我所知串塑,以下字體支持這一區(qū)域字符的覆蓋:

  • Unifont
  • Source Code Pro
  • Noto Sans Mono
  • Cascadia Code
  • Ubuntu Mono (Incomplete)
  • Fira Code
  • Iosevka
  • Source Han Sans HW SC VF (Full-width)
  • Sarasa Gothic
  • LXGW WenKai Mono

Incomplete 表示覆蓋不全面,缺失部分字符瓶颠。

Full-width 表示將這類字符實(shí)現(xiàn)為了和漢字等寬(而非和拉丁字符等寬)拟赊。

這些詞在后續(xù)小節(jié)的列表中出現(xiàn)時(shí)意義同此,不再重復(fù)粹淋。

紋理繪制

描述和來源詳見: https://www.unicode.org/versions/Unicode15.0.0/ch22.pdf

可能你在見過一些用文字拼湊出漫畫形象乃至照片效果的文本吸祟。這類作品有時(shí)會(huì)被稱作“ASCII Art”瑟慈。其基本原理就是把每一個(gè)字符當(dāng)作了像素點(diǎn)或者小的紋理塊,通過大面積的字符矩陣來拼湊出圖像的效果屋匕。這個(gè)技巧當(dāng)然用 ASCII 也能玩 葛碧,但是由于 ASCII 字形設(shè)計(jì)并不是絕對均勻的,所以色塊填充效果并不是很好过吻,要達(dá)到比較好的效果往往需要很大的字符矩陣进泼。

Unicode 中的 Block Elements 區(qū)域(從 U+2580U+259F)則是一組專門設(shè)計(jì)的均勻紋理塊和不同長寬的矩形。用它們做像素畫能彌補(bǔ) ASCII 字符集的表現(xiàn)力不足纤虽。此外乳绕,和虛擬終端的字符顏色控制搭配,這些字符還能做出類似 GUI 界面的陰影效果逼纸,乃至顯示一些簡單的彩圖洋措。

雖然理論上虛擬終端能顯示一些彩圖,但是由于字符顏色一般只有前景后景杰刽,而且字符數(shù)量往往很有限菠发,所以實(shí)際的顯示效果不可能做到非常好。這些紋理繪制字符存在的意義是給虛擬終端錦上添花贺嫂,而不是取代顯卡和像素顯示器滓鸠。

以下字體支持這一區(qū)域字符:

  • Unifont
  • Source Code Pro
  • Noto Sans Mono
  • Cascadia Code
  • Ubuntu Mono (Incomplete)
  • Fira Code
  • Iosevka
  • Source Han Sans HW SC VF (Full-width)
  • Sarasa Gothic
  • LXGW WenKai Mono (Incomplete)

Powerline Symbols

Powerline 是著名終端純文本編輯器 Vim 的一個(gè)插件,能在終端中提供看起來不那么死板的狀態(tài)欄和提示行第喳。為此它在 PUA 區(qū)域約定了幾個(gè)符號糜俗。這些符號有的是組成狀態(tài)欄的形狀和箭頭,有的則是表示代碼狀態(tài)的 logo墩弯。例如說這兩個(gè)字符 在一般字體中沒有字形吩跋,但是在支持虛擬終端符號的字形中顯示為一個(gè)三角和一個(gè)表示代碼分支的符號寞射。當(dāng)程序輸出這些字符時(shí)渔工,如果你的終端字體也支持這些字符,那么就能看到一個(gè)漂亮到不像終端提示行的終端提示行桥温。后來這些字符約定和相應(yīng)的字形火出了圈引矩,在 Vim 以外也開始使用這些字符和字形。

以下字體支持這一區(qū)域字符:

  • Cascadia Code
  • Fira Code (Incomplete)
  • Iosevka
  • Sarasa Gothic
  • LXGW WenKai Mono

Powerline Extra Symbols

Powerline Extra Symbols 算是一個(gè) Powerline 的拓展項(xiàng)目侵浸,在 Powerline 的基礎(chǔ)上約定了更多花哨的形狀和 logo旺韭。但是其普及程度不及 Powerline。內(nèi)嵌了 Powerline Symbols 支持的字體不一定支持 Powerline Extra Symbols 的拓展字符掏觉。

以下字體支持 Powerline Extra Symbols 額外拓展的字符:

  • Cascadia Code
  • Iosevka (Incomplete)
  • Sarasa Gothic (Incomplete)
  • LXGW WenKai Mono (Incomplete)

本文源碼采用 MIT 協(xié)議開放区端,托管于: https://github.com/ZhiZe-ZG/ZZToolLibrary

如果覺得本文內(nèi)容對您有用,希望您能在能力和意愿范圍內(nèi)給我一些資助澳腹。我不以此為生织盼,但我也是個(gè)普通人杨何。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市沥邻,隨后出現(xiàn)的幾起案子危虱,更是在濱河造成了極大的恐慌,老刑警劉巖唐全,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件埃跷,死亡現(xiàn)場離奇詭異,居然都是意外死亡邮利,警方通過查閱死者的電腦和手機(jī)弥雹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來延届,“玉大人缅糟,你說我怎么就攤上這事〉挥洌” “怎么了窗宦?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長二鳄。 經(jīng)常有香客問我赴涵,道長,這世上最難降的妖魔是什么订讼? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任髓窜,我火速辦了婚禮,結(jié)果婚禮上欺殿,老公的妹妹穿的比我還像新娘寄纵。我一直安慰自己,他們只是感情好脖苏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布程拭。 她就那樣靜靜地躺著,像睡著了一般棍潘。 火紅的嫁衣襯著肌膚如雪恃鞋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天亦歉,我揣著相機(jī)與錄音恤浪,去河邊找鬼。 笑死肴楷,一個(gè)胖子當(dāng)著我的面吹牛水由,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赛蔫,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼砂客,長吁一口氣:“原來是場噩夢啊……” “哼直秆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鞭盟,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤圾结,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后齿诉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筝野,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年粤剧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了歇竟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抵恋,死狀恐怖焕议,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情弧关,我是刑警寧澤盅安,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站世囊,受9級特大地震影響别瞭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜株憾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一蝙寨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嗤瞎,春花似錦墙歪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至弃秆,卻和暖如春届惋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背菠赚。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留郑藏,地道東北人衡查。 一個(gè)月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像必盖,于是被迫代替她去往敵國和親拌牲。 傳聞我的和親對象是個(gè)殘疾皇子俱饿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容