Видео смотреть бесплатно

Смотреть зрелые видео

Официальный сайт jhealth 24/7/365

Смотреть видео бесплатно

09.06.10 01:02 Aesdana

How-to`sLittle tricks with conky.

Грозилась написать пост в рамках тематической недели, но к сожалению заработалась и всё никак не находила времени. Как говорится "лучше поздно, чем никогда" ;)

Хочу рассказать про маленькие хитрости, которые я использую в своих конфигах conky. Поскольку на моём рабочем столе царит разумный минимализм, а виджеты со всякими уведомлениями и системной информацией слишком прожорливы, для всего этого я использую conky.



Небольшое отступление:
Все конфиги у меня лежат в ~/.conky, скрипты и сами конфиги стараюсь называть так, чтобы было понятно их назначение — в будущем намного удобнее ориентироваться. Самые удачные конфиги со всеми скриптами и картинками кладу в отдельные папки и как-нибудь обзываю, обычно в честь созданныхо гтк/пек тем.

Рецепт первый. А-ля covergloobus.

Тут вариантов несколько. Все основаны на небольшом скрипте, который отображает текущую обложку (возможно где-то есть лучше и проще, я буду рассказывать только о тех, что есть у меня — поэтому не стесняйтесь, дополняйте) и собственно вставке картинки фона, плюс дополнительные бары и информация.

Скрин №1
h_1274899916_a599b7a160.png

Что желательно указать в конфиге:
1
2
3
4
5
6
7
8
9
10
update_interval 1               # интервал обновления информации, в данном случае 1 секунда.

alignment tr                    # выравнивание окна conky по краям экрана. tr — по павому краю, tl — по левому.
                                # исползую, чтобы при отступе (gap_x/y) не задавать цифры, вроде 1280, или 946

gap_x 0                         # отступы по осям x и y. x — по горизонтали, y — по вертикали
gap_y 50                        #

mpd_host phoenix                # хост и порт для mpd.
mpd_port 6600                   #

Всё, что после TEXT:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
${image ~/.conky/c.png}
# изображение для фона, кокретно это рисовалось в Гимпе по мотивам темы playbill.
# убедитесь, что в указанный минимальных размер окна conky картинка влезает полностью ;)
# > minimum_size 360 120

${alignr 20}${font droid sans:size=9}${color 9c9c9c}${if_mpd_playing}${mpd_artist}
# выравнивание текста по правому краю с отступов в 20 пикселей, указание используемого шрифта и его размера, цвет текста.
# далее — условие. если мпд запущен, то показывать исполнителя.

${alignr 20}${mpd_title}
# следующая строка, опять выравнивание, вывод названия композиции.

${voffset 20}${alignr 20}${mpd_elapsed}
# voffset — вертикальный отступ. при положительном значении сдвигает объект вниз на заданное кол-во пикселей,
# при отрицательном — вверх.

${voffset 16}${alignr 20}${color 5B8AA4}${mpd_bar 4,200}${endif}
# ещё один вертикальный отступ, выравнивание, указание другого цвета для прогрессбара и сам бар.
# в данном случае 4 — высота, 200 — длинна.
# и не забывайте ${endif}, условия должны когда-то заканчиваться, иначе conky будет ругаться.

${if_match "$mpd_status" == "Playing"}${execi 1 ~/.conky/sonata}${image ~/.conky/currentcover.jpg -p 10,10 -s 100x100}$else${if_match "$mpd_status" == "Paused"}${image ~/.conky/currentcover.jpg -p 10,10 -s 100x100}$endif$endif
# ещё одно услвие, уже для отображения обложки. для всех, кто в танке переведу полностью строку
# если мпд играет, исполняем каждую секунду скрипт ~/.conky/sonata, отображаем картинку ~/.conky/currentcover.jpg
# с отступом 10,10 и размером 100x100, если мпд на паузе, то отобразить картинку ~/.conky/currentcover.jpg с такими же
# параметрами.
# параметры изображений:
# -p x,y — отступы от левого верхнего угла окна conky
# -s XxY — размер. фоновые картинки стараюсь вставлять один к одному, чтобы не попортились сжатием.

Теперь о скрипте.
Он берёт информацию о треке из файла, который создаёт sonata, именно ей я рулю mpd. Для mpc и прочего думаю можно запросто нагуглить, либо написать :)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
sonata info > ~/.conky/sonata_info
if [ -f ~/sonata ]; then
        ARTIST=$(cat ~/.conky/sonata_info | grep Artist | cut -c 9-)
        ALBUM=$(cat ~/.conky/sonata_info | grep Album | cut -c 8-)
        echo "$ARTIST-$ALBUM.jpg" > ~/.conky/image
        IMAGE=$(cat ~/.conky/image)
        if [ -f "~/.covers/$IMAGE" ]; then
                cp "~/.covers/$IMAGE" "~/.conky/currentcover.jpg"
        else
                        cp "~/.conky/nocover.jpg" "~/.conky/currentcover.jpg"
        fi
else
        exit 1
fi

Тонкости баша расписывать не буду, не о том тема, да и думаю всем более-менее понятно о чём тут. Поясню только 1 момент.
Если в папке с обложками нужной картинки нет, то в currentcover уходит заранее подготовленный nocover, тобишь та картинка, которую показыть, если обложки нету.
Рисуете на свой вкус, хоть надпись NO COVER, хоть FFFUUUUU

Скрин №2
h_1274899784_d9bf755fee.png

Тут всё абсолютно то же самое, за исключением пары моментов.
Во-первых, использыется три картинки, вместо двух (фон, обложка, плей/паузы)

1
2
3
4
5
6
7
8
9
10
11
12
${if_match "$mpd_status" == "Playing"}${execi 1 ~/.conky/sonata}${image ~/.conky/currentcover.jpg -p 20,22 -s 129x129}${image ~/.conky/aart.png}${image ~/.conky/play.png -p 75,170 -s 30x30}$else${if_match "$mpd_status" == "Paused"}${image ~/.conky/currentcover.jpg -p 20,22 -s 129x129}${image ~/.conky/aart.png}${image ~/.conky/pause.png -p 75,170 -s 30x30}$endif$endif
# на самом деле эта строка не такая непонятная, как кажется. перевожу:
# условие, исполнение скрипта раз в секунду, перечисление картинок, с установленными размерами и положениями.
# порядок картинок такой: обложка, самый нижний слой. затем фон (потому что в его центре затемнённое прозрачное
# отверстие под размер обложки), затем картинка для статуса (плей/пауза), которая просто показывает, в каком состоянии
# находится мпд.
# Можно так не изгаляться, ${mpd_status} для простого текстового статуса.

${voffset 200}${alignc 0}${if_mpd_playing}${font droid sans:size=9.5}${mpd_artist}${font}
${voffset 5}${alignc 0}${mpd_title}
${voffset 5}${alignc 0}${mpd_elapsed}
${voffset 5}${alignc 0}${color 555C37}${mpd_bar 4,140}${endif}


Рецепт второй. Моднявые шрифты.

Скриншот:
s_1274918110_747fa43e99.png

Для отображения этих мордашек я использовала шрифт dist yolks emoticons, который взяла на dafont.com в разделе Dingbats.

1
2
3
${voffset 80}${color F55730}${font dist yolks emoticons:size=40}9${font}
# каждой букве соответствует определённый символ, в данном случае цифра 9. Соответствия можно узнать в любой программе для
# просмотра шрифтов (fontmatrix, fontmanager, gtk2fontsel).


В принципе можно вставить любое безумие, которое найдёте. Есть там и ноты, и инопланетяне, и персонажи сказок, комиксов, мультов и фильмов. Цвет, размер — всё задаётся как для обычного шрифта, потому что это он и есть ☺

Рецепт третий. Кармафилия.

По мотивам поста про расширение для хрома написала себе скриптик.
Скажу сразу честно. Он ужасен. Начиная от идеи, и заканчивая готовым результатом. на момент написания стояла задача разобраться что такое sed и с чем его употребляют.

Итак, скрипт для отображения текущего рейтинга на вилинуксе:

h_1274919784_944dc99b85.png

Код для conky:
${execi 300 ~/.conky/werate}

Сам скрипт:

1
2
3
#!/bin/bash
wget -q -O ~/.conky/rate http://welinux.ru/user/Aesdana && echo | sed -n '53p' ~/.conky/rate | grep ruAesdana | sed 's/[ ].*rp..//' | sed 's/[</a-z>]//g'
 


Подозреваю, что можно смело отправлять на говнокод ☺
Товарищи знатоки, поможете довести до ума, а? )

А делает он вот что: загружает в rate страницу юзера, выводится 53-я строка, из которой sed'ом режутся цифры рейтинга.
Стыдно и страшно, однако, оно работает :)

UPD 1: Спасибо xT за помощь со скриптом.
Смотрите комментарий.


UPD 2: Рецепт от nvbn:
1
2
3
curl -silent 'http://welinux.ru/ajax/r_get?user=Aesdana'  |\
sed -e 's/[{}]/''/g' |\
awk -v RS=',"' -F: '/^rate/ {print $2}'


Рецепт четвёртый. В курсе событий.

Далее. Об уведомлялках для gmail и новых пакетах. Про первое есть уже пост. В комментариях имеется альтернатива на баше, сама же я использую скрипт на перле, длинный и непонятный.
Все три помещаю в спойлер.
Баш:
1
2
3
4
5
6
7
#!/bin/bash

login="login"
psswd="pass"

new=`curl -u ${login}:${psswd} -s "https://mail.google.com/mail/feed/atom" | grep -c "<entry>"`
echo $new

Перл:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
#!/usr/bin/perl

use Switch;
use Text::Wrap;

my $what=$ARGV[0];

$user="логин"; #username for gmail account
$pass="пасс"; #password for gmail account
$file="/tmp/gmail.html"; #temporary file to store gmail

#wrap format for subject
$Text::Wrap::columns=65; #Number of columns to wrap subject at
$initial_tab=""; #Tab for first line of subject
$subsequent_tab="\t"; #tab for wrapped lines
$quote="\""; #put quotes around subject

#limit the number of emails to be displayed
$emails=4; #if -1 display all emails

&passwd; #give password the proper url character encoding

switch($what){ #determine what the user wants
        case "n" {&gmail; print "$new\n";} #print number of new emails
        case "s" { #print $from and $subj for new email
                &gmail;
                if ($new>0){
                        my $size=@from;
                        if ($emails!=-1 && $size>$emails){$size=$emails;} #limit number of emails displayed
                        for(my $i=0; $i<$size; ++$i){
                                print "From: $from[$i]\n"; #print from line
                                $text=$quote.$subj[$i].$quote."\n";
                                print wrap($initial_tab, $subsequent_tab, $text); #print subject with word wrap
                        }
                        $size=@from;
                        if ($emails!=-1 && $size >$emails){print "$emails out of $size new emails displayed\n";}
                }
        }      
        case "e" { #print number of new emails, $from, and $subj
                &gmail;
                if($new==0){print "You have no new emails.\n";}
                else{
                        print "You have $new new email(s).\n";
                        my $size=@from;
                        if ($emails!=-1 && $size>$emails){$size=$emails;} #limit number of emails displayed
                        for(my $i=0; $i<$size; ++$i){
                                print "From: $from[$i]\n"; #print from line
                                $text=$quote.$subj[$i].$quote;
                                print wrap($initial_tab, $subsequent_tab, $text); #print subject with word wrap
                        }
                        $size=@from;
                        if ($emails!=-1 && $size >$emails){print "$emails out of $size new emails displayed\n";}
                }
        }
        else {
                print "Usage Error: gmail.pl <option>\n";
                print "\tn displays number of new emails\n";
                print "\ts displays from line and subject line for each new email.\n";
                print "\te displays the number of new emails and from line plus \n";
                print "\t\tsubject line for each new email.\n";
        } #didn't give proper option
}

sub gmail{
        if(!(-e $file)){ #create file if it does not exists
                `touch $file`;
        }

        #get new emails
        `wget -O - https://$user:$pass\@mail.google.com/mail/feed/atom --no-check-certificate> $file`;

        open(IN, $file); #open $file

        my $i=0; #initialize count
        $new=0; #initialize new emails to 0

        my $flag=0;

        while(<IN>){ #cycle through $file
                if(/<entry>/){$flag=1;}
                elsif(/<fullcount>(\d+)<\/fullcount>/){$new=$1;} #grab number of new emails
                elsif($flag==1){
                        if(/<title>.+<\/title>/){push(@subj, &msg);} #grab new email titles
                        elsif(/<name>(.+)<\/name>/){push(@from, $1); $flag=0;} #grab new email from lines
                }
        }

        close(IN); #close $file
}

sub passwd{ #change to url escape codes in password
        #URL ESCAPE CODES
        $_=$pass;
        s/\%/\%25/g;
        s/\#/\%23/g;
        s/\$/\%24/g;
        s/\&/\%26/g;
        s/\//\%2F/g;
        s/\:/\%3A/g;
        s/\;/\%3B/g;
        s/\</\%3C/g;
        s/\=/\%3D/g;
        s/\>/\%3E/g;
        s/\?/\%3F/g;
        s/\@/\%40/g;
        s/\[/\%5B/g;
        s/\\/\%5C/g;
        s/\]/\%5D/g;
        s/\^/\%5E/g;
        s/\`/\%60/g;
        s/\{/\%7B/g;
        s/\|/\%7C/g;
        s/\}/\%7D/g;
        s/\~/\%7E/g;
        $pass=$_;
}

sub msg{
        #THE HTML CODED CHARACTER SET [ISO-8859-1]
        chomp; s/<title>(.+)<\/title>/$1/; #get just the subject
        #now replace any special characters
        s/\&\#33\;/!/g;        #Exclamation mark
        s/\&\#34\;/"/g; s/\&quot\;/"/g;      #Quotation mark
        s/\&\#35\;/#/g;        #Number sign
        s/\&\#36\;/\$/g;        #Dollar sign
        s/\&\#37\;/%/g;        #Percent sign
        s/\&\#38\;/&/g; s/\&amp\;/&/g;        #Ampersand
        s/\&\#39\;/'/g;        #Apostrophe
        s/\&\#40\;/(/g;        #Left parenthesis
        s/\&\#41\;/)/g;        #Right parenthesis
        s/\&\#42\;/*/g;        #Asterisk
        s/\&\#43\;/+/g;        #Plus sign
        s/\&\#44\;/,/g;        #Comma
        s/\&\#45\;/-/g;        #Hyphen
        s/\&\#46\;/./g;        #Period (fullstop)
        s/\&\#47\;/\//g;        #Solidus (slash)
        s/\&\#58\;/:/g;        #Colon
        s/\&\#59\;/\;/g;        #Semi-colon
        s/\&\#60\;/</g; s/\&lt\;/</g;        #Less than
        s/\&\#61\;/=/g;        #Equals sign
        s/\&\#62\;/>/g; s/\&gt\;/>/g;        #Greater than
        s/\&\#63\;/\?/g;        #Question mark
        s/\&\#64\;/\@/g;        #Commercial at
        s/\&\#91\;/\[/g;        #Left square bracket
        s/\&\#92\;/\\/g;        #Reverse solidus (backslash)
        s/\&\#93\;/\]/g;        #Right square bracket
        s/\&\#94\;/\^/g;        #Caret
        s/\&\#95\;/_/g;        #Horizontal bar (underscore)
        s/\&\#96\;/\`/g;        #Acute accent
        s/\&\#123\;/\{/g;        #Left curly brace
        s/\&\#124\;/|/g;        #Vertical bar
        s/\&\#125\;/\}/g;        #Right curly brace
        s/\&\#126\;/~/g;        #Tilde
        s/\&\#161\;/¡/g;        #Inverted exclamation
        s/\&\#162\;/¢/g;        #Cent sign
        s/\&\#163\;/£/g;        #Pound sterling
        s/\&\#164\;/¤/g;        #General currency sign
        s/\&\#165\;/¥/g;        #Yen sign
        s/\&\#166\;/¦/g;        #Broken vertical bar
        s/\&\#167\;/§/g;        #Section sign
        s/\&\#168\;/¨/g;        #Umlaut (dieresis)
        s/\&\#169\;/©/g; s/\©\;/©/g;        #Copyright
        s/\&\#170\;/ª/g;        #Feminine ordinal
        s/\&\#171\;/«/g;        #Left angle quote, guillemotleft
        s/\&\#172\;/¬/g;        #Not sign
        s/\&\#174\;/®/g;        #Registered trademark
        s/\&\#175\;/¯/g;        #Macron accent
        s/\&\#176\;/°/g;        #Degree sign
        s/\&\#177\;/±/g;        #Plus or minus
        s/\&\#178\;/²/g;        #Superscript two
        s/\&\#179\;/³/g;        #Superscript three
        s/\&\#180\;/´/g;        #Acute accent
        s/\&\#181\;/µ/g;        #Micro sign
        s/\&\#182\;/¶/g;        #Paragraph sign
        s/\&\#183\;/·/g;        #Middle dot
        s/\&\#184\;/¸/g;        #Cedilla
        s/\&\#185\;/¹/g;        #Superscript one
        s/\&\#186\;/º/g;        #Masculine ordinal
        s/\&\#187\;/»/g;        #Right angle quote, guillemotright
        s/\&\#188\;/¼/g; s/\&frac14\;/¼/g;       # Fraction one-fourth
        s/\&\#189\;/½/g; s/\&frac12\;/½/g;       # Fraction one-half
        s/\&\#190\;/¾/g; s/\&frac34\;/¾/g;       # Fraction three-fourths
        s/\&\#191\;/¿/g;        #Inverted question mark
        s/\&\#192\;/À/g;        #Capital A, grave accent
        s/\&\#193\;/Á/g;        #Capital A, acute accent
        s/\&\#194\;/Â/g;        #Capital A, circumflex accent
        s/\&\#195\;/Ã/g;        #Capital A, tilde
        s/\&\#196\;/Ä/g;        #Capital A, dieresis or umlaut mark
        s/\&\#197\;/Å/g;        #Capital A, ring
        s/\&\#198\;/Æ/g;        #Capital AE dipthong (ligature)
        s/\&\#199\;/Ç/g;        #Capital C, cedilla
        s/\&\#200\;/È/g;        #Capital E, grave accent
        s/\&\#201\;/É/g;        #Capital E, acute accent
        s/\&\#202\;/Ê/g;        #Capital E, circumflex accent
        s/\&\#203\;/Ë/g;        #Capital E, dieresis or umlaut mark
        s/\&\#204\;/Ì/g;        #Capital I, grave accent
        s/\&\#205\;/Í/g;        #Capital I, acute accent
        s/\&\#206\;/Î/g;        #Capital I, circumflex accent
        s/\&\#207\;/Ï/g;        #Capital I, dieresis or umlaut mark  
        s/\&\#208\;/Ð/g;        #Capital Eth, Icelandic
        s/\&\#209\;/Ñ/g;        #Capital N, tilde
        s/\&\#210\;/Ò/g;        #Capital O, grave accent
        s/\&\#211\;/Ó/g;        #Capital O, acute accent
        s/\&\#212\;/Ô/g;        #Capital O, circumflex accent
        s/\&\#213\;/Õ/g;        #Capital O, tilde
        s/\&\#214\;/Ö/g;        #Capital O, dieresis or umlaut mark
        s/\&\#215\;/×/g;        #Multiply sign
        s/\&\#216\;/Ø/g;        #Capital O, slash
        s/\&\#217\;/Ù/g;        #Capital U, grave accent
        s/\&\#218\;/Ú/g;        #Capital U, acute accent
        s/\&\#219\;/Û/g;        #Capital U, circumflex accent
        s/\&\#220\;/Ü/g;        #Capital U, dieresis or umlaut mark
        s/\&\#221\;/Ý/g;        #Capital Y, acute accent
        s/\&\#222\;/Þ/g;        #Capital THORN, Icelandic
        s/\&\#223\;/ß/g;        #Small sharp s, German (sz ligature)
        s/\&\#224\;/à/g;        #Small a, grave accent
        s/\&\#225\;/á/g;        #Small a, acute accent
        s/\&\#226\;/â/g;        #Small a, circumflex accent
        s/\&\#227\;/ã/g;        #Small a, tilde
        s/\&\#228\;/ä/g;        #Small a, dieresis or umlaut mark
        s/\&\#229\;/å/g;        #Small a, ring
        s/\&\#230\;/æ/g;        #Small ae dipthong (ligature)
        s/\&\#231\;/ç/g;        #Small c, cedilla
        s/\&\#232\;/è/g;        #Small e, grave accent
        s/\&\#233\;/é/g;        #Small e, acute accent
        s/\&\#234\;/ê/g;        #Small e, circumflex accent
        s/\&\#235\;/ë/g;        #Small e, dieresis or umlaut mark
        s/\&\#236\;/ì/g;        #Small i, grave accent
        s/\&\#237\;/í/g;        #Small i, acute accent
        s/\&\#238\;/î/g;        #Small i, circumflex accent
        s/\&\#239\;/ï/g;        #Small i, dieresis or umlaut mark
        s/\&\#240\;/ð/g;        #Small eth, Icelandic
        s/\&\#241\;/ñ/g;        #Small n, tilde
        s/\&\#242\;/ò/g;        #Small o, grave accent
        s/\&\#243\;/ó/g;        #Small o, acute accent
        s/\&\#244\;/ô/g;        #Small o, circumflex accent
        s/\&\#245\;/õ/g;        #Small o, tilde
        s/\&\#246\;/ö/g;        #Small o, dieresis or umlaut mark
        s/\&\#247\;/÷/g;        #Division sign
        s/\&\#248\;/ø/g;        #Small o, slash
        s/\&\#249\;/ù/g;        #Small u, grave accent
        s/\&\#250\;/ú/g;        #Small u, acute accent
        s/\&\#251\;/û/g;        #Small u, circumflex accent
        s/\&\#252\;/ü/g;        #Small u, dieresis or umlaut mark
        s/\&\#253\;/ý/g;        #Small y, acute accent
        s/\&\#254\;/þ/g;        #Small thorn, Icelandic
        s/\&\#255\;/ÿ/g;        #Small y, dieresis or umlaut mark
        s/^\s+//;
        return $_;
}

Питон:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import os
import string

# Напишите логин (без @gmail.com) и пароль. Например, username="vasya" и password="123".
username="login"
password="password"

com="wget -O - https://"+username+":"+password+"@mail.google.com/mail/feed/atom --no-check-certificate"

temp=os.popen(com)
msg=temp.read()
index=string.find(msg,"<fullcount>")
index2=string.find(msg,"</fullcount>")
fc=int(msg[index+11:index2])

if fc==0:
   print "0 new"
else:
   print str(fc)+" new"

Про уведомлялку об апдейтах расскажу подробнее.

Пихаем в нужное место конфига коньков эту незамысловатую строчку:
${texeci 10800 perl ~/.conky/conky-updates.pl}

Сам скрипт:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#! /usr/bin/perl -w
use strict;
# November 15, 2006
# Daniel Vredenburg (Vredfreak)
# This is a program that checks for package updates for Arch Linux users.

open (MYINPUTFILE, "~/.conky/updates.log") or die "No such file or directory: $!";

my $i = 0;
while(<MYINPUTFILE>)
{
        if (/^(.*)\/(.*)(\..*\..*\.)/)  {
                #print " \n";
                $i++;
        }

}

print "$i";
close(MYINPUTFILE);

Не забудьте создать updates.log, а то будет "No such file or directory"
А в крон суём скрипт на баше, который будет заполнять наш лог ;):
Время обновления выбирайте сами для себя, у меня это примерно каждые 6 часов.
sudo pacman -Syup --noprogressbar > /home/aesdana/.conky/updates.log

Скрипт прост: считает кол-во строк в логе по заданному выражению и выводит кол-во новых пакетов.
На последним скрине обновлений не наблюдается, сказывается привычка довольно часто делать sudo pacman -Syu :)

Рецепт пятый. Календарики и часики.

Календариков на просторах инета много, я юзаю один из самых простых вариантов.

Выглядит это так:

h_1276023333_fc5f5e1e17.png

Конфиг:
${execpi 3600 DJS=`date +%_d`; cal -m | sed '1d' | sed '/./!d' | sed 's/$/                     /' | fold -w 21 | sed -n '/^.\{21\}/p' | sed 's/^/${alignc} /' | sed /" $DJS "/s/" $DJS "/" "'${color 555C37}'"$DJS"'${color 696969}'" "/}

${color 555C37} — цвет текущей даты. ${color 696969} — для следующих дней.
Так же можно добавить ${time %B, %Y}, к примеру.

То же самое, только на питоне.


Совсем простой вариант:
${exec cal -m | cut -c23-44 --complement}


Вариант поинтереснее — горизонтальный календарь.
Найдено на лоре, овации автору. Вариант с динамичной текущей датой тут.

4386899-med.jpg

Поясню как использовать скрипт в коньках:
${texeci 3 perl ~/.conky/mov_hor.pl 1 15 15}${color 555C37}${font droid sans:size=22}${voffset -10}${texeci 3 perl ~/.conky/mov_hor.pl 2 15 15}${font}${color #696969}${voffset -3}${texeci 3 perl ~/.conky/mov_hor.pl 3 15 15}

Выделенные жирным циферки — номера частей скрипта. Тобишь до текущей даты, текущая, и после неё. Так что легко менять цвет, размер и положение всех частей.

Если желаете чего-то экзотического, можно поискать в гугле "conky calendar script" :)
А чтобы календарь не расползался и дни недели шли ровно используйте моноширинные шрифты.

lua scripts использовала давно и только ради милых аналоговых часиков. Скрипт lua:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
[[Clock Rings by londonali1010 (2009) Edited by jpope

This script draws percentage meters as rings, and also draws clock hands if you want! It is fully customisable; all options are described in the script. This script is based off a combination of my clock.lua script and my rings.lua script.

IMPORTANT: if you are using the 'cpu' function, it will cause a segmentation fault if it tries to draw a ring straight away. The if statement on line 145 uses a delay to make sure that this doesn't happen. It calculates the length of the delay by the number of updates since Conky started. Generally, a value of 5s is long enough, so if you update Conky every 1s, use update_num>5 in that if statement (the default). If you only update Conky every 2s, you should change it to update_num>3; conversely if you update Conky every 0.5s, you should use update_num>10. ALSO, if you change your Conky, is it best to use "killall conky; conky" to update it, otherwise the update_num will not be reset and you will get an error.

To call this script in Conky, use the following (assuming that you save this script to ~/scripts/rings.lua):
    lua_load ~/scripts/clock_rings.lua
    lua_draw_hook_pre clock_rings
   
Changelog:
+ v1.0 -- Original release (30.09.2009)
   v1.1p -- Jpope edit (05.10.2009)
]]

settings_table = {
    {
        -- Edit this table to customise your rings.
        -- You can create more rings simply by adding more elements to settings_table.
        -- "name" is the type of stat to display; you can choose from '
cpu', 'memperc', 'fs_used_perc', 'battery_used_perc'.
        name='
time',
        -- "arg" is the argument to the stat type, e.g. if in Conky you would write ${cpu cpu0}, '
cpu0' would be the argument. If you would not use an argument in the Conky variable, use ''.
        arg='
%I.%M',
        -- "max" is the maximum value of the ring. If the Conky variable outputs a percentage, use 100.
        max=12,
        -- "bg_colour" is the colour of the base ring.
        bg_colour=0xffffff,
        -- "bg_alpha" is the alpha value of the base ring.
        bg_alpha=0.1,
        -- "fg_colour" is the colour of the indicator part of the ring.
        fg_colour=0x444F55,
        -- "fg_alpha" is the alpha value of the indicator part of the ring.
        fg_alpha=0.2,
        -- "x" and "y" are the x and y coordinates of the centre of the ring, relative to the top left corner of the Conky window.
        x=100, y=150,
        -- "radius" is the radius of the ring.
        radius=50,
        -- "thickness" is the thickness of the ring, centred around the radius.
        thickness=5,
        -- "start_angle" is the starting angle of the ring, in degrees, clockwise from top. Value can be either positive or negative.
        start_angle=0,
        -- "end_angle" is the ending angle of the ring, in degrees, clockwise from top. Value can be either positive or negative, but must be larger than start_angle.
        end_angle=360
    },
    {
        name='
time',
        arg='
%M.%S',
        max=60,
        bg_colour=0xffffff,
        bg_alpha=0.1,
        fg_colour=0x444F55,
        fg_alpha=0.4,
        x=100, y=150,
        radius=56,
        thickness=5,
        start_angle=0,
        end_angle=360
    },
    {
        name='
time',
        arg='
%S',
        max=60,
        bg_colour=0xffffff,
        bg_alpha=0.1,
        fg_colour=0x444F55,
        fg_alpha=0.6,
        x=100, y=150,
        radius=62,
        thickness=5,
        start_angle=0,
        end_angle=360
    },
    {
        name='
time',
        arg='
%d',
        max=31,
        bg_colour=0xffffff,
        bg_alpha=0.1,
        fg_colour=0x444F55,
        fg_alpha=0.8,
        x=100, y=150,
        radius=70,
        thickness=5,
        start_angle=-90,
        end_angle=90
    },
    {
        name='
time',
        arg='
%m',
        max=12,
        bg_colour=0xffffff,
        bg_alpha=0.1,
        fg_colour=0x444F55,
        fg_alpha=1,
        x=100, y=150,
        radius=76,
        thickness=5,
        start_angle=-90,
        end_angle=90
    },
}

-- Use these settings to define the origin and extent of your clock.

clock_r=65

-- "clock_x" and "clock_y" are the coordinates of the centre of the clock, in pixels, from the top left of the Conky window.

clock_x=100
clock_y=150

show_seconds=true

require '
cairo'

function rgb_to_r_g_b(colour,alpha)
    return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end

function draw_ring(cr,t,pt)
    local w,h=conky_window.width,conky_window.height
   
    local xc,yc,ring_r,ring_w,sa,ea=pt['
x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle']
    local bgc, bga, fgc, fga=pt['
bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']

    local angle_0=sa*(2*math.pi/360)-math.pi/2
    local angle_f=ea*(2*math.pi/360)-math.pi/2
    local t_arc=t*(angle_f-angle_0)

    -- Draw background ring

    cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
    cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
    cairo_set_line_width(cr,ring_w)
    cairo_stroke(cr)
   
    -- Draw indicator ring

    cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc)
    cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
    cairo_stroke(cr)        
end

function draw_clock_hands(cr,xc,yc)
    local secs,mins,hours,secs_arc,mins_arc,hours_arc
    local xh,yh,xm,ym,xs,ys
   
    secs=os.date("%S")    
    mins=os.date("%M")
    hours=os.date("%I")
       
    secs_arc=(2*math.pi/60)*secs
    mins_arc=(2*math.pi/60)*mins+secs_arc/60
    hours_arc=(2*math.pi/12)*hours+mins_arc/12
       
    -- Draw hour hand
   
    xh=xc+0.7*clock_r*math.sin(hours_arc)
    yh=yc-0.7*clock_r*math.cos(hours_arc)
    cairo_move_to(cr,xc,yc)
    cairo_line_to(cr,xh,yh)
   
    cairo_set_line_cap(cr,CAIRO_LINE_CAP_ROUND)
    cairo_set_line_width(cr,5)
    cairo_set_source_rgba(cr,6.8,7.9,8.5,0.3)
    cairo_stroke(cr)
   
    -- Draw minute hand
   
    xm=xc+clock_r*math.sin(mins_arc)
    ym=yc-clock_r*math.cos(mins_arc)
    cairo_move_to(cr,xc,yc)
    cairo_line_to(cr,xm,ym)
   
    cairo_set_line_width(cr,3)
    cairo_stroke(cr)
   
    -- Draw seconds hand
   
    if show_seconds then
        xs=xc+clock_r*math.sin(secs_arc)
        ys=yc-clock_r*math.cos(secs_arc)
        cairo_move_to(cr,xc,yc)
        cairo_line_to(cr,xs,ys)
   
        cairo_set_line_width(cr,1)
        cairo_stroke(cr)
    end
end

function conky_clock_rings()
    local function setup_rings(cr,pt)
        local str='
'
        local value=0
       
        str=string.format('
${%s %s}',pt['name'],pt['arg'])
        str=conky_parse(str)
       
        value=tonumber(str)
        pct=value/pt['
max']
       
        draw_ring(cr,pct,pt)
    end

    if conky_window==nil then return end
    local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height)
   
    local cr=cairo_create(cs)    
   
    local updates=conky_parse('
${updates}')
    update_num=tonumber(updates)
   
    if update_num>5 then
        for i in pairs(settings_table) do
            setup_rings(cr,settings_table[i])
        end
    end
   
    draw_clock_hands(cr,clock_x,clock_y)
end

Огромные кольца разных цветов и размеров мне не нравятся, а вот часики приглянулись. Посмотреть скрин.

В конфиге conky указываем, что будет использовать lua:
# Lua Load #
lua_load ~/.conky/clock.lua
lua_draw_hook_pre clock_rings

TEXT
${alignc}

Выравнивание вставила, потому что пустой конфиг не воркает, а кроме часов он больше у меня ничего не показывал.

Рецепт шестой. Проще простого.

Тут не будет никак скриптов и конфигов, только парочка советов напоследок.

1. Два параметра, ${color} и ${font}, имеют свойство распространяться не только на текущую строку, но и на весь конфиг в целом. Тобишь после однократного использования лучше закрывать их, как теги.
Дабы не городить подобное:
TEXT:
${color 767676}бла-бла${color 212121}тру-ля-ля${color 767676}ай-люли-люли


Сделаем проще. Цвет выделения в алиасы, а 767676 в цвет по умолчанию.

#color
default_color 767676
color1 212121

TEXT:
бла-бла${color1}тру-ля-ля${color}ай-люли-люли

Точно так же со шрифтами.
Честно говоря, я почему-то до сих пор этим не пользуюсь. Буду исправляться, да.

2. Иногда случается так, что в конфиге присутствует элемент, из-за которого разъезжаются все данные. Портит не только вид рабочего стола, но и нервы. Обычно это касается выравнивания по горизонтали (alingr, alignc, offset).
В таких случаях приходит на помощь параметр ${goto %посыл%}.
Пример: конфиг conky имеет вид строки на всю ширину монитора и высотой в 20 пикселей. Вы наблюдаете свободное место на ваших дисках и разделах, а так же скорость интерфейсов, или же скорость торрента. Данные сие непостоянны весьма, выводятся без округлений, по сему строка будет прыгать туда-сюда, если использовать offset и т.д.
${goto} же воткнёт элемент в чётко указанное место и изменение его размера на всей строке не отобразится.

3. Список переменных и параметров конфига.
Официальные скриншоты с готовыми конфигами и скриптами.

Скромный такой намёк на rtfm ;)

Всем спасибо за внимание, пишите, дополняйте, спрашивайте.


Теги:

Popeye 09.06.10 01:29 # +1
Спасибки!!! Пошёл пробовать)
other.bigmouse 09.06.10 01:37 # +1
Браво! Молодец!
dukowski 09.06.10 01:48 # +2
Отличный пост!
Iliander 09.06.10 01:52 # +1
О-ля-ля! Вот это пост! Респект!
xT 09.06.10 02:14 # +8
Хо-хо! Не перевелись ещё бабы в русских селениях
; D

Сам скрипт:
1
2
#!/bin/bash
wget -q -O ~/.conky/rate http://welinux.ru/user/Aesdana && echo | sed -n '53p' ~/.conky/rate | grep ruAesdana | sed 's/[ ].*rp..//' | sed 's/[</a-z>]//g'
Подозреваю, что можно смело отправлять на говнокод ☺
Товарищи знатоки, поможете довести до ума, а? )


да ту изи : )
curl -silent http://welinux.ru/user/Aesdana | grep "<span class='rp'>" -m 1 | sed -e :a -e 's/<[^>]*>//g;/</N;//ba;s/ //g'


Остальное, думаю, тоже можно заоптимайзить, да под утро лениво : )

P.S. wtf? почему везде указаны прямые пути к файлам в хомдире?! : (
Aesdana 09.06.10 02:29 # +3
Во, это гораздо лучше моих извращений :)
Но свой скрипт оставлю, ради лулзов.

%username% love BDSM!

k4m454k 09.06.10 18:54 # +1
Когда всё сломают, или починят и им скучно...
goblinyara 09.06.10 19:16 # +1
что такое "спать"?О_о
hidden 09.06.10 08:11 # +6
"Королева в восхищении!" ©
Девушка, а выходите за меня замуж? ;)
blackraven 09.06.10 15:54 # +2
Опередил, блин... :(
Aesdana - ему откажешь - меня рассмотри :)
Aesdana 09.06.10 16:45 # +2
Я вас всех огорчу...Ну вы поняли )
xT 09.06.10 16:46 # +1
Ле.. ?)
Aesdana 09.06.10 18:46 # +5
Лена, да ))
blackraven 09.06.10 17:25 # +1
Ну блин, а :(
hidden 10.06.10 07:55 # +1
Если будете писать такие же зажигательные посты как этот - не огорчите. :)
hidden 10.06.10 07:53 # +0
Она оптимизирует. Всех желающих соберёт и откажет оптом. ;)
blackraven 11.06.10 18:51 # +2
Я бы предпочел "не откажет оптом" :)
xT 12.06.10 12:18 # +2
ты бы действительно это предпочел ?!
blackraven 14.06.10 14:47 # +0
Ну, лучше хоть как-то, чем никак :)
nvbn 09.06.10 08:30 # +1
Вместо http://welinux.ru/user/Aesdana используй http://welinux.ru/ajax/r_get?user=Aesdana, оно специально для этих целей создано =)
Готовая конструкция для bash:
1
2
3
curl -silent 'http://welinux.ru/ajax/r_get?user=Aesdana' |\
sed -e 's/[{}]/''/g' |\
awk -v RS=',"' -F: '/^rate/ {print $2}'


И статья очень хороша, побольше бы таких =)
sugar 09.06.10 10:20 # +0
А не подскажете, что это за формат? Поищу под перл модуль. А в xml того же самого нету? А то вообще было бы элеменатрно разную инфу получать (новые сообщения в разных блогах, лента, карма, лс и т.п.)
nvbn 09.06.10 10:21 # +0
json
sugar 09.06.10 10:39 # +0
Отлично, спасибо. Так и подумал, но решил уточнить, под перл полно модулей для парсинга! Можно чего-нить упрощающего жизнь написать. =)
xT 09.06.10 11:57 # +0
как бы в данном случае без разницы, ибо баш не умеет ансериалайзить массивы, и все равно идут танцы с седом
в других, да : )
nvbn 09.06.10 12:09 # +1
Так меньше нагрузки на сервер.
+ вёрстка на странице пользователя может поменяться
xT 09.06.10 12:27 # +0
омг, ну с таким хостингом стоит задумываться о нагрузке : )
Username 09.06.10 09:28 # +6
Таки Aesdana стала Богиней велинупса :3
Aesdana 09.06.10 09:33 # +7
Спасибо всем ^___^
NutipA 09.06.10 09:36 # +3
Все, теперь только чутка времени и все станем матерыми конькобежцами. Огромное спасибо.
sugar 09.06.10 10:17 # +4
Спасибо за статью, очень интересно. Воодушевили на подвиги, приду домой попробую, может чего интерсеного добавлю, если ума хватит! =)
Ксати рецепт со скриптом на баше неплох, на говнокоде такое минусуют, ибо этот скрипт имеет право на жизнь, но вот это:
1
2
3
4
5
if ($i == 0) {
        print "0";
} else {
        print "$i";
}

можно смело отправлять на говнокод, потому как заменяется одной строкой:
print "$i";

=))

Aesdana 09.06.10 10:42 # +1
Проглядела. В каком-то из скриптов для гмыла, кажется, есть что-то подобное. Но это не мои, если что )
sugar 09.06.10 11:03 # +1
Я заметил =))
Slip 09.06.10 11:55 # +1
Спасибо! Давно хотел календарь в коньках, но чет он у меня корявый был.
/me ушел править .conkyrc
Dark_SS 09.06.10 18:34 # +1
Извиняюсь за, вероятно, нубский вопрос. Я скопировал строки
${execpi 3600 DJS=`date +%_d`; cal -m | sed '1d' | sed '/./!d' | sed 's/$/                     /' | fold -w 21 | sed -n '/^.\{21\}/p' | sed 's/^/${alignc} /' | sed /" $DJS "/s/" $DJS "/" "'${color 555C37}'"$DJS"'${color 696969}'" "/}

и
${exec cal -m | cut -c23-44 --complement}

в конец конфига, но календарики не появились, вместо них появилось пустая полоса.
Что я делаю не так? =)
Dark_SS 09.06.10 18:35 # +1
*появилась
xT 09.06.10 18:42 # +2
система? в дебиане, например, синтаксис у cal другой
Dark_SS 09.06.10 18:47 # +1
1
2
[~] #uname -a
Linux DarkneSS 2.6.32-22-generic #36-<b>Ubuntu</b> SMP Thu Jun 3 19:31:57 UTC 2010 x86_64 GNU/Linux

Подскажите, пожалуйста, как переписать.
xT 09.06.10 18:48 # +2
просто без -m попробуй
Dark_SS 09.06.10 19:28 # +1
Спасибо! Календари появились. Второй, действительно, совсем простой. Теперь другой вопрос: можно ли сделать, чтобы сбоку от календаря писало время/дату (место свободное пропадает). Я использую строку
${color #30a988}Время: ${alignr}${color #3a6a20}${time %c}
antigluk 09.06.10 18:51 # +1
Спасибо, подсел на коньки =) Настроил MPD, сейчас буду еще играться.

Хм, я правда перла не знаю, но в общих чертах понимать должен.
Но в упор не понимаю как скрипт
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#! /usr/bin/perl -w
use strict;
# November 15, 2006
# Daniel Vredenburg (Vredfreak)
# This is a program that checks for package updates for Arch Linux users.

open (MYINPUTFILE, "~/.conky/updates.log") or die "No such file or directory: $!";

my $i = 0;
while(<MYINPUTFILE>)
{
        if (/^(.*)\/(.*)(\..*\..*\.)/)  {
                #print " \n";
                $i++;
        }

}

print "$i";
close(MYINPUTFILE);


... может определить количество апдейтов?
Написано "Скрипт прост: считает кол-во строк в логе по заданному выражению и выводит кол-во новых пакетов."
А откуда в логе появятся строки?
doraneko 09.06.10 19:12 # +1
может я облегчу тебе жизнь, если предложу использовать это:
pacman -Qyu | wc -l
doraneko 09.06.10 19:15 # +1
промахнулся, это на коммент выше ответ был
antigluk 09.06.10 19:20 # +1
Да, так действительно работает, спасибо)
Но все-таки интересно как работал тот скрипт. И работал ли он =)
Aesdana 09.06.10 19:46 # +0
Мой косяк. Сейчас поправлю пост.
doraneko 09.06.10 20:40 # +1
ах да, для аура можно использовать:
echo "n" | yaourt -Su --aur 2>/dev/null | grep -c "\s=>\s"
Dark_SS 09.06.10 19:56 # +1
С такой частью конфига

получается так:

с какой-то полосой снизу... Не подскажете, как её убрать и можно ли сделать, чтобы надписи справа шли подряд?
Dark_SS 09.06.10 19:57 # +1
Текст конфига можно посмотреть тут.
Aesdana 09.06.10 20:09 # +1
${voffset -65}
Dark_SS 09.06.10 21:46 # +1
Куда писать? =)
Dark_SS 09.06.10 21:47 # +1
Уже понял. А полоску не знаете, как убрать?
Dark_SS 09.06.10 23:55 # +1
Поэксперементировал и выяснил, что окно конки почему-то не изменяет размер по высоте... Пытался оставить в конфиге только одну строчку - размер окна сохранился.
Полный конфиг.
Dark_SS 10.06.10 00:22 # +1
Решено добавлением в самый конец конфига
${voffset 20}
. Спасибо, Aesdana, за статью и помощь!
mrpot 14.06.10 09:32 # +2
Простите за офтоп, но как добавить статью в избранное на панели сайта?
nvbn 14.06.10 09:49 # +1
Нажать на "в избранное" снизу статьи
mrpot 14.06.10 10:00 # +1
Спасибо.

Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 141)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 2824 из 215 городов)
            Топ пользователей Топ блогов
            welinux.ru

            Смотреть онлайн бесплатно

            Онлайн видео бесплатно


            Смотреть русское с разговорами видео

            Online video HD

            Видео скачать на телефон

            Русские фильмы бесплатно

            Full HD video online

            Смотреть видео онлайн

            Смотреть HD видео бесплатно

            School смотреть онлайн