Genie
написал 30 ноября 2004 года в 20:13 (1801 просмотр)
Ведет себя
как мужчина; открыл 40 тем в форуме, оставил 4758 комментариев на сайте.
Итак, несколько слов о том, как реализовать то, что мне хотелось.
По нажатию комбинации клавиш (или по пункту в меню, или событию, или….) запускать программу, если эта программа была не запущена. Или переёти к ней, если она была запущена.
Так как конфиг у меня не монолитный, а разбит по частям, то это у меня в разных файлах. В общем, кому как больше нравится.
# Run Mozilla, Opera Key w A 4 RunOrGoto "*Mozilla*" mozilla Key w A 4M RunOrGoto "*Opera*" opera # Run rxvt Key s A 4 Exec rxvt -g 96x40 -T "Терминал"
тут у меня не указывается, на какой именно page пускать, но это можно сделать указав параметры программе. man на тему ресурсов.
# Run program if window doesn't exists DestroyFunc RunOrGoto AddToFunc RunOrGoto + I All ($0) MyFocus + I None ($0) Exec $1
Вот, собственно, об этом и всё ;)
Последние комментарии
-
OlegL, 17 декабря 2023 года в 15:00 →
Перекличка
21
-
REDkiy, 8 июня 2023 года в 9:09 →
Как «замокать» файл для юниттеста в Python?
2
-
fhunter, 29 ноября 2022 года в 2:09 →
Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
6
-
Иванн, 9 апреля 2022 года в 8:31 →
Ассоциация РАСПО провела первое учредительное собрание
1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 →
Логи catalina.out в TomCat 9 в формате JSON
1
DevOps as a Service from Palark
24/7 SRE & DevOps service to cover all your Kubernetes needs.

Собственно, остальные часто используемые кнопки:
ещё немного тут
теперь о динамических менюшках.
в главном меню строчка:
и смо оно:
AddToMenu /MyMenu/MMedia + DynamicPopupAction Function MMediaMenu AddToFunc MMediaMenu + I DestroyMenu recreate /MyMenu/MMedia + I AddToMenu /MyMenu/MMedia "Мультимедиа%video.png%" Title + I AddToMenu /MyMenu/MMedia "Вставь CD в привод...%cdrom.png%" Exec exec /home/genie/bin/playcd1 + I PipeRead 'for i in /mnt/media/grab/*.{iso,bin}; do ii=`basename \"$i\"`; echo AddToMenu /MyMenu/MMedia \\\"${ii%.???}\%video.png\%\\\" Exec exec $HOME/bin/play_iso \\\"$i\\\"; done' + I PipeRead 'for i in /mnt/media/grab/*.avi; do ii=`basename \"$i\"`; echo AddToMenu /MyMenu/MMedia \\\"${ii%.???}\%video.png\%\\\" Exec exec $HOME/bin/play_avi \\\"$i\\\"; done'Немного продолжим ;)
Раскраска менюшек.
Простой вертикальный градиент с наибольшей яркостью по центру.
моё основное меню такое вот:
Соответственно, в каждом и находится то, что и описано.
ну, а теперь одно из самых сложных.
заголовок окна. который включает в себя несколько индикаторов ;) реально их два — часы и индикатор текущей page.
каждую минуту пускается вот такой скрипт:
$ cat ~/bin/cron/1m/fvwm.PixmapClock #!/bin/sh lock=PixMapClock.lock plck=/dev/shm/${LOGNAME}/lock pclk=/dev/shm/${LOGNAME}/pix mkdir -p $plck $pclk [ `pidof FvwmCommandS` ] && FvwmCommand 'MyChangePage' 2>/dev/nullа сама фнкция описывается в файлике ~/.fvwm/func.hook:
а картинка.. часиков генерируется вот таким скриптом….
$ cat ~/.fvwm/bin/pix.update #!/usr/bin/perl use Fcntl qw(:DEFAULT :flock); $lock="PixMapClock.lock"; $plck="/tmp/$ENV{'LOGNAME'}/lock"; $pclk="/tmp/$ENV{'LOGNAME'}/pix"; $ppix="$ENV{'HOME'}/.fvwm/icons/clock"; $page=$ARGV[0]; system("mkdir -p $plck $pclk"); @s1{'_',':'}=(' ',' '); @s2{'_',':'}=(' ',' .. '); @d1{'0','1','2','3','4','5','6','7','8','9'}=(' ..... ',' ',' ..... ',' ..... ',' ',' ..... ',' ..... ',' ..... ',' ..... ',' ..... '); @d2{'0','1','2','3','4','5','6','7','8','9'}=('. ... . ',' . ',' ... . ',' ... . ','. . ','. ... ','. ... ',' ... . ','. ... . ','. ... . '); @d3{'0','1','2','3','4','5','6','7','8','9'}=('.. .. ',' .. ',' .. ',' .. ','.. .. ','.. ','.. ',' .. ','.. .. ','.. .. '); @d4{'0','1','2','3','4','5','6','7','8','9'}=('. . ',' . ',' ... . ',' ... . ','. ... . ','. ... ','. ... ',' . ','. ... . ','. ... . '); @d5{'0','1','2','3','4','5','6','7','8','9'}=('. . ',' . ','. ... ',' ... . ',' ... . ',' ... . ','. ... . ',' . ','. ... . ',' ... . '); @d6{'0','1','2','3','4','5','6','7','8','9'}=('.. .. ',' .. ','.. ',' .. ',' .. ',' .. ','.. .. ',' .. ','.. .. ',' .. '); @d7{'0','1','2','3','4','5','6','7','8','9'}=('. ... . ',' . ','. ... ',' ... . ',' . ',' ... . ','. ... . ',' . ','. ... . ',' ... . '); @d8{'0','1','2','3','4','5','6','7','8','9'}=(' ..... ',' ',' ..... ',' ..... ',' ',' ..... ',' ..... ',' ',' ..... ',' ..... '); @p1{'a','b','c','d','e','f','g','h','i'}=(' ,,, ,,, ,,, ',' ,,, ,,, ,,, ',' ,,, ,,, ,,, ',' ,,, ,,, ,,, ',' ,,, ,,, ,,, ',' ,,, ,,, ,,, ',' ,,, ,,, ,,, ',' ,,, ,,, ,,, ',' ,,, ,,, ,,, '); @p2{'a','b','c','d','e','f','g','h','i'}=(',..., , ,',', ,..., ,',', , ,...,',', , , ,',', , , ,',', , , ,',', , , ,',', , , ,',', , , ,'); @p3{'a','b','c','d','e','f','g','h','i'}=(', , , ,',', , , ,',', , , ,',',..., , ,',', ,..., ,',', , ,...,',', , , ,',', , , ,',', , , ,'); @p4{'a','b','c','d','e','f','g','h','i'}=(', , , ,',', , , ,',', , , ,',', , , ,',', , , ,',', , , ,',',..., , ,',', ,..., ,',', , ,...,'); @pg{"","00","10","20","01","11","21","02","12","22"}=('a','a','b','c','d','e','f','g','h','i'); $pixh='/* XPM */ static char * s_xpm[] = { "76 13 4 1", " g None", ". g #FFFFFF", ", g #CCCCCC", "* g #FF0000", '; @pxln{10,11,12,13,14,15,16,17,18,19,20,21,22}=('"s1d1p1",','"s1d2p2",','"s1d3p2",','"s2d3p2",','"s2d3p1",','"s1d4p3",','"s1d5p3",','"s1d6p3",','"s2d6p1",','"s2d6p4",','"s1d6p4",','"s1d7p4",','"s1d8p1"};'); if (sysopen(FH, "$plck/$lock", O_WRONLY|O_CREAT) && flock(FH, LOCK_EX|LOCK_NB)) { @t{0,1,2,3,4,5,6}=localtime; $dstr=sprintf "%02d_%02d:%02d_@pg{$page}",@t{3},@t{2},@t{1}; $pixi=$pixh; foreach $k (sort keys %pxln) { @pxln{$k}=~ s~(s.)(d.)(p.)~&LINE;~; ($s,$d,$p)=($1,$2,$3); $t=$dstr; $t=~ s~([0-9])~$$d{$1}~eg; $t=~ s~^([ .]{16})~replace($1,'.','*')~e; $t=~ s~([a-i])~$$p{$1}~eg; $t=~ s~([_\:])~$$s{$1}~eg; @pxln{$k}=~ s~&LINE;~$t~; $pixi.="@pxln{$k}\n"; } open(FILE,">$pclk/clock.xpm") && select(FILE) && printf $pixi; close(FILE); system("convert $pclk/clock.xpm $pclk/clock.png"); # printf $pixi; } unlink("$plck/$lock"); sub replace { $_=$_[0]; $_=~ s~[$_[1]]~$_[2]~g; return $_; }всякие там иконки я уже и не очень помню, откуда брал, но тут каждый виберет и найдёт для себя сам ;)