LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1061|回复: 6

请教,如何设置manpage使之显示彩色?

[复制链接]
发表于 2008-5-28 12:07:53 | 显示全部楼层 |阅读模式
我之前在Debian下直接在.bashrc后面添加

export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'

就可以正常显示,但昨天我etc-update后man就不能显示彩色

后来在网上看到most可以达到使man显示彩色,但是装完并设置
/etc/man.conf的PAGER=most和BROWSER=most后还是不行

不知道为什么?!还有,当我man ls的时候,查看当前进程表,
显示没有most,还是默认的less,这又是为什么,我已经设置most取代less

后来,用strace man ls看man ls过程中都哪些系统调用:

execve("/usr/bin/man", ["man", "ls"], [/* 44 vars */]) = 0
brk(0)                                  = 0x805b000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=34814, ...}) = 0
mmap2(NULL, 34814, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f0c000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@a\1\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1237276, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f0b000
mmap2(NULL, 1242576, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7ddb000
mmap2(0xb7f05000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x12a) = 0xb7f05000
mmap2(0xb7f08000, 9680, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7f08000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7dda000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7dda6c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0xb7f05000, 8192, PROT_READ)   = 0
mprotect(0x8052000, 4096, PROT_READ)    = 0
mprotect(0xb7f30000, 4096, PROT_READ)   = 0
munmap(0xb7f0c000, 34814)               = 0
brk(0)                                  = 0x805b000
brk(0x807c000)                          = 0x807c000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/locale.alias", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=2586, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f14000
read(3, "# Locale name alias data base.\n#"..., 4096) = 2586
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0xb7f14000, 4096)                = 0
open("/usr/lib/locale/zh_CN.UTF-8/LC_CTYPE", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/zh_CN.utf8/LC_CTYPE", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=254852, ...}) = 0
mmap2(NULL, 254852, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7d9b000
close(3)                                = 0
open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=25486, ...}) = 0
mmap2(NULL, 25486, PROT_READ, MAP_SHARED, 3, 0) = 0xb7f0e000
close(3)                                = 0
getuid32()                              = 0
geteuid32()                             = 0
getgid32()                              = 0
getegid32()                             = 0
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(0, TIOCGWINSZ, {ws_row=37, ws_col=126, ws_xpixel=0, ws_ypixel=0}) = 0
open("/etc/man.conf", O_RDONLY)         = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=4693, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f0d000
read(3, "#\n# Generated automatically from"..., 4096) = 4096
brk(0x809e000)                          = 0x809e000
read(3, " specified\n# and the MANSECT env"..., 4096) = 597
read(3, "", 4096)                       = 0
stat64("/usr/local/share/man", {st_mode=S_IFDIR|0755, st_size=72, ...}) = 0
stat64("/usr/share/man", {st_mode=S_IFDIR|0755, st_size=1256, ...}) = 0
stat64("/usr/share/binutils-data/i686-pc-linux-gnu/2.18/man", {st_mode=S_IFDIR|0755, st_size=72, ...}) = 0
stat64("/usr/share/gcc-data/i486-pc-linux-gnu/4.1.2/man", 0xbfa343d0) = -1 ENOENT (No such file or directory)
stat64("/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2/man", {st_mode=S_IFDIR|0755, st_size=96, ...}) = 0
stat64("/usr/local/share/man", {st_mode=S_IFDIR|0755, st_size=72, ...}) = 0
stat64("/usr/share/man", {st_mode=S_IFDIR|0755, st_size=1256, ...}) = 0
stat64("/usr/share/binutils-data/i686-pc-linux-gnu/2.18/man", {st_mode=S_IFDIR|0755, st_size=72, ...}) = 0
stat64("/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2/man", {st_mode=S_IFDIR|0755, st_size=96, ...}) = 0
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
open("/usr/local/share/man/html1/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = -1 ENOENT (No such file or directory)
open("/usr/local/share/man/man1/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = -1 ENOENT (No such file or directory)
open("/usr/local/share/man/cat1/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = -1 ENOENT (No such file or directory)
open("/usr/share/man/html1/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = -1 ENOENT (No such file or directory)
open("/usr/share/man/man1/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
fstat64(4, {st_mode=S_IFDIR|0755, st_size=44408, ...}) = 0
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
getdents(4, /* 147 entries */, 4096)    = 4096
getdents(4, /* 148 entries */, 4096)    = 4096
getdents(4, /* 146 entries */, 4096)    = 4076
getdents(4, /* 147 entries */, 4096)    = 4092
getdents(4, /* 147 entries */, 4096)    = 4076
getdents(4, /* 147 entries */, 4096)    = 4084
getdents(4, /* 147 entries */, 4096)    = 4076
getdents(4, /* 147 entries */, 4096)    = 4092
getdents(4, /* 147 entries */, 4096)    = 4040
getdents(4, /* 0 entries */, 4096)      = 0
close(4)                                = 0
open("/usr/share/man/man1/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
fstat64(4, {st_mode=S_IFDIR|0755, st_size=44408, ...}) = 0
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
getdents(4, /* 147 entries */, 4096)    = 4096
getdents(4, /* 148 entries */, 4096)    = 4096
getdents(4, /* 146 entries */, 4096)    = 4076
getdents(4, /* 147 entries */, 4096)    = 4092
getdents(4, /* 147 entries */, 4096)    = 4076
getdents(4, /* 147 entries */, 4096)    = 4084
getdents(4, /* 147 entries */, 4096)    = 4076
getdents(4, /* 147 entries */, 4096)    = 4092
getdents(4, /* 147 entries */, 4096)    = 4040
getdents(4, /* 0 entries */, 4096)      = 0
close(4)                                = 0
access("/usr/share/man/man1/ls.1.bz2", R_OK) = 0
open("/usr/share/binutils-data/i686-pc-linux-gnu/2.18/man/html1/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = -1 ENOENT (No such file or directory)
open("/usr/share/binutils-data/i686-pc-linux-gnu/2.18/man/man1/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
fstat64(4, {st_mode=S_IFDIR|0755, st_size=592, ...}) = 0
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
getdents(4, /* 20 entries */, 4096)     = 484
getdents(4, /* 0 entries */, 4096)      = 0
close(4)                                = 0
open("/usr/share/binutils-data/i686-pc-linux-gnu/2.18/man/man1/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
fstat64(4, {st_mode=S_IFDIR|0755, st_size=592, ...}) = 0
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
getdents(4, /* 20 entries */, 4096)     = 484
getdents(4, /* 0 entries */, 4096)      = 0
close(4)                                = 0
open("/usr/share/binutils-data/i686-pc-linux-gnu/2.18/man/cat1/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = -1 ENOENT (No such file or directory)
open("/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2/man/html1/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = -1 ENOENT (No such file or directory)
open("/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2/man/man1/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
fstat64(4, {st_mode=S_IFDIR|0755, st_size=208, ...}) = 0
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
getdents(4, /* 7 entries */, 4096)      = 156
getdents(4, /* 0 entries */, 4096)      = 0
close(4)                                = 0
open("/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2/man/man1/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
fstat64(4, {st_mode=S_IFDIR|0755, st_size=208, ...}) = 0
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
getdents(4, /* 7 entries */, 4096)      = 156
getdents(4, /* 0 entries */, 4096)      = 0
close(4)                                = 0
open("/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2/man/cat1/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = -1 ENOENT (No such file or directory)
access("/usr/share/man/man1/ls.1.bz2", R_OK) = 0
pipe([4, 5])                            = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7dda708) = 23771
--- SIGCHLD (Child exited) @ 0 (0) ---
close(5)                                = 0
fstat64(4, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f0c000
read(4, ".\\\" DO NOT MODIFY THIS FILE!  It"..., 1024) = 1024
close(4)                                = 0
waitpid(23771, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 23771
munmap(0xb7f0c000, 4096)                = 0
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
pipe([4, 5])                            = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7dda708) = 23772
--- SIGCHLD (Child exited) @ 0 (0) ---
close(5)                                = 0
fstat64(4, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f0c000
read(4, ".\\\" DO NOT MODIFY THIS FILE!  It"..., 1024) = 1024
close(4)                                = 0
waitpid(23772, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 23772
munmap(0xb7f0c000, 4096)                = 0
rt_sigaction(SIGINT, {0x804f4b0, [INT], SA_RESTART}, {SIG_DFL}, 8) = 0
rt_sigaction(SIGINT, {SIG_IGN}, {0x804f4b0, [INT], SA_RESTART}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_IGN}, {SIG_DFL}, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
clone(child_stack=0, flags=CLONE_PARENT_SETTID|SIGCHLD, parent_tidptr=0xbfa36464) = 23773
waitpid(23773, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 23773
rt_sigaction(SIGINT, {0x804f4b0, [INT], SA_RESTART}, NULL, 8) = 0
rt_sigaction(SIGQUIT, {SIG_DFL}, NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- SIGCHLD (Child exited) @ 0 (0) ---
rt_sigaction(SIGINT, {SIG_DFL}, {0x804f4b0, [INT], SA_RESTART}, 8) = 0
exit_group(0)                           = ?

从上面系统调用,可以看出man生成3个子进程,后来看pstree,应该是
man-sh-sh-less,也就是说最后一个子进程调用less,不过我不知道如何
看子进程的信息,我看了man strace可以使用-p pid查看子进程,但是还是
没效,不知道为什么?

我是Gentoo新手,刚用两天,感觉非常好,打算以后就扎堆到Gentoo了,希望
大家多多指点,谢谢!
发表于 2008-5-28 12:46:15 | 显示全部楼层
拭目以待
解决了我也受益
回复 支持 反对

使用道具 举报

发表于 2008-5-28 13:17:37 | 显示全部楼层
安装 most,然后将 PAGER 设置为 most。
回复 支持 反对

使用道具 举报

发表于 2008-5-29 11:34:32 | 显示全部楼层
Post by yhlfh;1855917
安装 most,然后将 PAGER 设置为 most。


cli没问题,但是X window就不是彩色了。图形界面不能吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-29 20:29:55 | 显示全部楼层
不好意思,我注销以后就好使了:)
下面是整个安装过程:

1.安装most, most和less类似,是一个文本查看工具,不过它支持彩色。
2.配置 most,修改颜色和按键,使之类似less
cat > ~/.mostrc
% Color settings

color normal lightgray black
color status yellow blue
color underline yellow black
color overstrike brightblue black

% less-like keybindings

unsetkey “^K”
unsetkey “g”
unsetkey “G”
unsetkey “:”

setkey next_file “:n”
setkey find_file “:e”
setkey next_file “:p”
setkey toggle_options “
setkey toggle_case “:c”
setkey delete_file “:d”
setkey exit “:q”

setkey bob “g”
setkey eob “G”
setkey down “e”
setkey down “E”
setkey down “j”
setkey down “^N”
setkey up “y”
setkey up “^Y”
setkey up “k”
setkey up “^P”
setkey up “^K”
setkey page_down “f”
setkey page_down “^F"
setkey page_up “b”
setkey page_up “^B”
setkey other_window “z”
setkey other_window “w”
setkey search_backward “?”
setkey bob “p”
setkey goto_mark “‘”
setkey find_file “E”
^D

在.bashrc中添加
export PAGER=’/usr/bin/most -s’
export BROWSER=’/usr/bin/most -s’

同时将/etc/man.conf中的PAGER改成most -s
BROWSER改成most -s

最后source ~/.bashrc,注销应该就可以看到彩色man了:)
回复 支持 反对

使用道具 举报

发表于 2008-5-29 22:46:47 | 显示全部楼层
Post by david19842003;1856560
不好意思,我注销以后就好使了:)
下面是整个安装过程:

1.安装most, most和less类似,是一个文本查看工具,不过它支持彩色。
2.配置 most,修改颜色和按键,使之类似less
cat > ~/.mostrc
% Color settings

color normal lightgray black
color status yellow blue
color underline yellow black
color overstrike brightblue black

% less-like keybindings

unsetkey “^K”
unsetkey “g”
unsetkey “G”
unsetkey “:”

setkey next_file “:n”
setkey find_file “:e”
setkey next_file “:p”
setkey toggle_options “
setkey toggle_case “:c”
setkey delete_file “:d”
setkey exit “:q”

setkey bob “g”
setkey eob “G”
setkey down “e”
setkey down “E”
setkey down “j”
setkey down “^N”
setkey up “y”
setkey up “^Y”
setkey up “k”
setkey up “^P”
setkey up “^K”
setkey page_down “f”
setkey page_down “^F"
setkey page_up “b”
setkey page_up “^B”
setkey other_window “z”
setkey other_window “w”
setkey search_backward “?”
setkey bob “p”
setkey goto_mark “‘”
setkey find_file “E”
^D

在.bashrc中添加
export PAGER=’/usr/bin/most -s’
export BROWSER=’/usr/bin/most -s’

同时将/etc/man.conf中的PAGER改成most -s
BROWSER改成most -s

最后source ~/.bashrc,注销应该就可以看到彩色man了:)



很好很强大
似乎不需要太多设置。
回复 支持 反对

使用道具 举报

发表于 2008-5-30 23:27:03 | 显示全部楼层
谢谢兄弟分享!
不过,好像使用 urxvt 终端时,man就自动是彩色显示了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表