Renkli Pacman Çıktıları (Türkçe)

From ArchWiki

Jump to: navigation, search


i18n
English
Español
简体中文
Türkçe
Русский

Contents

Pacman' in çıktılarını renklendirmek

Bildiğinizgibi makepkg' nin renkli çıktıları olduğuna göre neden pacman' in de olmasın? Gentoo'nun 'portage' adlı paket yöneticisi renkleri oldukça fazla oranda kullanıyor. Bu ekran görüntüsünde görüldüğü gibi okunabilirliği kolaylaştırıyor.

Betikler

citral rumuzlu kullanıcı aşağıdaki betiği .bashrc dosyasında kullanıyor:

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' )"
}

Bu en temiz çözüm. Yinede de bunu sistem genelinde yapmak isterseniz aynı şeyi yönetici hesabı ile yapmalısınız:

 touch /usr/bin/pacs && chmod 755 /usr/bin/pacs

Daha sonra aşağıdaki betiği kök kullanıcı olarak /usr/bin/pacs dosyasına yapıştırmalısınız:

 #!/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' )"

Bu satırlardaki "pacs" ibaresi yerine istediğinizi koyabilirsiniz. Ayrıca bunun yerine "pacs" yerine kullanılacak kelimeyi (alias) yukarıda yapıldığı gibi .bashrc dosyasına koyabilirsiniz.

Bu komutları kullanmak oldukça basit ve açıktır. Basitçe 'pacman' yerine yeni komutunuzu kullanabilirsiniz ve diğer her şey aynı şekilde işler.

Diğer Yöntemler

Diğer bir yöntem, aşağıdaki python betiğini kullanmaktır. Bu betik pacman -Ss (renkli olarak) komutunu taklit eder. Fakat ondan farklı olarak paket listelerini webden alır. Resmi depoları ve AUR' u (hem community -topluluk- hem de unsupported -desteklenmeyen- AUR sayfaları) sorgular.

#!/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' Kullanmak

Bir diğer ve daha fazla renk seçeneği sağlayabilecek yöntem de vardır. Küçük Ruby aracını acoc (ve gerekli olan diğer paketleri, term-ansicolor ve tpty. ) indirebilirsiniz.. tpty gerçekte gerekmemektedir; ancak "ls" gibi bazı uygulamalar acoc ile çalışmayacaklardır. (Terminal' den (veya bu durumda pseudo terminal) başlatılmaları gerekecektir, aksi takdirde bambaşka davranırlar.).

Kurulum göreceli olarak kolaydır. İşte bir kurulum rehberi:

$ 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

And now acoc itself:

$ tar xvzf acoc-0.7.1.tar.gz
$ cd acoc-0.7.1
# make install

Şimdi, acoc'un INSTALL adlı dosyasındaki "Advanced Installation" kısmını okuyun (ki ingilizcedir.), ve acoc'u istediğiniz gibi yapılandırın. 'pacman' için de bir bağlantı oluşturun; çünkü bu işlemleri onun için yapıyoruz. acoc çalışmaya başladığında, şu satırları acoc.conf dosyasına ekleyin:

[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

Mükemmel olmayabilir ama benim için çalıştı. Yukarıdaki satırlar sadece pacman' in tüm paket adlarını kalın göstermesini sağlar. Bu da özellikle, örneğin "pacman -Ss xfce" gibi işlemleri yaparken yararlı olur. Daha fazla renk isterseniz, bu satırları istediğiniz gibi düzenleyebilirsiniz. Daha fazla bilgi için acoc kaynak paketindeki belgeleri okuyun.

Bağlantılar

Forum konusu

Bir Başka Yöntem

AUR sayfalarında Vogo' nun yaptığı renk yamalı bir pacman PKGBUILD dosyası bulunmaktadır.

Ayrıca pacman' a daha fazla özellik katan ve aynı zamanda renkli çıktı da veren Yaourt yazılımını da denemek isteyebilirsiniz.

Personal tools