สีในหน้า Man


63

เมื่อฉันดูหน้าคนใน 'คอนโซล' ของฉัน (ไม่ใช่xterm) ฉันเห็นบางสี แต่ฉันไม่ได้รับสิ่งนี้ในxterm' ของฉัน(เช่นkonsole) มีวิธีใดที่ฉันสามารถเปิดใช้งานนี้ หวังว่าเป็นทางออกที่ค่อนข้างง่าย?

คำตอบ:


78

คุณต้องใช้termcap(5)คุณสมบัตินี้ หน้า man ของ Unices บางอันบอกว่าเครื่องมือนี้ล้าสมัยและใช้งานterminfoได้ แต่มันยังมีให้สำหรับคนอื่น ๆ (และterminfoมีความซับซ้อนมากกว่า)

ที่สำคัญกว่าใช้lesstermcap


การตั้งค่าสีสำหรับ less

ฉันทำต่อไปนี้เพื่อที่lessและman(ซึ่งใช้less) จะมีสี:

$ cat ~/.LESS_TERMCAP 
export LESS_TERMCAP_mb=$(tput bold; tput setaf 2) # green
export LESS_TERMCAP_md=$(tput bold; tput setaf 6) # cyan
export LESS_TERMCAP_me=$(tput sgr0)
export LESS_TERMCAP_so=$(tput bold; tput setaf 3; tput setab 4) # yellow on blue
export LESS_TERMCAP_se=$(tput rmso; tput sgr0)
export LESS_TERMCAP_us=$(tput smul; tput bold; tput setaf 7) # white
export LESS_TERMCAP_ue=$(tput rmul; tput sgr0)
export LESS_TERMCAP_mr=$(tput rev)
export LESS_TERMCAP_mh=$(tput dim)
export LESS_TERMCAP_ZN=$(tput ssubm)
export LESS_TERMCAP_ZV=$(tput rsubm)
export LESS_TERMCAP_ZO=$(tput ssupm)
export LESS_TERMCAP_ZW=$(tput rsupm)
export GROFF_NO_SGR=1         # For Konsole and Gnome-terminal

และในตัวของ~/.bashrcฉันฉันทำสิ่งนี้:

# Get color support for 'less'
export LESS="--RAW-CONTROL-CHARS"

# Use colors for less, man, etc.
[[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP

หมายเหตุ:ดูเอกสารเกี่ยวกับLESS_TERMCAP_*ตัวแปรหรือไม่ สำหรับวิธีการทำงาน

ผลสุดท้าย

    เอสเอสของหน้าคน


7
ฉันเชื่อว่าเหตุผลที่มันใช้งานได้ดีเพราะ 'คอนโซล' แปล 'ขีดเส้นใต้' เป็นสีโดยที่ X11 จะรองรับการขีดเส้นใต้ คุณสามารถทดสอบทฤษฎีนี้ได้โดยพิมพ์echo -e "\e[04mhello world\e[0m"ทั้งคอนโซลและเทอร์มินัล X11 ของคุณและเห็นความแตกต่าง ดังนั้นการแฮ็กข้างต้นนี้เป็นการละเมิดต่อ termcap ที่จะโกหกต่อ LESS เกี่ยวกับรหัสที่จำเป็นในการปล่อยสำหรับตัวหนา / ขีดเส้นใต้และบังคับให้มันสร้างรหัสหนีสีแทน
Kent Fredric

7
อันที่จริงการแปลขีดเส้นใต้เป็นสีน้ำเงินมีเหตุผลในอดีตย้อนกลับไปที่โหมดข้อความของอะแดปเตอร์กราฟิกพีซีดั้งเดิม MDA และ CGA (อันที่จริงโหมดข้อความ CGA ยังคงมีให้ใช้จนถึงปัจจุบัน) อะแดปเตอร์กราฟิกเหล่านั้นจัดเก็บสองไบต์ต่อตัวอักษร: หนึ่งตัวถือรหัส ASCII หนึ่งตัวถือคุณสมบัติ MDA ตีความคุณลักษณะไบต์เป็นชุดของขีดเส้นใต้, สว่าง, กระพริบและผกผันในขณะที่ CGA ตีความไบต์นั้นเป็นสีพื้นหน้าและพื้นหลัง และเกิดขึ้นว่าแอตทริบิวต์ MDA สำหรับขีดเส้นใต้เท่ากับคุณลักษณะ CGA สำหรับสีน้ำเงินเป็นสีดำ
celtschk

3
สิ่งนี้ไม่ทำงานใน Konsole หรือ Gnome-terminal ฉันตั้งค่าพวกเขาและการเปลี่ยนสีเพียงอย่างเดียวสำหรับเคอร์เซอร์และหน้าสถานะ export GROFF_NO_SGR=1ฉันจะเปิดออกฉันต้องการ:
CMCDragonkai

2
นั่นเป็นจำนวนมากที่สร้างเชลล์ย่อย อะไรคือข้อดีของวิธีที่ง่ายกว่านี้?
Tom Hale

1
@ Tomomale ส่วนใหญ่เข้ากันได้ข้ามระบบ / เทอร์มินัล (และความสามารถในการแบ่งปันสคริปต์กับผู้อื่นในลักษณะที่ไม่คลุมเครือ) หากคุณพบว่าตัวเองกำลังทำงานอยู่ในกล่องที่ใช้รหัสควบคุมที่แตกต่างกันและคุณ scp / rsync โปรไฟล์เชลล์ของคุณไปที่มันเมื่อรหัสควบคุมทั้งหมดเป็นรหัสตายตัวเหมือนในตัวอย่างนั้นพวกเขาอาจไม่ทำงานตามที่คาดไว้ในปลายทาง เครื่องและคุณสามารถจบลงด้วยการส่งออกที่อ่านไม่ออก แน่นอนถ้าสคริปต์จะทำงานบนเครื่องที่รู้จักหนึ่งหรือสองเครื่อง / เทอร์มินัล - อีมัสเท่านั้นวิธีการฮาร์ดโค้ดก็ใช้ได้
Mark G.

15

mostคุณสามารถแก้ปัญหานี้โดยใช้เพจเจอร์ที่แตกต่างกันเช่น manจะใช้โปรแกรมที่ระบุในPAGERตัวแปรสภาพแวดล้อม จากหน้าman (1) man:

MANPAGER, PAGER

หากมีการตั้งค่า $ MANPAGER หรือ $ PAGER ($ MANPAGER ถูกใช้ในการตั้งค่า) ค่าของมันจะถูกใช้เป็นชื่อของโปรแกรมที่ใช้ในการแสดงหน้าคู่มือ โดยค่าเริ่มต้นเพจเจอร์ -s ถูกใช้

ค่าอาจเป็นชื่อคำสั่งแบบง่ายหรือคำสั่งที่มีอาร์กิวเมนต์และอาจใช้การอ้างถึงเชลล์ (แบ็กสแลชเครื่องหมายคำพูดเดี่ยวหรือเครื่องหมายคำพูดคู่)

มันอาจไม่ใช้ไพพ์เพื่อเชื่อมต่อหลายคำสั่ง หากคุณต้องการให้ใช้สคริปต์ตัวตัดคำซึ่งอาจใช้ไฟล์เพื่อแสดงว่าเป็นอาร์กิวเมนต์หรือในอินพุตมาตรฐาน

หากmostติดตั้งบนระบบของคุณให้ลองสิ่งนี้ก่อนที่จะเปิดตัวman:

export PAGER=most

2
mostควรได้รับการติดตั้งเพื่อให้ใช้งานได้
enzotib

3
mostมีการโยงคีย์แปลก ๆ ... ซึ่งไม่สามารถกำหนดค่าได้
Mateen Ulhaq

10

ขีดเส้นใต้เริ่มต้นทำร้ายดวงตาของฉัน การตั้งค่านี้ช่วยปรับปรุงmanการอ่านหน้าของฉัน:

ตัวอย่างหน้าคนที่มีสี

เพิ่มสิ่งต่อไปนี้ใน `~ .bashrc 'ของคุณ:

# Have less display colours
# from: https://wiki.archlinux.org/index.php/Color_output_in_console#man
export LESS_TERMCAP_mb=$'\e[1;31m'     # begin bold
export LESS_TERMCAP_md=$'\e[1;33m'     # begin blink
export LESS_TERMCAP_so=$'\e[01;44;37m' # begin reverse video
export LESS_TERMCAP_us=$'\e[01;37m'    # begin underline
export LESS_TERMCAP_me=$'\e[0m'        # reset bold/blink
export LESS_TERMCAP_se=$'\e[0m'        # reset reverse video
export LESS_TERMCAP_ue=$'\e[0m'        # reset underline
export GROFF_NO_SGR=1                  # for konsole and gnome-terminal

สำหรับการชนะให้รวมกับexport MANPAGER='less -s -M +Gg' (แหล่งที่มา)เพื่อแสดงเปอร์เซ็นต์ของคุณลงในเอกสาร


3
ตามที่ @CMCDragonkai พูดถึงในความคิดเห็นเกี่ยวกับคำตอบอื่น ๆ สิ่งนี้ต้องexport GROFF_NO_SGR=1ทำงานกับตัวจำลองเทอร์มินัลบางตัว
Ben

1
สำหรับผู้ชนะ!! ฉันชอบที่% display export MANPAGER='less -s -M +Gg'เพิ่มขึ้น
MikeyE


3

บันทึก 'มากที่สุด' อย่างต่อเนื่อง

เปิดเทอร์มินัล ( Ctrl+ Alt+ T)

  1. ติดตั้ง 'มากที่สุด'

    sudo apt-get install most
    
  2. แก้ไข. bashrc พิมพ์:

    nano ~/.bashrc
    
  3. เพิ่มบรรทัดเหล่านี้:

    # color man-pages persistently
    export PAGER='most'
    
  4. บันทึก

    ( Ctrl+ O) -> Enter-> ( Ctrl+ X)

  5. รีเฟรช

    source ~/.bashrc
    
  6. ทดสอบ

    man ln
    

สิ่งนี้ยังทำงานใน xterm


เพื่อหลีกเลี่ยงการเปิด nano คุณสามารถผนวก bashrc จากเทอร์มินัล: sudo apt ติดตั้งส่วนใหญ่; echo "export PAGER = 'Most'" >> ~ / .bashrc; source ~ / .bashrc
จะ

1

นำมาจากhttp://nion.modprobe.de/blog/archives/569-colored-manpages.html

ข้อความที่ตัดตอนมา:

$ mkdir ~/.terminfo/ && cd ~/.terminfo

ตอนนี้รับterminfoรายละเอียด (บันทึกสิ่งต่อไปนี้เป็น Mostlike.txt):

# Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm-pcolor
mostlike|manpages with color looking like most, 
    am, hs, km, mir, msgr, xenl, 
    cols#80, it#8, lines#24, wsl#40, 
    acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, 
    bel=^G, bold=\E[1m\E[31m, clear=\E[H\E[2J, cr=^M, 
    csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, 
    cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, 
    cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, 
    dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, 
    dsl=\E]0;\007, ed=\E[J, el=\E[K, enacs=\E)0, fsl=^G, 
    home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, 
    is2=\E7\E[r\E[m\E[?7h\E[?1;3;4;6l\E[4l\E8\E>, kbs=^H, 
    kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, 
    kdch1=\E[3~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, 
    kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, 
    kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, 
    kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~, 
    kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, 
    kfnd=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, 
    kslt=\E[4~, rc=\E8, rev=\E[7m\E[34m, ri=\EM, rmacs=^O, 
    rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E[?1l\E>, 
    rmso=\E[m, rmul=\E[m, 
    rs2=\E7\E[r\E8\E[m\E[?7h\E[?1;3;4;6l\E[4l\E>, sc=\E7, 
    sgr0=\E[m, smacs=^N, smcup=\E7\E[?47h, smir=\E[4h, 
    smkx=\E[?1h\E=, smso=\E[1;30m\E[47m, smul=\E[32m, 
    tbc=\E[3g, tsl=\E]0;, u6=\E[%i%d;%dR, u7=\E[6n, 
    u8=\E[?1;2c, u9=\E[c, 

ตอนนี้รวบรวมโดยใช้tic(คอมไพเลอร์ terminfo entry-description):

$ tic mostlike.txt

(คุณอาจต้องการลบmostlike.txtไฟล์หลังจากรวบรวม)

จากนั้นเพียงกำหนดนามแฝงใน*rcไฟล์เชลล์ที่คุณชื่นชอบ

$ alias man="TERMINFO=~/.terminfo/ LESS=C TERM=mostlike PAGER=less man"

หากคุณต้องการแก้ไขไฟล์ terminfo ให้ใช้infocmp mostlikeเพื่อรับเนื้อหาในภายหลัง


11
ช่วยถ้าคุณสรุปแหล่งที่มาที่นี่เพื่อให้ผู้คนสามารถเห็นสิ่งที่มันพูดโดยไม่ต้องคลิกผ่าน (และในกรณีที่ไซต์เคยลงไป)
Michael Mrozek

3
โปรดระบุคำตอบไม่ใช่เพียงลิงก์ไปยังคำตอบ เป็นเรื่องดีมากที่จะให้ลิงก์ที่สนับสนุนคำตอบของคุณ ลองนึกภาพฉันเป็น Googling สำหรับคำถามนี้ --- คำตอบที่ดีที่ StackExchange จะพบได้อย่างรวดเร็วว่าเป็นหน้าแรกของผลการค้นหา
Stefan Lasiewski

ลิงก์ตาย
Farzan

พบmostlike.txtออนไลน์นี้
Kaushal Modi

ผลลัพธ์มีลักษณะอย่างไร
Tom Hale

1

การตอบ dirtybit ของผมอยากจะเปลี่ยนสีของผลการค้นหาที่ไฮไลต์ สิ่งนี้เรียกว่า "โหมด standout" นี่คือตัวอย่างไฟล์ "xterm-yellow.ti":

xterm-yellow|yellow standout mode,
# exit standout mode
  rmso=\e[m,
# begin standout mode
  smso=\e[5;30;43m,
# similar terminal
  use=xterm,

รวบรวมและติดตั้งไฟล์:

tic xterm-yellow.ti

เพิ่มบรรทัดไปที่ "~ / .profile" หรือที่คล้ายกัน:

TERM=xterm-yellow
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.