LINUX.ORG.RU

Другой календарь и гном новичка

 , , ,


0

0

Russian Fedora Remix 11

Gnome 2.28

Compiz+Emerald

Icons : Black-Gnome

Gtk: Gray-Flat

Увидев скриншот KozakUA. Поставил его творение себе, через пару недель было решено добавить в календарь разделители недель. Еще через пару решил сделать статичным текущий день недели, и чтобы остальные просто сдвигались.

Вот собственно код:

#!/usr/bin/perl
use Term::ANSIColor;
$time=scalar(localtime);
chomp($time);
#Wed Sep 9 16:22:46 2009
$time =~ /(\w*)\s(\w*)\s*(\d*)\s([\d:]*)\s(\d*)/;

$pointer = 0; 
$lim =0;
$left =@ARGV[1]; 
$right =@ARGV[2];

#$left = -1;
#$right = -1;

if ($1 eq 'Mon') {$pointer =$left+ 6;}
if ($1 eq 'Tue') {$pointer =$left+ 5;}
if ($1 eq 'Wed') {$pointer =$left+ 4;}
if ($1 eq 'Thu') {$pointer =$left+ 3;}
if ($1 eq 'Fri') {$pointer =$left+ 2;}
if ($1 eq 'Sat') {$pointer =$left+ 1;}
if ($1 eq 'Sun') {$pointer =$left+ 0;}

while ($pointer-7 > 0) {$pointer=$pointer-7;} 
  
if (($2 eq 'Jan' ) or ($2 eq 'March' ) or ($2 eq 'May' ) or ($2 eq 'July' ) or ($2 eq 'Aug' ) or ($2 eq 'Oct' ) or ($2 eq 'Dec' ))

	{$lim=31; $lim_low = 30; $lim_hi=30;}
else 
	{$lim=30; $lim_low = 31; $lim_hi=31;}

if ($2 eq 'Jan') 
	{
		$lim_low = 31; 
		if ($5 % 4) {$lim_hi= 28;}
		else {$lim_hi = 27;	}
	}
if ($2 eq 'Feb')	
	{
		if ($5 % 4) {$lim= 28;}
		else {$lim = 27;}		
	}
if  ($2 eq 'Dec')
	{
		$lim_hi = 31;
	}
if ($left==-1){ $left=$3-1;}
if ($right == -1){ $right = $lim - $3; 	}

for ($i=0;($left-$i>-1) and ($3-$i>0);$i++) {@arr[$left-$i]=$3-$i;  }
for ($i=0;($left-$3-$i)>-1;$i++) {@arr[$left-$3-$i]=$lim_low-$i;}

for ($i=1;($left+$i<$right+$left) and ($3+$i-1<$lim);$i++) {@arr[$left+$i]=$3+$i;}
for ($i=1;($left+$i+$lim-$3<$right+$left+1);$i++) {@arr[$left+$i+$lim-$3]=$i;}

if (@ARGV[0] == 1)
{ 
for($i=0;$i<($left);$i++)
{ 
	$p2=$i;
	if ($i==$pointer) {print "@arr[$i]| "; $pointer=$pointer+7; } 
	else {	print "@arr[$i] "; }
	 
	
}
}
if (@ARGV[0] == 2)
{
	 
	  {print "[$3]";}
}
if (@ARGV[0] == 3)
{
 
	if ($1 eq 'Mon') {$pointer =$left + 6;}
	if ($1 eq 'Tue') {$pointer =$left + 5;}
	if ($1 eq 'Wed') {$pointer =$left + 4;}
	if ($1 eq 'Thu') {$pointer =$left + 3;}
	if ($1 eq 'Fri') {$pointer =$left + 2;}
	if ($1 eq 'Sat') {$pointer =$left + 1;}
	if ($1 eq 'Sun') {$pointer =$left + 0;}

 
	for($i=$left+1;($i<$left+$right+1) ;$i++)
		{   if ($i==$pointer+1)		 { print "| @arr[$i]"; $pointer=$pointer+7;  }
			else { print " @arr[$i]"; }
			#print "@data[($3)..$i]";
		}
}

На скриншоте второй и третий параметр скрипта 15. Первый параметр позволяет установить количество дней до текущего, второй - количество дней после текущего. Запустив скрипт с параметрами x,-1, -1, получим оригинальный календарь с разделителями недель.

>>> Просмотр (1920x1080, 521 Kb)



Проверено: Shaman007 ()
Последнее исправление: parovoz (всего исправлений: 1)

Что касается оригинального скрипта, то я написал аналог на bash:

#!/bin/bash
MONTH=`date +%-m`;
LBRACE='\e[31;1m';
RBRACE='\e[0m';
if [ $MONTH = 1 ] || [ $MONTH = 3 ] || [ $MONTH = 5 ] || [ $MONTH = 7 ]\
|| [ $MONTH = 8 ] || [ $MONTH = 10 ] || [ $MONTH = 12 ]; then
    DAYS=( `seq 1 31` );
elif [ $MONTH = 2 ]; then
    if [ `expr $((\`date +%Y\`-2008)) % 4` == 0 ]; then
        DAYS=( `seq 1 29` );
    else
        DAYS=( `seq 1 28` );
    fi
else
    DAYS=( `seq 1 30` );
fi
DAY=`date +%-d`;
DAYS[(("$DAY"-1))]="$LBRACE""$DAY""$RBRACE";
echo -e ${DAYS[@]}

Проще и читаемее, как по мне.

GotF ★★★★★
()

Молодец, желаю ЛОРу в 2010 году побольше таких новичков.

t184256 ★★★★★
()

У Пиджина такая харя, как будто он уже смирился со всеми издевательствами и поэтому сидит и тупо смотрит в одну точку.

Jayrome ★★★★★
()
Ответ на: комментарий от memnek

>а что показывает обложку, название и прочее?

Обложка плагин для exaile - Desktop Cover. Рядом - exaile в мини (плагин Mini Mode)

parovoz
() автор топика
Ответ на: комментарий от GotF

>Что касается оригинального скрипта, то я написал аналог на bash

А как его запускать, чтобы он на раб.столе отображался?

p.s. LXDE

SilentOS
()
Ответ на: комментарий от San

Вертикальный :

 
# Use Xft?
use_xft yes
xftfont DejaVu Sans:size=8
xftalpha 0.8
text_buffer_size 2048

# Update interval in seconds
update_interval 1

# This is the number of times Conky will update before quitting.
# Set to zero to run forever.
total_run_times 0

# Create own window instead of using desktop (required in nautilus)
own_window yes
own_window_transparent yes
own_window_type override
#own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager

# Use double buffering (reduces flicker, may not work for everyone)
double_buffer yes

# Minimum size of text area
minimum_size 180 0
#maximum_width 200

# Draw shades?
draw_shades no

# Draw outlines?
draw_outline no

# Draw borders around text
draw_borders no

# Stippled borders?
stippled_borders 0

# border margins
border_margin 5

# border width
border_width 1

# Default colors and also border colors
default_color 000000
#default_shade_color black
#default_outline_color white
own_window_colour white

# Text alignment, other possible values are commented
#alignment top_left
alignment top_right
#alignment bottom_left
#alignment bottom_right

# Gap between borders of screen and text
# same thing as passing -x at command line
gap_x 5
gap_y 30

# Subtract file system buffers from used memory?
no_buffers yes

# set to yes if you want all text to be in uppercase
uppercase no

# number of cpu samples to average
# set to 1 to disable averaging
cpu_avg_samples 2

# number of net samples to average
# set to 1 to disable averaging
net_avg_samples 2

# Force UTF8? note that UTF8 support required XFT
override_utf8_locale yes

# Add spaces to keep things from moving about?  This only affects certain objects.
use_spacer none

TEXT
${hr 0}
${font Trebushet:size=20}     ${time %k:%M:%S}${font}
${hr 3}
Система ${hr 2}
${font StyleBats:size=16}A${font}   ЦП1: ${cpu cpu1}% ${alignr}${cpubar cpu1 8,60}
${font StyleBats:size=16}A${font}   ЦП2: ${cpu cpu2}% ${alignr}${cpubar cpu2 8,60}
${font StyleBats:size=16}g${font}   ОЗУ: $memperc% ${alignr}${membar 8,60}
${font StyleBats:size=16}j${font}   SWAP: $swapperc% ${alignr}${swapbar 8,60}
${font StyleBats:size=16}k${font}   Процессов: ${alignr}$processes (запущено $running_processes)

Топ загрузки ЦП $alignr ЦП% ОЗУ%
${hr 1}
#1 ${top name 1}$alignr${top cpu 1} ${top mem 1}
#2 ${top name 2}$alignr${top cpu 2} ${top mem 2}
#3 ${top name 3}$alignr${top cpu 3} ${top mem 3}

Файловая система ${hr 2}
${font Pie charts for maps:size=14}7${font}   ${voffset -5}Home:
${voffset 4}${fs_free /home}/${fs_size /home} ${alignr}${fs_bar 8,60 /home}
${font Pie charts for maps:size=14}7${font}   ${voffset -5}Root:
${voffset 4}${fs_free /}/${fs_size /} ${alignr}${fs_bar 8,60 /}

Сеть (трафик) ${hr 2}
${if_existing /proc/net/route wlan0}
${voffset -6}${font PizzaDude Bullets:size=14}O${font}   Исходящий: ${upspeed wlan0} kb/s ${alignr}${upspeedgraph wlan0 8,60}
${voffset 4}${font PizzaDude Bullets:size=14}U${font}   Входящий: ${downspeed wlan0} kb/s ${alignr}${downspeedgraph wlan0 8,60}
${voffset 4}${font PizzaDude Bullets:size=14}N${font}   Исходящий: ${alignr}${totalup wlan0}
${voffset 4}${font PizzaDude Bullets:size=14}T${font}   Входящий: ${alignr}${totaldown wlan0}
${voffset 4}${font PizzaDude Bullets:size=14}Z${font}   Сигнал: ${wireless_link_qual wlan0}% ${alignr}${wireless_link_bar 8,60 wlan0} 
${hr 2}
${else}${if_existing /proc/net/route eth0}
${voffset -6}${font PizzaDude Bullets:size=14}O${font}   Исходящий: ${upspeed eth0} kb/s ${alignr}${upspeedgraph eth0 8,60}
${voffset 4}${font PizzaDude Bullets:size=14}U${font}   Входящий: ${downspeed eth0} kb/s ${alignr}${downspeedgraph eth0 8,60}
Всего за сессию ${hr 1}
${voffset 4}${font PizzaDude Bullets:size=14}N${font}   Исходящий: ${alignr}${totalup eth0}
${voffset 4}${font PizzaDude Bullets:size=14}T${font}   Входящий: ${alignr}${totaldown eth0}
${hr 5}
${endif}${else}${if_existing /proc/net/route eth1}
${voffset -6}${font PizzaDude Bullets:size=14}O${font}   Исходящий: ${upspeed eth1} kb/s ${alignr}${upspeedgraph eth1 8,60}
${voffset 4}${font PizzaDude Bullets:size=14}U${font}   Входящий: ${downspeed eth1} kb/s ${alignr}${downspeedgraph eth1 8,60}
${voffset 4}${font PizzaDude Bullets:size=14}N${font}   Исходящий: ${alignr}${totalup eth1}
${voffset 4}${font PizzaDude Bullets:size=14}T${font}   Входящий: ${alignr}${totaldown eth1}
${hr 2}
${endif}${else}
${font PizzaDude Bullets:size=14}4${font}  Сеть недоступна
${hr 2}
${endif}
${endif}

Календарь :

 
background no
use_xft yes
xftfont Trebuchet MS:size=11
xftalpha 0.8
mpd_host 127.0.0.1
mpd_port 6600
update_interval 1
total_run_times 0
own_window yes
own_window_type override
own_window_transparent yes
own_window_colour 202020
maximum_width 1010
#own_window_hints undecorate,sticky,below,skip_taskbar,skip_pager
double_buffer yes
minimum_size 0 5
default_bar_size 0 8
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders yes
stippled_borders 0
border_margin 4
border_width 1
default_color FFFFFF
alignment bottom_left
gap_x 50
gap_y 60
no_buffers yes
uppercase no
cpu_avg_samples 2
net_avg_samples 2
override_utf8_locale yes
use_spacer none
show_graph_scale no
show_graph_range no


color1 6AA7FF
color2 red
color3 dark green
color4 yellow
color5 orange
color6 cyan
color7 FFC125
color8 5C5C5C


TEXT
${font Trebuchet MS:size=12:bold}${time %A} ${voffset -7}${font Trebuchet MS:size=9:bold}${color8}${time [%B]}${goto 900}${voffset 4}${color}${font Trebuchet MS:size=12:bold}${time %Y} год${font}
${goto 100}${voffset 10}${color8}${font Trebuchet MS:size=12}${texeci 3  perl /home/lucian/.scripts/cal_my.pl 1 15 15}${voffset -20}${color}${font Trebuchet MS:size=36}${texeci 3 perl /home/lucian/.scripts/cal_my.pl 2 15 15}${voffset -11}${font} ${font Trebuchet MS:size=12}${color8}${texeci 3  perl /home/lucian/.scripts/cal_my.pl 3 15 15}
 

тут вообщем-то мало что изменилось.

parovoz
() автор топика
Ответ на: комментарий от SilentOS

SilentOS wrote:

А как его запускать, чтобы он на раб.столе отображался?

Поставить conky, прочесть man conky на предмет execp, посмотреть на переменные LBRACE и RBRACE в моей поделке.

GotF ★★★★★
()
Ответ на: комментарий от abbath

Автор, Ваш perl ужасен.

Это мой первый скрипт. Не буду против если укажете самые ужасные куски и предложите более эффективные решения.

Уже подозреваю, что проблема в этом :

   if ($1 eq 'Mon') {$pointer =$left + 6;} 
   if ($1 eq 'Tue') {$pointer =$left + 5;} 
   if ($1 eq 'Wed') {$pointer =$left + 4;} 
   if ($1 eq 'Thu') {$pointer =$left + 3;} 
   if ($1 eq 'Fri') {$pointer =$left + 2;} 
   if ($1 eq 'Sat') {$pointer =$left + 1;} 
   if ($1 eq 'Sun') {$pointer =$left + 0;} 

parovoz
() автор топика

"Simple text editor" у КозакУА

Простите за оффтоп. В прошлый раз, когда смотрел скрин («Увидев скриншот KozakUA...») не обратил внимание на «GVim Simple Text Editor» в менюхе (Ключевые слова - gvim и simple) :)))) После этого не удивлюсь, если увижу: «Emacs simple text editor» или «Blender simple 3d modeling tool»

CEMEH
()

очередной говногном с десятком свистелок и конечно же фирменным юзабилити под названием «скрипты».


2 модераторс:
когда уже будут снимать скор за посты в несколько экранов? пора неучей заставить пользоваться pastebin.

PayableOnDeath
()
Ответ на: "Simple text editor" у КозакУА от CEMEH

CEMEH wrote:

Простите за оффтоп. В прошлый раз, когда смотрел скрин («Увидев скриншот KozakUA...») не обратил внимание на «GVim Simple Text Editor» в менюхе (Ключевые слова - gvim и simple) :)))) После этого не удивлюсь, если увижу: «Emacs simple text editor» или «Blender simple 3d modeling tool»

Как бы GVIM действительно сильно проще, чем Vim в консоли - все основные команды доступны в меню, так что зря вы так иронизируете :-)

GotF ★★★★★
()
Ответ на: комментарий от GotF

причем здесь линукс? использовать скрипты для автоматизации решения своих конректных задач - это одно, а для допиливания простейшей функциональности DE - это совсем другое, костыль на костыле и костылем погоняет, привет Мигелюшке.

PayableOnDeath
()
Ответ на: комментарий от PayableOnDeath

PayableOnDeath wrote:

причем здесь линукс? использовать скрипты для автоматизации решения своих конректных задач - это одно, а для допиливания простейшей функциональности DE - это совсем другое, костыль на костыле и костылем погоняет, привет Мигелюшке.

Ну... DE не пользуюсь, но и ничего плохого в таком «допиливании» не вижу.

GotF ★★★★★
()
Ответ на: комментарий от GotF

GotF wrote:

Подозреваю, нужен switch.

Хм, так вроде бы по количеству строк должно получится одинаково, а вот если есть функция перевода дня недели в число, то можно обойтись одним выражением.

parovoz
() автор топика
Ответ на: комментарий от parovoz

Хм, так вроде бы по количеству строк должно получится одинаково, а вот если есть функция перевода дня недели в число, то можно обойтись одним выражением.

Так localtime число и возвращает :)

http://perldoc.perl.org/functions/localtime.html

 # 0 1 2 3 4 5 6 7 8
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

$wday is the day of the week, with 0 indicating Sunday and 3 indicating Wednesday.

RaySlava
()
Ответ на: комментарий от RaySlava

Ну тогда вот так :

#!/usr/bin/perl
use Term::ANSIColor;
($pointer,$pointer,$pointer,$mday,$mon,$year,$wday,$pointer,$pointer) = localtime(time);
$pointer = 0; 
$lim =0;
$left =@ARGV[1]; 
$right =@ARGV[2];

if ($wday!=0) {$pointer = $left + 7-$wday;}
else {$pointer = $left;}

while ($pointer-7 >= 0) {$pointer=$pointer-7;} 
  
if (($mon = 0 ) or ($mon = 2 ) or ($mon  = 4 ) or ($mon = 6 ) or ($mon =7 ) or ($mon = 9 ) or ($mon = 11 ))
	{$lim=31; $lim_low = 30; $lim_hi=30;}
else {$lim=30; $lim_low = 31; $lim_hi=31;}

if ($mon = 0 ) 
	{
		$lim_low = 31; 
		if (($year+1900) % 4) {$lim_hi= 28;}
		else {$lim_hi = 27;}
	}
if ($mon = 1 )	
	{
		if (($year+1900) % 4) {$lim= 28;}
		else {$lim = 27;}		
	}
if  ($mon = 11 )
	{
		$lim_hi = 31;
	}
if ($left==-1){ $left=$mday-1;}
if ($right == -1){ $right = $lim - $mday; 	}

for ($i=0;($left-$i>-1) and ($mday-$i>0);$i++) {@arr[$left-$i]=$mday-$i;  }
for ($i=0;($left-$mday-$i)>-1;$i++) {@arr[$left-$mday-$i]=$lim_low-$i;}

for ($i=1;($left+$i<$right+$left) and ($mday+$i-1<$lim);$i++) {@arr[$left+$i]=$mday+$i;}
for ($i=1;($left+$i+$lim-$mday<$right+$left+1);$i++) {@arr[$left+$i+$lim-$mday]=$i;}

if (@ARGV[0] == 1)
{  
for($i=0;$i<($left);$i++)
{ 
 	if ($i==$pointer) {print "@arr[$i]| "; $pointer=$pointer+7; } 
	else {	print "@arr[$i] ";} 	
}
}
if (@ARGV[0] == 2)
{	 
	{print "[$mday]";}
}
if (@ARGV[0] == 3)
{
 	if ($wday!=0) {$pointer = $left + 7-$wday;}
    else {$pointer = $left;}    
	for($i=$left+1;($i<$left+$right+1) ;$i++)
		{   
			if ($i==$pointer+1)		 { print "| @arr[$i]"; $pointer=$pointer+7;  }
			else { print " @arr[$i]"; }			
		}
}
если это кому-нибуть еще нужно.

И спасибо за ссылку.

parovoz
() автор топика
Ответ на: комментарий от GotF

Я имел ввиду не сложность использования, а богатство функционала.

CEMEH
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.