Terminal

如何在終端中畫一條實線?

  • January 1, 2020

我一直在尋找這個,但沒有得到滿意的答案。

我從 Gnu/Linuxtree命令的輸出中截取了這張截圖。

在此處輸入圖像描述

我想知道如何繪製或列印這樣的線條,我嘗試閱讀樹程序的原始碼,但什麼都不懂。

正如另一位使用者所評論的那樣,它需要特殊的繪圖字元。在終端中,可以通過printf命令呼叫它們。例如,要重新創建tree問題中範例的前兩行,它看起來像:

printf "\x1b(0\x74\x1b(B\x1b(0\x71\x1b(B\x1b(0\x71\x1b(B info\n"
printf "\x1b(0\x78\x1b(B   \x1b(0\x6d\x1b(B\x1b(0\x71\x1b(B\x1b(0\x71\x1b(B exclude\n"

有關畫框字元的列表,請參閱維基百科頁面

您可以使用 terminfo(5) ( man 5 terminfo) 中以“Line Graphics”開頭的字元表來執行此操作

    Glyph                       ACS            Ascii     acsc     acsc
    Name                        Name           Default   Char     Value
    ────────────────────────────────────────────────────────────────────
    arrow pointing right        ACS_RARROW     >         +        0x2b
    arrow pointing left         ACS_LARROW     <         ,        0x2c
    arrow pointing up           ACS_UARROW     ^         -        0x2d
    arrow pointing down         ACS_DARROW     v         .        0x2e
    solid square block          ACS_BLOCK      #         0        0x30
    diamond                     ACS_DIAMOND    +         `        0x60
    checker board (stipple)     ACS_CKBOARD    :         a        0x61
    degree symbol               ACS_DEGREE     \         f        0x66
    plus/minus                  ACS_PLMINUS    #         g        0x67
    board of squares            ACS_BOARD      #         h        0x68
    lantern symbol              ACS_LANTERN    #         i        0x69
    lower right corner          ACS_LRCORNER   +         j        0x6a
    upper right corner          ACS_URCORNER   +         k        0x6b
    upper left corner           ACS_ULCORNER   +         l        0x6c
    lower left corner           ACS_LLCORNER   +         m        0x6d
    large plus or crossover     ACS_PLUS       +         n        0x6e
    scan line 1                 ACS_S1         ~         o        0x6f
    scan line 3                 ACS_S3         -         p        0x70
    horizontal line             ACS_HLINE      -         q        0x71
    scan line 7                 ACS_S7         -         r        0x72
    scan line 9                 ACS_S9         _         s        0x73
    tee pointing right          ACS_LTEE       +         t        0x74
    tee pointing left           ACS_RTEE       +         u        0x75
    tee pointing up             ACS_BTEE       +         v        0x76
    tee pointing down           ACS_TTEE       +         w        0x77
    vertical line               ACS_VLINE      |         x        0x78
    less-than-or-equal-to       ACS_LEQUAL     <         y        0x79
    greater-than-or-equal-to    ACS_GEQUAL     >         z        0x7a
    greek pi                    ACS_PI         *         {        0x7b
    not-equal                   ACS_NEQUAL     !         |        0x7c
    UK pound sign               ACS_STERLING   f         }        0x7d
    bullet                      ACS_BULLET     o         ~        0x7e

舉個例子

tput smacs
printf "%s\n%s\n" 'lqqqqqk' 'mqqqqqj'
tput rmacs

輸出

┌────┐
└────┘

觀察

我注意到在我的系統上,並非所有列出的字元實際上都像描述的那樣映射。例如

echo '+ , - . 0 ` a f g h i j k l m n o p q r s t u v w y x z { | } ~'
tput smacs
echo '+ , - . 0 ` a f g h i j k l m n o p q r s t u v w y x z { | } ~'
tput rmacs

+ , - . 0 ` a f g h i j k l m n o p q r s t u v w y x z { | } ~
+ , - . 0 ♦ # ° ± n ↓ ┘ ┐ ┌ └ ┼ ⎺ ⎻ ─ ⎼ ⎽ ├ ┤ ┴ ┬ ≤ │ ≥ # ≠ £ ·

引用自:https://unix.stackexchange.com/questions/559708