- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
#!/bin/dash -e
fono="#DFAF8F"
monato="#80AAD4"
kvin="#DCA3A3"
fino="#949494"
enigo () {
while read inc < "$FIFO"
do
rel=$(( $rel + $inc ))
cal -m $( date +'%m %Y' -d "+$rel month" ) | filtrilo $rel
done
}
filtrilo () {
kura=$(date +%e)
awk -v rel=$1 -v kura="$kura" -v fono=$fono \
-v monato=$monato -v kvin=$kvin -v fino=$fino '
BEGIN { nigra = "#000000" }
function fg(koloro, text) { return sprintf("^fg(%s)%s^fg()", koloro, text) }
function bg(koloro, text) { return sprintf("^bg(%s)%s^bg()", koloro, text) }
function set(i,j, koloro) { for(k=i;k<=j;k++) $k = fg(koloro, $k) }
NR == 1 { $1 = fg(monato,$1) }
NR == 2 { set(1,5,kvin); set(6,7,fino) }
NR > 2 && rel == 0 { sub( sprintf("%s\\>",kura), fg(nigra, bg(fono, kura)) ) }
{ print " " $0 }'
}
eligo () {
dimensioj=$( xdpyinfo | awk '$1 == "dimensions:" { print $2 }' )
ekrano=${dimensioj%x*}
menuo=170 # artifiko
x=$(( $ekrano - $menuo ))
y=20
i="exec:echo 0 > $FIFO"
n="exec:echo +1 > $FIFO"
p="exec:echo -1 > $FIFO"
agoj="onstart=uncollapse,grabkeys,grabmouse,$i;onexit=$i;\
key_Escape=exit;key_q=exit;key_n=$n;key_p=$p;key_space=$n;key_BackSpace=$p;\
button3=exit;button5=$n;button4=$p"
exec dzen2 -l 7 -x $x -y $y -w $menuo -u -e "$agoj"
}
FIFO=${0%.sh}
[ -p "$FIFO" ] || mkfifo "$FIFO"
rel=0
enigo | eligo
Зачем это здесь? Смеха ради.
Кстати в баше можно организовать bidirectional pipes? Никак не соображу.