Pacman 彩色输出 (简体中文)
From ArchWiki
i18n |
---|
English |
Español |
简体中文 |
Türkçe |
Русский |
Contents |
让pacman的输出字符带有色彩
现在makepkg的输出已是彩色的了,pacman为什么就不能多彩多姿呢? Gentoo的包管理程序“portage”有一个色彩扩展,您可以参阅此屏幕快照,了解它所增强的可读性。
脚本
用户citral在他的.bashrc里使用以下的脚本:
alias pacs="pacsearch" pacsearch () { echo -e "$(pacman -Ss $@ | sed \ -e 's#core/.*#\\033[1;31m&\\033[0;37m#g' \ -e 's#extra/.*#\\033[0;32m&\\033[0;37m#g' \ -e 's#community/.*#\\033[1;35m&\\033[0;37m#g' \ -e 's#^.*/.* [0-9].*#\\033[0;36m&\\033[0;37m#g' )" }
上面是最干净的方法。如果你想要作用于整个系统的脚本,用root权限执行:
touch /usr/bin/pacs && chmod 755 /usr/bin/pacs
然后用root权限把下面的内容粘贴到:/usr/bin/pacs
#!/bin/bash echo -e "$(pacman -Ss $@ | sed \ -e 's#core/.*#\\033[1;31m&\\033[0;37m#g' \ -e 's#extra/.*#\\033[0;32m&\\033[0;37m#g' \ -e 's#community/.*#\\033[1;35m&\\033[0;37m#g' \ -e 's#^.*/.* [0-9].*#\\033[0;36m&\\033[0;37m#g' )"
上述脚本中的命令名"pacs"可以随意设定,你也可以在.bashrc中alias它。完成后,只需用新命令代替'pacman',其余不变!
另一种选择
另一种选择是使用下面的python脚本,它是先从网上抓取包列表,然后模拟pacman -Ss的形式输出,(加上颜色!)。它能搜索官方包存档以及AUR(包括community和unsupported)。
#!/usr/bin/python import os import re import sys import urllib2 OFFICIAL_QUERY = "http://archlinux.org/packages/search/\?q=" AUR_QUERY = "http://aur.archlinux.org/packages.php?K=" # Repos and colors repos = {"Core":'32',"Extra":'36',"Testing":'31',"community":'33',"unsupported":'35'} def strip_html(buffer): buffer = re.sub('<[^>]*>','',buffer) buffer = re.sub('(?m)^[ \t]*','',buffer) return buffer def cut_html(beg,end,buffer): buffer = re.sub('(?s).*' + beg,'',buffer) buffer = re.sub('(?s)' + end + '.*','',buffer) return buffer class RepoSearch: def __init__(self,keyword): self.keyword = keyword self.results = '' for name in ['official','aur']: self.get_search_results(name) self.parse_results(name) self.colorize() def get_search_results(self,name): if name == "official": query = OFFICIAL_QUERY elif name == "aur": query = AUR_QUERY f = urllib2.urlopen( query + self.keyword ) self.search_results = f.read() f.close() def preformat(self,header,a,b): self.buffer = cut_html('<table class=\"' + header + '\"[^>]*>','</table',self.search_results) self.buffer = strip_html(self.buffer) self.buffer = self.buffer.split('\n') self.buffer = [line for line in self.buffer if line] del self.buffer[a:b] def parse_results(self,name): self.buffer = '' if name == 'official': if re.search('<table class=\"results\"',self.search_results): self.preformat('results',0,6) elif re.search('<div class=\"box\">',self.search_results): temp = re.search('<h2 class=\"title\">([^<]*)</h2>',self.search_results) temp = temp.group(1) temp = temp.split() self.preformat('listing',7,-1) for i in range(0,3): del self.buffer[i] for i in temp: self.buffer.insert(temp.index(i) + 2,i) elif name == 'aur': p = re.compile('<td class=.data[^>]*>') self.buffer = self.search_results.split('\n') self.buffer = [strip_html(line) for line in self.buffer if p.search(line)] l = len(self.buffer)/6 parsed_buf = '' for i in range(l): parsed_buf += self.buffer[i*6] + '/' parsed_buf += self.buffer[i*6+1] + ' '*(24-len(self.buffer[i*6] + self.buffer[i*6+1])) parsed_buf += self.buffer[i*6+2] if name == "official": parsed_buf += ' ' + self.buffer[i*6+3] parsed_buf += '\n' + self.buffer[i*6+4] + '\n' self.results += parsed_buf def colorize(self): for repo,repo_color in repos.iteritems(): self.results = re.sub(repo + '/.*','\\033[1;' + repo_color + 'm' + '\g<0>' + '\\033[0;0m',self.results) if __name__ == "__main__": if len(sys.argv) < 2: print "Usage: " + sys.argv[0] + " <keyword>" sys.exit(2) reposearch = RepoSearch(sys.argv[1]) sys.stdout.write(reposearch.results)
使用 'acoc'
还有一种可使任意命令能彩色输出的通用方法。 下载 Ruby 小工具 acoc (它需要 term-ansicolor 和 tpty。 )。 tpty并不是必需的,但如果没有它,有些程序如“ls”不能在acoc下使用(它们需要从终端开始运行,(这里假终端也可),否则它们会运行异常)
安装相对简单,如下:
$ tar xvzf tpty-0.0.1.tar.gz $ cd tpty-0.0.1 $ ruby extconf.rb $ make $ ruby ./test.rb # make install
$ tar xvzf term-ansicolor-1.0.1.tar.gz $ cd term-ansicolor-1.0.1 # ruby install.rb
安装acoc:
$ tar xvzf acoc-0.7.1.tar.gz $ cd acoc-0.7.1 # make install
然后,阅读acoc的INSTALL文件中“Advanced Installation”一节,根据你的喜好配置acoc。 给‘pacman’创建一个链接,因为这是我们之前要做这些的目的。 当acoc能运行时,将下面的内容加到你的acoc.conf:
[pacman -Si] /^Name\s+:\s([\w.-]+)/ bold [pacman -Qi] /^Name\s+:\s([\w.-]+)/ bold [pacman -Qi$] /^([\w.-]+)\s([\w.-]+)/ bold,clear [pacman -Ss] /^([\w.-]+)\/([\w.-]+)\s+([\w.-]+)/ clear,bold,clear [pacman -Qs] /^([\w.-]+)\/([\w.-]+)\s+([\w.-]+)/ clear,bold,clear [pacman -Sl] /^([\w.-]+)\s([\w.-]+)\s([\w.-]+)/ clear,bold,clear [pacman -Qo] /^([\w.-\/]+)\sis\sowned\sby\s([\w.-]+)\s([\w.-]+)/ clear,bold,clear [pacman -Qe$] /^([\w.-]+)\s([\w.-]+)/ bold,clear [pacman -Qg$] /^([\w.-]+)\s([\w.-]+)/ clear,bold
可能并不完美或特别好,但到目前为止在我这工作得很好。 上面的内容只是让pacman把所有的包名用粗体输出,这样会特别方便。如果你需要更多色彩,可自己修改上述内容。 更多信息请阅读acoc源码中的文档。
链接
其它选择
在AUR中,Vogo提供的pacman彩色补丁: PKGBUILD 。