--- fvwm-2.5.27.ds.orig/NEWS +++ fvwm-2.5.27.ds/NEWS @@ -3,6 +3,24 @@ ------------------------------------------------------------------- +Changes in beta release 2.5.28 (not released yet) + +* Bug fixes: + + - Fixed non-visible QT windows after a QT deferred map (e.g. + Skype profile windows). + - Fixed the use of the X-resource "fvwmstyle". + - Fixed segmentation fault in FvwmEvent when parsing an + undefined event name, or an undefined environment variable + to the RPlayHost option. + - Fixed the events startup, shutdown and unknown in FvwmEvent. + - Fvwm now retains utf8 window names when the WM_NAME changes, + and the utf8 name converted to the default charset match + the old WM_NAME. + + +------------------------------------------------------------------- + Changes in beta release 2.5.27 (23-Feb-2009) * New features: @@ -60,7 +78,7 @@ - Fixed crash in ARGB visual detection code. - Fixed compilation without XRender support. - Fixed drawing of background pictures in menu items and titles. - - Fixed hadling of shaped windows. + - Fixed handling of shaped windows. - Fixed a 64-bit bug in the EWMH code. ------------------------------------------------------------------- --- fvwm-2.5.27.ds.orig/configure.ac +++ fvwm-2.5.27.ds/configure.ac @@ -4,8 +4,8 @@ AC_INIT(fvwm/fvwm.c) dnl should be "yes" only within the released distribution -ISRELEASED=yes -version=2.5.27 +ISRELEASED=no +version=2.5.28 VERSIONINFO="" dnl date of the released version (please zero pad the day in the last 2 dates) @@ -1752,8 +1752,6 @@ perllib/FVWM/Module.pm rpm/Makefile rpm/fvwm.spec - debian/Makefile - debian/control doc/fvwm.ent doc/footer.html doc/Makefile --- fvwm-2.5.27.ds.orig/acinclude.m4 +++ fvwm-2.5.27.ds/acinclude.m4 @@ -527,6 +527,156 @@ ]) +dnl -------------------------------------------------------------------------- +dnl contents of imlib.m4 +dnl modified by migo - write diagnostics to >&5 (i.e. config.log) not stdout + +# Configure paths for IMLIB +# Frank Belew 98-8-31 +# stolen from Manish Singh +# Shamelessly stolen from Owen Taylor + +dnl AM_PATH_IMLIB([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for IMLIB, and define IMLIB_CFLAGS and IMLIB_LIBS +dnl +AC_DEFUN([AM_PATH_IMLIB], +[dnl +dnl Get the cflags and libraries from the imlib-config script +dnl +AC_ARG_WITH([imlib-prefix],[ --with-imlib-prefix=PFX prefix for IMLIB files (optional)], + imlib_prefix="$withval", imlib_prefix="") +AC_ARG_WITH(imlib-exec-prefix,[ --with-imlib-exec-prefix=PFX exec prefix for IMLIB files (optional)], + imlib_exec_prefix="$withval", imlib_exec_prefix="") +AC_ARG_ENABLE(imlibtest, [ --disable-imlibtest do not try to compile and run a test IMLIB program], + , enable_imlibtest=yes) + + if test x$imlib_exec_prefix != x ; then + imlib_args="$imlib_args --exec-prefix=$imlib_exec_prefix" + if test x${IMLIBCONF+set} != xset ; then + IMLIBCONF=$imlib_exec_prefix/bin/imlib-config + fi + fi + if test x$imlib_prefix != x ; then + imlib_args="$imlib_args --prefix=$imlib_prefix" + if test x${IMLIBCONF+set} != xset ; then + IMLIBCONF=$imlib_prefix/bin/imlib-config + fi + fi + + AC_PATH_PROG(IMLIBCONF, imlib-config, no) + min_imlib_version=ifelse([$1], ,1.8.1,$1) + AC_MSG_CHECKING(for IMLIB - version >= $min_imlib_version) + no_imlib="" + if test "$IMLIBCONF" = "no" ; then + no_imlib=yes + else + IMLIB_CFLAGS=`$IMLIBCONF $imlibconf_args --cflags` + IMLIB_LIBS=`$IMLIBCONF $imlibconf_args --libs` + + imlib_major_version=`$IMLIBCONF $imlib_args --version | \ + sed 's/^[[^0-9.]]*\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*$/\1/'` + imlib_minor_version=`$IMLIBCONF $imlib_args --version | \ + sed 's/^[[^0-9.]]*\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*$/\2/'` + if test "x$enable_imlibtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $IMLIB_CFLAGS" + LIBS="$LIBS $IMLIB_LIBS" +dnl +dnl Now check if the installed IMLIB is sufficiently new. (Also sanity +dnl checks the results of imlib-config to some extent +dnl + rm -f conf.imlibtest + AC_TRY_RUN([ +#include +#include +#include + +ImlibImage testimage; + +int main () +{ + int major, minor; + char *tmp_version; + + system ("touch conf.imlibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = strdup("$min_imlib_version"); + if (sscanf(tmp_version, "%d.%d", &major, &minor) != 2) { + printf("%s, bad version string\n", "$min_imlib_version"); + exit(1); + } + + if (($imlib_major_version > major) || + (($imlib_major_version == major) && ($imlib_minor_version > minor))) + { + return 0; + } + else + { + printf("\n*** 'imlib-config --version' returned %d.%d, but the minimum version\n", $imlib_major_version, $imlib_minor_version); + printf("*** of IMLIB required is %d.%d. If imlib-config is correct, then it is\n", major, minor); + printf("*** best to upgrade to the required version.\n"); + printf("*** If imlib-config was wrong, set the environment variable IMLIBCONF\n"); + printf("*** to point to the correct copy of imlib-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_imlib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_imlib" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$IMLIBCONF" = "no" ; then + echo "*** The imlib-config script installed by IMLIB could not be found" + echo "*** If IMLIB was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the IMLIBCONF environment variable to the" + echo "*** full path to imlib-config." + else + if test -f conf.imlibtest ; then + : + else + echo "*** Could not run IMLIB test program, checking why..." + CFLAGS="$CFLAGS $IMLIB_CFLAGS" + LIBS="$LIBS $IMLIB_LIBS" + AC_TRY_LINK([ +#include +#include +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding IMLIB or finding the wrong" + echo "*** version of IMLIB. If it is not finding IMLIB, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means IMLIB was incorrectly installed" + echo "*** or that you have moved IMLIB since it was installed. In the latter case, you" + echo "*** may want to edit the imlib-config script: $IMLIBCONF" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + IMLIB_CFLAGS="" + IMLIB_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(IMLIB_CFLAGS) + AC_SUBST(IMLIB_LIBS) + rm -f conf.imlibtest +]) + # Check for gdk-imlib AC_DEFUN([AM_PATH_GDK_IMLIB], [dnl --- fvwm-2.5.27.ds.orig/Makefile.am +++ fvwm-2.5.27.ds/Makefile.am @@ -14,7 +14,6 @@ doc \ docs \ rpm \ - debian \ sample.fvwmrc \ $(POSUB) \ tests @@ -83,13 +82,13 @@ # make deb-dist cparams='--enable-gnome --quiet' mparams='CFLAGS="-O2 -g"' # make deb-inplace release=1.mg fullname=migo # works on sources directly -deb-regenerate: - (cd debian && $(MAKE) $(AM_MAKEFLAGS) Makefile control) || exit 1 +#deb-regenerate: +# (cd debian && $(MAKE) $(AM_MAKEFLAGS) Makefile control) || exit 1 -deb-dist: dist deb-this +#deb-dist: dist deb-this -deb-this: deb-regenerate - $(MAKE) -f debian/Makefile $(AM_MAKEFLAGS) this || exit 1 +#deb-this: deb-regenerate +# $(MAKE) -f debian/Makefile $(AM_MAKEFLAGS) this || exit 1 -deb-inplace: deb-regenerate - $(MAKE) -f debian/Makefile $(AM_MAKEFLAGS) inplace || exit 1 +#deb-inplace: deb-regenerate +# $(MAKE) -f debian/Makefile $(AM_MAKEFLAGS) inplace || exit 1 --- fvwm-2.5.27.ds.orig/ChangeLog +++ fvwm-2.5.27.ds/ChangeLog @@ -1,5 +1,69 @@ +2009-07-10 Viktor Griph + + * NEWS: + * fvwm/ewmh_names.c (EWMH_WMName): + set the HAS_EWMH_WM_NAME flag even if the window name on display + isn't changing. + (EWMH_WMIconName): + same for HAS_EWMH_WM_ICON_NAME + +2009-07-08 Viktor Griph + + * NEWS: + fix for segfault with RPlatHost directive in FvwmEvent + * libs/Makefile.am (libfvwm_a_SOURCES): + * libs/Fplay.h: + add Fplay.h wrapper header for rplay.h + + * NEWS: + fix debian bug #438132 + +2009-07-06 Viktor Griph + + * NEWS: + * fvwm/style.c (fw_match_style_id): + Fix fvwmstyle resource + +2009-07-05 Viktor Griph + + * NEWS: + * fvwm/events.c (HandleMapRequestKeepRaised): + Make sure that a PropertyNotify on the WM_STATE property is always + sent out when a window is requested to be moved to the withdrawn + state. (Needed by QT) + +2009-07-01 Viktor Griph + + * sample.fvwmrc/DecorMwm: + * sample.fvwmrc/DecorWin95: + * sample.fvwmrc/new-features: + * sample.fvwmrc/system.fvwm2rc: + * sample.fvwmrc/system.fvwm2rc-sample-1: + * sample.fvwmrc/system.fvwm2rc-sample-2: + * sample.fvwmrc/system.fvwm2rc-sample-95: + Use !-negation for styles instead of No... + + * NEWS: + fix a typo + + * sample.fvwmrc/system.fvwm2rc-sample-95: + sed -i '/^#*\(+\|AddToMenu\) "[^%"]*%[^%"]*"/s/%\([^"]*\)/%\1%/' + sed -i 's/StayOnTop/StaysOnTop/' + According to patches by Manoj Srivastava + +2009-03-17 Mikhael Goikhman + + * fvwm/externs.h: + * fvwm/fvwm.c: + * fvwm/session.c: + convert my old code to use var_name and function_name coding style + 2009-02-23 Dominik Vogt + * NEWS: + * configure.ac: + increased version to 2.5.28 + * ANNOUNCE: * NEWS: * configure.ac: --- fvwm-2.5.27.ds.orig/modules/ChangeLog +++ fvwm-2.5.27.ds/modules/ChangeLog @@ -1,3 +1,24 @@ +2009-03-17 Mikhael Goikhman + + * FvwmDebug/FvwmDebug.in: + * FvwmDebug/FvwmGtkDebug.in: + * FvwmPerl/FvwmPerl.in: + * FvwmWindowMenu/FvwmWindowMenu.in: + convert my old code to use var_name and function_name coding style + +2009-03-12 Mikhael Goikhman + + * FvwmDebug/FvwmGtkDebug.in: + port the whole module from perl-Gtk1 to perl-Gtk2 + + * FvwmDebug/FvwmDebug.in: + add copyright line as required by GPL + +2009-03-10 Mikhael Goikhman + + * FvwmDebug/FvwmGtkDebug.in: + hide "use Gtk;" pseudo-dependency from annoying package builders + 2009-02-23 Dominik Vogt * FvwmButtons/button.c (alloc_buttonlist): --- fvwm-2.5.27.ds.orig/modules/FvwmDebug/FvwmGtkDebug.in +++ fvwm-2.5.27.ds/modules/FvwmDebug/FvwmGtkDebug.in @@ -1,5 +1,7 @@ #!@PERL@ -w +# Copyright (C) 2002-2009 Mikhael Goikhman +# # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or @@ -28,19 +30,18 @@ } use lib "@FVWM_PERLLIBDIR@"; -use FVWM::Module::Gtk; +use FVWM::Module::Gtk2; use FVWM::EventNames; -use Gtk; -init Gtk; +init Gtk2; -my $defaultMask = MAX_MSG_MASK & +my $default_mask = MAX_MSG_MASK & ~(M_FOCUS_CHANGE | M_CONFIGURE_WINDOW | M_VISIBLE_NAME | M_ICON_NAME); -my $defaultXMask = MAX_XMSG_MASK & +my $default_xmask = MAX_XMSG_MASK & ~(MX_ENTER_WINDOW | MX_LEAVE_WINDOW | MX_VISIBLE_ICON_NAME); -$defaultXMask &= ~M_EXTENDED_MSG; +$default_xmask &= ~M_EXTENDED_MSG; -my $mask = $defaultMask; -my $xmask = $defaultXMask; +my $mask = $default_mask; +my $xmask = $default_xmask; my $debug = 0; my $options = { @@ -49,7 +50,7 @@ 'd|debug=i' => \$debug, }; -my $module = new FVWM::Module::Gtk( +my $module = new FVWM::Module::Gtk2( Name => "FvwmGtkDebug", EnableOptions => $options, Debug => \$debug, @@ -57,57 +58,57 @@ $mask = MAX_MSG_MASK if $mask == -1; $xmask = MAX_XMSG_MASK if $xmask == -1; -my $newMask = $mask; -my $newXMask = $xmask; +my $new_mask = $mask; +my $new_xmask = $xmask; # ---------------------------------------------------------------------------- # functions my $monitoring = 0; -my $storedEventDatas = []; -my $currentEventNum = -1; -my $eventListSizeChanged = 0; -my $stickToLastEvent = 1; +my $stored_event_datas = []; +my $current_event_num = -1; +my $event_list_size_changed = 0; +my $stick_to_last_event = 1; -sub eventArgTypeToName ($) { +sub event_arg_type_to_name ($) { my $type = shift; return - $type == FVWM::EventNames::number? "number": - $type == FVWM::EventNames::bool? "boolean": - $type == FVWM::EventNames::window? "window": - $type == FVWM::EventNames::pixel? "color": - $type == FVWM::EventNames::string? "string": - $type == FVWM::EventNames::looped? "looped": - $type == FVWM::EventNames::wflags? "wflags": + $type == FVWM::EventNames::number ? "number" : + $type == FVWM::EventNames::bool ? "boolean" : + $type == FVWM::EventNames::window ? "window" : + $type == FVWM::EventNames::pixel ? "color" : + $type == FVWM::EventNames::string ? "string" : + $type == FVWM::EventNames::looped ? "looped" : + $type == FVWM::EventNames::wflags ? "wflags" : "unknown"; } -sub storeEvent ($$) { +sub store_event ($$) { my ($module, $event) = @_; - my @argNames = @{$event->argNames}; - my @argTypes = @{$event->argTypes}; - my @argValues = @{$event->argValues}; + my @arg_names = @{$event->arg_names}; + my @arg_types = @{$event->arg_types}; + my @arg_values = @{$event->arg_values}; # print STDERR $event->name, "\n"; - my $eventData = { + my $event_data = { type => $event->type, name => $event->name, time => time(), args => [], }; - while (@argNames) { - my $name = shift @argNames; - my $type = shift @argTypes; - my $value = shift @argValues; + while (@arg_names) { + my $name = shift @arg_names; + my $type = shift @arg_types; + my $value = shift @arg_values; my $text; if ($type == FVWM::EventNames::number) { $text = $value; $text = "*undefined*" unless defined $value; } elsif ($type == FVWM::EventNames::bool) { - $text = $value? "True": "False"; + $text = $value ? "True" : "False"; } elsif ($type == FVWM::EventNames::window) { $text = sprintf("0x%07lx", $value); } elsif ($type == FVWM::EventNames::pixel) { @@ -116,20 +117,20 @@ } elsif ($type == FVWM::EventNames::string) { $text = qq("$value"); } elsif ($type == FVWM::EventNames::looped) { - my $loopArgNames = $event->loopArgNames; - my $loopArgTypes = $event->loopArgTypes; + my $loop_arg_names = $event->loop_arg_names; + my $loop_arg_types = $event->loop_arg_types; my $j = 0; while ($j < @$value) { my $k = 0; - foreach (@$loopArgNames) { - my $i = int($j / @$loopArgNames) + 1; - push @argNames, "[$i] $_"; - push @argTypes, $loopArgTypes->[$k]; - push @argValues, $value->[$j]; + foreach (@$loop_arg_names) { + my $i = int($j / @$loop_arg_names) + 1; + push @arg_names, "[$i] $_"; + push @arg_types, $loop_arg_types->[$k]; + push @arg_values, $value->[$j]; $j++; $k++; } } - $text = sprintf("(%d)", @$value / @$loopArgNames); + $text = sprintf("(%d)", @$value / @$loop_arg_names); } elsif ($type == FVWM::EventNames::wflags) { my @words = unpack("l*", $value); my $label = join(" ", @@ -139,19 +140,19 @@ $text = qq([unsupported arg type $type] "$value"); } - push @{$eventData->{args}}, { + push @{$event_data->{args}}, { name => $name, type => $type, text => $text, }; } - push @$storedEventDatas, $eventData; - $eventListSizeChanged = 1; - &updateCurrentEventWidgets(); + push @$stored_event_datas, $event_data; + $event_list_size_changed = 1; + &update_current_event_widgets(); } -sub sendModuleEventMask () { +sub send_module_event_mask () { if ($monitoring) { $module->mask($mask); $module->xmask($xmask); @@ -161,413 +162,424 @@ } } -my $updateEventMaskButton; -my $revertEventMaskButton; +my $update_event_mask_button; +my $revert_event_mask_button; + +sub update_event_mask_change_buttons () { + my $is_changed = $mask != $new_mask || $xmask != $new_xmask; + $update_event_mask_button->set_sensitive($is_changed); + $revert_event_mask_button->set_sensitive($is_changed); +} -sub updateEventMaskChangeButtons () { - my $isChanged = $mask != $newMask || $xmask != $newXMask; - $updateEventMaskButton->set_sensitive($isChanged); - $revertEventMaskButton->set_sensitive($isChanged); +sub setup_button_size ($$) { + my $button = shift; + my $width = shift; + $button->set_size_request($width, 30); } # ---------------------------------------------------------------------------- # creating gui my $tmp; # there is a Gtk::Frame bug regarding set_border_width, so use tmp box -my $tooltips = Gtk::Tooltips->new; +my $tooltips = Gtk2::Tooltips->new; -my $window = new Gtk::Window; +my $window = new Gtk2::Window; $window->set_title($module->name); $window->set_border_width(4); -my $notebook = new Gtk::Notebook(); -$notebook->set_homogeneous_tabs(1); +my $notebook = new Gtk2::Notebook(); +$notebook->set(homogeneous => 1); +$notebook->set_tab_border(4); $window->add($notebook); # ---- setup page ---- -my $setupPage = new Gtk::VBox(0, 0); -$notebook->append_page($setupPage, new Gtk::Label(" Setup ")); +my $setup_page = new Gtk2::VBox(0, 0); +$notebook->append_page($setup_page, new Gtk2::Label(" Setup ")); -my $eventMaskBox = new Gtk::HBox(0, 0); -$setupPage->pack_start($eventMaskBox, 1, 1, 10); +my $event_mask_box = new Gtk2::HBox(0, 0); +$setup_page->pack_start($event_mask_box, 1, 1, 10); -my $eventMaskScroll = new Gtk::ScrolledWindow("", ""); -$eventMaskScroll->set_policy("automatic", "always"); +my $event_mask_scroll = new Gtk2::ScrolledWindow(); +$event_mask_scroll->set_policy("automatic", "always"); -my $eventMaskScrollFrame = new Gtk::Frame(" Event mask "); -$tmp = new Gtk::VBox(0, 0); $tmp->add($eventMaskScroll); $tmp->set_border_width(5); -$eventMaskScrollFrame->add($tmp); -$eventMaskBox->pack_start($eventMaskScrollFrame, 1, 1, 10); - -my $eventTypeBox = new Gtk::VButtonBox(); -$eventTypeBox->set_spacing(0); -$eventTypeBox->set_child_size(0, 0); -my $eventTypeCheckButtons = {}; +my $event_mask_scroll_frame = new Gtk2::Frame(" Event mask "); +$tmp = new Gtk2::VBox(0, 0); $tmp->add($event_mask_scroll); $tmp->set_border_width(5); +$event_mask_scroll_frame->add($tmp); +$event_mask_box->pack_start($event_mask_scroll_frame, 1, 1, 10); + +my $event_type_box = new Gtk2::VButtonBox(); +$event_type_box->set_spacing(0); +my $event_type_check_buttons = {}; my $type; -foreach $type (@{allEventTypes()}) { - my $checkButton = new Gtk::CheckButton(eventName($type)); - $checkButton->set_border_width(0); - $eventTypeBox->pack_start($checkButton, 0, 0, 0); - $eventTypeCheckButtons->{$type} = $checkButton; - $checkButton->signal_connect("clicked", sub { - ($type & M_EXTENDED_MSG? $newXMask: $newMask) ^= +foreach $type (@{all_event_types()}) { + my $check_button = Gtk2::CheckButton->new_with_label(event_name($type)); + $check_button->set_border_width(0); + $check_button->set_focus_on_click(0); + $event_type_box->pack_start($check_button, 0, 0, 0); + $event_type_check_buttons->{$type} = $check_button; + $check_button->signal_connect("clicked", sub { + ($type & M_EXTENDED_MSG ? $new_xmask : $new_mask) ^= ($type & ~M_EXTENDED_MSG); - updateEventMaskChangeButtons(); + update_event_mask_change_buttons(); }); } -$eventMaskScroll->add_with_viewport($eventTypeBox); +$event_mask_scroll->add_with_viewport($event_type_box); -sub updateCheckButtonsFromNewMask () { - my $curMask = $newMask; my $curXMask = $newXMask; - my ($type, $checkButton); - while (($type, $checkButton) = each %$eventTypeCheckButtons) { - $checkButton->set_active(($type & M_EXTENDED_MSG? - $newXMask: $newMask) & $type & ~M_EXTENDED_MSG); +sub update_check_buttons_from_new_mask () { + my $current_mask = $new_mask; my $current_xmask = $new_xmask; + my ($type, $check_button); + while (($type, $check_button) = each %$event_type_check_buttons) { + $check_button->set_active( + ($type & M_EXTENDED_MSG ? $new_xmask : $new_mask) & + $type & ~M_EXTENDED_MSG + ); } # unfortunately set_active triggers "clicked" signal, so correct this - $newMask = $curMask; $newXMask = $curXMask; - updateEventMaskChangeButtons(); + $new_mask = $current_mask; $new_xmask = $current_xmask; + update_event_mask_change_buttons(); } -my $eventMaskButtonBox = new Gtk::VButtonBox(); -$eventMaskButtonBox->set_spacing_default(10); -$eventMaskButtonBox->set_child_size(190, 0); -$eventMaskButtonBox->set_child_ipadding(0, 2); -$eventMaskButtonBox->set_layout('start'); -$eventMaskBox->pack_start($eventMaskButtonBox, 0, 0, 10); - -my $selectAllEventsButton = new Gtk::Button(" Select all events "); -$eventMaskButtonBox->pack_start($selectAllEventsButton, 1, 1, 6); -$selectAllEventsButton->signal_connect("clicked", sub { - $newMask = MAX_MSG_MASK; $newXMask = MAX_XMSG_MASK; - updateCheckButtonsFromNewMask(); -}); - -my $unselectAllEventsButton = new Gtk::Button(" Unselect all events "); -$eventMaskButtonBox->pack_start($unselectAllEventsButton, 1, 1, 6); -$unselectAllEventsButton->signal_connect("clicked", sub { - $newMask = 0; $newXMask = 0; - updateCheckButtonsFromNewMask(); -}); - -my $setDefaultEventsButton = new Gtk::Button(" Select default events "); -$eventMaskButtonBox->pack_start($setDefaultEventsButton, 1, 1, 6); -$setDefaultEventsButton->signal_connect("clicked", sub { - $newMask = $defaultMask; $newXMask = $defaultXMask; - updateCheckButtonsFromNewMask(); -}); - -$revertEventMaskButton = new Gtk::Button(" Restore current events "); -$eventMaskButtonBox->pack_start($revertEventMaskButton, 1, 1, 6); -$revertEventMaskButton->signal_connect("clicked", sub { - $newMask = $mask; $newXMask = $xmask; - updateCheckButtonsFromNewMask(); -}); - -my $setupButtonBox = new Gtk::HButtonBox(); -$setupButtonBox->set_border_width(10); -$setupButtonBox->set_child_size(190, 0); -$setupButtonBox->set_child_ipadding(0, 2); -$setupButtonBox->set_layout('edge'); -$setupPage->pack_end($setupButtonBox, 0, 0, 0); - -$updateEventMaskButton = new Gtk::Button(" Update event mask "); -$setupButtonBox->pack_start($updateEventMaskButton, 1, 1, 40); -$updateEventMaskButton->signal_connect("clicked", sub { - $mask = $newMask; $xmask = $newXMask; - sendModuleEventMask() if $monitoring; - updateEventMaskChangeButtons(); -}); - -my $startMonitoringButton = new Gtk::Button(" Start watching events "); -$setupButtonBox->pack_start($startMonitoringButton, 1, 1, 40); -$startMonitoringButton->signal_connect("clicked", \&switchMonitoring); +my $event_mask_button_box = new Gtk2::VButtonBox(); +$event_mask_button_box->set_spacing(10); +$event_mask_button_box->set_layout('start'); +$event_mask_box->pack_start($event_mask_button_box, 0, 0, 10); + +my $select_all_events_button = new Gtk2::Button(" Select _all events "); +$event_mask_button_box->pack_start($select_all_events_button, 1, 1, 6); +$select_all_events_button->signal_connect("clicked", sub { + $new_mask = MAX_MSG_MASK; $new_xmask = MAX_XMSG_MASK; + update_check_buttons_from_new_mask(); +}); + +my $unselect_all_events_button = new Gtk2::Button(" Unselect all _events "); +$event_mask_button_box->pack_start($unselect_all_events_button, 1, 1, 6); +$unselect_all_events_button->signal_connect("clicked", sub { + $new_mask = 0; $new_xmask = 0; + update_check_buttons_from_new_mask(); +}); + +my $select_default_events_button = new Gtk2::Button(" Select _default events "); +$event_mask_button_box->pack_start($select_default_events_button, 1, 1, 6); +$select_default_events_button->signal_connect("clicked", sub { + $new_mask = $default_mask; $new_xmask = $default_xmask; + update_check_buttons_from_new_mask(); +}); + +$revert_event_mask_button = new Gtk2::Button(" _Restore current events "); +$event_mask_button_box->pack_start($revert_event_mask_button, 1, 1, 6); +$revert_event_mask_button->signal_connect("clicked", sub { + $new_mask = $mask; $new_xmask = $xmask; + update_check_buttons_from_new_mask(); +}); + +$event_mask_button_box->foreach(\&setup_button_size, 172); + +my $setup_button_box = new Gtk2::HButtonBox(); +$setup_button_box->set_border_width(10); +$setup_button_box->set_spacing(20); +$setup_button_box->set_layout('edge'); +$setup_page->pack_end($setup_button_box, 0, 0, 0); + +$update_event_mask_button = new Gtk2::Button(" _Update event mask "); +$setup_button_box->pack_start($update_event_mask_button, 1, 1, 40); +$update_event_mask_button->signal_connect("clicked", sub { + $mask = $new_mask; $xmask = $new_xmask; + send_module_event_mask() if $monitoring; + update_event_mask_change_buttons(); +}); + +my $start_monitoring_button = new Gtk2::Button(" _Start watching events "); +$setup_button_box->pack_start($start_monitoring_button, 1, 1, 40); +$start_monitoring_button->signal_connect("clicked", \&switch_monitoring); + +$setup_button_box->foreach(\&setup_button_size, 172); # ---- event page ---- -my $eventPage = new Gtk::VBox(0, 0); -$eventPage->set_border_width(10); -$notebook->append_page($eventPage, new Gtk::Label(" Stored Events ")); - -my $eventNameLine = new Gtk::HBox(0, 0); -$eventPage->pack_start($eventNameLine, 0, 0, 0); - -my $eventNumBox = new Gtk::HBox(0, 0); -$eventNumBox->set_border_width(5); -my $eventNumFrame = new Gtk::Frame(" Event num "); -$eventNumFrame->add($eventNumBox); -$eventNameLine->pack_start($eventNumFrame, 0, 0, 0); - -my $eventNumAdj = new Gtk::Adjustment(0, 0, 0, 0, 0, 0); -my $eventNum = new Gtk::SpinButton($eventNumAdj, 0, 1); -$eventNum->set_usize(57, 0); -$eventNum->signal_connect("changed", \&updateCurrentEventNumber); -$eventNumBox->pack_start($eventNum, 0, 0, 0); - -my $eventTotalNum = new Gtk::Entry(); -$eventTotalNum->set_editable(0); -$eventTotalNum->set_usize(42, 0); -$eventNumBox->pack_start($eventTotalNum, 0, 0, 0); - -my $eventName = new Gtk::Entry(); -$eventName->set_editable(0); -$eventName->set_usize(154, 0); - -my $eventNameFrame = new Gtk::Frame(" Event type "); -$tmp = new Gtk::VBox(0, 0); $tmp->add($eventName); $tmp->set_border_width(5); -$eventNameFrame->add($tmp); -$eventNameLine->pack_start($eventNameFrame, 0, 0, 10); - -my $eventTime = new Gtk::Entry(); -$eventTime->set_usize(46, 0); -$eventTime->set_editable(0); - -my $eventTimeFrame = new Gtk::Frame(" Time "); -$tmp = new Gtk::VBox(0, 0); $tmp->add($eventTime); $tmp->set_border_width(5); -$eventTimeFrame->add($tmp); -$eventNameLine->pack_start($eventTimeFrame, 0, 0, 0); - -my $eventRunOptsButtonBox = new Gtk::VButtonBox(); -$eventRunOptsButtonBox->set_spacing(0); -$eventRunOptsButtonBox->set_child_size(0, 0); -$eventNameLine->pack_end($eventRunOptsButtonBox, 0, 0, 0); - -my $activeCheckButton = new Gtk::CheckButton("Active"); -$activeCheckButton->signal_connect("clicked", \&switchMonitoring); -$eventRunOptsButtonBox->pack_start($activeCheckButton, 0, 0, 0); - -my $stickCheckButton = new Gtk::CheckButton("Stick to last"); -$stickCheckButton->set_active($stickToLastEvent); -$stickCheckButton->signal_connect("clicked", sub { - $stickToLastEvent ^= 1; - &updateCurrentEventWidgets() - if $stickToLastEvent && $currentEventNum != @$storedEventDatas; +my $event_page = new Gtk2::VBox(0, 0); +$event_page->set_border_width(10); +$notebook->append_page($event_page, new Gtk2::Label(" Stored Events ")); + +my $event_name_line = new Gtk2::HBox(0, 0); +$event_page->pack_start($event_name_line, 0, 0, 0); + +my $event_num_box = new Gtk2::HBox(0, 0); +$event_num_box->set_border_width(5); +my $event_num_frame = new Gtk2::Frame(" Event num "); +$event_num_frame->add($event_num_box); +$event_name_line->pack_start($event_num_frame, 0, 0, 0); + +my $event_num_adj = new Gtk2::Adjustment(0, 0, 0, 1, 10, 0); +my $event_num = new Gtk2::SpinButton($event_num_adj, 0, 1); +$event_num->configure($event_num_adj, 0.5, 0); +$event_num->set_size_request(57, -1); +$event_num->signal_connect("changed", \&update_current_event_number); +$event_num_box->pack_start($event_num, 0, 0, 0); + +my $event_total_num = new Gtk2::Entry(); +$event_total_num->set_editable(0); +$event_total_num->set_size_request(42, -1); +$event_num_box->pack_start($event_total_num, 0, 0, 0); + +my $event_name = new Gtk2::Entry(); +$event_name->set_editable(0); +$event_name->set_size_request(154, -1); + +my $event_name_frame = new Gtk2::Frame(" Event type "); +$tmp = new Gtk2::VBox(0, 0); $tmp->add($event_name); $tmp->set_border_width(5); +$event_name_frame->add($tmp); +$event_name_line->pack_start($event_name_frame, 0, 0, 10); + +my $event_time = new Gtk2::Entry(); +$event_time->set_size_request(46, -1); +$event_time->set_editable(0); + +my $event_time_frame = new Gtk2::Frame(" Time "); +$tmp = new Gtk2::VBox(0, 0); $tmp->add($event_time); $tmp->set_border_width(5); +$event_time_frame->add($tmp); +$event_name_line->pack_start($event_time_frame, 0, 0, 0); + +my $event_run_opts_button_box = new Gtk2::VButtonBox(); +$event_run_opts_button_box->set_spacing(0); +$event_name_line->pack_end($event_run_opts_button_box, 0, 0, 0); + +my $active_check_button = new Gtk2::CheckButton("Active"); +$active_check_button->signal_connect("clicked", \&switch_monitoring); +$event_run_opts_button_box->pack_start($active_check_button, 0, 0, 0); + +my $stick_check_button = new Gtk2::CheckButton("Stick to last"); +$stick_check_button->set_active($stick_to_last_event); +$stick_check_button->signal_connect("clicked", sub { + $stick_to_last_event ^= 1; + &update_current_event_widgets() + if $stick_to_last_event && $current_event_num != @$stored_event_datas; }); -$eventRunOptsButtonBox->pack_start($stickCheckButton, 0, 0, 0); +$event_run_opts_button_box->pack_start($stick_check_button, 0, 0, 0); # ---- next event page row ---- -my $eventArgsList = new_with_titles Gtk::CList("Name", "Value"); -$eventArgsList->column_titles_passive(); -$eventArgsList->set_shadow_type("none"); -$eventArgsList->set_selection_mode("extended"); -$eventArgsList->set_column_width(0, 140); -my $lastRowSelected = -1; -$eventArgsList->signal_connect("select_row", sub { - my ($widget, $row) = @_; - my $currRowSelected = $lastRowSelected; - $lastRowSelected = $row; - return unless $currRowSelected == $row; - my $data = $widget->get_row_data($row); - $stickCheckButton->set_active(0); +my $event_args_list_store = Gtk2::ListStore->new('Glib::String', 'Glib::String'); +my $event_args_list = Gtk2::TreeView->new($event_args_list_store); +$event_args_list->set_rules_hint(1); +my $renderer = Gtk2::CellRendererText->new; +my $column1 = Gtk2::TreeViewColumn->new_with_attributes('Name', $renderer, text => 0); +my $column2 = Gtk2::TreeViewColumn->new_with_attributes('Value', $renderer, text => 1); +$column1->set_min_width(140); +$column1->set_resizable(1); +$event_args_list->append_column($column1); +$event_args_list->append_column($column2); + +$event_args_list->signal_connect("row-activated", sub { + my ($widget, $path, $column) = @_; + $stick_check_button->set_active(0); + my $n = ($path->get_indices)[0]; + my $data = $stored_event_datas->[$current_event_num - 1]->{args}->[$n]; + return unless ref($data) eq 'HASH'; my $text = $data->{text}; if (ref($text) eq 'HASH') { $text = join("", map { sprintf("\n%032b", $_) } @{$text->{value}} ); } - $module->showMessage( - "$data->{name} (" . eventArgTypeToName($data->{type}) . - "): $text", $eventName->get_text() . " event argument" + $module->show_message( + "$data->{name} (" . event_arg_type_to_name($data->{type}) . + "): $text", $event_name->get_text() . " event argument" ); }); -$eventArgsList->signal_connect("unselect_row", sub { $lastRowSelected = -1; }); -my $eventArgsListScroll = new Gtk::ScrolledWindow("", ""); -$eventArgsListScroll->set_policy("automatic", "automatic"); -$eventArgsListScroll->add_with_viewport($eventArgsList); - -my $eventArgsListScrollFrame = new Gtk::Frame(" Event arguments "); -$tmp = new Gtk::VBox(0, 0); $tmp->add($eventArgsListScroll); $tmp->set_border_width(5); -$eventArgsListScrollFrame->add($tmp); -$eventPage->pack_start($eventArgsListScrollFrame, 1, 1, 10); - -my $eventListButtonBox = new Gtk::HButtonBox(); -$eventListButtonBox->set_child_size(90, 0); -$eventListButtonBox->set_child_ipadding(0, 2); -$eventListButtonBox->set_layout('edge'); -$eventPage->pack_end($eventListButtonBox, 0, 0, 0); +my $event_args_list_scroll = new Gtk2::ScrolledWindow(); +$event_args_list_scroll->set_policy("automatic", "automatic"); +$event_args_list_scroll->add_with_viewport($event_args_list); + +my $event_args_list_scroll_frame = new Gtk2::Frame(" Event arguments "); +$tmp = new Gtk2::VBox(0, 0); $tmp->add($event_args_list_scroll); $tmp->set_border_width(5); +$event_args_list_scroll_frame->add($tmp); +$event_page->pack_start($event_args_list_scroll_frame, 1, 1, 10); + +my $event_list_button_box = new Gtk2::HButtonBox(); +$event_list_button_box->set_spacing(2); +$event_list_button_box->set_layout('edge'); +$event_page->pack_end($event_list_button_box, 0, 0, 0); -my $currentEventPossiblyDirty = 0; -sub filterStoredEvents ($) { +my $current_event_possibly_dirty = 0; +sub filter_stored_events ($) { my $func = shift; - my $initialNum = @$storedEventDatas; + my $initial_num = @$stored_event_datas; my $count = 0; my $index = 0; - for ($count = 1; $count <= $initialNum; $count++) { - if (&$func($count, $storedEventDatas->[$index]->{type})) { + for ($count = 1; $count <= $initial_num; $count++) { + if (&$func($count, $stored_event_datas->[$index]->{type})) { $index++; } else { - splice(@$storedEventDatas, $index, 1); + splice(@$stored_event_datas, $index, 1); } } - if ($initialNum != @$storedEventDatas) { - $eventListSizeChanged = 1; - $currentEventPossiblyDirty = 1; - updateCurrentEventWidgets(); + if ($initial_num != @$stored_event_datas) { + $event_list_size_changed = 1; + $current_event_possibly_dirty = 1; + update_current_event_widgets(); } } -my $clearThisOneButton = new Gtk::Button(" Clear one "); -$eventListButtonBox->pack_start($clearThisOneButton, 1, 1, 6); -$clearThisOneButton->signal_connect("clicked", sub { - filterStoredEvents(sub { $_[0] != $currentEventNum }); +my $clear_this_one_button = new Gtk2::Button(" _Clear one "); +$event_list_button_box->pack_start($clear_this_one_button, 1, 1, 6); +$clear_this_one_button->signal_connect("clicked", sub { + filter_stored_events(sub { $_[0] != $current_event_num }); }); -my $clearThisTypeButton = new Gtk::Button(" Clear type "); -$eventListButtonBox->pack_start($clearThisTypeButton, 1, 1, 6); -$clearThisTypeButton->signal_connect("clicked", sub { - my $currentType = $storedEventDatas->[$currentEventNum - 1]->{type}; - filterStoredEvents(sub { $_[1] != $currentType }); +my $clear_this_type_button = new Gtk2::Button(" Clear _type "); +$event_list_button_box->pack_start($clear_this_type_button, 1, 1, 6); +$clear_this_type_button->signal_connect("clicked", sub { + my $current_type = $stored_event_datas->[$current_event_num - 1]->{type}; + filter_stored_events(sub { $_[1] != $current_type }); }); -my $clearAllButton = new Gtk::Button(" Clear all "); -$eventListButtonBox->pack_start($clearAllButton, 1, 1, 6); -$clearAllButton->signal_connect("clicked", sub { - filterStoredEvents(sub { 0 }); +my $clear_all_button = new Gtk2::Button(" Cl_ear all "); +$event_list_button_box->pack_start($clear_all_button, 1, 1, 6); +$clear_all_button->signal_connect("clicked", sub { + filter_stored_events(sub { 0 }); }); -my $leaveThisTypeButton = new Gtk::Button(" Leave type "); -$eventListButtonBox->pack_start($leaveThisTypeButton, 1, 1, 6); -$leaveThisTypeButton->signal_connect("clicked", sub { - my $currentType = $storedEventDatas->[$currentEventNum - 1]->{type}; - filterStoredEvents(sub { $_[1] == $currentType }); +my $leave_this_type_button = new Gtk2::Button(" Leave t_ype "); +$event_list_button_box->pack_start($leave_this_type_button, 1, 1, 6); +$leave_this_type_button->signal_connect("clicked", sub { + my $current_type = $stored_event_datas->[$current_event_num - 1]->{type}; + filter_stored_events(sub { $_[1] == $current_type }); }); -my $leaveThisOneButton = new Gtk::Button(" Leave one "); -$eventListButtonBox->pack_start($leaveThisOneButton, 1, 1, 6); -$leaveThisOneButton->signal_connect("clicked", sub { - filterStoredEvents(sub { $_[0] == $currentEventNum }); +my $leave_this_one_button = new Gtk2::Button(" _Leave one "); +$event_list_button_box->pack_start($leave_this_one_button, 1, 1, 6); +$leave_this_one_button->signal_connect("clicked", sub { + filter_stored_events(sub { $_[0] == $current_event_num }); }); -sub updateCurrentEventWidgets (;$) { +$event_list_button_box->foreach(\&setup_button_size, 80); + +sub update_current_event_widgets (;$) { # update event number - my $maxNum = @$storedEventDatas; - my $num = shift || ($stickToLastEvent? $maxNum: $currentEventNum); + my $max_num = @$stored_event_datas; + my $min_num = $max_num > 0 ? 1 : 0; + my $num = shift || ($stick_to_last_event ? $max_num : $current_event_num); $num = 1 if $num <= 0; - $num = $maxNum if $num > $maxNum; - my $currentEventNumChanged = $currentEventNum != $num; - $currentEventNum = $num; - my $eventNumAdj = new Gtk::Adjustment($num, 1, $maxNum, 1, 10, 0); - # this line does not work with Gtk 0.6123, no idea how to replace it - $eventNum->configure($eventNumAdj, 0.5, 0) if $Gtk::VERSION > 0.62; - $eventTotalNum->set_text($maxNum); - - return unless $currentEventNumChanged - || $eventListSizeChanged || $currentEventPossiblyDirty; - $eventListSizeChanged = 0; - $lastRowSelected = -1; + $num = $max_num if $num > $max_num; + my $current_event_num_changed = $current_event_num != $num; + $current_event_num = $num; + + $event_num_adj->lower($min_num); + $event_num_adj->upper($max_num); + $event_num_adj->set_value($num); + $event_num->update; + $event_total_num->set_text($max_num); + + return unless $current_event_num_changed + || $event_list_size_changed || $current_event_possibly_dirty; + $event_list_size_changed = 0; # update event name - $eventName->set_text($num? $storedEventDatas->[$num - 1]->{name}: ""); + $event_name->set_text($num ? $stored_event_datas->[$num - 1]->{name} : ""); # update event args - if ($currentEventNumChanged || $currentEventPossiblyDirty) { - $eventArgsList->freeze(); - $eventArgsList->clear(); - my $row = 0; - foreach ($num? @{$storedEventDatas->[$num - 1]->{args}}: ()) { + if ($current_event_num_changed || $current_event_possibly_dirty) { + $event_args_list_store->clear; + foreach ($num ? @{$stored_event_datas->[$num - 1]->{args}} : ()) { my $data = $_; my $text = $data->{text}; $text = $text->{label} if ref($text) eq 'HASH'; - $eventArgsList->append($data->{name}, $text); - $eventArgsList->set_row_data($row++, $data); + my $iter = $event_args_list_store->append; + $event_args_list_store->set($iter, 0 => $data->{name}, 1 => $text); } - $eventArgsList->thaw(); - $currentEventPossiblyDirty = 0; + $current_event_possibly_dirty = 0; } # update event time - my $timeString1 = ""; - my $timeString2 = ""; + my $time_string1 = ""; + my $time_string2 = ""; if ($num) { - my $time = $storedEventDatas->[$num - 1]->{time}; + my $time = $stored_event_datas->[$num - 1]->{time}; my ($sec, $min, $hour, $day, $mon, $year) = localtime($time); $mon++; $year += 1900 if $year < 1900; - $timeString1 = sprintf("%02d:%02d", $hour, $min); - $timeString2 = sprintf("%s-%02d-%02d %02d:%02d:%02d", + $time_string1 = sprintf("%02d:%02d", $hour, $min); + $time_string2 = sprintf("%s-%02d-%02d %02d:%02d:%02d", $year, $mon, $day, $hour, $min, $sec); } - $eventTime->set_text($timeString1); - $tooltips->set_tip($eventTime, $timeString2); + $event_time->set_text($time_string1); + $tooltips->set_tip($event_time, $time_string2); # update event buttons - my $currentType = $num? $storedEventDatas->[$num - 1]->{type}: 0; - my $hasOtherTypes = 0; - foreach ($num = 1; $num <= $maxNum; $num++) { - if ($currentType != $storedEventDatas->[$num - 1]->{type}) - { $hasOtherTypes = 1; last; } + my $current_type = $num ? $stored_event_datas->[$num - 1]->{type} : 0; + my $has_other_types = 0; + foreach ($num = 1; $num <= $max_num; $num++) { + if ($current_type != $stored_event_datas->[$num - 1]->{type}) + { $has_other_types = 1; last; } } - $clearThisOneButton->set_sensitive($maxNum > 0); - $clearThisTypeButton->set_sensitive($maxNum > 0); - $clearAllButton->set_sensitive($maxNum > 0); - $leaveThisTypeButton->set_sensitive($hasOtherTypes); - $leaveThisOneButton->set_sensitive($maxNum > 1); -} - -sub updateCurrentEventNumber () { - return if $eventNum->value == $currentEventNum; - updateCurrentEventWidgets($eventNum->value); -} - -my $inSwitchMonitoring = 0; -sub switchMonitoring () { - return if $inSwitchMonitoring; - $inSwitchMonitoring = 1; + $clear_this_one_button->set_sensitive($max_num > 0); + $clear_this_type_button->set_sensitive($max_num > 0); + $clear_all_button->set_sensitive($max_num > 0); + $leave_this_type_button->set_sensitive($has_other_types); + $leave_this_one_button->set_sensitive($max_num > 1); +} + +sub update_current_event_number () { + return if $event_num->get_value == $current_event_num; + update_current_event_widgets($event_num->get_value); +} + +my $in_switch_monitoring = 0; +sub switch_monitoring () { + return if $in_switch_monitoring; + $in_switch_monitoring = 1; $monitoring ^= 1; - sendModuleEventMask(); - $startMonitoringButton->child->set($monitoring? - " Stop watching events ": " Start watching events "); - $activeCheckButton->set_active($monitoring); - $inSwitchMonitoring = 0; + send_module_event_mask(); + $start_monitoring_button->child->set_label($monitoring + ? " _Stop watching events " : " _Start watching events "); + $active_check_button->set_active($monitoring); + $in_switch_monitoring = 0; } # ---- tools page ---- -my $toolsPage = new Gtk::VBox(0, 0); -$toolsPage->set_border_width(10); -$notebook->append_page($toolsPage, new Gtk::Label(" Tools ")); - -my $requestButtonBox = new Gtk::HButtonBox(); -$requestButtonBox->set_child_size(190, 0); -$requestButtonBox->set_child_ipadding(0, 2); -$requestButtonBox->set_layout('edge'); - -my $requestButtonBoxFrame = new Gtk::Frame(" Request module info "); -$tmp = new Gtk::VBox(0, 0); $tmp->add($requestButtonBox); $tmp->set_border_width(5); -$requestButtonBoxFrame->add($tmp); -$toolsPage->pack_start($requestButtonBoxFrame, 0, 0, 0); - -my $sendConfigInfoButton = new Gtk::Button(" Send_ConfigInfo "); -$requestButtonBox->pack_end($sendConfigInfoButton, 1, 1, 6); -$sendConfigInfoButton->signal_connect("clicked", sub { +my $tools_page = new Gtk2::VBox(0, 0); +$tools_page->set_border_width(10); +$notebook->append_page($tools_page, new Gtk2::Label(" Tools ")); + +my $request_button_box = new Gtk2::HButtonBox(); +$request_button_box->set_layout('edge'); + +my $request_button_box_frame = new Gtk2::Frame(" Request module info "); +$tmp = new Gtk2::VBox(0, 0); $tmp->add($request_button_box); $tmp->set_border_width(5); +$request_button_box_frame->add($tmp); +$tools_page->pack_start($request_button_box_frame, 0, 0, 0); + +my $send_configinfo_button = new Gtk2::Button(" Send__ConfigInfo "); +$request_button_box->pack_end($send_configinfo_button, 1, 1, 6); +$send_configinfo_button->signal_connect("clicked", sub { $module->send("Send_ConfigInfo"); }); -my $sendWindowListButton = new Gtk::Button(" Send_WindowList "); -$requestButtonBox->pack_end($sendWindowListButton, 1, 1, 6); -$sendWindowListButton->signal_connect("clicked", sub { +my $send_windowlist_button = new Gtk2::Button(" Send__WindowList "); +$request_button_box->pack_end($send_windowlist_button, 1, 1, 6); +$send_windowlist_button->signal_connect("clicked", sub { $module->send("Send_WindowList"); }); -my $commandToSend = new Gtk::Entry(); -$commandToSend->signal_connect("activate", sub { - $module->send($commandToSend->get_text); - $commandToSend->set_text(""); -}); - -my $commandToSendFrame = new Gtk::Frame(" Command console "); -$tmp = new Gtk::VBox(0, 0); $tmp->add($commandToSend); $tmp->set_border_width(5); -$commandToSendFrame->add($tmp); -$toolsPage->pack_start($commandToSendFrame, 0, 0, 10); - -my $quitButtonBox = new Gtk::HButtonBox(); -$quitButtonBox->set_child_size(190, 0); -$quitButtonBox->set_child_ipadding(0, 2); -$quitButtonBox->set_layout('edge'); -$toolsPage->pack_end($quitButtonBox, 0, 0, 0); - -my $helpButton = new Gtk::Button(" Help "); -$quitButtonBox->pack_end($helpButton, 1, 1, 6); -$helpButton->signal_connect("clicked", sub { - $module->showMessage(<signal_connect("activate", sub { + $module->send($command_to_send->get_text); + $command_to_send->set_text(""); +}); + +$request_button_box->foreach(\&setup_button_size, 172); + +my $command_to_send_frame = new Gtk2::Frame(" Command console "); +$tmp = new Gtk2::VBox(0, 0); $tmp->add($command_to_send); $tmp->set_border_width(5); +$command_to_send_frame->add($tmp); +$tools_page->pack_start($command_to_send_frame, 0, 0, 10); + +my $quit_button_box = new Gtk2::HButtonBox(); +$quit_button_box->set_layout('edge'); +$tools_page->pack_end($quit_button_box, 0, 0, 0); + +my $help_button = new Gtk2::Button(" _Help "); +$quit_button_box->pack_end($help_button, 1, 1, 6); +$help_button->signal_connect("clicked", sub { + $module->show_message(<pack_end($quitButton, 1, 1, 6); -$quitButton->signal_connect("clicked", sub { Gtk->main_quit; }); +my $quit_button = new Gtk2::Button(" _Quit "); +$quit_button_box->pack_end($quit_button, 1, 1, 6); +$quit_button->signal_connect("clicked", sub { Gtk2->main_quit; }); + +$quit_button_box->foreach(\&setup_button_size, 120); # ---- last GUI preparations ---- -updateCheckButtonsFromNewMask(); -updateCurrentEventWidgets(); +update_check_buttons_from_new_mask(); +update_current_event_widgets(); -$window->signal_connect("destroy" => \&Gtk::main_quit); -$window->signal_connect("delete_event" => \&Gtk::false); -$window->set_usize(520, 600); +$window->signal_connect("destroy" => \&Gtk2::main_quit); +$window->set_default_size(500, 600); $window->show_all; # ---------------------------------------------------------------------------- # main -sendModuleEventMask(); +send_module_event_mask(); -$module->addHandler(MAX_MSG_MASK, \&storeEvent); -$module->addHandler(MAX_XMSG_MASK | M_EXTENDED_MSG, \&storeEvent); +$module->add_handler(MAX_MSG_MASK, \&store_event); +$module->add_handler(MAX_XMSG_MASK | M_EXTENDED_MSG, \&store_event); -sub emulateSomeEvents () { - $module->emulateEvent(M_NEW_DESK, [ $currentEventNum ]); - $module->emulateEvent(M_MAP, [ 0x123, 0x456, 789 ]); - $module->emulateEvent(M_NEW_PAGE, [ 0, 0, 2, 800, 600, 3, 3 ]); -} - -if ($module->isDummy) { - $module->showMessage("This module is executed in the dummy mode.\n\n" - . "Every 20 seconds fake events are generated.\n\n" - . "There are known alarm problems with perl-5.8.0 + Gtk-Perl."); - emulateSomeEvents(); - emulateSomeEvents(); +sub emulate_some_events () { + $module->emulate_event(M_NEW_DESK, [ $current_event_num ]); + $module->emulate_event(M_MAP, [ 0x123, 0x456, 789 ]); + $module->emulate_event(M_NEW_PAGE, [ 0, 0, 2, 800, 600, 3, 3 ]); +} + +if ($module->is_dummy) { + $module->show_message( + "This module is executed in the dummy mode.\n\n" . + "Every 20 seconds fake events are generated." + ); + emulate_some_events(); + emulate_some_events(); my $scheduler = $module->track('Scheduler'); $scheduler->schedule(20, sub { - emulateSomeEvents() if $monitoring; + emulate_some_events() if $monitoring; $scheduler->reschedule; }); } -$module->eventLoop; +$module->event_loop; __END__ --- fvwm-2.5.27.ds.orig/modules/FvwmDebug/FvwmDebug.in +++ fvwm-2.5.27.ds/modules/FvwmDebug/FvwmDebug.in @@ -1,5 +1,7 @@ #!@PERL@ -w +# Copyright (C) 2002-2009 Mikhael Goikhman +# # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or @@ -30,36 +32,36 @@ use lib "@FVWM_PERLLIBDIR@"; use FVWM::Module; -my $defaultMask = MAX_MSG_MASK & +my $default_mask = MAX_MSG_MASK & ~(M_FOCUS_CHANGE | M_CONFIGURE_WINDOW | M_VISIBLE_NAME | M_ICON_NAME); -my $defaultXMask = MAX_XMSG_MASK & +my $default_xmask = MAX_XMSG_MASK & ~(MX_ENTER_WINDOW | MX_LEAVE_WINDOW | MX_VISIBLE_ICON_NAME); -$defaultXMask &= ~M_EXTENDED_MSG; +$default_xmask &= ~M_EXTENDED_MSG; -my $mask = $defaultMask; -my $xmask = $defaultXMask; +my $mask = $default_mask; +my $xmask = $default_xmask; my $debug = 0; -my $showArgs = 1; -my $showEvents = undef; -my $logFile = undef; +my $show_args = 1; +my $show_events = undef; +my $log_file = undef; my $xconsole = 0; -my $logStream = \*STDERR; -my $sendConfigInfo = 0; -my $sendWindowList = 0; -my @trackerNames = (); -my @moduleArgs = @ARGV; +my $log_stream = \*STDERR; +my $send_configinfo = 0; +my $send_windowlist = 0; +my @tracker_names = (); +my @module_args = @ARGV; my $options = { - 'args!' => \$showArgs, - 'events!' => \$showEvents, - 'l|log=s' => \$logFile, + 'args!' => \$show_args, + 'events!' => \$show_events, + 'l|log=s' => \$log_file, 'xc|xconsole' => \$xconsole, 'm|mask=i' => \$mask, 'x|xmask=i' => \$xmask, - 'sc|send-configinfo' => \$sendConfigInfo, - 'sw|send-windowlist' => \$sendWindowList, + 'sc|send-configinfo' => \$send_configinfo, + 'sw|send-windowlist' => \$send_windowlist, 'd|debug=i' => \$debug, - 't|track=s' => \@trackerNames, + 't|track=s' => \@tracker_names, }; my $module = new FVWM::Module( @@ -68,29 +70,29 @@ EnableOptions => $options, ); -$showEvents = (@trackerNames? 0: 1) unless defined $showEvents; +$show_events = (@tracker_names ? 0 : 1) unless defined $show_events; $mask = MAX_MSG_MASK if $mask == -1; $xmask = MAX_XMSG_MASK if $xmask == -1; -$module->debug("argv = '" . join("', '", @moduleArgs) . "'\n"); +$module->debug("argv = '" . join("', '", @module_args) . "'\n"); $module->mask($mask); $module->xmask($xmask); -#$module->addHandler($mask, \&showEvent); -#$module->addHandler($xmask | M_EXTENDED_MSG, \&showEvent); -$module->addHandler(MAX_MSG_MASK, \&showEvent); -$module->addHandler(MAX_XMSG_MASK | M_EXTENDED_MSG, \&showEvent); +#$module->add_handler($mask, \&show_event); +#$module->add_handler($xmask | M_EXTENDED_MSG, \&show_event); +$module->add_handler(MAX_MSG_MASK, \&show_event); +$module->add_handler(MAX_XMSG_MASK | M_EXTENDED_MSG, \&show_event); -$module->addHandler(ON_EXIT, sub { system("killall xconsole"); }) if $xconsole; -$logFile = '|xconsole -file /dev/stdin -geometry 600x400 -notify' if $xconsole; +$module->add_handler(ON_EXIT, sub { system("killall xconsole"); }) if $xconsole; +$log_file = '|xconsole -file /dev/stdin -geometry 600x400 -notify' if $xconsole; -if ($logFile) { +if ($log_file) { # let's hope the system will close it automatically on exit - my $prefix = $logFile =~ /^\s*\|/? "": ">"; - open $logStream, "$prefix$logFile"; + my $prefix = $log_file =~ /^\s*\|/ ? "" : ">"; + open $log_stream, "$prefix$log_file"; } -foreach my $name (@trackerNames) { +foreach my $name (@tracker_names) { my $tracker = $module->track($name); $module->debug( "$name: initialized\n" . $tracker->dump . ("-" x 74), 0 @@ -104,20 +106,20 @@ }); } -$module->send("Send_ConfigInfo") if $sendConfigInfo; -$module->send("Send_WindowList") if $sendWindowList; +$module->send("Send_ConfigInfo") if $send_configinfo; +$module->send("Send_WindowList") if $send_windowlist; -$module->eventLoop; +$module->event_loop; -sub showEvent ($$) { - return unless $showEvents; +sub show_event ($$) { + return unless $show_events; my ($module, $event) = @_; - unless ($showArgs) { - print $logStream $event->name, "\n"; + unless ($show_args) { + print $log_stream $event->name, "\n"; return; } - print $logStream $event->dump; + print $log_stream $event->dump; } __END__ --- fvwm-2.5.27.ds.orig/modules/FvwmWindowMenu/FvwmWindowMenu.in +++ fvwm-2.5.27.ds/modules/FvwmWindowMenu/FvwmWindowMenu.in @@ -29,10 +29,10 @@ use lib "@FVWM_PERLLIBDIR@"; use FVWM::Module; -use General::Parse; +use General::Parse qw(get_token); -my $moduleType = ""; -my $moduleClass = "FVWM::Module"; +my $module_type = ""; +my $module_class = "FVWM::Module"; if ($ARGV[5] && $ARGV[5] eq "-g") { splice(@ARGV, 5, 1); eval "use FVWM::Module::Gtk;"; @@ -41,8 +41,8 @@ print STDERR "FvwmWindowMenu: Ignoring the -g switch\n"; } else { Gtk->init; - $moduleType = "gtk"; - $moduleClass = "FVWM::Module::Gtk"; + $module_type = "gtk"; + $module_class = "FVWM::Module::Gtk"; } } @@ -50,7 +50,7 @@ # set Debug = 0 for no messages at all # set Debug = 1 to see messages about window decisions # set Debug = 2 to see also perllib messages about communication -my $module = new $moduleClass( +my $module = new $module_class( Name => "FvwmWindowMenu", Mask => M_STRING, Debug => 0, @@ -58,7 +58,7 @@ $module->debug("starting " . $module->name); -my $configTracker = $module->track('ModuleConfig', +my $config_tracker = $module->track('ModuleConfig', DefaultConfig => { OnlyIconified => 'off', AllDesks => 'off', @@ -78,17 +78,17 @@ }, ); -my $pConfig = $configTracker->data(); -my $winTracker = $module->track("WindowList", "!stack icons names winfo"); +my $config = $config_tracker->data; +my $win_tracker = $module->track("WindowList", "!stack icons names winfo"); -$module->addHandler(M_STRING, sub { +$module->add_handler(M_STRING, sub { my ($module, $event) = @_; - my ($action, $args) = getToken($event->_text); + my ($action, $args) = get_token($event->_text); return unless $action; if ($action =~ /^Post|Menu|Popup$/i) { PopupMenu($action, $args); } elsif ($action =~ /^ShowBar$/i) { - if ($moduleType ne "gtk") { + if ($module_type ne "gtk") { $module->debug("Not started with Gtk support", 0); return; } @@ -103,123 +103,121 @@ my ($action, $args) = @_; my $command = ($action =~ /^Popup$/i ? "Popup" : "Menu"); - my @aSection; + my @sections; # loop on list of all windows - my $pData = $winTracker->data(); - foreach my $id (keys(%{$pData})) - { - my $p = $pData->{$id}; - $module->debug("\t$id - " . $p->{name}); + my $windows = $win_tracker->data; + while (my ($id, $w) = each %$windows) { + $module->debug("\twindow: " . $w->{name}); - if ($pConfig->{AllDesks} =~ /off/i && - $p->{desk} != $winTracker->pageInfo('desk_n')) + if ($config->{AllDesks} =~ /off/i && + $w->{desk} != $win_tracker->page_info('desk_n')) { $module->debug("\t\tnot on this desk"); next; } - if ($pConfig->{AllPages} =~ /off/i && - ($p->{page_nx} != $winTracker->pageInfo('page_nx') || - $p->{page_ny} != $winTracker->pageInfo('page_ny'))) + if ($config->{AllPages} =~ /off/i && + ($w->{page_nx} != $win_tracker->page_info('page_nx') || + $w->{page_ny} != $win_tracker->page_info('page_ny'))) { $module->debug("\t\tnot on this page"); next; } - if ($pConfig->{OnlyIconified} =~ /on/i && !$p->{iconified}) + if ($config->{OnlyIconified} =~ /on/i && !$w->{iconified}) { $module->debug("\t\tnot iconified"); next; } my $section = 3; - if ($pConfig->{ShowName} ne '' && - $p->{name} =~ /$pConfig->{ShowName}/i) { + if ($config->{ShowName} ne '' && + $w->{name} =~ /$config->{ShowName}/i) { $section = 0; - } elsif ($pConfig->{ShowClass} ne '' && - $p->{res_class_name} =~ /$pConfig->{ShowClass}/i) { + } elsif ($config->{ShowClass} ne '' && + $w->{res_class_name} =~ /$config->{ShowClass}/i) { $section = 1; - } elsif ($pConfig->{ShowResource} ne '' && - $p->{res_name} =~ /$pConfig->{ShowResource}/i) { + } elsif ($config->{ShowResource} ne '' && + $w->{res_name} =~ /$config->{ShowResource}/i) { $section = 2; } if ($section == 3) { - if (($pConfig->{DontShowName} ne '' && - $p->{name} =~ /$pConfig->{DontShowName}/i) || - ($pConfig->{DontShowClass} ne '' && - $p->{res_class_name} =~ /$pConfig->{DontShowClass}/i) || - ($pConfig->{DontShowResource} ne '' && - $p->{res_name} =~ /$pConfig->{DontShowResource}/i)) + if (($config->{DontShowName} ne '' && + $w->{name} =~ /$config->{DontShowName}/i) || + ($config->{DontShowClass} ne '' && + $w->{res_class_name} =~ /$config->{DontShowClass}/i) || + ($config->{DontShowResource} ne '' && + $w->{res_name} =~ /$config->{DontShowResource}/i)) { $module->debug("\t\tin dontshow list"); next; } } $module->debug("\t\tadding to section $section"); - AddToSection(\$aSection[$section], $id); + AddToSection(\$sections[$section], $id); } # tell fvwm to start the menu - $module->send("DestroyMenu recreate $pConfig->{MenuName}"); - $module->send("AddToMenu " . $pConfig->{MenuName} . " 'Desk " . - $winTracker->pageInfo('desk_n') . ", Page " . - $winTracker->pageInfo('page_nx') . ' ' . - $winTracker->pageInfo('page_ny') . "' Title"); + $module->send("DestroyMenu recreate $config->{MenuName}"); + $module->send("AddToMenu " . $config->{MenuName} . " 'Desk " . + $win_tracker->page_info('desk_n') . ", Page " . + $win_tracker->page_info('page_nx') . ' ' . + $win_tracker->page_info('page_ny') . "' Title"); # now loop on sections sending menu entries to fvwm - while (@aSection) { - my $s = shift @aSection; + while (@sections) { + my $s = shift @sections; if ($s) { $module->send($s); # add separator after section unless it is the last - $module->send("+ \"\" Nop") if @aSection; + $module->send("+ \"\" Nop") if @sections; } } # set a menustyle if one given - $module->send("ChangeMenuStyle $pConfig->{MenuStyle} $pConfig->{MenuName}") - if ($pConfig->{MenuStyle} ne ''); + $module->send("ChangeMenuStyle $config->{MenuStyle} $config->{MenuName}") + if ($config->{MenuStyle} ne ''); # popup the menu with args we were sent - $module->send("$command $pConfig->{MenuName} $args"); + $module->send("$command $config->{MenuName} $args"); } # build a line containing the fvwm menu entry for a window -# then add it to the appropriate member of the global array @aSection +# then add it to the appropriate member of the global array @sections # args: pointer to section, window id sub AddToSection ($$) { my ($s, $id) = @_; - my $format = $pConfig->{ItemFormat}; - my $p = $winTracker->data($id); + my $format = $config->{ItemFormat}; + my $w = $win_tracker->data($id); # hack: insert __%__ instead of % to avoid bogus substitution later $format =~ s/%%/__%____%__/g; # make format string substitutions $format =~ s/%t/\t/g; - $format =~ s/%n/&Shorten($p->{name})/ge; - $format =~ s/%i/&Shorten($p->{icon_name})/ge; - $format =~ s/%c/&Shorten($p->{res_class_name})/ge; - $format =~ s/%r/&Shorten($p->{res_name})/ge; - $format =~ s/%X/$p->{X}/g; - $format =~ s/%Y/$p->{Y}/g; - $format =~ s/%x/$p->{x}/g; - $format =~ s/%y/$p->{y}/g; - $format =~ s/%d/$p->{desk}/g; + $format =~ s/%n/&Shorten($w->{name})/ge; + $format =~ s/%i/&Shorten($w->{icon_name})/ge; + $format =~ s/%c/&Shorten($w->{res_class_name})/ge; + $format =~ s/%r/&Shorten($w->{res_name})/ge; + $format =~ s/%X/$w->{X}/g; + $format =~ s/%Y/$w->{Y}/g; + $format =~ s/%x/$w->{x}/g; + $format =~ s/%y/$w->{y}/g; + $format =~ s/%d/$w->{desk}/g; # TODO: doesn't handle EWMH icons yet. - $format =~ s/%m// if ($p->{mini_icon_name} eq 'ewmh_mini_icon'); - $format =~ s/%m/__%__$p->{mini_icon_name}__%__/g; + $format =~ s/%m// if ($w->{mini_icon_name} eq 'ewmh_mini_icon'); + $format =~ s/%m/__%__$w->{mini_icon_name}__%__/g; # %M is strange - does anyone really want this behaviour? -- SS. - if ($p->{iconified}) { - $format =~ s/%M/__%__$p->{mini_icon_name}__%__/g; + if ($w->{iconified}) { + $format =~ s/%M/__%__$w->{mini_icon_name}__%__/g; } else { $format =~ s/%M//g; } @@ -232,14 +230,14 @@ # add the entry to the section # support two ways for now: window context (new), window id param (old) - $$s .= qq(+ "$format" WindowId $id $pConfig->{Function} $id\n); + $$s .= qq(+ "$format" WindowId $id $config->{Function} $id\n); } # shorten a string to given length and append ellipses sub Shorten ($) { my ($string) = @_; - my $length = $pConfig->{MaxLen}; + my $length = $config->{MaxLen}; my $r = substr($string, 0, $length); $r .= "..." if length($string) > $length; @@ -259,8 +257,8 @@ $window->set_border_width(5); $window->set_usize($w, $h); - my $screenW = $winTracker->pageInfo('vp_width'); - my $screenH = $winTracker->pageInfo('vp_height'); + my $screenW = $win_tracker->page_info('vp_width'); + my $screenH = $win_tracker->page_info('vp_height'); $window->set_uposition(($screenW - $w) / 2, ($screenH - $h) / 2); my $frame = new Gtk::Frame(); @@ -279,16 +277,16 @@ $window->show_all; -# my $winId = $window->window->XWINDOW(); -# $module->send("Schedule 2000 WindowId $winId Close"); +# my $win_id = $window->window->XWINDOW(); +# $module->send("Schedule 2000 WindowId $win_id Close"); } - $module->send( "Style FvwmWindowMenuBar UsePPosition, !Title, !Borders, " . "StaysOnTop, WindowListSkip, CascadePlacement, SloppyFocus" -) if $moduleType eq "gtk"; -$module->eventLoop; +) if $module_type eq "gtk"; + +$module->event_loop; 1; --- fvwm-2.5.27.ds.orig/modules/FvwmEvent/FvwmEvent.c +++ fvwm-2.5.27.ds/modules/FvwmEvent/FvwmEvent.c @@ -43,10 +43,7 @@ /* * rplay includes: */ -#ifdef HAVE_RPLAY -#include -#undef M_ERROR /* Solaris fix */ -#endif +#include "libs/Fplay.h" #include "libs/Module.h" #include "libs/fvwmlib.h" @@ -151,6 +148,8 @@ { "enter_window", 0 }, { "leave_window", 0 }, { "property_change", 0}, + { "reply", 0}, /* FvwmEvent will never receive an MX_REPLY message, + but the event is needed for counts to add up right */ /* built in events */ #ifdef M_BELL { "beep", -1 }, @@ -167,10 +166,8 @@ /* define the action table */ static char *action_table[MAX_TOTAL_MESSAGES+MAX_BUILTIN]; -#ifdef HAVE_RPLAY static int rplay_fd = -1; -static RPLAY *rplay_table[MAX_TOTAL_MESSAGES+MAX_BUILTIN]; -#endif +static FPLAY *rplay_table[MAX_TOTAL_MESSAGES+MAX_BUILTIN]; static unsigned int m_selected = 0; static unsigned int mx_selected = 0; @@ -407,21 +404,19 @@ */ void execute_event(short event, unsigned long *body) { -#ifdef HAVE_RPLAY /* this is the sign that rplay is used */ if (rplay_fd != -1 && rplay_table[event]) { - if (rplay(rplay_fd, rplay_table[event]) >= 0) + if (Fplay(rplay_fd, rplay_table[event]) >= 0) { last_time = now; } else { - rplay_perror("rplay"); + Fplay_perror("rplay"); } return; } -#endif if (action_table[event]) { @@ -527,10 +522,8 @@ char **e; int i; int found; -#ifdef HAVE_RPLAY - int volume = RPLAY_DEFAULT_VOLUME; - int priority = RPLAY_DEFAULT_PRIORITY; -#endif + int volume = FPLAY_DEFAULT_VOLUME; + int priority = FPLAY_DEFAULT_PRIORITY; p = buf + MyNameLen; /* config option ? */ @@ -600,7 +593,6 @@ PassID = True; break; -#ifdef HAVE_RPLAY case 5: /* RPlayHost */ if (*phost) @@ -613,16 +605,18 @@ /* Check for $HOSTDISPLAY */ char *c1 = (char *)getenv(token + 1); char *c2; - - *phost = safestrdup(c1); - c2 = *phost; - while (c1 && *c1 != ':') + if (c1 != NULL) { - *c2++ = *c1++; + *phost = safestrdup(c1); + c2 = *phost; + while (c1 && *c1 != ':') + { + *c2++ = *c1++; + } + *c2 = '\0'; } - *c2 = '\0'; } - else + else if (token) { *phost = safestrdup(token); } @@ -643,7 +637,6 @@ volume = atoi(token); } break; -#endif case 8: /* StartDelay */ @@ -679,13 +672,17 @@ { if (MatchToken(event, event_table[i].name)) { -#ifdef HAVE_RPLAY - rplay_table[i] = rplay_create(RPLAY_PLAY); - rplay_set( - rplay_table[i], RPLAY_APPEND, - RPLAY_SOUND, action, RPLAY_PRIORITY, - priority, RPLAY_VOLUME, volume, NULL); -#endif + if (USE_FPLAY) + { + rplay_table[i] = Fplay_create( + FPLAY_PLAY); + Fplay_set( + rplay_table[i], FPLAY_APPEND, + FPLAY_SOUND, action, + FPLAY_PRIORITY, priority, + FPLAY_VOLUME, volume, NULL); + } + if (action_table[i]) { free(action_table[i]); @@ -727,17 +724,17 @@ int i; char *host = NULL; -#ifdef HAVE_RPLAY - host = safestrdup(rplay_default_host()); -#endif + if (USE_FPLAY) + { + host = safestrdup(Fplay_default_host()); + } + /* Intialize all the actions */ for (i = 0; i < MAX_TOTAL_MESSAGES+MAX_BUILTIN; i++) { action_table[i] = NULL; -#ifdef HAVE_RPLAY rplay_table[i] = NULL; -#endif } /* get config lines with my name */ @@ -757,18 +754,16 @@ } } -#ifdef HAVE_RPLAY /* Builtin rplay support is enabled when * FvwmAudioPlayCmd == builtin-rplay. */ - if (StrEquals(cmd_line, "builtin-rplay")) + if (USE_FPLAY && StrEquals(cmd_line, "builtin-rplay")) { - if ((rplay_fd = rplay_open(host)) < 0) + if ((rplay_fd = Fplay_open(host)) < 0) { - rplay_perror("rplay_open"); + Fplay_perror("rplay_open"); exit(1); } } -#endif return; } --- fvwm-2.5.27.ds.orig/modules/FvwmPerl/FvwmPerl.in +++ fvwm-2.5.27.ds/modules/FvwmPerl/FvwmPerl.in @@ -1,5 +1,7 @@ #!@PERL@ -w +# Copyright (C) 2002-2009 Mikhael Goikhman +# # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or @@ -36,45 +38,45 @@ # ---------------------------------------------------------------------------- # variables -my $lineToEval = undef; -my $fileToLoad = undef; +my $line_to_eval = undef; +my $file_to_load = undef; my $preprocess = 0; -my $exportFuncNames = undef; +my $export_func_names = undef; # whether continue running after --eval, --load or --preprocess, default is no my $stay = 0; my $nolock = 0; my $debug = 0; my $detached = 0; -my $ppArgs = undef; -my $preprocessOptions = undef; -my $ppFileCount = 0; -my $ppMainQuoteRef = undef; - -sub initPreprocessVars () { - $ppArgs = {}; - $ppArgs->{quote} = $$ppMainQuoteRef if $ppMainQuoteRef; - $ppMainQuoteRef = \$ppArgs->{quote} unless $ppMainQuoteRef; - - $preprocessOptions = { - "c|cmd|command" => \$ppArgs->{command}, - "q|quote=s" => \$ppArgs->{quote}, - "w|winid=s" => \$ppArgs->{winid}, - "nosend" => \$ppArgs->{nosend}, - "noremove" => \$ppArgs->{noremove}, +my $pp_args = undef; +my $preprocess_options = undef; +my $pp_file_count = 0; +my $pp_main_quote_ref = undef; + +sub init_preprocess_vars () { + $pp_args = {}; + $pp_args->{quote} = $$pp_main_quote_ref if $pp_main_quote_ref; + $pp_main_quote_ref = \$pp_args->{quote} unless $pp_main_quote_ref; + + $preprocess_options = { + "c|cmd|command" => \$pp_args->{command}, + "q|quote=s" => \$pp_args->{quote}, + "w|winid=s" => \$pp_args->{winid}, + "nosend" => \$pp_args->{nosend}, + "noremove" => \$pp_args->{noremove}, }; } -initPreprocessVars(); +init_preprocess_vars(); my $options = { - "e|eval=s" => \$lineToEval, - "l|load=s" => \$fileToLoad, + "e|eval=s" => \$line_to_eval, + "l|load=s" => \$file_to_load, "p|preprocess" => \$preprocess, - "x|export:s" => \$exportFuncNames, + "x|export:s" => \$export_func_names, "s|stay!" => \$stay, "nolock" => \$nolock, "debug=i" => \$debug, - %$preprocessOptions, + %$preprocess_options, }; my $module = new FVWM::Module( @@ -86,12 +88,12 @@ Debug => \$debug, # $debug is not really ready yet ); -sub printActionError ($$) { +sub print_action_error ($$) { my $action = shift; - my $errMsg = shift; - return if $errMsg =~ /^!/; - $errMsg =~ s/\s+$//s; - print STDERR "[", $module->name, "][$action]: $errMsg\n"; + my $err_msg = shift; + return if $err_msg =~ /^!/; + $err_msg =~ s/\s+$//s; + print STDERR "[", $module->name, "][$action]: $err_msg\n"; } # ---------------------------------------------------------------------------- @@ -106,8 +108,8 @@ sub cmd ($;$) { my $command = shift; - my $winId = shift; - $module->send($command, $winId); + my $win_id = shift; + $module->send($command, $win_id); } *command = \*cmd; *command = \*command; # alias @@ -124,7 +126,7 @@ sub unlock () { # enable asynchronous evaluation - $module->sendUnlock; + $module->send_unlock; } sub detach () { @@ -137,23 +139,23 @@ $detached = 1; } -sub showMessage ($;$$) { +sub show_message ($;$$) { require FVWM::Module::Toolkit; - FVWM::Module::Toolkit->showMessage( + FVWM::Module::Toolkit->show_message( $_[0], $_[1] || "FvwmPerl user message", $_[2] ); } sub export ($;$) { - my $funcNames = shift || ""; - my $doUnexport = shift || 0; + my $func_names = shift || ""; + my $do_unexport = shift || 0; - my @funcNames = split(/[\s,]+/, $funcNames); - @funcNames = qw(Eval .) if $funcNames eq ""; + my @func_names = split(/[\s,]+/, $func_names); + @func_names = qw(Eval .) if $func_names eq ""; my $name = $module->name; - foreach (@funcNames) { + foreach (@func_names) { my $action = /eval/i? 'eval': /load/i? 'load': @@ -162,7 +164,7 @@ $module->send(qq( DestroyFunc $_ - ) . ($doUnexport ? "" : qq( + ) . ($do_unexport ? "" : qq( AddToFunc $_ I SendToModule $name $action \$* ))); } @@ -170,83 +172,83 @@ sub load ($) { my $filename = shift; - my $contents = loadFile($filename); + my $contents = load_file($filename); if (!defined $contents) { - printActionError("load", "Can't find and read $filename: $!"); + print_action_error("load", "Can't find and read $filename: $!"); return; } eval $$contents; - printActionError("load", "$@") if $@; + print_action_error("load", "$@") if $@; } -sub doEval ($) { +sub do_eval ($) { my $string = shift; eval $string; - printActionError("eval", "$@") if $@; + print_action_error("eval", "$@") if $@; if ($detached) { # let's hope we should not clean-up anything exit(0); } } -sub preprocessDirectives ($;$) { - my $textRef = shift; +sub preprocess_directives ($;$) { + my $text_ref = shift; my $depth = shift || 0; my $quote = $PreprocessNamespace::PPP_QUOTE1; - my $processedText = ""; + my $processed_text = ""; - my $errorSub = sub ($) { - printActionError("preprocess", "$_[0], preprocessing failed"); + my $error_sub = sub ($) { + print_action_error("preprocess", "$_[0], preprocessing failed"); }; my ($start, $directive, $params, $end); - while ($$textRef =~ m{\A(.*?)^$quote(\w+)[ \t]*(.*?)\n(.*)\z}ms) { + while ($$text_ref =~ m{\A(.*?)^$quote(\w+)[ \t]*(.*?)\n(.*)\z}ms) { ($start, $directive, $params, $end) = ($1, $2, $3, $4); - $$textRef = ""; + $$text_ref = ""; #print "\t$depth $directive $params\n"; if (eqi($directive, "End")) { if ($depth == 0) { - $errorSub->("Unexpected ${quote}End"); + $error_sub->("Unexpected ${quote}End"); return undef; } - $$textRef = $processedText . $start; + $$text_ref = $processed_text . $start; return $end; } my $subtext = $end; if (eqi($directive, "Repeat")) { - my $count = getToken($params); + my $count = get_token($params); unless (defined $count && $count =~ /^\d+$/) { - $errorSub->("Usage: ${quote}Repeat count"); + $error_sub->("Usage: ${quote}Repeat count"); return undef; } - $end = &preprocessDirectives(\$subtext, $depth + 1); + $end = &preprocess_directives(\$subtext, $depth + 1); return undef unless defined $end; $start .= $subtext x $count; next; } my $prefix = undef; if (eqi($directive, "ModuleConfig")) { - my ($moduleName, $destroy) = getTokens($params, 2); - unless (defined $moduleName) { - $errorSub->("Usage: ${quote}ModuleConfig module-name"); + my ($module_name, $destroy) = get_tokens($params, 2); + unless (defined $module_name) { + $error_sub->("Usage: ${quote}ModuleConfig module-name"); return undef; } if (defined $destroy && eqi($destroy, "destroy")) { - $start .= "DestroyModuleConfig $moduleName: *\n"; + $start .= "DestroyModuleConfig $module_name: *\n"; }; - $prefix = "*$moduleName: "; + $prefix = "*$module_name: "; } if (defined $prefix || eqi($directive, "Prefix")) { - $prefix = getToken($params) unless defined $prefix; + $prefix = get_token($params) unless defined $prefix; unless (defined $prefix) { - $errorSub->("Usage: ${quote}Prefix prefix"); + $error_sub->("Usage: ${quote}Prefix prefix"); return undef; } - $end = &preprocessDirectives(\$subtext, $depth + 1); + $end = &preprocess_directives(\$subtext, $depth + 1); return undef unless defined $end; foreach (split(/\n/s, $subtext)) { $start .= "$prefix$_\n" unless /^\s*$/; @@ -254,15 +256,15 @@ next; } } continue { - $processedText .= $start; - $$textRef = $end; + $processed_text .= $start; + $$text_ref = $end; } if ($depth == 0) { - $$textRef = $processedText . $$textRef if $processedText ne ""; + $$text_ref = $processed_text . $$text_ref if $processed_text ne ""; return ""; } - $errorSub->("No corresponding ${quote}End found"); + $error_sub->("No corresponding ${quote}End found"); return undef; } @@ -285,13 +287,13 @@ my $depth = $args->{depth}; $depth ||= 0; if ($depth > 20) { - printActionError("preprocess", "Too deep include depth=$depth"); + print_action_error("preprocess", "Too deep include depth=$depth"); return; } - my $textRef = $command? \$data: loadFile($data); - unless (defined $textRef) { - printActionError("preprocess", "No file to preprocess ($data)"); + my $text_ref = $command? \$data: load_file($data); + unless (defined $text_ref) { + print_action_error("preprocess", "No file to preprocess ($data)"); return; } @@ -315,39 +317,39 @@ $HEIGHT = $HEIGHT || $dimentions[1]; $FVWM_VERSION = $FVWM_VERSION || $version; $FVWM_MODULEDIR = $FVWM_MODULEDIR || $ENV{FVWM_MODULEDIR}; - $FVWM_DATADIR = $FVWM_DATADIR || $module->siteDataDir; - $FVWM_USERDIR = $FVWM_USERDIR || $module->userDataDir; + $FVWM_DATADIR = $FVWM_DATADIR || $module->site_data_dir; + $FVWM_USERDIR = $FVWM_USERDIR || $module->user_data_dir; } # perl code substitution first - $$textRef =~ s/\Q$quote1\E { ( .*? ) } \Q$quote2\E/ + $$text_ref =~ s/\Q$quote1\E { ( .*? ) } \Q$quote2\E/ my $result = eval " no strict; package PreprocessNamespace; $1 "; if ($@) { - printActionError("preprocess", $@); + print_action_error("preprocess", $@); $result = ""; } $result; /sgex; # line based directives - preprocessDirectives($textRef); + preprocess_directives($text_ref); if ($command) { - $module->send($$textRef, $winid); + $module->send($$text_ref, $winid); return; } - my $tempFileName = $module->userDataDir . "/.FvwmPerl-preprocess-$$"; - $tempFileName .= "-" . (++$ppFileCount); - saveFile($tempFileName, $textRef); + my $temp_filename = $module->user_data_dir . "/.FvwmPerl-preprocess-$$"; + $temp_filename .= "-" . (++$pp_file_count); + save_file($temp_filename, $text_ref); unless ($nosend) { - $module->send("Read $tempFileName", $winid); - $module->send("Exec rm -f '$tempFileName'") + $module->send("Read $temp_filename", $winid); + $module->send("Exec rm -f '$temp_filename'") unless $noremove; } } @@ -366,7 +368,7 @@ # ---------------------------------------------------------------------------- # event handlers -sub processMessage ($$) { +sub process_message ($$) { my $event = $_[1]; my $string = $event->_text; @@ -377,25 +379,25 @@ if ($action eq "eval") { return unless defined $rest; - doEval($rest); + do_eval($rest); } elsif ($action eq "load") { return unless defined $rest; - load(getToken($rest)); + load(get_token($rest)); } elsif ($action eq "preprocess") { @ARGV = split(/ /, $rest); - initPreprocessVars(); + init_preprocess_vars(); my $parser = new Getopt::Long::Parser( config => [qw(pass_through require_order)] ); - $parser->getoptions(%$preprocessOptions) || return; - $ppArgs->{winid} = $event->_win_id || undef - unless defined $ppArgs->{winid} && $ppArgs->{winid} =~ /^\d/; + $parser->getoptions(%$preprocess_options) || return; + $pp_args->{winid} = $event->_win_id || undef + unless defined $pp_args->{winid} && $pp_args->{winid} =~ /^\d/; - preprocess($ppArgs, join(" ", @ARGV)); + preprocess($pp_args, join(" ", @ARGV)); } elsif ($action eq "export") { @@ -415,39 +417,39 @@ } else { - printActionError("processMessage", "Unknown action ($action)"); + print_action_error("process_message", "Unknown action ($action)"); } } -$module->addHandler(M_STRING, \&processMessage); +$module->add_handler(M_STRING, \&process_message); # ---------------------------------------------------------------------------- # execution # unlock fvwm earlier if requested -$module->sendReady if $nolock; +$module->send_ready if $nolock; -if (defined $exportFuncNames) { - export($exportFuncNames); +if (defined $export_func_names) { + export($export_func_names); $stay = 1; } -if (defined $lineToEval) { - doEval($lineToEval); +if (defined $line_to_eval) { + do_eval($line_to_eval); exit(0) unless $stay; } -if (defined $fileToLoad) { - load($fileToLoad); +if (defined $file_to_load) { + load($file_to_load); exit(0) unless $stay; } if ($preprocess) { - preprocess($ppArgs, join(" ", @ARGV)); + preprocess($pp_args, join(" ", @ARGV)); exit(0) unless $stay; } -$module->eventLoop; +$module->event_loop; __END__ @@ -580,7 +582,7 @@ . Exec exec xmessage %{2 + 2}% # simple calculator - . %{main::showMessage(2 + 2, "Yet another Calculator"); ""}% + . %{main::show_message(2 + 2, "Yet another Calculator"); ""}% =head1 ACTIONS @@ -744,35 +746,35 @@ =over 4 -=item BI<$fvwmCommand>B<)> +=item BI<$fvwm_command>B<)> -In case of B or B - send back to fvwm a string I<$fvwmCommand>. -In case of B - append a string I<$fvwmCommand> to the output of +In case of B or B - send back to fvwm a string I<$fvwm_command>. +In case of B - append a string I<$fvwm_command> to the output of the embedded perl code. -=item BI<$perlCode>B<)> +=item BI<$perl_code>B<)> This function is equivalent to the B functionality -on the string I<$perlCode>, described above. +on the string I<$perl_code>, described above. -=item B$fileNameB<)> +=item BI<$filename>B<)> This function is equivalent to the B functionality -on the file $fileName, described above. +on the file $filename, described above. -=item BI<@params, ["-c $command"] [$fileName]>B<)> +=item BI<@params, ["-c $command"] [$filename]>B<)> This function is equivalent to the B functionality -with the given parameters and the file $fileName described above. +with the given parameters and the file $filename described above. -=item BI<$funcNames, [$doUnexport]>B<)> +=item BI<$func_names, [$do_unexport]>B<)> This function is equivalent to the B functionality -with the given $funcNames, described above. May also B +with the given $func_names, described above. May also B the function names if the second parameter is true. Function names should be separated by commas or/and whitespace. -If I<$funcNames> is empty then functions "Eval" and "." are assumed. +If I<$func_names> is empty then functions "Eval" and "." are assumed. =item B @@ -809,12 +811,12 @@ If you use detach(), better only send commands to fvwm in one process (the main one or the detached one), doing otherwise may often cause conflicts. -=item B$msg, $title[, $useStderrToo=1]B<)> +=item B$msg, $title[, $use_stderr_too=1]B<)> -Shows a dialog window with the given message, using whichever tool is find -in the system. +Shows a dialog window with the given message, using whichever X tool is +found in the system. -See B::B for more information. +See B::B for more information. =back @@ -833,12 +835,12 @@ If you need more readable variable names, either write "no strict 'vars';" at the start of every perl code or use a hash for this, like: - $h{id} = $h{firstName} . " " . $h{secondName} + $h{id} = $h{first_name} . " " . $h{second_name} or use a package name, like: @MyMenu::terminals = qw( xterm rxvt ); - $MyMenu::itemNum = @MyMenu::terminals; + $MyMenu::item_num = @MyMenu::terminals; There may be a configuration option to turn strictness on and off. --- fvwm-2.5.27.ds.orig/modules/FvwmConsole/FvwmConsole.c +++ fvwm-2.5.27.ds/modules/FvwmConsole/FvwmConsole.c @@ -91,7 +91,8 @@ char client[120]; char **eargv; int i, j, k; - char *xterm_pre[] = { "-title", Name, "-name", Name, NULL }; + /* char *xterm_pre[] = { "-title", Name, "-name", Name, NULL }; */ + char *xterm_pre[] = { "-T", Name, NULL }; /* x-terminal-emulator options */ char *xterm_post[] = { "-e", NULL, NULL }; int clpid; --- fvwm-2.5.27.ds.orig/modules/FvwmConsole/FvwmConsole.h +++ fvwm-2.5.27.ds/modules/FvwmConsole/FvwmConsole.h @@ -33,7 +33,8 @@ /* #define M_PASS M_ERROR */ #define M_PASS M_ERROR -#define XTERM "xterm" +/* #define XTERM "xterm" */ +#define XTERM "x-terminal-emulator" /* Debian specific chage for policy */ /* message to client */ #define C_BEG "_C_Config_Line_Begin_\n" --- fvwm-2.5.27.ds.orig/doc/modules.html +++ fvwm-2.5.27.ds/doc/modules.html @@ -82,6 +82,6 @@


- +
??????
fvwm 2.5.x
--- fvwm-2.5.27.ds.orig/doc/groupedCommands.html +++ fvwm-2.5.27.ds/doc/groupedCommands.html @@ -66,7 +66,7 @@
  • AddToMenu
  • -
  • ChangeMenuStyle
  • +
  • ChangeMenuStyle
  • CopyMenuStyle
  • DestroyMenu
  • DestroyMenuStyle
  • --- fvwm-2.5.27.ds.orig/doc/allCommands.html +++ fvwm-2.5.27.ds/doc/allCommands.html @@ -86,7 +86,7 @@ UpdateDecor -Asteric +Asterisk DesktopName Key Refresh --- fvwm-2.5.27.ds.orig/doc/ChangeLog +++ fvwm-2.5.27.ds/doc/ChangeLog @@ -1,3 +1,14 @@ +2009-06-24 Thomas Adam + * allCommands.html: + * groupedCommands.html: + * modules.html: + * commands/DesktopName.xml: + * commands/GotoPage.xml: + * commands/ResizeMove.xml: + * modules/Makefile.am: + Fix broken links from downstream patch via Debian's BTS. (Thanks to + Manoj Srivastava). + 2008-03-12 Jes~s Guerrero * doc/commands/MenuStyle.xml: --- fvwm-2.5.27.ds.orig/doc/modules/Makefile.am +++ fvwm-2.5.27.ds/doc/modules/Makefile.am @@ -16,7 +16,7 @@ FvwmProxy FvwmRearrange FvwmSave FvwmSaveDesk FvwmScript FvwmScroll \ FvwmTabs FvwmTaskBar FvwmTheme FvwmWharf FvwmWindowMenu FvwmWinList MODULES_XML = FvwmTabs.xml -HTML_FILES = @DOC_MODULES_HTML@ +HTML_FILES = @DOC_MODULES_HTML@ todo.html XML_FILES = $(MODULES_XML) todo.xml EXTRA_DIST = $(XML_FILES) --- fvwm-2.5.27.ds.orig/doc/commands/DesktopName.xml +++ fvwm-2.5.27.ds/doc/commands/DesktopName.xml @@ -30,7 +30,7 @@ command and in the where it override the - + configuration option. Moreover, if consecutive names starting from desktop 0 are defined, then these names can be used by any EWMH compliant application (as a pager). --- fvwm-2.5.27.ds.orig/doc/commands/GotoPage.xml +++ fvwm-2.5.27.ds/doc/commands/GotoPage.xml @@ -35,10 +35,10 @@ Moves the desktop viewport to page (x,y). The upper left page is (0,0), the upper right is (M,0), where M is one less than the current number of horizontal pages specified in the - + command. The lower left page is (0,N), and the lower right page is (M,N), where N is the desktop's vertical size as specified in the - + command. To switch to a page relative to the current one add a trailing '' --- fvwm-2.5.27.ds.orig/doc/commands/ResizeMove.xml +++ fvwm-2.5.27.ds/doc/commands/ResizeMove.xml @@ -53,7 +53,7 @@ Note: Fvwm may not be able to parse the command properly if the option - + of the command is used. --- fvwm-2.5.27.ds.orig/debian/NEWS.Debian +++ fvwm-2.5.27.ds/debian/NEWS.Debian @@ -0,0 +1,54 @@ +fvwm (2.5.10-6) unstable; urgency=low + + Previous versions of the FVWM package provided a Debian-specific default + configuration setup which was suboptimal in some respects. Starting with + 2.5.10, the Debian packages rely on FVWM's own default configuration + mechanisms. Thus, if you start without a ~/.fvwm/ directory and no + ~/.fvwm2rc file, FVWM will provide a menu that sets up a basic + configuration for you. + + If you are upgrading from a previous version of the FVWM package and you + would like to populate your home directory with the old Debian-specific + default configuration, you may be able to do so by using the following + commands: + mkdir ~/.fvwm + for i in /etc/X11/fvwm/*.hook.dpkg-old; do + cp "$i" "~/.fvwm/$(basename "$i" .dpkg-old)" + done + + Even though it's possible for you to use the old Debian-specific + configuration files, this is not recommended. Aside from FVWM's own + default configuration, this Debian package includes a full set of examples + in /usr/share/doc/fvwm/sample.fvwmrc/, and http://www.fvwm.org/ has many + additional resources. + + -- Manoj Srivastava Fri, 7 May 2004 00:59:50 -0500 + +fvwm (2.5.8-0.3) experimental; urgency=low + + * There are new conditions, conditional statements, styles, commands, + command options, transparency support, EWMH support (allows + integration into KDE and GNOME environments), finer grained + customization of decorations, themes support, finer grained binding of + commands to portions of the window border, anti-aliased text rendering + support, embedded perl library for creating modules in Perl, better + placement algorithms, improved performance, new graphical debugger + module, and many other changes. + * There are new utilities to help customize fvwm if there is no fvwmrc + file available. Because of this, the package removes the default + system-wide fvwmrc file, since that shadowed the nice configuration + utilities. + * The Debian menu is available from the file /etc/X11/fvwm/DebianMenu + (the old file /etc/X11/fvwm/menudefs.hook shall be retained as a + synlink for a bit). This would require a change in existing user + configuration files. + * In the postinst we now move old conffiles out of the way (.dpkg-old), + since they interfere with the new configuration generation tools; but + we do not delete the files, so preserving user changes. We only do + this if the user is upgrading from a pre 2.5.8 version. On purge, we + remove all these preserved files as well. + * As a passing note, this package under the control of arch + arch-tag: ec98d578-705b-4b9e-80bb-4d998c2d377c + + + -- Manoj Srivastava Wed, 26 Nov 2003 09:41:16 -0600 --- fvwm-2.5.27.ds.orig/debian/Fvwm.desktop +++ fvwm-2.5.27.ds/debian/Fvwm.desktop @@ -0,0 +1,15 @@ +## /etc/dm/Sessions/Fvwm.desktop ## + +[Desktop Entry] +Encoding=UTF-8 +Name=Fvwm +Comment=Fvwm +Exec=fvwm +Terminal=False +TryExec=fvwm +Type=Application + +[Window Manager] +SessionManaged=true + +## \ No newline at end of file --- fvwm-2.5.27.ds.orig/debian/postrm +++ fvwm-2.5.27.ds/debian/postrm @@ -0,0 +1,187 @@ +#! /bin/sh +# -*- Mode: Sh -*- +# postrm --- +# Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +# Created On : Fri Nov 14 12:22:20 2003 +# Created On Node : glaurung.green-gryphon.com +# Last Modified By : Manoj Srivastava +# Last Modified On : Thu Mar 17 18:31:55 2005 +# Last Machine Used: glaurung.internal.golden-gryphon.com +# Update Count : 19 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# arch-tag: 56802d51-d980-4822-85c0-28fce19ed430 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + + +# Abort if any command returns an error value +set -e + +package_name=fvwm + +if [ -z "$package_name" ]; then + print >&2 "Internal Error. Please report a bug." + exit 1; +fi + +# This script is called twice during the removal of the package; once +# after the removal of the package's files from the system, and as +# the final step in the removal of this package, after the package's +# conffiles have been removed. +# summary of how this script can be called: +# * `remove' +# * `purge' +# * `upgrade' +# * `failed-upgrade' +# * `abort-install' +# * `abort-install' +# * `abort-upgrade' +# * `disappear' overwrit>r> +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package + +# Ensure the menu system is updated +[ ! -x /usr/bin/update-menus ] || update-menus + +case "$1" in + remove) + # This package is being removed, but its configuration has not yet + # been purged. + : + # Deprecated + # if test -x /usr/sbin/wm-menu-config; then wm-menu-config fvwm off; fi + + if [ -e /etc/menu-methods/fvwm ] && [ ! -x /etc/menu-methods/fvwm ]; then + chmod a-x /etc/menu-methods/fvwm + fi + + + # Remove diversion + ##: dpkg-divert --package ${package_name} --remove --rename \ + ##: --divert /usr/bin/other.real /usr/bin/other + + # ldconfig is NOT needed during removal of a library, only during + # installation + + ;; + purge) + # This package has previously been removed and is now having + # its configuration purged from the system. + + #remove the files that install-menu creates: + # (cd /etc/X11/fvwm/; rm system.twmrc menus.dat menudefs.hook) + + + # we mimic dpkg as closely as possible, so we remove configuration + # files with dpkg backup extensions too: + ### Some of the following is from Tore Anderson: + for ext in '~' '%' .bak .dpkg-tmp .dpkg-new .dpkg-old .dpkg-dist; do + for i in DebianMenu system.fvwm2rc init-restart.hook menudefs.hook; do + rm -f /etc/X11/${package_name}/${i}$ext + done + done + + # remove the configuration file itself + for i in system.fvwm2rc init-restart.hook menudefs.hook; do + if [ -e /etc/X11/fvwm/$i ]; then + rm -f /etc/X11/fvwm/$i + fi + done + + # and finally clear it out from the ucf database + ##: ucf --purge /etc/${package_name}.conf + + # Remove symlinks from /etc/rc?.d + ##: update-rc.d ${package_name} remove >/dev/null + + ##: if [ -e /usr/share/debconf/confmodule ]; then + ##: # Purge this package's data from the debconf database. + ##: . /usr/share/debconf/confmodule + ##: db_purge + ##: fi + + # This package has previously been removed and is now having + # its configuration purged from the system. + ##: for flavour in emacs20 emacs21; do + ##: STARTDIR=/etc/$flavour/site-start.d; + ##: STARTFILE="${package_name}-init.el"; + ##: if [ -e "$STARTDIR/20$STARTFILE" ]; then + ##: rm -f "$STARTDIR/20$STARTFILE" + ##: fi + ##: done + + ;; + disappear) + if test "$2" != overwriter; then + echo "$0: undocumented call to \`postrm $*'" 1>&2 + exit 0 + fi + # This package has been completely overwritten by package $3 + # (version $4). All our files are already gone from the system. + # This is a special case: neither "prerm remove" nor "postrm remove" + # have been called, because dpkg didn't know that this package would + # disappear until this stage. + : + + ;; + upgrade) + # About to upgrade FROM THIS VERSION to version $2 of this package. + # "prerm upgrade" has been called for this version, and "preinst + # upgrade" has been called for the new version. Last chance to + # clean up. + : + + ;; + failed-upgrade) + # About to upgrade from version $2 of this package TO THIS VERSION. + # "prerm upgrade" has been called for the old version, and "preinst + # upgrade" has been called for this version. This is only used if + # the previous version's "postrm upgrade" couldn't handle it and + # returned non-zero. (Fix old postrm bugs here.) + : + + ;; + abort-install) + # Back out of an attempt to install this package. Undo the effects of + # "preinst install...". There are two sub-cases. + : + + if test "${2+set}" = set; then + # When the install was attempted, version $2's configuration + # files were still on the system. Undo the effects of "preinst + # install $2". + : + + else + # We were being installed from scratch. Undo the effects of + # "preinst install". + : + + fi ;; + abort-upgrade) + # Back out of an attempt to upgrade this package from version $2 + # TO THIS VERSION. Undo the effects of "preinst upgrade $2". + : + + ;; + *) echo "$0: didn't understand being called with \`$1'" 1>&2 + exit 0;; +esac + +exit 0 --- fvwm-2.5.27.ds.orig/debian/system.fvwm2rc +++ fvwm-2.5.27.ds/debian/system.fvwm2rc @@ -0,0 +1,3875 @@ +# fvwm/themes-rc 0.7.1 build 03-Jul-2009 13:48:26 +# Auto-generated by fvwm-themes-config for srivasta@anzu. +# +# .================================================. +# | ____ _ _ _ _ | The best | +# | Designed for ( __X \/ X \/\/ )\/\ `----------| +# | ) _) \ / \ / \ | +# |-------------. (__) * \/ * \/\(_/\/\_) - 2.5.27 | +# | 03-Jul-2009 | | +# `================================================' +# _______________________________________________________________ +# ( _________________________ ________________________________) +# ) (__ _ _ _ _ . ) ( __ __ ____ . ____* ___ +# ( __)( \/ )( \/\/ )/\/\ * ( )( ) )( __)* /\/\ ( __)/ __) +# ) ( . \ /* \ // \ . ) ( ) _ ( *) _). / \* ) _).\__ \ +# (___) * \/ . \/\/(_/\/\_) (___)(__(__)(____)(_/\/\_)(____)(___/ + +DestroyFunc FuncFvwmResetInitFunctions +AddToFunc FuncFvwmResetInitFunctions ++ I DestroyFunc StartFunction ++ I DestroyFunc InitFunction ++ I DestroyFunc RestartFunction ++ I DestroyFunc SessionInitFunction ++ I DestroyFunc SessionRestartFunction ++ I AddToFunc StartFunction ++ I + I FuncFvwmLoadAllHooks + +DestroyFunc FuncFvwmRestartFvwmTheme +AddToFunc FuncFvwmRestartFvwmTheme ++ I KillModule FvwmTheme ++ I DestroyModuleConfig FvwmTheme: * ++ I ModuleSynchronous FvwmTheme + +DestroyFunc FuncFvwmShowVersionInfo +AddToFunc FuncFvwmShowVersionInfo ++ I FuncFvwmShowMessage "FVWM Version" "$[version.line]^nfvwm-themes 0.7.1 built on Jul 03 2009 at 13:48:26" + +DestroyFunc FuncFvwmShowComponentInfo +AddToFunc FuncFvwmShowComponentInfo ++ I nop + +FuncFvwmResetInitFunctions + +# --------------------------------------------------- +# Some global functions, extending FVWM functionality + +DestroyFunc FuncFvwmStopModule +AddToFunc FuncFvwmStopModule ++ I KillModule $0 + +DestroyFunc FuncFvwmStopModuleByAlias +AddToFunc FuncFvwmStopModuleByAlias ++ I KillModule $0 $1 + +DestroyFunc FuncFvwmRestartModule +AddToFunc FuncFvwmRestartModule ++ I FuncFvwmStopModule $0 ++ I Module $0 + +DestroyFunc FuncFvwmRestartModuleByAlias +AddToFunc FuncFvwmRestartModuleByAlias ++ I FuncFvwmStopModuleByAlias $0 $1 ++ I Module $0 $1 $2 + +DestroyFunc FuncFvwmRemoveAllButtons +AddToFunc FuncFvwmRemoveAllButtons ++ I Style "*" NoButton 1, NoButton 3, NoButton 5, NoButton 7, NoButton 9 ++ I Style "*" NoButton 2, NoButton 4, NoButton 6, NoButton 8, NoButton 0 ++ I TitleStyle Height 5 + +#.---- start: Read themes-rc-2 +# fvwm/themes-rc-2 0.7.1 +# Auto-generated by fvwm-themes-config for srivasta@anzu. +# +# .================================================. +# | ____ _ _ _ _ | The best | +# | Designed for ( __X \/ X \/\/ )\/\ `----------| +# | ) _) \ / \ / \ | +# |-------------. (__) * \/ * \/\(_/\/\_) - 2.5.27 | +# | 03-Jul-2009 | | +# `================================================' +# _______________________________________________________________ +# ( _________________________ ________________________________) +# ) (__ _ _ _ _ . ) ( __ __ ____ . ____* ___ +# ( __)( \/ )( \/\/ )/\/\ * ( )( ) )( __)* /\/\ ( __)/ __) +# ) ( . \ /* \ // \ . ) ( ) _ ( *) _). / \* ) _).\__ \ +# (___) * \/ . \/\/(_/\/\_) (___)(__(__)(____)(_/\/\_)(____)(___/ + +ImagePath $FVWM_USERDIR/themes/current/images:$FVWM_USERDIR/images:+ +ImagePath +:/usr/share/icons:/usr/share/pixmaps:/usr/share/icons/wm-icons +ImagePath +:/usr/X11R6/include/X11/pixmaps/:/usr/X11R6/include/X11/bitmaps/ +ImagePath +:/usr/include/X11/bitmaps/ + +SetEnv fvwm_theme_bling_dir /usr/share/fvwm/system.fvwm2rc-support + +DestroyFunc FuncFvwmLoadAllHooks +AddToFunc FuncFvwmLoadAllHooks ++ I FuncFvwmStartWheel ++ I FuncFvwmStartStroke ++ I FuncFvwmStartFvwmEvent-Sound ++ I FuncFvwmStartThemeModules ++ I FuncFvwmStartFvwmEvent-Events ++ I FuncFvwmStartWindowButtons ++ I FuncFvwmStartColors ++ I FuncFvwmStartBindings ++ I FuncFvwmStartFvwmAnimate ++ I FuncFvwmStartThemeBackground + +### We will decide later whether to use full paths here. +#.---- start: Read "/usr/share/fvwm/themes/default/background" +DestroyFunc FuncFvwmStartThemeBackground +AddToFunc FuncFvwmStartThemeBackground ++ I Exec exec fvwm-root $[fvwm_theme_bling_dir]/images/background/stone.xpm + +DestroyFunc FuncFvwmStopThemeBackground +AddToFunc FuncFvwmStopThemeBackground ++ I Nop + +DestroyFunc FuncFvwmBackgroundSolidColor +AddToFunc FuncFvwmBackgroundSolidColor ++ I DestroyFunc FuncFvwmStartThemeBackground ++ I AddToFunc FuncFvwmStartThemeBackground ++ I + I Exec exec fvwm-themes-root --solid "$0" + +DestroyFunc FuncFvwmBackgroundPixmapColors +AddToFunc FuncFvwmBackgroundPixmapColors ++ I DestroyFunc FuncFvwmStartThemeBackground ++ I AddToFunc FuncFvwmStartThemeBackground ++ I + I Exec exec fvwm-themes-images --in-file $[fvwm_theme_bling_dir]/images/background/stone.xpm --colorize --colorize-colors $* --setroot + +DestroyFunc FuncFvwmBackgroundImage +AddToFunc FuncFvwmBackgroundImage ++ I DestroyFunc FuncFvwmStartThemeBackground ++ I AddToFunc FuncFvwmStartThemeBackground ++ I + I Exec exec fvwm-themes-root --adjust $[fvwm_theme_bling_dir]/images/background/'$0' +#`====== end: Read "/usr/share/fvwm/themes/default/background" + +FuncFvwmBackgroundImage fvwm-wallpaper-tigerskin.jpg +#.---- start: Read "/usr/share/fvwm/themes/default/bindings.switch-mouse-2-3.no" +DestroyFunc MouseXX +AddToFunc MouseXX ++ I Mouse $0 $2 $3 $4 "$5" "$6" "$7" "$8" "$9" + +# For stroke: +# Mouse 3 on root window without modifier +DestroyFunc FuncFvwmButton3OnRootWindow +AddToFunc FuncFvwmButton3OnRootWindow ++ I Menu MenuFvwmWindowOps + +# Alt Mouse 3 into a normal window +DestroyFunc FuncFvwmButton3OnWindow +AddToFunc FuncFvwmButton3OnWindow ++ I Menu MenuFvwmWindowOps + +# For ewmh +DestroyFunc FuncFvwmEWMHBindingsButton3OnRootWindow +AddToFunc FuncFvwmEWMHBindingsButton3OnRootWindow ++ I Mouse 3 R M Menu MenuFvwmWindowOps + +DestroyFunc FuncFvwmNoEWMHBindingsButton3OnRootWindow +AddToFunc FuncFvwmNoEWMHBindingsButton3OnRootWindow ++ I Mouse 3 R A Menu MenuFvwmWindowOps + +DestroyFunc FuncFvwmEWMHButton2OnRootWindow +AddToFunc FuncFvwmEWMHButton2OnRootWindow ++ I WindowList + +#`====== end: Read "/usr/share/fvwm/themes/default/bindings.switch-mouse-2-3.no" + +#.---- start: Read "/usr/share/fvwm/themes/default/bindings.restrict-modifiers.no" +DestroyFunc KeyMM +AddToFunc KeyMM ++ I Key $0 $1 $2 $4 "$5" "$6" "$7" "$8" "$9" +#`====== end: Read "/usr/share/fvwm/themes/default/bindings.restrict-modifiers.no" + +#.---- start: Read "/usr/share/fvwm/themes/default/bindings" +# Binding Functions +# +# "I" stands for Immediate +# "M" stands for Motion +# "C" stands for Click +# "H" stands for Hold +# "D" stands for Double Click + +DestroyFunc FuncFvwmMoveOrRaiseOrShade +AddToFunc FuncFvwmMoveOrRaiseOrShade ++ H Move ++ M Move ++ C Raise ++ D WindowShade + +DestroyFunc FuncFvwmResizeOrRaiseOrShade +AddToFunc FuncFvwmResizeOrRaiseOrShade ++ H Resize$0 ++ M Resize$0 ++ C Raise ++ D WindowShade + +DestroyFunc FuncFvwmMoveOrRaiseLower +AddToFunc FuncFvwmMoveOrRaiseLower ++ H Move ++ M Move ++ C RaiseLower + +DestroyFunc FuncFvwmMoveOrIconify +AddToFunc FuncFvwmMoveOrIconify ++ M Move ++ D Iconify + +DestroyFunc FuncFvwmMaximizeFullScreen +AddToFunc FuncFvwmMaximizeFullScreen ++ I ThisWindow (Maximized) WindowStyle Title, Borders ++ I TestRc (!Match) WindowStyle !Title, !Borders ++ I TestRc (!Match) Raise ++ I TestRc (!Match) UpdateStyles ++ I Maximize ewmhiwa + +DestroyFunc FuncFvwmWindowOpsOrAction +AddToFunc FuncFvwmWindowOpsOrAction ++ I Menu MenuFvwmWindowOps2 $* +#+ C Menu MenuFvwmWindowOps3 +#+ D $* + +DestroyFunc FuncFvwmSetTitleBindings +AddToFunc FuncFvwmSetTitleBindings ++ I Mouse 1 $0 A FuncFvwmMoveOrRaiseOrShade ++ I Mouse 1 $0 C FuncFvwmMoveOrRaiseLower ++ I MouseXX 2 3 $0 A FuncFvwmMoveOrRaiseLower ++ I MouseXX 3 2 $0 A Menu MenuFvwmWindowOps2 ++ I MouseXX 3 2 $0 M Menu MenuFvwmWindowOps + +DestroyFunc FuncFvwmUnsetTitleBindings +AddToFunc FuncFvwmUnsetTitleBindings ++ I Mouse 1 $0 A - ++ I Mouse 1 $0 C - ++ I MouseXX 2 3 $0 A - ++ I MouseXX 3 2 $0 A - ++ I MouseXX 3 2 $0 M - + +DestroyFunc FuncFvwmWindowList +AddToFunc FuncFvwmWindowList ++ I WindowList SelectOnRelease "" SortByResource, NoDeskSort, NoGeometry, NoHotkeys + +# --------------------------------------------------------------------------- +# Contexts: +# R = Root Window rrrrrrrrrrrrrrrrrrrrrr +# W = Application Window rIrrrrFSSSSSSSSSFrrrrr +# F = Frame Corners rrrrrrS13TTTT642Srrrrr +# S = Frame Sides rIrrrrSwwwwwwwwwSrrrrr +# T = Title Bar rrrrrrSwwwwwwwwwSrrrrr +# I = Icon rIrrrrFSSSSSSSSSFrrrrr +# rrrrrrrrrrrrrrrrrrrrrr +# Numbers are buttons: 1 3 5 7 9 0 8 6 4 2 +# +# Modifiers: (A)ny, (C)ontrol, (S)hift, (M)eta, (N)othing + +# --------------------------------------------------------------------------- +# key/mouse btn context modifie function + +# press Ctrl-Alt arrow anywhere, and scroll by one page +Key Left A CM GotoPage -1p +0p +Key Right A CM GotoPage +1p +0p +Key Up A CM GotoPage +0p -1p +Key Down A CM GotoPage +0p +1p + +# press Shift-Ctrl-Alt arrow anywhere, and scroll by 10% of a page +Key Left A SCM Scroll -10 +0 +Key Right A SCM Scroll +10 +0 +Key Up A SCM Scroll +0 -10 +Key Down A SCM Scroll +0 +10 + +# press Shift-Ctrl arrow anywhere, reserved +Key Left A SC Nop +Key Right A SC Nop +Key Up A SC Nop +Key Down A SC Nop + +# press Shift+Alt arrow anywhere, and move the pointer by 1% of a page +Key Left A SM CursorMove -1 +0 +Key Right A SM CursorMove +1 +0 +Key Up A SM CursorMove +0 -1 +Key Down A SM CursorMove +0 +1 + +# direction commands, Ctrl+KP_N (do not always work) +Key KP_1 A C Direction SouthWest FuncFvwmSelectWindow +Key KP_2 A C Direction South FuncFvwmSelectWindow +Key KP_3 A C Direction SouthEast FuncFvwmSelectWindow +Key KP_4 A C Direction West FuncFvwmSelectWindow +Key KP_5 A C Direction Center FuncFvwmSelectWindow +Key KP_6 A C Direction East FuncFvwmSelectWindow +Key KP_7 A C Direction NorthWest FuncFvwmSelectWindow +Key KP_8 A C Direction North FuncFvwmSelectWindow +Key KP_9 A C Direction NorthEast FuncFvwmSelectWindow + +# These {move,go} to {page,desk} bindings are experimental, may be changed. + +# go to page, Ctrl+Alt+KP_N (these keys do not always work) +Key KP_1 A CM GotoPage 0 2 +Key KP_2 A CM GotoPage 1 2 +Key KP_3 A CM GotoPage 2 2 +Key KP_4 A CM GotoPage 0 1 +Key KP_5 A CM GotoPage 1 1 +Key KP_6 A CM GotoPage 2 1 +Key KP_7 A CM GotoPage 0 0 +Key KP_8 A CM GotoPage 1 0 +Key KP_9 A CM GotoPage 2 0 +Key KP_0 A CM GotoPage prev + +Key 1 A SCM GotoPage 0 2 +Key 2 A SCM GotoPage 1 2 +Key 3 A SCM GotoPage 2 2 +Key 4 A SCM GotoPage 0 1 +Key 5 A SCM GotoPage 1 1 +Key 6 A SCM GotoPage 2 1 +Key 7 A SCM GotoPage 0 0 +Key 8 A SCM GotoPage 1 0 +Key 9 A SCM GotoPage 2 0 +Key 0 A SCM GotoPage prev + +# move to page, Shift+Ctrl+KP_N +Key KP_1 A SC MoveToPage 0 2 +Key KP_2 A SC MoveToPage 1 2 +Key KP_3 A SC MoveToPage 2 2 +Key KP_4 A SC MoveToPage 0 1 +Key KP_5 A SC MoveToPage 1 1 +Key KP_6 A SC MoveToPage 2 1 +Key KP_7 A SC MoveToPage 0 0 +Key KP_8 A SC MoveToPage 1 0 +Key KP_9 A SC MoveToPage 2 0 +Key KP_0 A SC MoveToPage prev + +# move without the cursor, Shift+Alt+KP_N +Key KP_1 A SM Move w-1 w+1 +Key KP_2 A SM Move w w+1 +Key KP_3 A SM Move w+1 w+1 +Key KP_4 A SM Move w-1 w +Key KP_5 A SM Move w w +Key KP_6 A SM Move w+1 w +Key KP_7 A SM Move w-1 w-1 +Key KP_8 A SM Move w w-1 +Key KP_9 A SM Move w+1 w-1 + +# go to desk, Ctrl+Alt+N +Key 1 A CM GotoDesk 0 0 +Key 2 A CM GotoDesk 0 1 +Key 3 A CM GotoDesk 0 2 +Key 4 A CM GotoDesk 0 3 +Key 0 A CM GotoDeskAndPage prev + +# move to desk, Shift+Ctrl+N +Key 1 A SC MoveToDesk 0 0 +Key 2 A SC MoveToDesk 0 1 +Key 3 A SC MoveToDesk 0 2 +Key 4 A SC MoveToDesk 0 3 +Key 0 A SC MoveToDesk prev + +# keyboard accelerators +# Shift is needed to let apps (xwe, dosemu, kcalc) to handle Alt-FN keys +KeyMM F1 A M SM Menu MenuFvwmRoot +KeyMM F2 A M SM FuncFvwmWindowList +KeyMM F3 A M SM Menu MenuFvwmWindowOps +KeyMM F4 A M SM Close +KeyMM F5 A M SM RaiseLower +KeyMM F6 A M SM FuncFvwmRestore +KeyMM F7 A M SM Move +KeyMM F8 A M SM Resize +KeyMM F9 A M SM Iconify +KeyMM F10 A M SM Pick FuncFvwmSimpleMaximize +KeyMM F11 A M SM Module FvwmIdent +KeyMM F12 A M SM FuncFvwmConsole + +Key Tab A M WindowList Root c c NoDeskSort, SelectOnRelease Meta_L +Key Tab A SM WindowList Root c c OnlyListSkip, NoDeskSort, SelectOnRelease +Key Tab A CM Prev FuncFvwmSelectWindow +Key Tab A SCM Next FuncFvwmSelectWindow +Key Prior A M Prev FuncFvwmSelectWindow +Key Next A M Next FuncFvwmSelectWindow +Key F11 A SC Pick FuncFvwmMaximizeFullScreen +Key F12 A SC FuncFvwmConfirm `Refresh with no cache?` FuncFvwmThemesFreshUncached + +# misc. +Key F8 A SC FuncFvwmShowAllColorsets +Key F9 A SC FuncFvwmShowColourTable + +# --------------------------------------------------------------------------- +# button context modifie function + +# pointer in Root +Mouse 1 R A Menu MenuFvwmRoot +MouseXX 2 3 R A FuncFvwmWindowList +MouseXX 3 2 R A Menu MenuFvwmWindowOps + +MouseXX 2 3 R C Module FvwmPager -transient FvwmPager-Single * * +MouseXX 2 3 R SC Module FvwmPager -transient FvwmPager-Desker 0 3 + +# pointer on a EWMH desktop + +# pointer in Window Buttons +# now in 'buttons' component +Mouse 1 D M Menu MenuFvwmRoot +MouseXX 2 3 D M FuncFvwmWindowList +MouseXX 3 2 D M Menu MenuFvwmWindowOps + +MouseXX 2 3 D MC Module FvwmPager -transient FvwmPager-Single * * +MouseXX 2 3 D MSC Module FvwmPager -transient FvwmPager-Desker 0 3 + +# pointer in Window Decorations +FuncFvwmSetTitleBindings TSF +Mouse 1 SF A FuncFvwmResizeOrRaiseOrShade +Mouse 1 SF S FuncFvwmResizeOrRaiseOrShade Maximize + +# pointer in Icon +Mouse 1 I A FuncFvwmMoveOrIconify +MouseXX 2 3 I A FuncFvwmIconify +MouseXX 3 2 I A Menu MenuFvwmWindowOps2 +Mouse 1 I S FuncFvwmIconify +MouseXX 2 3 I S FuncFvwmIconifySameResource off +MouseXX 3 2 I S FuncFvwmIconifySameResource toggle + +# pointer in Window (and in Icon for consistency) +Mouse 1 WI M Menu MenuFvwmRoot +Mouse 1 WI CM FuncFvwmMoveOrRaiseLower +MouseXX 2 3 WI M FuncFvwmMoveOrRaiseLower +MouseXX 3 2 WI M Menu MenuFvwmWindowOps + +# --------------------------------------------------------------------------- +# We need to destroy the bindings to avoid current problems with fvwm. + +DestroyFunc FuncFvwmStartBindings +AddToFunc FuncFvwmStartBindings + +DestroyFunc FuncFvwmRemoveBinding +AddToFunc FuncFvwmRemoveBinding +# Key/Mouse (match) key/button context modifiers method +#+ I $0 $1 $2 $3 $4 -- ++ I $0 $1 $2 W $4 -- + +DestroyFunc FuncFvwmRemoveBindingsOnWindow +AddToFunc FuncFvwmRemoveBindingsOnWindow ++ I FuncFvwmRemoveBinding Key "($0)" Left A CM ++ I FuncFvwmRemoveBinding Key "($0)" Right A CM ++ I FuncFvwmRemoveBinding Key "($0)" Up A CM ++ I FuncFvwmRemoveBinding Key "($0)" Down A CM ++ I FuncFvwmRemoveBinding Key "($0)" Left A SCM ++ I FuncFvwmRemoveBinding Key "($0)" Right A SCM ++ I FuncFvwmRemoveBinding Key "($0)" Up A SCM ++ I FuncFvwmRemoveBinding Key "($0)" Down A SCM ++ I FuncFvwmRemoveBinding Key "($0)" Left A SC ++ I FuncFvwmRemoveBinding Key "($0)" Right A SC ++ I FuncFvwmRemoveBinding Key "($0)" Up A SC ++ I FuncFvwmRemoveBinding Key "($0)" Down A SC ++ I FuncFvwmRemoveBinding Key "($0)" Left A SM ++ I FuncFvwmRemoveBinding Key "($0)" Right A SM ++ I FuncFvwmRemoveBinding Key "($0)" Up A SM ++ I FuncFvwmRemoveBinding Key "($0)" Down A SM ++ I FuncFvwmRemoveBinding Key "($0)" KP_1 A C ++ I FuncFvwmRemoveBinding Key "($0)" KP_2 A C ++ I FuncFvwmRemoveBinding Key "($0)" KP_3 A C ++ I FuncFvwmRemoveBinding Key "($0)" KP_4 A C ++ I FuncFvwmRemoveBinding Key "($0)" KP_5 A C ++ I FuncFvwmRemoveBinding Key "($0)" KP_6 A C ++ I FuncFvwmRemoveBinding Key "($0)" KP_7 A C ++ I FuncFvwmRemoveBinding Key "($0)" KP_8 A C ++ I FuncFvwmRemoveBinding Key "($0)" KP_9 A C ++ I FuncFvwmRemoveBinding Key "($0)" KP_1 A CM ++ I FuncFvwmRemoveBinding Key "($0)" KP_2 A CM ++ I FuncFvwmRemoveBinding Key "($0)" KP_3 A CM ++ I FuncFvwmRemoveBinding Key "($0)" KP_4 A CM ++ I FuncFvwmRemoveBinding Key "($0)" KP_5 A CM ++ I FuncFvwmRemoveBinding Key "($0)" KP_6 A CM ++ I FuncFvwmRemoveBinding Key "($0)" KP_7 A CM ++ I FuncFvwmRemoveBinding Key "($0)" KP_8 A CM ++ I FuncFvwmRemoveBinding Key "($0)" KP_9 A CM ++ I FuncFvwmRemoveBinding Key "($0)" KP_0 A CM ++ I FuncFvwmRemoveBinding Key "($0)" 1 A SCM ++ I FuncFvwmRemoveBinding Key "($0)" 2 A SCM ++ I FuncFvwmRemoveBinding Key "($0)" 3 A SCM ++ I FuncFvwmRemoveBinding Key "($0)" 4 A SCM ++ I FuncFvwmRemoveBinding Key "($0)" 5 A SCM ++ I FuncFvwmRemoveBinding Key "($0)" 6 A SCM ++ I FuncFvwmRemoveBinding Key "($0)" 7 A SCM ++ I FuncFvwmRemoveBinding Key "($0)" 8 A SCM ++ I FuncFvwmRemoveBinding Key "($0)" 9 A SCM ++ I FuncFvwmRemoveBinding Key "($0)" 0 A SCM ++ I FuncFvwmRemoveBinding Key "($0)" KP_1 A SC ++ I FuncFvwmRemoveBinding Key "($0)" KP_2 A SC ++ I FuncFvwmRemoveBinding Key "($0)" KP_3 A SC ++ I FuncFvwmRemoveBinding Key "($0)" KP_4 A SC ++ I FuncFvwmRemoveBinding Key "($0)" KP_5 A SC ++ I FuncFvwmRemoveBinding Key "($0)" KP_6 A SC ++ I FuncFvwmRemoveBinding Key "($0)" KP_7 A SC ++ I FuncFvwmRemoveBinding Key "($0)" KP_8 A SC ++ I FuncFvwmRemoveBinding Key "($0)" KP_9 A SC ++ I FuncFvwmRemoveBinding Key "($0)" KP_0 A SC ++ I FuncFvwmRemoveBinding Key "($0)" KP_1 A SM ++ I FuncFvwmRemoveBinding Key "($0)" KP_2 A SM ++ I FuncFvwmRemoveBinding Key "($0)" KP_3 A SM ++ I FuncFvwmRemoveBinding Key "($0)" KP_4 A SM ++ I FuncFvwmRemoveBinding Key "($0)" KP_5 A SM ++ I FuncFvwmRemoveBinding Key "($0)" KP_6 A SM ++ I FuncFvwmRemoveBinding Key "($0)" KP_7 A SM ++ I FuncFvwmRemoveBinding Key "($0)" KP_8 A SM ++ I FuncFvwmRemoveBinding Key "($0)" KP_9 A SM ++ I FuncFvwmRemoveBinding Key "($0)" 1 A CM ++ I FuncFvwmRemoveBinding Key "($0)" 2 A CM ++ I FuncFvwmRemoveBinding Key "($0)" 3 A CM ++ I FuncFvwmRemoveBinding Key "($0)" 4 A CM ++ I FuncFvwmRemoveBinding Key "($0)" 0 A CM ++ I FuncFvwmRemoveBinding Key "($0)" 1 A SC ++ I FuncFvwmRemoveBinding Key "($0)" 2 A SC ++ I FuncFvwmRemoveBinding Key "($0)" 3 A SC ++ I FuncFvwmRemoveBinding Key "($0)" 4 A SC ++ I FuncFvwmRemoveBinding Key "($0)" 0 A SC + +# M KeyMM ++ I FuncFvwmRemoveBinding Key "($0)" F1 A M ++ I FuncFvwmRemoveBinding Key "($0)" F2 A M ++ I FuncFvwmRemoveBinding Key "($0)" F3 A M ++ I FuncFvwmRemoveBinding Key "($0)" F4 A M ++ I FuncFvwmRemoveBinding Key "($0)" F5 A M ++ I FuncFvwmRemoveBinding Key "($0)" F6 A M ++ I FuncFvwmRemoveBinding Key "($0)" F7 A M ++ I FuncFvwmRemoveBinding Key "($0)" F8 A M ++ I FuncFvwmRemoveBinding Key "($0)" F9 A M ++ I FuncFvwmRemoveBinding Key "($0)" F10 A M ++ I FuncFvwmRemoveBinding Key "($0)" F11 A M ++ I FuncFvwmRemoveBinding Key "($0)" F12 A M +# SM KeyMM ++ I FuncFvwmRemoveBinding Key "($0)" F1 A SM ++ I FuncFvwmRemoveBinding Key "($0)" F2 A SM ++ I FuncFvwmRemoveBinding Key "($0)" F3 A SM ++ I FuncFvwmRemoveBinding Key "($0)" F4 A SM ++ I FuncFvwmRemoveBinding Key "($0)" F5 A SM ++ I FuncFvwmRemoveBinding Key "($0)" F6 A SM ++ I FuncFvwmRemoveBinding Key "($0)" F7 A SM ++ I FuncFvwmRemoveBinding Key "($0)" F8 A SM ++ I FuncFvwmRemoveBinding Key "($0)" F9 A SM ++ I FuncFvwmRemoveBinding Key "($0)" F10 A SM ++ I FuncFvwmRemoveBinding Key "($0)" F11 A SM ++ I FuncFvwmRemoveBinding Key "($0)" F12 A SM + ++ I FuncFvwmRemoveBinding Key "($0)" Tab A M ++ I FuncFvwmRemoveBinding Key "($0)" Tab A SM ++ I FuncFvwmRemoveBinding Key "($0)" Tab A CM ++ I FuncFvwmRemoveBinding Key "($0)" Tab A SCM ++ I FuncFvwmRemoveBinding Key "($0)" Prior A M ++ I FuncFvwmRemoveBinding Key "($0)" Next A M ++ I FuncFvwmRemoveBinding Mouse "($0)" 1 W M ++ I FuncFvwmRemoveBinding Mouse "($0)" 1 W CM + +# XX first ++ I FuncFvwmRemoveBinding Mouse "($0)" 2 W M ++ I FuncFvwmRemoveBinding Mouse "($0)" 3 W M +# XX second ++ I FuncFvwmRemoveBinding Mouse "($0)" 3 W M ++ I FuncFvwmRemoveBinding Mouse "($0)" 2 W M + +DestroyFunc FuncFvwmStopBindings +AddToFunc FuncFvwmStopBindings ++ I Key Left A CM - ++ I Key Right A CM - ++ I Key Up A CM - ++ I Key Down A CM - ++ I Key Left A SCM - ++ I Key Right A SCM - ++ I Key Up A SCM - ++ I Key Down A SCM - ++ I Key Left A SC - ++ I Key Right A SC - ++ I Key Up A SC - ++ I Key Down A SC - ++ I Key Left A SM - ++ I Key Right A SM - ++ I Key Up A SM - ++ I Key Down A SM - ++ I Key KP_1 A C - ++ I Key KP_2 A C - ++ I Key KP_3 A C - ++ I Key KP_4 A C - ++ I Key KP_5 A C - ++ I Key KP_6 A C - ++ I Key KP_7 A C - ++ I Key KP_8 A C - ++ I Key KP_9 A C - ++ I Key KP_1 A CM - ++ I Key KP_2 A CM - ++ I Key KP_3 A CM - ++ I Key KP_4 A CM - ++ I Key KP_5 A CM - ++ I Key KP_6 A CM - ++ I Key KP_7 A CM - ++ I Key KP_8 A CM - ++ I Key KP_9 A CM - ++ I Key KP_0 A CM - ++ I Key 1 A SCM - ++ I Key 2 A SCM - ++ I Key 3 A SCM - ++ I Key 4 A SCM - ++ I Key 5 A SCM - ++ I Key 6 A SCM - ++ I Key 7 A SCM - ++ I Key 8 A SCM - ++ I Key 9 A SCM - ++ I Key 0 A SCM - ++ I Key KP_1 A SC - ++ I Key KP_2 A SC - ++ I Key KP_3 A SC - ++ I Key KP_4 A SC - ++ I Key KP_5 A SC - ++ I Key KP_6 A SC - ++ I Key KP_7 A SC - ++ I Key KP_8 A SC - ++ I Key KP_9 A SC - ++ I Key KP_0 A SC - ++ I Key KP_1 A SM - ++ I Key KP_2 A SM - ++ I Key KP_3 A SM - ++ I Key KP_4 A SM - ++ I Key KP_5 A SM - ++ I Key KP_6 A SM - ++ I Key KP_7 A SM - ++ I Key KP_8 A SM - ++ I Key KP_9 A SM - ++ I Key 1 A CM - ++ I Key 2 A CM - ++ I Key 3 A CM - ++ I Key 4 A CM - ++ I Key 0 A CM - ++ I Key 1 A SC - ++ I Key 2 A SC - ++ I Key 3 A SC - ++ I Key 4 A SC - ++ I Key 0 A SC - ++ I KeyMM F1 A M SM - ++ I KeyMM F2 A M SM - ++ I KeyMM F3 A M SM - ++ I KeyMM F4 A M SM - ++ I KeyMM F5 A M SM - ++ I KeyMM F6 A M SM - ++ I KeyMM F7 A M SM - ++ I KeyMM F8 A M SM - ++ I KeyMM F9 A M SM - ++ I KeyMM F10 A M SM - ++ I KeyMM F11 A M SM - ++ I KeyMM F12 A M SM - ++ I Key Tab A M - ++ I Key Tab A SM - ++ I Key Tab A CM - ++ I Key Tab A SCM - ++ I Key Prior A M - ++ I Key Next A M - ++ I Mouse 1 R A - ++ I MouseXX 2 3 R A - ++ I MouseXX 3 2 R A - ++ I MouseXX 2 3 R C - ++ I MouseXX 2 3 R SC - ++ I Mouse 1 D M - ++ I MouseXX 2 3 D M - ++ I MouseXX 3 2 D M - ++ I MouseXX 2 3 D MC - ++ I MouseXX 2 3 D MSC - ++ I FuncFvwmUnsetTitleBindings TSF ++ I Mouse 1 SF A - ++ I Mouse 1 I A - ++ I MouseXX 2 3 I A - ++ I MouseXX 3 2 I A - ++ I Mouse 1 I S - ++ I MouseXX 2 3 I S - ++ I MouseXX 3 2 I S - ++ I Mouse 1 WI M - ++ I Mouse 1 WI CM - ++ I MouseXX 2 3 WI M - ++ I MouseXX 3 2 WI M - +#`====== end: Read "/usr/share/fvwm/themes/default/bindings" + +#.---- start: Read "/usr/share/fvwm/themes/default/colors" +# colors@default + +# **************************************************************************** +# +# I. FVWM Colorsets (0 to 9) +# I.1. Default Colorsets +# I.2. Window Decorations +# I.3. Menu Colorsets +# +# II. Module Colorsets (10 to 29) +# II.1. Common Colorsets +# II.2. Window List Module Colorsets +# II.3. Other Module Colorsets +# II.4. External Colorsets +# +# III. Application Colorsets (30 to 35) +# +# IV. Start/Stop functions +# +# **************************************************************************** + +# ============================================================================ +# I. FVWM Colorsets +# ============================================================================ + +# ---------------------- +# I.1. Default Colorsets +# ---------------------- + +# for feedback windows (like geometry window and NoteMessage) and FvwmScroll +# +Colorset 0 fg black, bg rgb:70/a0/a0 + +# ----------------------- +# I.2. Window Decorations +# ----------------------- + +# The following colors are used in FvwmPager for the window colors +# and in a title bar of windows (shade/hilight colors, computed from +# the bg color, but might be specified directly by sh and hi). +# The title bar background is defined below using TitleStyle. + +# window title, inactive and active +# + +Colorset 1 VGradient 40 2 rgb:88/7b/66 1 rgb:66/5c/4c 1 rgb:88/7b/66, \ + bg AliceBlue, fg gray80, fgAlpha 85, NoShape +Colorset 2 VGradient 40 2 rgb:cc/b8/9a 1 rgb:99/8a/7b 1 rgb:cc/b8/9a, \ + bg AliceBlue, fg white, NoShape + +# window borders, inactive and active +# +Colorset 3 fg black, bg rgb:88/7b/66, Plain, NoShape +Colorset 4 fg black, bg rgb:cc/B8/9a, Plain, NoShape + +# background for window title, buttons and border +# +DestroyFunc FuncFvwmDecorBackground +AddToFunc FuncFvwmDecorBackground ++ I TitleStyle AllInactive Colorset 1 -- Raised ++ I TitleStyle AllActive Colorset 2 -- Raised +# ++ I ButtonStyle All Simple -- UseTitleStyle + +# ------------------- +# I.3. Menu Colorsets +# ------------------- + +# inactive menu item fg+bg and menu face if any +# +Colorset 5 fg white, HGradient 40 rgb:51/6c/90 rgb:3f/54/70, bg Linen, NoShape + +# active menu item fg+bg +# +Colorset 6 fg white, bg rgb:63/84/b0, Plain, NoShape + +# greyed menu item fg +# +Colorset 7 fg grey45, bg grey45, Plain, NoShape + +# ------------------------------------------------- +# Colorsets 8 and 9 are reserved for the future use. + +# ============================================================================ +# II. Module Colorsets +# ============================================================================ + +# ---------------------- +# II.1. Common Colorsets +# ---------------------- + +# default for modules +# For FvwmButtons, FvwmPager, can be also used for FvwmIconMan, FvwmIconBox. +# +Colorset 10 fg black, bg rgb:80/A0/A0, Plain, NoShape + +# default hilight for modules +# For hilighting a part of a button bar (some swallowed apps for example). +# +Colorset 11 fg black, bg white, Plain, NoShape + +# special or funny: a gradient or a pixmap +# May be used in certain FvwmButtons, FvwmIconMan, FvwmIconBox. +# +Colorset 12 fg black, bg rgb:80/A0/A0, \ + VGradient 20 rgb:80/A0/A0 rgb:C0/F0/F0, NoShape + +# swallowed window: the hilight and shadow colors should be defined +# (-hd of xclock and -hl of xload use sh, and -hl of xclock uses hi) +# +Colorset 13 fg black, bg rgb:70/8C/8C, hi black, sh gray40, \ + Plain, NoShape + +# default #2 +# FvwmPager or to get more colors in FvwmButtons, can be set to 10. +# +Colorset 14 fg black, bg rgb:80/A0/A0, Plain, NoShape + +# default hilight #2 +# FvwmPager or to get more colors in FvwmButtons, can be set to 11. +# +Colorset 15 fg black, bg rgb:C0/F0/F0, Plain, NoShape + +# tips/balloons (TaskBar and FvwmPager) +# +Colorset 16 fg black, bg rgb:F0/F0/C0, Plain, NoShape + +# ---------------------------------- +# II.2. Window List Module Colorsets +# ---------------------------------- + +# standard item +Colorset 17 fg black, bg rgb:80/A0/A0, Plain, NoShape + +# active item +Colorset 18 fg black, bg rgb:A0/C8/C8, Plain, NoShape + +# iconified item +Colorset 19 fg white, bg rgb:60/78/78, Plain, NoShape + +# pointed item +Colorset 20 fg black, bg rgb:88/AA/AA, Plain, NoShape + +# ---------------------------- +# II.3. Other Module Colorsets +# ---------------------------- + +# FvwmIdent +# +Colorset 21 fg black, bg bisque, Plain, NoShape + +# FvwmConsole +# +Colorset 22 fg white, bg rgb:00/30/60, Plain, NoShape + +# transparent +#Colorset 23 fg $[fg.cs10], bg $[bg.cs10], Transparent, Plain, NoShape + +# ------------------------ +# II.4. External Colorsets +# ------------------------ + +# ---------------------------- +# reserved for modules@: 24-25 + +# ---------------------------------- +# reserved for the future use: 26-28 + +# temporary colorset: 29, has no static definition, used dynamically + +# ============================================================================ +# III. Application Colorsets +# ============================================================================ + +# regular terminal (xterm, rxvt, Eterm) +# +Colorset 30 fg white, bg rgb:00/00/50, Plain, NoShape + +# admin terminal (su xterm) +# +Colorset 31 fg white, bg rgb:00/50/50, Plain, NoShape + +# remote terminal (ssh, telnet) +# +Colorset 32 fg white, bg rgb:50/00/00, Plain, NoShape + +# viewer terminal (man, less, tail -f) +# +Colorset 33 fg white, bg rgb:00/50/00, Plain, NoShape + +# application run in the terminal, text editor using ft-xrdb +# +Colorset 34 fg rgb:FF/FF/E8, bg rgb:30/48/48, Plain, NoShape + +# dialog main background (FvwmScript, FvwmForm, xmessage, ft-xrdb) +# +Colorset 35 fg black, bg rgb:80/A0/80, Plain, NoShape + +# dialog text area (FvwmScript, FvwmForm, xmessage, ft-xrdb) +# +Colorset 36 fg black, bg rgb:A0/C8/A0, Plain, NoShape + +# -------------------------------------------------- +# Colorsets 37 to 39 are reserved for the future use. + +# ============================================================================ +# IV. Start/Stop Functions: +# ============================================================================ + +# These functions are executed when you enter (Start) and when you leave +# (Stop) this component. For example, in colors@blackbox they are used to +# set/unset a good window "transparency" style ParentalRelativity/Opacity; +# in colors@cde and colors@luthien these functions are used for more things. + +DestroyFunc FuncFvwmStartColors +AddToFunc FuncFvwmStartColors + +DestroyFunc FuncFvwmStopColors +AddToFunc FuncFvwmStopColors +#`====== end: Read "/usr/share/fvwm/themes/default/colors" + +#.---- start: Read "/usr/share/fvwm/themes/default/globalfeel" +# Automatically build by FVWM-Themes on mar oct 24 18:07:17 CEST 2000 +# and a little bit edited! + +# -------------------------- Focus and Placement -------------------------- + +Style * SloppyFocus, ClickToFocusPassesClick, ClickToFocusRaises, \ + MouseFocusClickRaises +ColormapFocus FollowsMouse +Style * TileCascadePlacement, GrabFocusOff, NoPPosition + +# ---------------------------- Move and Resize ---------------------------- + +Style * ResizeOutLine +OpaqueMoveSize unlimited +Emulate FVWM +HideGeometryWindow Never +BugOpts FlickeringMoveWorkaround Off +Style * SnapAttraction 0 +Style * SnapGrid 1 1 +# I am not sure that this portable +#XorValue 55555 +# Use the default: +XorValue + +# ---------------------- Paging and Mouse Parameters ---------------------- + +EdgeScroll 0 0 +#EdgeResistance 500 1 +Style * EdgeMoveDelay 500 +Style * EdgeMoveResistance 1 + +EdgeThickness 1 +ClickTime 300 +MoveThreshold 3 + +# -------------------- Transient Windows and Animation -------------------- + +Style * DecorateTransient, DontRaiseTransient, DontLowerTransient, \ + DontStackTransientParent, GrabFocusTransient +Style * WindowShadeSteps 25, WindowShadeScrolls +SetAnimation 10 -.01 0 .01 .03 .08 .18 .3 .45 .6 .75 .85 .90 .94 .97 .99 1.0 + +# -------------------- Hints, Busy Cursor and Advanced -------------------- + +Style * MwmDecor, OLDecor, NoOverride, MwmFunctions, GNOMEUseHints +BugOpts ModalityIsEvil on +BusyCursor Read on, Wait on, ModuleSynchronous on +# Automatic detection of the color limit +BugOpts MixedVisualWorkaround off +BugOpts RaiseOverNativeWindows off +Style * SaveUnderOff, BackingStoreOff +ModuleTimeout 30 + +#`====== end: Read "/usr/share/fvwm/themes/default/globalfeel" + +#.---- start: Read "/usr/share/fvwm/themes/default/fonts" +#----------------------------------------------------------------------------- +# General fonts + +DestroyFunc FuncFvwmSetFont-WindowTitle +AddToFunc FuncFvwmSetFont-WindowTitle ++ I Style "$0" Font "$1" + +DestroyFunc FuncFvwmSetFont-IconTitle +AddToFunc FuncFvwmSetFont-IconTitle ++ I Style "$0" IconFont "$1" + +DestroyFunc FuncFvwmSetFont-Menu +AddToFunc FuncFvwmSetFont-Menu ++ I MenuStyle "$0" Font "$1" + +# for FvwmIdent (called in globallook) +DestroyFunc FuncFvwmSetFont-FvwmIdent +AddToFunc FuncFvwmSetFont-FvwmIdent ++ I *FvwmIdent: Font -*-fixed-medium-r-semicondensed-*-13-* + +#----------------------------------------------------------------------------- +# Fonts for modules + +# default font for IconBox, IconMan, TaskBar and WinList +DestroyFunc FuncFvwmSetFont-ModuleWindowList +AddToFunc FuncFvwmSetFont-ModuleWindowList ++ I *$0: $1 "$2" + +# selected font (TaskBar) +DestroyFunc FuncFvwmSetFont-ModuleSelectedWindowList +AddToFunc FuncFvwmSetFont-ModuleSelectedWindowList ++ I *$0: $1 "$2" + +# if one wants a small font for a Window List module (e.g., luthien IconMan) +DestroyFunc FuncFvwmSetFont-ModuleSmallWindowList +AddToFunc FuncFvwmSetFont-ModuleSmallWindowList ++ I *$0: $1 "$2" + +# small font (Pager mini window font) +DestroyFunc FuncFvwmSetFont-ModuleSmall +AddToFunc FuncFvwmSetFont-ModuleSmall ++ I *$0: $1 "$2" + +# tips font (for TaskBar, Pager) +DestroyFunc FuncFvwmSetFont-ModuleTips +AddToFunc FuncFvwmSetFont-ModuleTips ++ I *$0: $1 "$2" + +# normal "Label" font for Pager and Buttons +DestroyFunc FuncFvwmSetFont-ModuleLabel +AddToFunc FuncFvwmSetFont-ModuleLabel ++ I *$0: $1 "$2" + +# small "Label" for Buttons and Pager (or Window List modules) +DestroyFunc FuncFvwmSetFont-ModuleSmallLabel +AddToFunc FuncFvwmSetFont-ModuleSmallLabel ++ I *$0: $1 "$2" + +# large "Label" font for Buttons and Pager (or Window List modules) +DestroyFunc FuncFvwmSetFont-ModuleLargeLabel +AddToFunc FuncFvwmSetFont-ModuleLargeLabel ++ I *$0: $1 "$2" +#`====== end: Read "/usr/share/fvwm/themes/default/fonts" + +#.---- start: Read "/usr/share/fvwm/themes/default/globallook" +DefaultColorset 0 + +DestroyModuleConfig FvwmScroll: Colorset* +*FvwmScroll: Colorset 0 + +Style * Colorset 1 +Style * HilightColorset 2 +Style * BorderColorset 3 +Style * HilightBorderColorset 4 + +MenuStyle * MenuFace, ActiveFore, HilightBack +MenuStyle * MenuColorset 5, ActiveColorset 6, GreyedColorset 7 + +DestroyModuleConfig FvwmIdent: * +FuncFvwmSetFont-FvwmIdent +*FvwmIdent: Colorset 21 + +DestroyModuleConfig FvwmScript: DefaultColorset* +*FvwmScript: DefaultColorset 35 + +DestroyModuleConfig FvwmFormDefault: Colorset* +*FvwmFormDefault: Colorset 35 + +DestroyModuleConfig FvwmFormDefault: ItemColorset* +*FvwmFormDefault: ItemColorset 36 + +DestroyFunc FuncFvwmUnReloadGlobalLook +AddToFunc FuncFvwmUnReloadGlobalLook ++ I DestroyModuleConfig FvwmIdent: Font* ++ I MenuStyle * MenuFace, ActiveFore, HilightBack +#+ I MenuStyle * MenuColorset 5, ActiveColorset 6, GreyedColorset 7 + +DestroyFunc FuncFvwmReloadGlobalLook +AddToFunc FuncFvwmReloadGlobalLook ++ I FuncFvwmSetFont-FvwmIdent + +#`====== end: Read "/usr/share/fvwm/themes/default/globallook" + +#.---- start: Read "/usr/share/fvwm/themes/default/buttons" +FuncFvwmDecorBackground + +Style "*" Button 1, Button 2, Button 4, Button 6 + +# button relief follows the state +Style "*" MWMButtons + +AddButtonStyle 1 Vector 5 25x40@1 25x60@1 75x60@0 75x40@0 25x40@1 +AddButtonStyle 2 Vector 16 20x20@1 30x20@1 50x40@1 70x20@1 80x20@1 80x30@0 60x50@0 80x80@0 70x80@0 50x60@0 30x80@0 20x80@0 20x70@0 40x50@1 20x30@0 20x20@1 +AddButtonStyle 4 Vector 4 50x25@1 75x75@0 25x75@0 50x25@1 +AddButtonStyle 6 Vector 4 50x75@1 25x25@1 75x25@1 50x75@0 + +ButtonStyle 1 - Clear MWMDecorMenu +ButtonStyle 2 - Clear +ButtonStyle 4 - Clear MWMDecorMax +ButtonStyle 6 - Clear MWMDecorMin + +TitleStyle Height MinHeight 18 + +# button context modifie function +Mouse 1 1 A FuncFvwmWindowOpsOrAction Delete +MouseXX 2 3 1 A Menu MenuFvwmWindowMove +MouseXX 3 2 1 A Menu MenuFvwmWindowGroupOps +Mouse 0 2 A FuncFvwmDeleteOrDestroy +Mouse 1 4 A FuncFvwmMaximize +Mouse 2 4 A FuncFvwmMaximizeVertically +Mouse 3 4 A FuncFvwmMaximizeHorizontally +Mouse 1 4 S Maximize grow grow +Mouse 2 4 S Maximize 0 grow +Mouse 3 4 S Maximize grow 0 +Mouse 1 6 A FuncFvwmIconify +Mouse 2 6 A FuncFvwmIconifySameResource on +Mouse 3 6 A FuncFvwmIconifySameResource toggle +Mouse 0 1 CM FuncFvwmShowButtonInfo "Mouse 1 - Window Ops menu, or Delete on double click^nMouse 2/3 - Move menu^nMouse 3/2 - Resource Group menu" +Mouse 0 2 CM FuncFvwmShowButtonInfo "Delete on click^nDestroy on double click" +Mouse 0 4 CM FuncFvwmShowButtonInfo "Mouse 1 - Maximize:^n^tfully on click^n^tmenu on double click^nMouse 2 - Maximize vertically^nMouse 3 - Maximize horizontally^nAll with Shift - Maximize grow" +Mouse 0 6 CM FuncFvwmShowButtonInfo "Mouse 1 - Iconify^nMouse 2 - Iconify on resource group^nMouse 3 - Iconify toggle resource group" + +DestroyFunc FuncFvwmUnReloadDecor +AddToFunc FuncFvwmUnReloadDecor + +DestroyFunc FuncFvwmReloadDecor +AddToFunc FuncFvwmReloadDecor ++ I FuncFvwmDecorBackground ++ I AddButtonStyle 1 Vector 5 25x40@1 25x60@1 75x60@0 75x40@0 25x40@1 ++ I AddButtonStyle 2 Vector 16 20x20@1 30x20@1 50x40@1 70x20@1 80x20@1 80x30@0 60x50@0 80x80@0 70x80@0 50x60@0 30x80@0 20x80@0 20x70@0 40x50@1 20x30@0 20x20@1 ++ I AddButtonStyle 4 Vector 4 50x25@1 75x75@0 25x75@0 50x25@1 ++ I AddButtonStyle 6 Vector 4 50x75@1 25x25@1 75x25@1 50x75@0 + +DestroyFunc FuncFvwmOverRideWindowLook +AddToFunc FuncFvwmOverRideWindowLook + +DestroyFunc FuncFvwmStartWindowButtons +AddToFunc FuncFvwmStartWindowButtons + +DestroyFunc FuncFvwmStopWindowButtons +AddToFunc FuncFvwmStopWindowButtons ++ I FuncFvwmRemoveAllButtons ++ I Mouse 1 1 A - ++ I Mouse 2 1 A - ++ I Mouse 3 1 A - ++ I Mouse 0 2 A - ++ I Mouse 1 4 A - ++ I Mouse 2 4 A - ++ I Mouse 3 4 A - ++ I Mouse 1 4 S - ++ I Mouse 2 4 S - ++ I Mouse 3 4 S - ++ I Mouse 1 6 A - ++ I Mouse 2 6 A - ++ I Mouse 3 6 A - ++ I Mouse 0 1 CM - ++ I Mouse 0 2 CM - ++ I Mouse 0 4 CM - ++ I Mouse 0 6 CM - +#`====== end: Read "/usr/share/fvwm/themes/default/buttons" + +#.---- start: Read "/usr/share/fvwm/themes/default/cursors" +CursorStyle ROOT left_ptr black white +CursorStyle POSITION top_left_corner black white +CursorStyle TITLE top_left_arrow black white +CursorStyle DEFAULT top_left_arrow black white +CursorStyle SYS hand2 black white +CursorStyle MOVE fleur black white +CursorStyle RESIZE sizing black white +CursorStyle WAIT watch black white +CursorStyle MENU top_left_arrow black white +CursorStyle SELECT crosshair black white +CursorStyle DESTROY pirate black white +CursorStyle TOP top_side black white +CursorStyle RIGHT right_side black white +CursorStyle BOTTOM bottom_side black white +CursorStyle LEFT left_side black white +CursorStyle TOP_LEFT top_left_corner black white +CursorStyle TOP_RIGHT top_right_corner black white +CursorStyle BOTTOM_LEFT bottom_left_corner black white +CursorStyle BOTTOM_RIGHT bottom_right_corner black white +CursorStyle TOP_EDGE top_side black white +CursorStyle RIGHT_EDGE right_side black white +CursorStyle BOTTOM_EDGE bottom_side black white +CursorStyle LEFT_EDGE left_side black white +CursorStyle STROKE plus black white +#`====== end: Read "/usr/share/fvwm/themes/default/cursors" + +#.---- start: Read "/usr/share/fvwm/themes/default/functions" +# The functions from this component can be overwritten in the personal theme. + +DestroyFunc WindowListFunc +AddToFunc WindowListFunc ++ I Iconify false ++ I FlipFocus ++ I Raise ++ I WarpToWindow 10p 10p + +DestroyFunc FuncFvwmSelectWindow +AddToFunc FuncFvwmSelectWindow ++ I Focus ++ I Raise ++ I WarpToWindow 50 50 + +# ---------------------------------------------------------------------------- + +DestroyFunc FuncFvwmDeiconifyFocusAndRaise +AddToFunc FuncFvwmDeiconifyFocusAndRaise ++ I Iconify off ++ I Focus ++ I Raise + +DestroyFunc FuncFvwmIconifyOrFocusAndRaise +AddToFunc FuncFvwmIconifyOrFocusAndRaise ++ I ThisWindow (Iconic) Iconify off ++ I TestRc (NoMatch) ThisWindow (!Overlapped) Iconify on ++ I ThisWindow (!Iconic) Focus ++ I ThisWindow (!Iconic) Raise + +DestroyFunc FuncFvwmDeiconifyFocusAndWarp +AddToFunc FuncFvwmDeiconifyFocusAndWarp ++ I Iconify off ++ I Focus ++ I WarpToWindow 10p 10p + +DestroyFunc FuncFvwmRestore +AddToFunc FuncFvwmRestore ++ I ThisWindow (!Iconic !Shaded Maximized) Maximize false ++ I ThisWindow (!Iconic Shaded ) WindowShade false ++ I ThisWindow ( Iconic ) Iconify false + +DestroyFunc FuncFvwmDelete +AddToFunc FuncFvwmDelete ++ I Delete + +DestroyFunc FuncFvwmDeleteOrDestroy +AddToFunc FuncFvwmDeleteOrDestroy ++ H Nop ++ M Nop ++ C Delete ++ D Destroy + +#DestroyFunc FuncFvwmMaximize +#AddToFunc FuncFvwmMaximize +#+ M Nop +#+ H Maximize 0 95 +#+ C Maximize 100 95 +#+ D Maximize 100 100 + +DestroyFunc FuncFvwmMaximize +AddToFunc FuncFvwmMaximize ++ M Nop ++ H Nop ++ C Maximize ++ D Menu MenuFvwmWindowMaximize + +DestroyFunc FuncFvwmMaximizeVertically +AddToFunc FuncFvwmMaximizeVertically ++ H Maximize 0 100 ++ M Maximize 0 100 ++ C Maximize 0 100 + +DestroyFunc FuncFvwmMaximizeHorizontally +AddToFunc FuncFvwmMaximizeHorizontally ++ H Maximize 100 0 ++ M Maximize 100 0 ++ C Maximize 100 0 + +DestroyFunc FuncFvwmSimpleMaximize +AddToFunc FuncFvwmSimpleMaximize ++ I Maximize $0 + +DestroyFunc FuncFvwmSimpleMaximizeVertically +AddToFunc FuncFvwmSimpleMaximizeVertically ++ I Maximize $0 0 100 + +DestroyFunc FuncFvwmSimpleMaximizeHorizontally +AddToFunc FuncFvwmSimpleMaximizeHorizontally ++ I Maximize $0 100 0 + +DestroyFunc FuncFvwmSimpleMaximizePartially +AddToFunc FuncFvwmSimpleMaximizePartially ++ I Maximize $0 0 95 + +DestroyFunc FuncFvwmIconifySameResource +AddToFunc FuncFvwmIconifySameResource ++ I All ($r) Iconify $0 + +DestroyFunc FuncFvwmIconify +AddToFunc FuncFvwmIconify ++ C Iconify + +DestroyFunc FuncFvwmConsole +AddToFunc FuncFvwmConsole ++ I Module FvwmConsole -fg $[fg.cs22] -bg $[bg.cs22] $* + +# ---------------------------------------------------------------------------- +# These functions probably need not be configurable (move to themes-rc?). + +DestroyFunc FuncFvwmShowMessage +AddToFunc FuncFvwmShowMessage ++ I Test (x xmessage) Exec echo "$1" | \ + perl -pe 's/\^n/\n/g; s/\^t/\t/g; s/\^d/\$/g; s/^q/"/g; s/\^\^/^/g' - | \ + xmessage -g 480x124 -nearmouse -title "$0" -file - \ + -xrm "*textSink*font:lucidasans-14" \ + -xrm "*form*scrollVertical:false" \ + -xrm "*form*foreground:$[fg.cs35]" \ + -xrm "*form*background:$[bg.cs35]" \ + -xrm "*form*message*foreground:$[fg.cs36]" \ + -xrm "*form*message*background:$[bg.cs36]" $2 ++ I TestRc (!Match) FvwmPerl -e \ + '$_ = qq{$1}; s/\^n/\n/g; s/\^t/\t/g; s/\^d/\044/g; s/\^\^/^/g; showMessage($_, $0, 1)' + +DestroyFunc FuncFvwmShowButtonInfo +AddToFunc FuncFvwmShowButtonInfo ++ I FuncFvwmShowMessage "Button Info" "$0" + +DestroyFunc FuncFvwmWithGtk +AddToFunc FuncFvwmWithGtk ++ I PipeRead `fvwm-config --supports-gtk && echo '$*' || \ + echo 'FuncFvwmShowMessage "FVWM Error" "There is no GTK support in your FVWM.^nThe requested command is not executed."'` + +DestroyFunc FuncFvwmConfirm +AddToFunc FuncFvwmConfirm ++ I FvwmScript FvwmScript-Confirm --line2 `$0` --command `$1` \ + `$2` `$3` `$4` `$5` `$6` `$7` `$8` `$9` + +DestroyFunc FuncFvwmShowColorset +AddToFunc FuncFvwmShowColorset ++ I FvwmPerl -e 'cmd("FuncFvwmShowMessage `Colorset $0 Information` `" . $module->track("Colorsets")->dump($0) . "`")' + +DestroyFunc FuncFvwmShowAllColorsets +AddToFunc FuncFvwmShowAllColorsets ++ I FvwmButtons X $[FT_DATADIR]/FvwmButtons-Colorsets + +DestroyFunc FuncFvwmNoColourTable +AddToFunc FuncFvwmNoColourTable ++ I FuncFvwmShowMessage "Information" "No palette defined for the current colors component" + +DestroyFunc FuncFvwmShowColourTable +AddToFunc FuncFvwmShowColourTable ++ I FuncFvwmNoColourTable +#`====== end: Read "/usr/share/fvwm/themes/default/functions" + +#.---- start: Read "/usr/share/fvwm/themes/default/functions-appbind" +# You may want to copy this file in your personal theme directory and there +# configure (edit) your preferred applications. The default is ok thought. + +# ---------------------------------------------------------------------------- +# The following functions are used in many places. + +DestroyFunc FuncFvwmViewManPage +AddToFunc FuncFvwmViewManPage ++ I Exec exec xterm -fg $[fg.cs33] -bg $[bg.cs33] -g 80x40 -fn 7x14 -fb 7x14bold -n "Manual Page - $0" -T "Manual Page - $0" -e man "$0" + +DestroyFunc FuncFvwmViewFile +AddToFunc FuncFvwmViewFile ++ I Exec exec xterm -fg $[fg.cs33] -bg $[bg.cs33] -g 80x24 -fn 7x14 -fb 7x14bold -n "File Viewer - $0" -T "File Viewer - $0" -e less -e "$0" + +DestroyFunc FuncFvwmEditFile +AddToFunc FuncFvwmEditFile ++ I Test (x emacs) Exec exec emacs "$0" ++ I TestRc (Match) Break ++ I Test (EnvIsSet EDITOR) FuncFvwmRunInXterm 'Edit File - $0' '$ENV[EDITOR] "$0"' ++ I TestRc (!Match) FuncFvwmRunInXterm 'Edit File - $0' 'vi "$0"' + +DestroyFunc FuncFvwmViewFileTail +AddToFunc FuncFvwmViewFileTail ++ I Exec exec xterm -fg $[fg.cs33] -bg $[bg.cs33] -g 80x40 -fn 7x14 -fb 7x14bold -n "Tail File - $0" -T "Tail File - $0" -e less +F -f "$1" + +DestroyFunc FuncFvwmOpenURL +AddToFunc FuncFvwmOpenURL ++ I Test (x firefox) Exec firefox '$0' ++ I TestRc (!Match) Test (x netscape) Exec netscape -remote 'openURL($0, new-window)' 2>/dev/null || netscape '$0' ++ I TestRc (!Match) Test (x galeon) Exec galeon '$0' ++ I TestRc (!Match) Test (x konqueror) Exec konqueror '$0' ++ I TestRc (!Match) Test (x opera) Exec opera '$0' ++ I TestRc (!Match) FuncFvwmRunInXterm 'Open URL - $0' 'links "$0"' + +DestroyFunc FuncFvwmRunInXterm +AddToFunc FuncFvwmRunInXterm ++ I exec xterm -fg $[fg.cs34] -bg $[bg.cs34] -g 80x40 -fn 7x14 -fb 7x14bold +sb -ut -T "$0" -n "$0" -e $1 + +# ---------------------------------------------------------------------------- +# 'man fvwm-menu-directory' for details. + +DestroyFunc FuncFvwmMenuDirectory +AddToFunc FuncFvwmMenuDirectory ++ I PipeRead 'fvwm-menu-directory -d "$0" --exec-file "^emacs" --check-subdir --links --wm-icons' + +DestroyMenu MenuFvwmBrowser +AddToMenu MenuFvwmBrowser ++ DynamicPopupAction Piperead 'fvwm-menu-directory -r -na MenuFvwmBrowser -d $HOME -s --exec-file "^emacs" --xte="xterm -e" --wm-icons --check-subdir' + +DestroyMenu MenuFvwmBrowserCached +AddToMenu MenuFvwmBrowserCached ++ DynamicPopupAction Piperead 'fvwm-menu-directory -all -r -na MenuFvwmBrowserCached -d $HOME -s --exec-file "^emacs" --xte="xterm -e" --wm-icons --check-subdir' + +# ---------------------------------------------------------------------------- +# The following functions are mostly used in FvwmButtons modules and stroke. +# FuncFvwm[mouse-button][icon-name] +# When you click with the mouse button [mouse-button] on a button with an icon +# which is named [icon-name] then the coresponding command is executed. + +# Used in aftersep, migo, olicha, redmond98 +DestroyFunc FuncFvwmFileManager +AddToFunc FuncFvwmFileManager ++ I Exec exec xterm -g 80x40 -sb +sk -si -sl 500 -j -ls -fn 7x14 -fb 7x14bold -n Midnight-Commander -T Midnight-Commander -e mc -x + +DestroyFunc FuncFvwm2FileManager +AddToFunc FuncFvwm2FileManager ++ I Exec exec gmc + +DestroyFunc FuncFvwm3FileManager +AddToFunc FuncFvwm3FileManager ++ I Exec exec kfmclient openURL $HOME + +# Used in aftersep, migo, olicha, redmond98, osx +DestroyFunc FuncFvwmTerminal +AddToFunc FuncFvwmTerminal ++ I Exec exec xterm -fg $[fg.cs30] -bg $[bg.cs30] -n $USER@$HOST -T $USER@$HOST + +DestroyFunc FuncFvwm2Terminal +AddToFunc FuncFvwm2Terminal ++ I Exec exec xterm -fg $[fg.cs31] -bg $[bg.cs31] -n root@$HOST -T root@$HOST -e su -l + +DestroyFunc FuncFvwm3Terminal +AddToFunc FuncFvwm3Terminal ++ I Exec exec Eterm + +# Used in aftersep, migo, olicha, redmond98, osx +DestroyFunc FuncFvwmEditor +AddToFunc FuncFvwmEditor ++ I Exec exec emacs + +DestroyFunc FuncFvwm2Editor +AddToFunc FuncFvwm2Editor ++ I Exec exec gvim + +DestroyFunc FuncFvwm3Editor +AddToFunc FuncFvwm3Editor ++ I Exec exec xemacs + +# Used in aftersep, migo, olicha, redmond98, osx +DestroyFunc FuncFvwmDocView +AddToFunc FuncFvwmDocView ++ I Exec exec ghostview + +DestroyFunc FuncFvwm2DocView +AddToFunc FuncFvwm2DocView ++ I Exec exec xpdf + +DestroyFunc FuncFvwm3DocView +AddToFunc FuncFvwm3DocView ++ I Exec exec xdvi + +# Used in aftersep, migo, olicha, redmond98, osx +DestroyFunc FuncFvwmImageView +AddToFunc FuncFvwmImageView ++ I Exec exec xv + +DestroyFunc FuncFvwm2ImageView +AddToFunc FuncFvwm2ImageView ++ I Exec exec gqview + +DestroyFunc FuncFvwm3ImageView +AddToFunc FuncFvwm3ImageView ++ I Exec exec ee + +# Used in aftersep, migo, olicha, redmond98, osx +DestroyFunc FuncFvwmImageEdit +AddToFunc FuncFvwmImageEdit ++ I Exec exec gimp + +DestroyFunc FuncFvwm2ImageEdit +AddToFunc FuncFvwm2ImageEdit ++ I Exec exec xpaint + +DestroyFunc FuncFvwm3ImageEdit +AddToFunc FuncFvwm3ImageEdit ++ I Exec exec xfig + +# Used in migo, olicha +DestroyFunc FuncFvwmProcess +AddToFunc FuncFvwmProcess ++ I FuncFvwmRunInXterm "Top" "top" + +DestroyFunc FuncFvwm2Process +AddToFunc FuncFvwm2Process ++ I Exec exec gpm + +DestroyFunc FuncFvwm3Process +AddToFunc FuncFvwm3Process ++ I Exec exec kpm + +# Used in olicha +DestroyFunc FuncFvwmMail +AddToFunc FuncFvwmMail ++ I FuncFvwmRunInXterm "Mail" "mail" + +DestroyFunc FuncFvwm2Mail +AddToFunc FuncFvwm2Mail ++ I FuncFvwmRunInXterm "Mail" "mutt" + +DestroyFunc FuncFvwm3Mail +AddToFunc FuncFvwm3Mail ++ I Exec exec kmail + + +# Used in olicha +DestroyFunc FuncFvwmHelp +AddToFunc FuncFvwmHelp ++ I Exec exec xman + +DestroyFunc FuncFvwm2Help +AddToFunc FuncFvwm2Help ++ I Exec exec gnome-help-browser + +DestroyFunc FuncFvwm3Help +AddToFunc FuncFvwm3Help ++ I Exec exec kdehelp + +# Used in migo, olicha +DestroyFunc FuncFvwmCalculator +AddToFunc FuncFvwmCalculator ++ I Exec exec xcalc + +DestroyFunc FuncFvwm2Calculator +AddToFunc FuncFvwm2Calculator ++ I Exec exec gcalc + +DestroyFunc FuncFvwm3Calculator +AddToFunc FuncFvwm3Calculator ++ I Exec exec kcalc + +# Used in aftersep, migo, olicha, redmond98, osx +DestroyFunc FuncFvwmWWW +AddToFunc FuncFvwmWWW ++ I Exec netscape -remote 'openURL(about:, new-window)' 2>/dev/null || netscape + +DestroyFunc FuncFvwm2WWW +AddToFunc FuncFvwm2WWW ++ I Exec exec gppp + +DestroyFunc FuncFvwm3WWW +AddToFunc FuncFvwm3WWW ++ I Exec exec kppp + +# Used in migo +DestroyFunc FuncFvwmIrc +AddToFunc FuncFvwmIrc ++ I FuncFvwmRunInXterm irc irc + +DestroyFunc FuncFvwm2Irc +AddToFunc FuncFvwm2Irc ++ I Exec exec tkirc + +DestroyFunc FuncFvwm3Irc +AddToFunc FuncFvwm3Irc ++ I Exec exec licq + +# Used in migo +DestroyFunc FuncFvwmGame +AddToFunc FuncFvwmGame ++ I Exec exec xmahjongg + +DestroyFunc FuncFvwm2Game +AddToFunc FuncFvwm2Game ++ I Exec exec gnomine + +DestroyFunc FuncFvwm3Game +AddToFunc FuncFvwm3Game ++ I Exec exec kpat + +# Used in migo +DestroyFunc FuncFvwmCdPlayer +AddToFunc FuncFvwmCdPlayer ++ I Exec exec xplaycd + +DestroyFunc FuncFvwm2CdPlayer +AddToFunc FuncFvwm2CdPlayer ++ I Exec exec gtcd + +DestroyFunc FuncFvwm3CdPlayer +AddToFunc FuncFvwm3CdPlayer ++ I Exec exec kscd + +# Used in migo +DestroyFunc FuncFvwmSound +AddToFunc FuncFvwmSound ++ I Exec exec xmixer + +DestroyFunc FuncFvwm2Sound +AddToFunc FuncFvwm2Sound ++ I Exec exec gmix + +DestroyFunc FuncFvwm3Sound +AddToFunc FuncFvwm3Sound ++ I Exec exec kmix + +# Used in migo +DestroyFunc FuncFvwmKeyboard +AddToFunc FuncFvwmKeyboard ++ I Exec exec xkeycaps + +DestroyFunc FuncFvwm2Keyboard +AddToFunc FuncFvwm2Keyboard ++ I Exec exec xrus + +DestroyFunc FuncFvwm3Keyboard +AddToFunc FuncFvwm3Keyboard ++ I FvwmScript FvwmScript-KeyboardSetup + +# Used in migo +DestroyFunc FuncFvwmWmLock +AddToFunc FuncFvwmWmLock ++ I Exec xlock -nice 20 -mode random + +DestroyFunc FuncFvwm2WmLock +AddToFunc FuncFvwm2WmLock ++ I Exec xlock -nolock -nice 20 -mode random + +DestroyFunc FuncFvwm3WmLock +AddToFunc FuncFvwm3WmLock ++ I Nop + +# Used in migo, luthien +DestroyFunc FuncFvwmWindowClose +AddToFunc FuncFvwmWindowClose ++ I Close + +DestroyFunc FuncFvwm2WindowClose +AddToFunc FuncFvwm2WindowClose ++ I Delete + +DestroyFunc FuncFvwm3WindowClose +AddToFunc FuncFvwm3WindowClose ++ I Destroy + +# Used in migo & luthien +DestroyFunc FuncFvwmWmRestart +AddToFunc FuncFvwmWmRestart ++ I FuncFvwmConfirm `Do you really want to restart FVWM?` Restart --ok `Restart` +#+ I Restart + +DestroyFunc FuncFvwm2WmRestart +AddToFunc FuncFvwm2WmRestart ++ I Refresh + +DestroyFunc FuncFvwm3WmRestart +AddToFunc FuncFvwm3WmRestart ++ I Recapture + +# used in stroke & luthien; IMHO, both beep and grab are very annoying +DestroyFunc FuncFvwmQuitVerify +AddToFunc FuncFvwmQuitVerify ++ I FuncFvwmConfirm `Do you really want to quit FVWM?` Quit --ok `Yes, Quit` +#+ I FvwmForm FvwmForm-QuitVerify +#+ I Quit +#`====== end: Read "/usr/share/fvwm/themes/default/functions-appbind" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/autoraise/disabled" +DestroyFunc FuncFvwmStartFvwmAutoRaise +AddToFunc FuncFvwmStartFvwmAutoRaise + +DestroyFunc FuncFvwmStopFvwmAutoRaise +AddToFunc FuncFvwmStopFvwmAutoRaise + +DestroyFunc FuncFvwmAddToMenusFvwmAutoRaise +AddToFunc FuncFvwmAddToMenusFvwmAutoRaise +#`====== end: Read "/usr/share/fvwm/themes/default/settings/autoraise/disabled" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/events-handler/disabled" +DestroyFunc FuncFvwmStartFvwmEvent-Events +AddToFunc FuncFvwmStartFvwmEvent-Events + +DestroyFunc FuncFvwmStopFvwmEvent-Events +AddToFunc FuncFvwmStopFvwmEvent-Events + +DestroyFunc FuncFvwmAddToMenusStartFvwmEvent-Events +AddToFunc FuncFvwmAddToMenusStartFvwmEvent-Events + +DestroyFunc FuncFvwmAddToMenusStopFvwmEvent-Events +AddToFunc FuncFvwmAddToMenusStopFvwmEvent-Events + +DestroyModuleConfig FvwmEvent-Events: * + +DestroyFunc FuncFvwmEventsHandlerVerbose + +DestroyFunc FuncFvwmEventsHandler_error + +DestroyFunc FuncFvwmEventsHandler_add_window + +DestroyFunc FuncFvwmEventsHandler_raise_window + +DestroyFunc FuncFvwmEventsHandler_lower_window + +DestroyFunc FuncFvwmEventsHandler_focus_change + +DestroyFunc FuncFvwmEventsHandler_destroy_window + +DestroyFunc FuncFvwmEventsHandler_iconify + +DestroyFunc FuncFvwmEventsHandler_deiconify + +DestroyFunc FuncFvwmEventsHandler_windowshade + +DestroyFunc FuncFvwmEventsHandler_dewindowshade + +DestroyFunc FuncFvwmEventsHandler_new_page + +DestroyFunc FuncFvwmEventsHandler_new_desk + +DestroyFunc FuncFvwmEventsHandler_configure_window + +DestroyFunc FuncFvwmEventsHandler_window_name + +DestroyFunc FuncFvwmEventsHandler_icon_name + +DestroyFunc FuncFvwmEventsHandler_icon_file + +DestroyFunc FuncFvwmEventsHandler_icon_location + +DestroyFunc FuncFvwmEventsHandler_mini_icon + +DestroyFunc FuncFvwmEventsHandler_default_icon + +DestroyFunc FuncFvwmEventsHandler_res_class + +DestroyFunc FuncFvwmEventsHandler_res_name + +DestroyFunc FuncFvwmEventsHandler_end_windowlist + +DestroyFunc FuncFvwmEventsHandler_end_config_info + +DestroyFunc FuncFvwmEventsHandler_config_info + +DestroyFunc FuncFvwmEventsHandler_string + +DestroyFunc FuncFvwmEventsHandler_map + +DestroyFunc FuncFvwmEventsHandler_mini_icon + +DestroyFunc FuncFvwmEventsHandler_visible_name + +DestroyFunc FuncFvwmEventsHandler_sendconfig + +DestroyFunc FuncFvwmEventsHandler_restack + +DestroyFunc FuncFvwmEventsHandler_visible_icon_name + +DestroyFunc FuncFvwmEventsHandler_leave_window + +DestroyFunc FuncFvwmEventsHandler_enter_window + +DestroyFunc FuncFvwmEventsHandler_property_change + +DestroyFunc FuncFvwmEventsHandler_startup + +DestroyFunc FuncFvwmEventsHandler_shutdown + +DestroyFunc FuncFvwmEventsHandler_unknown + + +#`====== end: Read "/usr/share/fvwm/themes/default/settings/events-handler/disabled" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/iconstyles/native" +DestroyFunc FuncFvwmAddToMenusWMIcons +AddToFunc FuncFvwmAddToMenusWMIcons + +#.---- start: Read $./style-icon-miniicon +### +# This file is taken from wm-icons distribution. +# The file is not perfect, it'll be better in the next versions. +# Send your comments to fvwm-themes-devel@lists.sourceforge.net. +### + +Style * EWMHDonateIcon, EWMHDonateMiniIcon +#Style Eterm* IconOverride +Style * IconOverride + +### +# Known applications +### + +# Setting window style icons; style is defined by window name/resource/class. +# Note, todo can be replaced by unknown or empty, but since it is beta yet, +# todo is a notice to do something about an icon for this application. + +Style "*" Icon norm/unknown.xpm, MiniIcon mini/unknown.xpm +Style "NoResource" Icon norm/unknown.xpm, MiniIcon mini/unknown.xpm + +# Terminals +Style "Eterm*" Icon norm/terminal.xpm, MiniIcon mini/terminal.xpm +Style "rxvt" Icon norm/terminal.xpm, MiniIcon mini/terminal.xpm +Style "XTerm" Icon norm/terminal.xpm, MiniIcon mini/terminal.xpm +Style "rxterm" Icon norm/terminal-remote.xpm, MiniIcon mini/terminal-remote.xpm + +# These are not all mine, most of globs must be removed. +Style "DDD*" Icon norm/development.xpm, MiniIcon mini/development.xpm +Style "GRASP*" Icon norm/file-manager.xpm, MiniIcon mini/file-manager.xpm +Style "HyTeX*" Icon norm/viewer.xpm, MiniIcon mini/viewer.xpm +Style "ImageMagic*" Icon norm/image-processor.xpm, MiniIcon mini/image-processor.xpm +Style "KDisk*" Icon norm/disk.xpm, MiniIcon mini/disk.xpm +Style "LyX" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "MathSpad*" Icon norm/science.xpm, MiniIcon mini/science.xpm +Style "MuPAD*" Icon norm/science.xpm, MiniIcon mini/science.xpm +Style "StarOffice*" Icon norm/word-processor.xpm, MiniIcon mini/word-processor.xpm +Style "SystemInfo*" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "Tk man" Icon norm/help.xpm, MiniIcon mini/help.xpm +Style "Visual Tcl" Icon norm/todo.xpm, MiniIcon mini/todo.xpm + +Style "AcroRead" Icon norm/viewer.xpm, MiniIcon mini/viewer.xpm +Style "adsl-config" Icon norm/network.xpm, MiniIcon mini/network.xpm +Style "amaya*" Icon norm/www.xpm, MiniIcon mini/www.xpm +Style "Appointment" Icon norm/clock.xpm, MiniIcon mini/clock.xpm +Style "asWedit*" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "bitmap*" Icon norm/image-processor.xpm, MiniIcon mini/image-processor.xpm +Style "?calc" Icon norm/calculator.xpm, MiniIcon mini/calculator.xpm +Style "?clock" Icon norm/clock.xpm, MiniIcon mini/clock.xpm +Style "cooledit" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "control*" Icon norm/home.xpm, MiniIcon mini/home.xpm +Style "Dayview" Icon norm/clock.xpm, MiniIcon mini/clock.xpm +Style "Dialogue" Icon norm/www.xpm, MiniIcon mini/www.xpm +Style "Display" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm +Style "dosemu*" Icon norm/todo.xpm, MiniIcon mini/todo.xpm +Style "emacs" Icon norm/gnu.xpm, MiniIcon mini/gnu.xpm +Style "Explorer" Icon norm/file-manager.xpm, MiniIcon mini/file-manager.xpm +Style "Fractine" Icon norm/science.xpm, MiniIcon mini/science.xpm +Style "fr" Icon norm/file-manager.xpm, MiniIcon mini/file-manager.xpm +Style "freeamp" Icon norm/music.xpm, MiniIcon mini/music.xpm +Style "FreeAmp*" Icon norm/music.xpm, MiniIcon mini/music.xpm +Style "File Viewer*" Icon norm/viewer.xpm, MiniIcon mini/viewer.xpm +Style "Fvwm*" Icon norm/utility.xpm, MiniIcon mini/utility.xpm +Style "ghostview" Icon norm/ghostview.xpm, MiniIcon mini/ghostview.xpm +Style "ghostscript" Icon norm/ghostview.xpm, MiniIcon mini/ghostview.xpm +Style "gifview" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm +Style "gkrellm" Icon norm/monitoring.xpm, MiniIcon mini/monitoring.xpm +Style "GNUplot" Icon norm/science.xpm, MiniIcon mini/science.xpm +Style "GV" Icon norm/ghostview.xpm, MiniIcon mini/ghostview.xpm +Style "Help_popup" Icon norm/help.xpm, MiniIcon mini/help.xpm +Style "Image Viewer*" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm +Style "isdn-config" Icon norm/network.xpm, MiniIcon mini/network.xpm +Style "ixset" Icon norm/todo.xpm, MiniIcon mini/todo.xpm +Style "licq-bin" Icon norm/chat.xpm, MiniIcon mini/chat.xpm +Style "Lynx" Icon norm/www.xpm, MiniIcon mini/www.xpm +Style "Manual Page*" Icon norm/help.xpm, MiniIcon mini/help.xpm +Style "matlab" Icon norm/science.xpm, MiniIcon mini/science.xpm +# too general +Style "Midnight-Commander" Icon norm/file-manager.xpm, MiniIcon mini/file-manager.xpm +Style "mgv*" Icon norm/ghostview.xpm, MiniIcon mini/ghostview.xpm +Style "mldonkey*" Icon norm/network.xpm, MiniIcon mini/network.xpm +Style "moxfm*" Icon norm/file-manager.xpm, MiniIcon mini/file-manager.xpm +Style "mtools*" Icon norm/disk.xpm, MiniIcon mini/disk.xpm +Style "mxaudio" Icon norm/music.xpm, MiniIcon mini/music.xpm +Style "NEdit*" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "nedit*" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "Netscape" Icon norm/netscape.xpm, MiniIcon mini/netscape.xpm +Style "Mozilla" Icon norm/netscape.xpm, MiniIcon mini/netscape.xpm +Style "Mozilla-bin" Icon norm/netscape.xpm, MiniIcon mini/netscape.xpm +Style "Download" Icon norm/folder.xpm, MiniIcon mini/folder.xpm +Style "Mail" Icon norm/mail.xpm, MiniIcon mini/mail.xpm +Style "Composition" Icon norm/mail.xpm, MiniIcon mini/mail.xpm +Style "NcFtp" Icon norm/network.xpm, MiniIcon mini/network.xpm +Style "nscal*" Icon norm/clock.xpm, MiniIcon mini/clock.xpm +Style "News" Icon norm/news.xpm, MiniIcon mini/news.xpm +Style "opera" Icon norm/www.xpm, MiniIcon mini/www.xpm +Style "panel" Icon norm/home.xpm, MiniIcon mini/home.xpm +Style "pine" Icon norm/mail.xpm, MiniIcon mini/mail.xpm +Style "pixmap*" Icon norm/image-processor.xpm, MiniIcon mini/image-processor.xpm +Style "qps*" Icon norm/mail.xpm, MiniIcon mini/mail.xpm +Style "sxpm" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm +Style "Tail File*" Icon norm/viewer.xpm, MiniIcon mini/viewer.xpm +Style "textedit" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "thot*" Icon norm/www.xpm, MiniIcon mini/www.xpm +Style "THX-1138" Icon norm/calculator.xpm, MiniIcon mini/calculator.xpm +Style "timidity" Icon norm/music.xpm, MiniIcon mini/music.xpm +Style "Top" Icon norm/monitoring.xpm, MiniIcon mini/monitoring.xpm +Style "usernet" Icon norm/network.xpm, MiniIcon mini/network.xpm +Style "VIM" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "VI" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "vppp*" Icon norm/network.xpm, MiniIcon mini/network.xpm +Style "conx" Icon norm/network.xpm, MiniIcon mini/network.xpm +Style "vmware" Icon norm/utility.xpm, MiniIcon mini/utility.xpm +Style "wmCalClock" Icon norm/clock.xpm, MiniIcon mini/clock.xpm +Style "workman" Icon norm/cd-player.xpm, MiniIcon mini/cd-player.xpm +Style "X11Amp" Icon norm/music.xpm, MiniIcon mini/music.xpm +Style "X3270xad" Icon norm/terminal.xpm, MiniIcon mini/terminal.xpm +Style "xanim" Icon norm/multimedia.xpm, MiniIcon mini/multimedia.xpm +Style "xapm" Icon norm/monitoring.xpm, MiniIcon mini/monitoring.xpm +Style "xbiff" Icon norm/mail.xpm, MiniIcon mini/mail.xpm +Style "xbm*" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm +Style "XbmBrowser" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm +Style "xclipboard" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "xcolorsel" Icon norm/colors.xpm, MiniIcon mini/colors.xpm +Style "xconsole" Icon norm/terminal.xpm, MiniIcon mini/terminal.xpm +Style "xdaliclock" Icon norm/clock.xpm, MiniIcon mini/clock.xpm +Style "xdiskinfo*" Icon norm/disk.xpm, MiniIcon mini/disk.xpm +Style "xditview" Icon norm/viewer.xpm, MiniIcon mini/viewer.xpm +Style "XDos*" Icon norm/todo.xpm, MiniIcon mini/todo.xpm +Style "xedit" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "xephem*" Icon norm/science.xpm, MiniIcon mini/science.xpm +Style "xfig*" Icon norm/image-processor.xpm, MiniIcon mini/image-processor.xpm +Style "xfontsel" Icon norm/font.xpm, MiniIcon mini/font.xpm +Style "xgraph" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm +Style "xkey*" Icon norm/keyboard.xpm, MiniIcon mini/keyboard.xpm +Style "xli" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm +Style "xload" Icon norm/monitoring.xpm, MiniIcon mini/monitoring.xpm +# -- [ xman resources -- +Style "Xman" Icon norm/help.xpm, MiniIcon mini/help.xpm +Style "topBox" Icon norm/folder.xpm, MiniIcon mini/folder.xpm +Style "manualBrowser" Icon norm/help.xpm, MiniIcon mini/help.xpm +Style "help" Icon norm/information.xpm, MiniIcon mini/information.xpm +# -- xman resources ] -- +Style "xmag" Icon norm/viewer.xpm, MiniIcon mini/viewer.xpm +Style "Xmessage" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "xosview" Icon norm/monitoring.xpm, MiniIcon mini/monitoring.xpm +# -- [ xpaint resources -- +Style "XPaint" Icon norm/image-processor.xpm, MiniIcon mini/image-processor.xpm +Style "Canvas" Icon norm/todo.xpm, MiniIcon mini/todo.xpm +Style "fatbits" Icon norm/todo.xpm, MiniIcon mini/todo.xpm +Style "filebrowser" Icon norm/file-manager.xpm, MiniIcon mini/file-manager.xpm +# -- xpaint resources ] -- +Style "xmh" Icon norm/mail.xpm, MiniIcon mini/mail.xpm +Style "xmixer" Icon norm/sound.xpm, MiniIcon mini/sound.xpm +Style "xmms" Icon norm/music.xpm, MiniIcon mini/music.xpm +Style "xpdf" Icon norm/viewer.xpm, MiniIcon mini/viewer.xpm +Style "xplaycd" Icon norm/cd-player.xpm, MiniIcon mini/cd-player.xpm +Style "xscreensaver" Icon norm/lock.xpm, MiniIcon mini/lock.xpm +Style "xsysinfo*" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "xtar*" Icon norm/file.xpm, MiniIcon mini/file.xpm +Style "XTel" Icon norm/terminal-special.xpm, MiniIcon mini/terminal-special.xpm +Style "XTide" Icon norm/science.xpm, MiniIcon mini/science.xpm +Style "xv" Icon norm/xv.xpm, MiniIcon mini/xv.xpm +Style "xvgr" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm +Style "xvmount" Icon norm/disk.xpm, MiniIcon mini/disk.xpm +Style "xwp" Icon norm/word-processor.xpm, MiniIcon mini/word-processor.xpm +Style "xwpe" Icon norm/development.xpm, MiniIcon mini/development.xpm +Style "xxgdb" Icon norm/development.xpm, MiniIcon mini/development.xpm + +# Open File dialog +Style "Browse * Select a File" Icon norm/folder.xpm, MiniIcon mini/folder.xpm +Style "File Directory" Icon norm/folder.xpm, MiniIcon mini/folder.xpm +Style "fileSelector*" Icon norm/folder.xpm, MiniIcon mini/folder.xpm +Style "fileSelection_popup" Icon norm/folder.xpm, MiniIcon mini/folder.xpm +Style "Open document" Icon norm/folder.xpm, MiniIcon mini/folder.xpm +Style "Save as" Icon norm/folder.xpm, MiniIcon mini/folder.xpm +Style "Select a file to open" Icon norm/folder.xpm, MiniIcon mini/folder.xpm +Style "Select a file to load" Icon norm/folder.xpm, MiniIcon mini/folder.xpm +Style "selFile" Icon norm/folder.xpm, MiniIcon mini/folder.xpm +Style "Open File..." Icon norm/folder.xpm, MiniIcon mini/folder.xpm +Style "xgetfile" Icon norm/folder.xpm, MiniIcon mini/folder.xpm + +# Too general +Style "*_applet" Icon norm/utility.xpm, MiniIcon mini/utility.xpm +Style "help*" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "*icq" Icon norm/chat.xpm, MiniIcon mini/chat.xpm +Style "*irc" Icon norm/chat.xpm, MiniIcon mini/chat.xpm +Style "*info" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "info*" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "Information" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "_o_*" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "About" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "about_popup" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "about" Icon norm/information.xpm, MiniIcon mini/information.xpm + +# FVWM / FVWM Themes +Style "Fvwm*" Icon norm/utility.xpm, MiniIcon mini/utility.xpm +Style "FvwmConsole" Icon norm/terminal-special.xpm, MiniIcon mini/terminal-special.xpm +Style "FVWM Themes*" Icon norm/themes.xpm, MiniIcon mini/themes.xpm +Style "FVWM Themes Global Feel" Icon norm/configuration.xpm, MiniIcon mini/configuration.xpm +Style "FVWM Themes Doc*" Icon norm/help.xpm, MiniIcon mini/help.xpm +Style "FVWM Themes Menu*" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "Color Selector" Icon norm/colors.xpm, MiniIcon mini/colors.xpm +Style "Font Selector" Icon norm/font.xpm, MiniIcon mini/font.xpm +Style "Icon Browser" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm +Style "Image Browser" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm +Style "FvwmForm-ThemeSettings" Icon norm/configuration.xpm, MiniIcon mini/configuration.xpm +Style "FvwmForm-Restart" Icon norm/restart.xpm, MiniIcon mini/restart.xpm +Style "FormFvwmAnimate" Icon norm/window-iconify.xpm, MiniIcon mini/window-iconify.xpm +Style "FvwmForm-Form" Icon norm/configuration.xpm, MiniIcon mini/configuration.xpm +Style "FvwmForm-RootCursor" Icon norm/display.xpm, MiniIcon mini/display.xpm +Style "FvwmScript-BellSetup" Icon norm/sound.xpm, MiniIcon mini/sound.xpm +Style "FvwmScript-Keyboard" Icon norm/keyboard.xpm, MiniIcon mini/keyboard.xpm +Style "FvwmScript-ScreenSetup" Icon norm/display.xpm, MiniIcon mini/display.xpm +Style "FvwmScript-PointerSetup" Icon norm/mouse.xpm, MiniIcon mini/mouse.xpm + +# GNOME/Gtk Apps +Style "AbiWord*" Icon norm/word-processor.xpm, MiniIcon mini/word-processor.xpm +Style "bug-buddy" Icon norm/development.xpm, MiniIcon mini/development.xpm +Style "Dia" Icon norm/science.xpm, MiniIcon mini/science.xpm +Style "eog" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm +Style "Galeon-bin" Icon norm/www.xpm, MiniIcon mini/www.xpm +Style "galeon*" Icon norm/www.xpm, MiniIcon mini/www.xpm +Style "gcharmap" Icon norm/keyboard.xpm, MiniIcon mini/keyboard.xpm +Style "gcolorsel" Icon norm/colors.xpm, MiniIcon mini/colors.xpm +Style "gdict" Icon norm/utility.xpm, MiniIcon mini/utility.xpm +Style "gdiskfree" Icon norm/monitoring.xpm, MiniIcon mini/monitoring.xpm +Style "gEdit" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "gedit" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "gfontsel" Icon norm/font.xpm, MiniIcon mini/font.xpm +Style "gfloppy" Icon norm/disk-floppy.xpm, MiniIcon mini/disk-floppy.xpm +Style "ghex" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "ghostview" Icon norm/ghostview.xpm, MiniIcon mini/ghostview.xpm +Style "Gimp" Icon norm/gimp.xpm, MiniIcon mini/gimp.xpm +Style "gless" Icon norm/viewer.xpm, MiniIcon mini/viewer.xpm +Style "gmix" Icon norm/sound.xpm, MiniIcon mini/sound.xpm +Style "gmailman" Icon norm/mail.xpm, MiniIcon mini/mail.xpm +Style "gmc" Icon norm/file-manager.xpm, MiniIcon mini/file-manager.xpm +Style "gmenu" Icon norm/configuration.xpm, MiniIcon mini/configuration.xpm +Style "gnome-help-browser" Icon norm/help.xpm, MiniIcon mini/help.xpm +Style "GnomeHelpBrowser" Icon norm/help.xpm, MiniIcon mini/help.xpm +Style "gnome-hint" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "gnome-ppp" Icon norm/network.xpm, MiniIcon mini/network.xpm +Style "gnome-run" Icon norm/utility.xpm, MiniIcon mini/utility.xpm +Style "gnome-sync" Icon norm/folder.xpm, MiniIcon mini/folder.xpm +Style "Gnome-linuxconf" Icon norm/configuration.xpm, MiniIcon mini/configuration.xpm +Style "gnomecal" Icon norm/clock.xpm, MiniIcon mini/clock.xpm +Style "GnomeCard" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "gnomecard" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "gnomecc" Icon norm/home.xpm, MiniIcon mini/home.xpm +Style "GnomeTerminal" Icon norm/terminal.xpm, MiniIcon mini/terminal.xpm +Style "gnumeric" Icon norm/calculator.xpm, MiniIcon mini/calculator.xpm +Style "gnp" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "gnp+" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "GQview" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm +Style "grecord" Icon norm/sound.xpm, MiniIcon mini/sound.xpm +Style "grip" Icon norm/cd-player.xpm, MiniIcon mini/cd-player.xpm +Style "gsearchtool" Icon norm/file.xpm, MiniIcon mini/file.xpm +Style "gtalk" Icon norm/chat.xpm, MiniIcon mini/chat.xpm +Style "gtcd" Icon norm/cd-player.xpm, MiniIcon mini/cd-player.xpm +Style "gtk-gnutella" Icon norm/network.xpm, MiniIcon mini/network.xpm +Style "gtk-shell" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "gtkicq" Icon norm/chat.xpm, MiniIcon mini/chat.xpm +Style "gtop" Icon norm/monitoring.xpm, MiniIcon mini/monitoring.xpm +Style "gtt" Icon norm/clock.xpm, MiniIcon mini/clock.xpm +Style "guname" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "gw" Icon norm/monitoring.xpm, MiniIcon mini/monitoring.xpm +Style "gxedit" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "helix-update" Icon norm/network.xpm, MiniIcon mini/network.xpm +Style "idetool" Icon norm/disk.xpm, MiniIcon mini/disk.xpm +Style "logview" Icon norm/viewer.xpm, MiniIcon mini/viewer.xpm +Style "pan" Icon norm/news.xpm, MiniIcon mini/news.xpm +Style "vumeter" Icon norm/sound.xpm, MiniIcon mini/sound.xpm +Style "X-Chat" Icon norm/chat.xpm, MiniIcon mini/chat.xpm +Style "nautilus" Icon norm/file-manager.xpm, MiniIcon mini/file-manager.xpm + +# XFCE Apps +Style "xfclock" Icon norm/clock.xpm, MiniIcon mini/clock.xpm +Style "xftree" Icon norm/file-manager.xpm, MiniIcon mini/file-manager.xpm + +# KDE Apps +# -- [ Abbrowser -- +Style "kcontrol" Icon norm/kde.xpm, MiniIcon mini/kde.xpm +Style "abbrowser" Icon norm/information.xpm, MiniIcon mini/information.xpm +# -- Abbrowser ] -- +Style "aktion" Icon norm/video.xpm, MiniIcon mini/video.xpm +Style "ark" Icon norm/file.xpm, MiniIcon mini/file.xpm +# -- [ kviewshell -- +Style "kviewshell" Icon norm/viewer.xpm, MiniIcon mini/viewer.xpm +Style "DVI Viewer" Icon norm/viewer.xpm, MiniIcon mini/viewer.xpm +Style "Fax Viewer" Icon norm/viewer.xpm, MiniIcon mini/viewer.xpm +# -- kviewshell ] -- +Style "kab" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "kaiman" Icon norm/sound.xpm, MiniIcon mini/sound.xpm +Style "karm" Icon norm/clock.xpm, MiniIcon mini/clock.xpm +Style "kcharselect" Icon norm/keyboard.xpm, MiniIcon mini/keyboard.xpm +Style "kchart" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "kcron" Icon norm/system.xpm, MiniIcon mini/system.xpm +Style "kdehelp" Icon norm/help.xpm, MiniIcon mini/help.xpm +Style "kdepasswd" Icon norm/terminal-special.xpm, MiniIcon mini/terminal-special.xpm +Style "kdevelop" Icon norm/development.xpm, MiniIcon mini/development.xpm +Style "kdesu" Icon norm/terminal-special.xpm, MiniIcon mini/terminal-special.xpm +Style "kdf" Icon norm/disk.xpm, MiniIcon mini/disk.xpm +Style "kdvi" Icon norm/viewer.xpm, MiniIcon mini/viewer.xpm +Style "kedit" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "keystone" Icon norm/terminal.xpm, MiniIcon mini/terminal.xpm +Style "kfind" Icon norm/file.xpm, MiniIcon mini/file.xpm +Style "kfloppy" Icon norm/disk-floppy.xpm, MiniIcon mini/disk-floppy.xpm +Style "kfm" Icon norm/file-manager.xpm, MiniIcon mini/file-manager.xpm +Style "kfract" Icon norm/viewer.xpm, MiniIcon mini/viewer.xpm +Style "khexedit" Icon norm/file.xpm, MiniIcon mini/file.xpm +Style "kiconedit" Icon norm/image-processor.xpm, MiniIcon mini/image-processor.xpm +Style "kit" Icon norm/chat.xpm, MiniIcon mini/chat.xpm +Style "killustrator" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm +Style "kjots" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "klpq" Icon norm/printing.xpm, MiniIcon mini/printing.xpm +Style "kljettool" Icon norm/printing.xpm, MiniIcon mini/printing.xpm +Style "knode" Icon norm/news.xpm, MiniIcon mini/news.xpm +Style "knews" Icon norm/news.xpm, MiniIcon mini/news.xpm +Style "kmail*" Icon norm/mail.xpm, MiniIcon mini/mail.xpm +Style "kmidi" Icon norm/music.xpm, MiniIcon mini/music.xpm +Style "kmid" Icon norm/music.xpm, MiniIcon mini/music.xpm +Style "kmix" Icon norm/sound.xpm, MiniIcon mini/sound.xpm +Style "artsbuilder" Icon norm/music.xpm, MiniIcon mini/music.xpm +Style "artscontrol" Icon norm/sound.xpm, MiniIcon mini/sound.xpm +Style "kmoon" Icon norm/science.xpm, MiniIcon mini/science.xpm +Style "kodo" Icon norm/mouse.xpm, MiniIcon mini/mouse.xpm +Style "kpackage" Icon norm/programs.xpm, MiniIcon mini/programs.xpm +Style "kppp" Icon norm/network.xpm, MiniIcon mini/network.xpm +Style "kppplogview" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "kghostview" Icon norm/viewer.xpm, MiniIcon mini/viewer.xpm +Style "konqueror" Icon norm/file-manager.xpm, MiniIcon mini/file-manager.xpm +Style "korganizer" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "konsole" Icon norm/terminal.xpm, MiniIcon mini/terminal.xpm +Style "koshell" Icon norm/home.xpm, MiniIcon mini/home.xpm +Style "kpixmap2bitmap" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm +Style "kpm" Icon norm/monitoring.xpm, MiniIcon mini/monitoring.xpm +Style "kpresenter" Icon norm/word-processor.xpm, MiniIcon mini/word-processor.xpm +Style "krule" Icon norm/utility.xpm, MiniIcon mini/utility.xpm +Style "kscd" Icon norm/cd-player.xpm, MiniIcon mini/cd-player.xpm +Style "ksnapshot" Icon norm/window.xpm, MiniIcon mini/window.xpm +Style "kspread" Icon norm/calculator.xpm, MiniIcon mini/calculator.xpm +Style "ksysguard" Icon norm/monitoring.xpm, MiniIcon mini/monitoring.xpm +Style "ksysv" Icon norm/system.xpm, MiniIcon mini/system.xpm +Style "kteatime" Icon norm/amusement.xpm, MiniIcon mini/amusement.xpm +Style "ktip" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "kuser" Icon norm/system.xpm, MiniIcon mini/system.xpm +Style "kview" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm +Style "kvt" Icon norm/terminal.xpm, MiniIcon mini/terminal.xpm +Style "kwikdisk" Icon norm/disk.xpm, MiniIcon mini/disk.xpm +Style "kword" Icon norm/word-processor.xpm, MiniIcon mini/word-processor.xpm +Style "kworldwatch" Icon norm/clock.xpm, MiniIcon mini/clock.xpm +Style "kwrite" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "kwuftpd" Icon norm/network.xpm, MiniIcon mini/network.xpm +Style "noatun" Icon norm/multimedia.xpm, MiniIcon mini/multimedia.xpm +Style "pixie" Icon norm/image-viewer.xpm, MiniIcon mini/image-viewer.xpm + +# CDE Apps +Style "Dterm" Icon norm/terminal.xpm, MiniIcon mini/terminal.xpm +Style "Dtfile" Icon norm/file-manager.xpm, MiniIcon mini/file-manager.xpm +Style "Dtpad" Icon norm/editor.xpm, MiniIcon mini/editor.xpm +Style "Dthelp*" Icon norm/help.xpm, MiniIcon mini/help.xpm +Style "Dtcm*" Icon norm/clock.xpm, MiniIcon mini/clock.xpm +Style "Dtcalc" Icon norm/calculator.xpm, MiniIcon mini/calculator.xpm +Style "Dticon*" Icon norm/image-processor.xpm, MiniIcon mini/image-processor.xpm +Style "Dtprint*" Icon norm/printing.xpm, MiniIcon mini/printing.xpm +Style "Dtstyle*" Icon norm/configuration.xpm, MiniIcon mini/configuration.xpm +Style "Applications Manager" Icon norm/programs.xpm, MiniIcon mini/programs.xpm +Style "Trash Can" Icon norm/file.xpm, MiniIcon mini/file.xpm + +# Games +Style "SDL_App" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "*angband" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "gcfclient" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "Heroes ?.*" Icon norm/game-action.xpm, MiniIcon mini/game-action.xpm +Style "Maelstrom" Icon norm/game-action.xpm, MiniIcon mini/game-action.xpm +Style "MirrorMagic" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "PowerManga*" Icon norm/game-action.xpm, MiniIcon mini/game-action.xpm +Style "PySol" Icon norm/game-cards.xpm, MiniIcon mini/game-cards.xpm +Style "Rocks'n'Diamonds" Icon norm/game-action.xpm, MiniIcon mini/game-action.xpm +Style "XGammon" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "XGammon-Buttons" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "xgoban" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "comment" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "xmahjongg" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "*tetris" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "xtrojka" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "xemeraldia" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "XGalaga" Icon norm/game-action.xpm, MiniIcon mini/game-action.xpm +Style "xeyes" Icon norm/amusement.xpm, MiniIcon mini/amusement.xpm + +# 11 xpuzzles +Style "xcubes" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "xdino" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "xhexagons" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "xmball" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "xmlink" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "xoct" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "xpanex" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "xpyraminx" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "xrubik" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "xskewb" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "xtriangles" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm + +Style "High score*" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "Statistics" Icon norm/information.xpm, MiniIcon mini/information.xpm +Style "xboard" Icon norm/game-board.xpm, MiniIcon mini/game-board.xpm +Style "xevil" Icon norm/game-action.xpm, MiniIcon mini/game-action.xpm +Style "xsok*" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "xbomb" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "*Scavenger" Icon norm/game-action.xpm, MiniIcon mini/game-action.xpm +Style "Freeciv*" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "XPat" Icon norm/game-cards.xpm, MiniIcon mini/game-cards.xpm +Style "dontspace" Icon norm/game-cards.xpm, MiniIcon mini/game-cards.xpm +Style "klondike" Icon norm/game-cards.xpm, MiniIcon mini/game-cards.xpm +Style "spider" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "X-Mame*" Icon norm/game-action.xpm, MiniIcon mini/game-action.xpm +Style "xlin-city*" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "xchomp" Icon norm/game-action.xpm, MiniIcon mini/game-action.xpm + +# GNOME Games +Style "freecell" Icon norm/game-cards.xpm, MiniIcon mini/game-cards.xpm +Style "gataxx" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "glines" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "gnibbles" Icon norm/game-action.xpm, MiniIcon mini/game-action.xpm +Style "gnobots" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "gnobots2" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "gnome-chess" Icon norm/game-board.xpm, MiniIcon mini/game-board.xpm +Style "gnome-stones" Icon norm/game-action.xpm, MiniIcon mini/game-action.xpm +Style "gnome-xbill" Icon norm/game-action.xpm, MiniIcon mini/game-action.xpm +Style "gnomine" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "gnotski" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "gtali" Icon norm/game-board.xpm, MiniIcon mini/game-board.xpm +Style "gnotravex" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "gturing" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "iagno" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "mahjongg" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "same-gnome" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "sol" Icon norm/game-cards.xpm, MiniIcon mini/game-cards.xpm + +Style "gtkballs" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "gfpoken" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm + +# KDE Games # these ones have own 16x16 & 32x32 xpm's included with kdebase +Style "Jezzball" Icon norm/game-action.xpm, MiniIcon mini/game-action.xpm +Style "lskat" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "kabalone" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "kasteroids" Icon norm/game-action.xpm, MiniIcon mini/game-action.xpm +Style "katomic" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "kbackgammon" Icon norm/game-board.xpm, MiniIcon mini/game-board.xpm +Style "kblackbox" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "kfouleggs" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "kjumpingcube" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "kmahjongg" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "kmines" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "konquest" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "kpat" Icon norm/game-cards.xpm, MiniIcon mini/game-cards.xpm +Style "kpoker" Icon norm/game-cards.xpm, MiniIcon mini/game-cards.xpm +Style "kreversi" Icon norm/game-board.xpm, MiniIcon mini/game-board.xpm +Style "ksame" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "kshisen" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "ksirtet" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "ksmiletris" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "ksnake" Icon norm/game-action.xpm, MiniIcon mini/game-action.xpm +Style "ksokoban" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm +Style "kspaceduel" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "ktron" Icon norm/game-action.xpm, MiniIcon mini/game-action.xpm +Style "ktetris" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "ktuberling" Icon norm/game.xpm, MiniIcon mini/game.xpm +Style "kwin4" Icon norm/game-logic.xpm, MiniIcon mini/game-logic.xpm + +# this should be after XTerm Icon, otherwise Icon is not used on reload (bug?) +# enable: xterm +ai +Style XTerm NoActiveIconOverride +#`====== end: Read $./style-icon-miniicon + + +#`====== end: Read "/usr/share/fvwm/themes/default/settings/iconstyles/native" + +#.---- start: Read "/usr/share/fvwm/themes/default/sound" +DestroyModuleConfig FvwmEvent-Sound: * + +*FvwmEvent-Sound: StartDelay 4 +*FvwmEvent-Sound: Delay 1 + +#*FvwmEvent-Sound: startup $[fvwm_theme_bling_dir]/sounds/startup +#*FvwmEvent-Sound: shutdown $[fvwm_theme_bling_dir]/sounds/shutdown +#*FvwmEvent-Sound: unknown $[fvwm_theme_bling_dir]/sounds/unknown +#*FvwmEvent-Sound: error $[fvwm_theme_bling_dir]/sounds/error +*FvwmEvent-Sound: add_window $[fvwm_theme_bling_dir]/sounds/add_window.au +#*FvwmEvent-Sound: raise_window $[fvwm_theme_bling_dir]/sounds/raise_window +#*FvwmEvent-Sound: lower_window $[fvwm_theme_bling_dir]/sounds/lower_window +#*FvwmEvent-Sound: focus_change $[fvwm_theme_bling_dir]/sounds/focus_change +*FvwmEvent-Sound: destroy_window $[fvwm_theme_bling_dir]/sounds/destroy_window.au +*FvwmEvent-Sound: iconify $[fvwm_theme_bling_dir]/sounds/iconify.au +*FvwmEvent-Sound: deiconify $[fvwm_theme_bling_dir]/sounds/deiconify.au +*FvwmEvent-Sound: windowshade $[fvwm_theme_bling_dir]/sounds/windowshade.au +*FvwmEvent-Sound: dewindowshade $[fvwm_theme_bling_dir]/sounds/dewindowshade.au +*FvwmEvent-Sound: new_page $[fvwm_theme_bling_dir]/sounds/new_page.au +*FvwmEvent-Sound: new_desk $[fvwm_theme_bling_dir]/sounds/new_desk.au +#*FvwmEvent-Sound: configure_window $[fvwm_theme_bling_dir]/sounds/configure_window +#*FvwmEvent-Sound: window_name $[fvwm_theme_bling_dir]/sounds/window_name +#*FvwmEvent-Sound: icon_name $[fvwm_theme_bling_dir]/sounds/icon_name +#*FvwmEvent-Sound: icon_file $[fvwm_theme_bling_dir]/sounds/icon_file +#*FvwmEvent-Sound: icon_location $[fvwm_theme_bling_dir]/sounds/icon_location +#*FvwmEvent-Sound: mini_icon $[fvwm_theme_bling_dir]/sounds/mini_icon +#*FvwmEvent-Sound: default_icon $[fvwm_theme_bling_dir]/sounds/default_icon +#*FvwmEvent-Sound: res_class $[fvwm_theme_bling_dir]/sounds/res_class +#*FvwmEvent-Sound: res_name $[fvwm_theme_bling_dir]/sounds/res_name +#*FvwmEvent-Sound: end_windowlist $[fvwm_theme_bling_dir]/sounds/end_windowlist +#*FvwmEvent-Sound: end_config_info $[fvwm_theme_bling_dir]/sounds/end_config_info +#*FvwmEvent-Sound: config_info $[fvwm_theme_bling_dir]/sounds/config_info +#*FvwmEvent-Sound: string $[fvwm_theme_bling_dir]/sounds/string +#*FvwmEvent-Sound: map $[fvwm_theme_bling_dir]/sounds/map + +# Does not work +#*FvwmEvent-Sound: beep $[fvwm_theme_bling_dir]/sounds/beep +#*FvwmEvent-Sound: toggle_paging $[fvwm_theme_bling_dir]/sounds/toggle_paging +#`====== end: Read "/usr/share/fvwm/themes/default/sound" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/sound-player/disabled" +DestroyFunc FuncFvwmStartFvwmEvent-Sound +AddToFunc FuncFvwmStartFvwmEvent-Sound + +DestroyFunc FuncFvwmStopFvwmEvent-Sound +AddToFunc FuncFvwmStopFvwmEvent-Sound + +DestroyFunc FuncFvwmAddToMenusStartSoundEffect +AddToFunc FuncFvwmAddToMenusStartSoundEffect + +DestroyFunc FuncFvwmAddToMenusStopSoundEffect +AddToFunc FuncFvwmAddToMenusStopSoundEffect +#`====== end: Read "/usr/share/fvwm/themes/default/settings/sound-player/disabled" + +#.---- start: Read "/usr/share/fvwm/themes/default/menus" +DestroyMenu MenuFvwmRoot +AddToMenu MenuFvwmRoot ++ "$[gt.Root Menu]" Title +Test (f /etc/X11/fvwm/menudefs.hook) + "$[gt.&Debian]%menu/terminal.xpm%" Popup "/Debian" +Test (f /etc/X11/fvwm/menudefs.hook) + "$[gt.&Re-read System Menu]%menu/terminal.xpm%" Read "/etc/X11/fvwm/menudefs.hook" +Test (f /etc/X11/fvwm/menudefs.hook) + "$[gt.&Update My Debian Menu]%menu/terminal.xpm%" PipeRead 'update-menus && echo "Read menudefs.hook"' ++ "$[gt.&Terminals]%menu/terminal.xpm%" Popup MenuFvwmShells ++ "$[gt.&Programs]%menu/programs.xpm%" Popup MenuFvwmPrograms ++ "$[gt.S&ystem]%menu/system.xpm%" Popup MenuFvwmSystem ++ "$[gt.Person&al]%menu/home.xpm%" Popup MenuFvwmPersonal ++ "" Nop ++ "$[gt.&Configuration]%menu/configuration.xpm%" Popup MenuFvwmConfiguration ++ "$[gt.&Help]%menu/help.xpm%" Popup MenuFvwmHelp ++ "" Nop ++ "$[gt.FVWM &Modules]%menu/modules.xpm%" Popup MenuFvwmModules ++ "$[gt.&Window Operations]%menu/window.xpm%" Popup MenuFvwmWindowOps ++ "" Nop ++ "$[gt.Web &Browsing]%menu/www.xpm%" Popup MenuFvwmWebBrowsing ++ "$[gt.Sc&reen Saver]%menu/display.xpm%" Popup MenuFvwmScreenSaver ++ "$[gt.&Quit FVWM]%menu/quit.xpm%" Popup MenuFvwmQuit + +# Make sure that the Debian menus, and the icons they reference, are +# available if we have /etc/X11/fvwm/menudefs.hook +DestroyFunc SetDebianMenu +AddToFunc SetDebianMenu ++ I Read /etc/X11/fvwm/menudefs.hook ++ I Test (F $[FVWM_USERDIR]/menudefs.hook) Read menudefs.hook quiet + +Test (f /etc/X11/fvwm/menudefs.hook) SetDebianMenu + + +# ---------------------------------------------------------------------------- +# ---------- Shells + +# This menu is in the separated component menus-programs + +# ---------------------------------------------------------------------------- +# ---------- Programs + +# This menu is in the separated component menus-programs + +# ---------------------------------------------------------------------------- +# ---------- System + +# This menu is in the separated component menus-programs + +# ---------------------------------------------------------------------------- +# ---------- Personal + +# Define this menu in your personal theme: ~/.fvwm/themes/personal/menus-extra +# or using Menu Editor GUI. +AddToMenu MenuFvwmPersonal + +# ---------------------------------------------------------------------------- +# ---------- Help + +DestroyMenu MenuFvwmHelp +AddToMenu MenuFvwmHelp "Help" Title ++ "%menu/help.xpm%$[gt.FVWM Man Pages]" Popup MenuFvwmManPages ++ "%menu/information.xpm%$[gt.Show FVWM Version]" FuncFvwmShowVersionInfo ++ "" Nop ++ "%menu/help.xpm%$[gt.X Man Pages]" Exec exec xman ++ "%menu/help.xpm%$[gt.GNOME Help]" Exec exec gnome-help ++ "%menu/help.xpm%$[gt.GNOME Help]" Exec exec gnome-help-browser ++ "%menu/help.xpm%$[gt.KDE Help]" Exec exec kdehelp ++ "%menu/help.xpm%$[gt.KDE Help]" Exec exec khelpcenter + +DestroyMenu MenuFvwmWebPages +AddToMenu MenuFvwmWebPages ++ "$[gt.FVWM Web Pages]" Title ++ "%menu/information.xpm%$[gt.Home Page]" FuncFvwmOpenURL http://www.fvwm.org/ ++ "%menu/information.xpm%$[gt.Screenshots]" FuncFvwmOpenURL http://www.fvwm.org/screenshots/ ++ "%menu/information.xpm%$[gt.Download]" FuncFvwmOpenURL http://www.fvwm.org/download.html ++ "%menu/information.xpm%$[gt.FAQ]" FuncFvwmOpenURL http://www.fvwm.org/generated/FAQ.html ++ "$[gt.FVWM Themes Web Pages]" Title ++ "%menu/information.xpm%$[gt.Home Page]" FuncFvwmOpenURL http://fvwm-themes.sourceforge.net/ ++ "%menu/information.xpm%$[gt.Project Page]" FuncFvwmOpenURL https://sourceforge.net/projects/fvwm-themes/ ++ "%menu/information.xpm%$[gt.Screenshots]" FuncFvwmOpenURL http://fvwm-themes.sourceforge.net/screenshots/ ++ "%menu/information.xpm%$[gt.Download]" FuncFvwmOpenURL https://sourceforge.net/project/showfiles.php?group_id=1738 ++ "%menu/information.xpm%$[gt.FAQ]" FuncFvwmOpenURL http://fvwm-themes.sourceforge.net/doc/FAQ + +DestroyMenu MenuFvwmManPages +AddToMenu MenuFvwmManPages "FVWM Man Pages" Title ++ "%menu/help.xpm%fvwm" FuncFvwmViewManPage fvwm ++ "%menu/help.xpm%FvwmAnimate" FuncFvwmViewManPage FvwmAnimate ++ "%menu/help.xpm%FvwmAuto" FuncFvwmViewManPage FvwmAuto ++ "%menu/help.xpm%FvwmBacker" FuncFvwmViewManPage FvwmBacker ++ "%menu/help.xpm%FvwmBanner" FuncFvwmViewManPage FvwmBanner ++ "%menu/help.xpm%FvwmButtons" FuncFvwmViewManPage FvwmButtons ++ "%menu/help.xpm%FvwmCommand" FuncFvwmViewManPage FvwmCommand ++ "%menu/help.xpm%FvwmConsole" FuncFvwmViewManPage FvwmConsole ++ "%menu/help.xpm%FvwmConsoleC.pl" FuncFvwmViewManPage FvwmConsoleC.pl ++ "%menu/help.xpm%FvwmCpp" FuncFvwmViewManPage FvwmCpp ++ "%menu/help.xpm%FvwmDebug" FuncFvwmViewManPage FvwmDebug ++ "%menu/help.xpm%FvwmDragWell" FuncFvwmViewManPage FvwmDragWell ++ "%menu/help.xpm%FvwmEvent" FuncFvwmViewManPage FvwmEvent ++ "%menu/help.xpm%FvwmForm" FuncFvwmViewManPage FvwmForm ++ "%menu/help.xpm%FvwmGtk" FuncFvwmViewManPage FvwmGtk ++ "%menu/help.xpm%FvwmGtkDebug" FuncFvwmViewManPage FvwmGtkDebug ++ "%menu/help.xpm%FvwmIconBox" FuncFvwmViewManPage FvwmIconBox ++ "%menu/help.xpm%FvwmIconMan" FuncFvwmViewManPage FvwmIconMan ++ "%menu/help.xpm%FvwmIdent" FuncFvwmViewManPage FvwmIdent ++ "%menu/help.xpm%FvwmM4" FuncFvwmViewManPage FvwmM4 ++ "%menu/help.xpm%FvwmPager" FuncFvwmViewManPage FvwmPager ++ "%menu/help.xpm%FvwmPerl" FuncFvwmViewManPage FvwmPerl ++ "%menu/help.xpm%FvwmProxy" FuncFvwmViewManPage FvwmProxy ++ "%menu/help.xpm%FvwmRearrange" FuncFvwmViewManPage FvwmRearrange ++ "%menu/help.xpm%FvwmSave" FuncFvwmViewManPage FvwmSave ++ "%menu/help.xpm%FvwmSaveDesk" FuncFvwmViewManPage FvwmSaveDesk ++ "%menu/help.xpm%FvwmScript" FuncFvwmViewManPage FvwmScript ++ "%menu/help.xpm%FvwmScroll" FuncFvwmViewManPage FvwmScroll ++ "%menu/help.xpm%FvwmTaskBar" FuncFvwmViewManPage FvwmTaskBar ++ "%menu/help.xpm%FvwmTheme" FuncFvwmViewManPage FvwmTheme ++ "%menu/help.xpm%FvwmWharf" FuncFvwmViewManPage FvwmWharf ++ "%menu/help.xpm%FvwmWinList" FuncFvwmViewManPage FvwmWinList ++ "%menu/help.xpm%FvwmWindowMenu" FuncFvwmViewManPage FvwmWindowMenu ++ "" Nop ++ "%menu/help.xpm%fvwm-config" FuncFvwmViewManPage fvwm-config ++ "%menu/help.xpm%fvwm-perllib" FuncFvwmViewManPage fvwm-perllib ++ "%menu/help.xpm%fvwm-root" FuncFvwmViewManPage fvwm-root ++ "%menu/help.xpm%fvwm-bug" FuncFvwmViewManPage fvwm-bug ++ "%menu/help.xpm%fvwm-convert-2.2" FuncFvwmViewManPage fvwm-convert-2.2 ++ "%menu/help.xpm%fvwm-convert-2.4" FuncFvwmViewManPage fvwm-convert-2.4 ++ "" Nop ++ "%menu/help.xpm%fvwm-menu-desktop" FuncFvwmViewManPage fvwm-menu-desktop ++ "%menu/help.xpm%fvwm-menu-directory" FuncFvwmViewManPage fvwm-menu-directory ++ "%menu/help.xpm%fvwm-menu-headlines" FuncFvwmViewManPage fvwm-menu-headlines ++ "%menu/help.xpm%fvwm-menu-xlock" FuncFvwmViewManPage fvwm-menu-xlock ++ "" Nop ++ "%menu/help.xpm%fvwm-themes-config" FuncFvwmViewManPage fvwm-themes-config ++ "%menu/help.xpm%fvwm-themes-com" FuncFvwmViewManPage fvwm-themes-com ++ "%menu/help.xpm%fvwm-themes-images" FuncFvwmViewManPage fvwm-themes-images ++ "%menu/help.xpm%fvwm-themes-menuapp" FuncFvwmViewManPage fvwm-themes-menuapp ++ "%menu/help.xpm%fvwm-themes-root" FuncFvwmViewManPage fvwm-themes-root ++ "%menu/help.xpm%fvwm-themes-start" FuncFvwmViewManPage fvwm-themes-start + +# ---------------------------------------------------------------------------- +# ---------- Modules + +DestroyMenu MenuFvwmModules +AddToMenu MenuFvwmModules ++ "$[gt.FVWM Modules]" Title ++ "$[gt.Start Theme Modules]%menu/modules.xpm%" Popup MenuFvwmStartThemeModules ++ "$[gt.Stop Theme Modules]%menu/quit.xpm%" Popup MenuFvwmStopThemeModules ++ "" Nop ++ "$[gt.Start Regular Modules]%menu/modules.xpm%" Popup MenuFvwmStartRegularModules ++ "$[gt.Stop Regular Modules]%menu/quit.xpm%" Popup MenuFvwmStopRegularModules + +DestroyMenu MenuFvwmStartRegularModules +AddToMenu MenuFvwmStartRegularModules ++ "$[gt.Regular Modules]" Title ++ "$[gt.&Animation]%menu/window-iconify.xpm%" FuncFvwmRestartModule FvwmAnimate ++ "$[gt.Backe&r]%menu/display.xpm%" FuncFvwmRestartModule FvwmBacker ++ "$[gt.Ba&nner]%menu/display.xpm%" Module FvwmBanner ++ "$[gt.Co&mmandS]%menu/terminal-special.xpm%" FuncFvwmRestartModule FvwmCommandS ++ "$[gt.&Console]%menu/terminal-special.xpm%" FuncFvwmConsole ++ "$[gt.&GtkDebug]%menu/development.xpm%" Module FvwmGtkDebug ++ "$[gt.&Debug Console]%menu/development.xpm%" Module FvwmDebug --xconsole ++ "$[gt.&Identify]%menu/window-identify.xpm%" Module FvwmIdent ++ "$[gt.&ScrollBar (1/2 app)]%menu/window-resize.xpm%" Module FvwmScroll 2 2 ++ "%menu/window-resize.xpm%$[gt.&ScrollBar (75%% scr)]" Module FvwmScroll 75p 75p ++ "$[gt.Auto Raise (1/2 sec)]%menu/window-raise.xpm%" \ + FuncFvwmRestartModule 'FvwmAuto 500 "Silent Raise" Nop' ++ "$[gt.Auto Raise (2 sec)]%menu/window-raise.xpm%" \ + FuncFvwmRestartModule 'FvwmAuto 2000 "Silent Raise" Nop' ++ "" Nop ++ "$[gt.&Forms]%menu/utility.xpm%" Popup MenuFvwmForms ++ "$[gt.&Applets]%menu/utility.xpm%" Popup MenuFvwmApplets ++ "" Nop +# defined in settings/{autoraise,soud-player,events-handler}/* +FuncFvwmAddToMenusFvwmAutoRaise +FuncFvwmAddToMenusStartSoundEffect +FuncFvwmAddToMenusStartFvwmEvent-Events + +DestroyMenu MenuFvwmStopRegularModules +AddToMenu MenuFvwmStopRegularModules ++ "$[gt.Regular Modules]" Title ++ "$[gt.Stop &Animation]%menu/quit.xpm%" KillModule FvwmAnimate ++ "$[gt.Stop Backe&r]%menu/quit.xpm%" KillModule FvwmBacker ++ "$[gt.Stop Co&mmandS]%menu/quit.xpm%" KillModule FvwmCommandS ++ "$[gt.Stop &Console]%menu/quit.xpm%" KillModule FvwmConsole ++ "$[gt.Stop &GtkDebug]%menu/quit.xpm%" KillModule FvwmGtkDebug ++ "$[gt.Stop &Identify]%menu/quit.xpm%" KillModule FvwmIdent ++ "$[gt.Stop &ScrollBar]%menu/quit.xpm%" KillModule FvwmScroll ++ "$[gt.Stop Auto Rais&e]%menu/quit.xpm%" KillModule FvwmAuto ++ "$[gt.Stop All Events]%menu/quit.xpm%" KillModule FvwmEvent ++ "$[gt.Stop All &Buttons]%menu/quit.xpm%" KillModule FvwmButtons ++ "$[gt.Stop All &Forms]%menu/quit.xpm%" KillModule FvwmForm +FuncFvwmAddToMenusStopSoundEffect +FuncFvwmAddToMenusStopFvwmEvent-Events + +DestroyMenu MenuFvwmForms +AddToMenu MenuFvwmForms ++ "$[gt.FvwmForm Tools]" Title ++ "$[gt.&Capture]%menu/display.xpm%" Module FvwmForm FvwmForm-Capture ++ "$[gt.&Rlogin]%menu/terminal-remote.xpm%" Module FvwmForm FvwmForm-Rlogin ++ "$[gt.&Talk]%menu/terminal-special.xpm%" Module FvwmForm FvwmForm-Talk ++ "$[gt.&QuitVerify]%menu/quit.xpm%" Module FvwmForm FvwmForm-QuitVerify + +DestroyMenu MenuFvwmApplets +AddToMenu MenuFvwmApplets ++ "$[gt.FvwmScript Applets]" Title ++ "$[gt.APM]%menu/monitoring.xpm%" Module FvwmScript FvwmApplet-APMMon ++ "$[gt.Day]%menu/clock.xpm%" Module FvwmScript FvwmApplet-Day ++ "$[gt.DayClock]%menu/clock.xpm%" Module FvwmScript FvwmApplet-DayClock ++ "$[gt.DigitalClock]%menu/clock.xpm%" Module FvwmScript FvwmApplet-DigitalClock ++ "$[gt.Mixer]%menu/sound.xpm%" Module FvwmScript FvwmApplet-Mixer + + +# ----------------------------------------------------------------------------- +# ---------- Configuration Menus +DestroyFunc FuncFvwmFormThemeSettings +AddToFunc FuncFvwmFormThemeSettings ++ I KillModule FvwmForm FvwmForm-ThemeSettings ++ I Module FvwmForm FvwmForm-ThemeSettings + +DestroyFunc FuncFvwmStartGtkThemeSettings +AddToFunc FuncFvwmStartGtkThemeSettings ++ I KillModule FvwmGtk FvwmGtk-Themes ++ I Read FvwmGtk-Themes ++ I ModuleSynchronous FvwmGtk FvwmGtk-Themes + +DestroyFunc FuncFvwmGtkThemeSettings +AddToFunc FuncFvwmGtkThemeSettings ++ I FuncFvwmStartGtkThemeSettings ++ I DestroyFunc FuncFvwmStartGtkThemeSettings ++ I AddToFunc FuncFvwmStartGtkThemeSettings ++ I SendToModule FvwmGtk-Themes SettingsDialog + +DestroyMenu MenuFvwmConfiguration +AddToMenu MenuFvwmConfiguration ++ "$[gt.&Root Cursor]%menu/display.xpm%" Module FvwmForm FvwmForm-RootCursor ++ "$[gt.Form &Defaults]%menu/configuration.xpm%" Module FvwmForm FvwmForm-Form ++ "$[gt.Control &Animation]%menu/window-iconify.xpm%" Popup MenuFvwmAnimate ++ "$[gt.&X Configuration]%menu/display.xpm%" Popup MenuFvwmXConfiguration ++ "" Nop ++ "$[gt.&Utilities]%menu/utility.xpm%" Popup MenuFvwmConfigUtilities ++ "" Nop ++ "$[gt.Show All Colorsets] Shift-Ctrl-F8%menu/colors.xpm%" FuncFvwmShowAllColorsets ++ "$[gt.Show Current Palette] Shift-Ctrl-F9%menu/colors.xpm%" FuncFvwmShowColourTable +# settings/iconstyles +FuncFvwmAddToMenusWMIcons + +DestroyMenu MenuFvwmXConfiguration +AddToMenu MenuFvwmXConfiguration ++ "$[gt.X Configuration]" Title ++ "$[gt.Bell]%menu/sound.xpm%" FvwmScript FvwmScript-BellSetup ++ "$[gt.KeyBoard]%menu/keyboard.xpm%" FvwmScript FvwmScript-KeyboardSetup ++ "$[gt.Screen]%menu/display.xpm%" FvwmScript FvwmScript-ScreenSetup ++ "$[gt.Mouse]%menu/mouse.xpm%" FvwmScript FvwmScript-PointerSetup + +DestroyMenu MenuFvwmConfigUtilities +AddToMenu MenuFvwmConfigUtilities ++ "$[gt.Configuration Utilities]" Title ++ "$[gt.&Color Selector]%menu/colors.xpm%" FvwmScript FvwmScript-ColorSelector \ + --text-colorset 36 --viewer-colorset 33 ++ "$[gt.&Font Selector]%menu/font.xpm%" FvwmScript FvwmScript-FontSelector \ + --text-colorset 36 --viewer-colorset 33 ++ "$[gt.&Icon Browser]%menu/image-viewer.xpm%" FvwmScript FvwmScript-IconBrowser \ + --text-colorset 36 --icon-colorset 5 --launched 0 \ + --dir $[FT_DATADIR]/images/ ++ "$[gt.&Image Browser]%menu/image-viewer.xpm%" FvwmScript FvwmScript-ImageBrowser \ + --text-colorset 36 --launched 0 --dir $[FT_DATADIR]/images/ + +# ----------------------------------------------------------------------------- +# ---------- MenuFvwmQuit + +DestroyMenu MenuFvwmQuit +AddToMenu MenuFvwmQuit ++ "$[gt.Really Quit FVWM]?" Title ++ "$[gt.&Restart]%menu/restart.xpm%" Restart ++ "$[gt.&Restart Other]%menu/restart.xpm%" Popup MenuFvwmWindowManager ++ "" Nop ++ "$[gt.Re&fresh Screen]%menu/refresh.xpm%" Refresh ++ "$[gt.Re&capture Screen]%menu/refresh.xpm%" Recapture ++ "" Nop ++ "$[gt.&Yes, Really Quit]%menu/choice-yes.xpm%" Quit ++ "$[gt.&No, Don't Quit]%menu/choice-no.xpm%" Nop + +# ----------------------------------------------------------------------------- +# ---------- MenuFvwmWindow* + +# This defines all window operations +DestroyMenu MenuFvwmWindowOps +AddToMenu MenuFvwmWindowOps ++ "$[gt.Window Operations]" Title ++ "$[gt.&Move]%menu/window-move.xpm%" Move ++ "$[gt.&Resize]%menu/window-resize.xpm%" Resize ++ "$[gt.(De)&Iconify]%menu/window-iconify.xpm%" Iconify ++ "$[gt.(Un)Ma&ximize]%menu/window-maximize.xpm%" Maximize ++ "$[gt.(Un)Shade]%menu/window-shade.xpm%" WindowShade ++ "$[gt.(Un)Stick]%menu/window-stick.xpm%" Stick ++ "$[gt.R&aise]%menu/window-raise.xpm%" Raise ++ "$[gt.&Lower]%menu/window-lower.xpm%" Lower ++ "" Nop ++ "$[gt.&Delete]%menu/window-delete.xpm%" Delete ++ "$[gt.&Close]%menu/window-close.xpm%" Close ++ "$[gt.Destroy]%menu/window-destroy.xpm%" Destroy ++ "" Nop ++ "$[gt.Move to Page]%menu/window-move.xpm%" Popup MenuFvwmWindowMove ++ "$[gt.Group Operations]%menu/windows.xpm%" Popup MenuFvwmWindowGroupOps ++ "$[gt.Window Style]%menu/window.xpm%" Popup MenuFvwmWindowStyle ++ "$[gt.Maximize Window]%menu/window-maximize.xpm%" Popup MenuFvwmWindowMaximize ++ "$[gt.Refresh Window]%menu/refresh.xpm%" Popup MenuFvwmWindowRefresh ++ "$[gt.Rearrange All]%menu/refresh.xpm%" Popup MenuFvwmRearrangeWindows ++ "$[gt.Window Utility]%menu/utility.xpm%" Popup MenuFvwmWindowUtility ++ "" Nop ++ "$[gt.Identify]%menu/window-identify.xpm%" Module FvwmIdent ++ "$[gt.Switch to...]%menu/windows.xpm%" WindowList + +# A trimmed down version of MenuFvwmWindowOps, good for binding to decorations +DestroyMenu MenuFvwmWindowOps2 +AddToMenu MenuFvwmWindowOps2 ++ "$[gt.Restore] Alt-F6%menu/window.xpm%" FuncFvwmRestore ++ "$[gt.&Move] Alt-F7%menu/window-move.xpm%" Move ++ "$[gt.&Resize] Alt-F8%menu/window-resize.xpm%" Resize ++ "$[gt.&Iconify] Alt-F9%menu/window-iconify.xpm%" Iconify ++ "$[gt.Ma&ximize] Alt-F10%menu/window-maximize.xpm%" Maximize ++ "$[gt.R&aise] Alt-F5%menu/window-raise.xpm%" RaiseLower ++ "" Nop ++ "$[gt.&Close] Alt-F4%menu/window-close.xpm%" Close ++ "" Nop ++ "$[gt.Identify] Alt-F11%menu/window-identify.xpm%" Module FvwmIdent ++ "$[gt.More&...] Alt-F3%menu/window.xpm%" Menu MenuFvwmWindowOps This 0 0 + +# Someone may prefer the version without menu icons, like in mwm +DestroyMenu MenuFvwmWindowOps3 +AddToMenu MenuFvwmWindowOps3 ++ "$[gt.Restore] Alt-F6" FuncFvwmRestore ++ "$[gt.&Move] Alt-F7" Move ++ "$[gt.&Resize] Alt-F8" Resize ++ "$[gt.&Iconify] Alt-F9" Iconify ++ "$[gt.Ma&ximize] Alt-F10" Maximize ++ "$[gt.R&aise] Alt-F5" RaiseLower ++ "" Nop ++ "$[gt.&Close] Alt-F4" Close ++ "" Nop ++ "$[gt.Identify] Alt-F11" Module FvwmIdent ++ "$[gt.More&...] Alt-F3" Menu MenuFvwmWindowOps This 0 0 + +# Resource window group operations for the root menu and buttons +DestroyMenu MenuFvwmWindowGroupOps +AddToMenu MenuFvwmWindowGroupOps ++ "$[gt.Resource Group Ops]" Title ++ "&$[gt.Iconify]%menu/window-iconify.xpm%" Pick All ($r) Iconify on ++ "$[gt.De&Iconify]%menu/window-iconify.xpm%" Pick All ($r) Iconify off ++ "$[gt.&Shade]%menu/window-shade.xpm%" Pick All ($r) WindowShade on ++ "$[gt.Un&Shade]%menu/window-shade.xpm%" Pick All ($r) WindowShade off ++ "$[gt.R&aise]%menu/window-raise.xpm%" Pick All ($r) Raise ++ "$[gt.Lo&wer]%menu/window-lower.xpm%" Pick All ($r) Lower ++ "" Nop ++ "$[gt.&Delete]%menu/window-delete.xpm%" Pick All ($r) Delete ++ "$[gt.&Close]%menu/window-close.xpm%" Pick All ($r) Close ++ "$[gt.Destroy]%menu/window-destroy.xpm%" Pick All ($r) Destroy ++ "" Nop ++ "$[gt.Quick Move To ...]%menu/window-move.xpm%" Popup MenuFvwmWindowGroupQuickMove + +DestroyMenu MenuFvwmWindowStyle +AddToMenu MenuFvwmWindowStyle ++ "$[gt.Window Style]" Title ++ "%menu/window.xpm%TitleAtTop" WindowStyle TitleAtTop ++ "%menu/window.xpm%TitleAtBottom" WindowStyle TitleAtBottom ++ "%menu/window.xpm%Title" WindowStyle Title ++ "%menu/window.xpm%NoTitle" WindowStyle NoTitle ++ "" Nop ++ "%menu/window.xpm%FvwmBorder" WindowStyle FvwmBorder ++ "%menu/window.xpm%MWMBorder" WindowStyle MWMBorder ++ "%menu/window.xpm%DepressableBorder" WindowStyle DepressableBorder ++ "%menu/window.xpm%FirmBorder" WindowStyle FirmBorder ++ "%menu/window.xpm%Handles" WindowStyle Handles ++ "%menu/window.xpm%NoHandles" WindowStyle NoHandles ++ "%menu/window.xpm%BorderWidth 0" WindowStyle BorderWidth 0 ++ "%menu/window.xpm%BorderWidth 5" WindowStyle BorderWidth 5 ++ "%menu/window.xpm%HandleWidth 0" WindowStyle HandleWidth 0 ++ "%menu/window.xpm%HandleWidth 7" WindowStyle HandleWidth 7 ++ "" Nop ++ "%menu/window-resize.xpm%ResizeOpaque" WindowStyle ResizeOpaque ++ "%menu/window-resize.xpm%ResizeOutline" WindowStyle ResizeOutline ++ "%menu/mouse.xpm%SloppyFocus" WindowStyle SloppyFocus ++ "%menu/mouse.xpm%ClickToFocus" WindowStyle ClickToFocus ++ "%menu/mouse.xpm%MouseFocus" WindowStyle MouseFocus ++ "%menu/mouse.xpm%NeverFocus" WindowStyle NeverFocus + +DestroyMenu MenuFvwmWindowMaximize +AddToMenu MenuFvwmWindowMaximize ++ "$[gt.Maximize Window]" Title ++ "%menu/window-maximize.xpm%$[gt.Maximize Fully] Alt-F10" Maximize On 100 100 ++ "%menu/window-maximize.xpm%$[gt.Unmaximize] Alt-F10" Maximize Off ++ "" Nop ++ "%menu/window-maximize.xpm%$[gt.Maximize Partially]" \ + Pick FuncFvwmSimpleMaximizePartially On ++ "%menu/window-maximize.xpm%$[gt.Maximize Vertically]" \ + Pick FuncFvwmSimpleMaximizeVertically On ++ "%menu/window-maximize.xpm%$[gt.Maximize Horizontally]" \ + Pick FuncFvwmSimpleMaximizeHorizontally On ++ "" Nop +# these bound functions do not seem to work well if used consequentially ++ "%menu/window-maximize.xpm%$[gt.Maximize Grow]" Maximize On grow grow ++ "%menu/window-maximize.xpm%$[gt.Maximize Grow Vert.]" Maximize On 0 grow ++ "%menu/window-maximize.xpm%$[gt.Maximize Grow Horiz.]" Maximize On grow 0 ++ "" Nop ++ "%menu/window-maximize.xpm""%$[gt.Maximize Full Screen] Shift-Ctrl-F11" Pick FuncFvwmMaximizeFullScreen ++ "%menu/window-maximize.xpm%$[gt.Unmaximize Full Screen] Shift-Ctrl-F11" Pick FuncFvwmMaximizeFullScreen + +DestroyMenu MenuFvwmWindowRefresh +AddToMenu MenuFvwmWindowRefresh ++ "$[gt.Refresh Window]" Title ++ "%menu/refresh.xpm%$[gt.Refresh Window]" RefreshWindow ++ "%menu/refresh.xpm%$[gt.Recapture Window]" RecaptureWindow ++ "%menu/refresh.xpm%$[gt.Place Again]" PlaceAgain anim ++ "" Nop ++ "%menu/window.xpm%$[gt.Restore]" FuncFvwmRestore + +# olicha: maybe we have to define function in "functions-appbind" for the +# FvwmRearrange entries of this menu +# migo: and maybe move these entries to MenuFvwmWindowUtility menu? +DestroyMenu MenuFvwmRearrangeWindows +AddToMenu MenuFvwmRearrangeWindows ++ "$[gt.Rearrange Windows]" Title ++ "%menu/refresh.xpm%&$[gt.Cascade]" FvwmRearrange -cascade -m 3 3 -incx 2 ++ "%menu/refresh.xpm%&$[gt.Place Again]" All (CurrentPage !Sticky) PlaceAgain anim ++ "" Nop ++ "%menu/refresh.xpm%$[gt.Tile &horizontally]" FvwmRearrange -tile -h -m 2 2 98 98 ++ "%menu/refresh.xpm%$[gt.Tile &vertically]" FvwmRearrange -tile -m 2 2 98 98 ++ "" Nop ++ "%menu/refresh.xpm%$[gt.Arrange Icons]" All (CurrentDesk Iconic) RecaptureWindow + +DestroyFunc FuncFvwmRaiseAndExec +AddToFunc FuncFvwmRaiseAndExec ++ I Raise ++ I Exec $* + +DestroyFunc FuncFvwmWindowPrint +AddToFunc FuncFvwmWindowPrint ++ I FuncFvwmRaiseAndExec which xdpr >/dev/null 2>&1 && (xdpr -id $[w.id]; true) || (import -window $[w.id] - | lpr) + +DestroyFunc FuncFvwmWindowPrintReverse +AddToFunc FuncFvwmWindowPrintReverse ++ I FuncFvwmRaiseAndExec which xdpr >/dev/null 2>&1 && (xdpr 1/2 -h -rv -id $[w.id]; true) || (import -window $[w.id] -rotate 90 - | lpr) + +DestroyFunc FuncFvwmWindowCreateScreenshot +AddToFunc FuncFvwmWindowCreateScreenshot +# Can't use PipeRead here if we want to use this function from mini-icon button +#+ I PipeRead `import -frame -window $[w.id] /tmp/$USER-shot-window-$[w.id].png` ++ I FuncFvwmShowMessage "$[gt.Screenshot Info for window] $[w.id]" "$[gt.You should have 'import' utility from ImageMagick.^nCheck the screenshot in] /tmp/$USER-shot-window-$[w.id].png" ++ I Wait "$[gt.Screenshot Info for window] $[w.id]" ++ I FuncFvwmRaiseAndExec import -frame -window $[w.id] /tmp/$USER-shot-window-$[w.id].png + +DestroyFunc FuncFvwmDesktopCreateScreenshot +AddToFunc FuncFvwmDesktopCreateScreenshot ++ I Pick (CirculateHit) Nop ++ I PipeRead `import -window root /tmp/$USER-shot-desktop.png` ++ I FuncFvwmShowMessage "$[gt.Screenshot Info for the desktop]" "$[gt.You should have 'import' utility from ImageMagick.^nCheck the screenshot in] /tmp/$USER-shot-desktop.png" + +DestroyMenu MenuFvwmWindowUtility +AddToMenu MenuFvwmWindowUtility ++ "$[gt.Window Utility]" Title ++ "%menu/window.xpm%$[gt.Create &Screenshot]" Pick (CirculateHit) FuncFvwmWindowCreateScreenshot ++ "%menu/display.xpm%$[gt.&Desktop Screenshot]" Pick (CirculateHit) FuncFvwmDesktopCreateScreenshot ++ "" Nop ++ "%menu/printing.xpm%$[gt.&Print]" Pick (CirculateHit) FuncFvwmWindowPrint ++ "%menu/printing.xpm%$[gt.Print &Reverse]" Pick (CirculateHit) FuncFvwmWindowPrintReverse ++ "" Nop ++ "%menu/window-raise.xpm%$[gt.Stays On Top]" Pick (CirculateHit) Layer 0 6 ++ "%menu/window-raise.xpm%$[gt.Layer +1]" Pick (CirculateHit) Layer +1 ++ "%menu/window.xpm%$[gt.Stays Put]" Pick (CirculateHit) Layer 0 4 ++ "%menu/window-lower.xpm%$[gt.Layer -1]" Pick (CirculateHit) Layer -1 ++ "%menu/window-lower.xpm%$[gt.Stays On Bottom]" Pick (CirculateHit) Layer 0 2 ++ "" Nop ++ "%menu/window-resize.xpm%$[gt.Scroll&Bar (1/2 app)]" Pick Module FvwmScroll 2 2 ++ "%menu/window-resize.xpm%$[gt.ScrollBar (&75%% scr)]" Pick Module FvwmScroll 75p 75p + +# ----------------------------------------------------------------------------- +# ---------- MenuFvwmWebBrowsing* + +DestroyMenu MenuFvwmWebBrowsing +AddToMenu MenuFvwmWebBrowsing ++ "$[gt.Web Browsing]" Title ++ "%menu/www.xpm%$[gt.Web Browsers]" Popup MenuFvwmWebBrowsers ++ "%menu/www.xpm%$[gt.FVWM Web Pages]" Popup MenuFvwmWebPages ++ "" Nop ++ "%menu/www.xpm%$[gt.Set Default Browser]" FuncFvwmShowMessage "$[gt.Setting your default browser]" "$[gt.There is no dialog to change the default browser yet.^nPlease do it manually. Put these 8 lines to]^n^t~/.fvwm/themes/personal/functions-appbind-extra^n^n# $[gt.used to open url]^nDestroyFunc FuncFvwmOpenURL^nAddToFunc FuncFvwmOpenURL^n+ I Exec exec mozilla '^d0'^n^n# $[gt.used to start browser in panels and stroke]^nDestroyFunc FuncFvwmWWW^nAddToFunc FuncFvwmWWW^n+ I Exec exec galeon" +#`====== end: Read "/usr/share/fvwm/themes/default/menus" + +#.---- start: Read "/usr/share/fvwm/themes/default/menus-programs" +# ---------------------------------------------------------------------------- +# ---------- Shells + +DestroyMenu MenuFvwmShells +AddToMenu MenuFvwmShells "$[gt.Terminals]" Title ++ "&Xterm $[gt.default]%menu/terminal.xpm%" Exec exec xterm -fg $[fg.cs30] -bg $[bg.cs30] ++ "Xterm/r&oot $[gt.default]%menu/terminal-special.xpm%" Exec exec xterm -fg $[fg.cs31] -bg $[bg.cs31] -e su -l +#+ "&NXterm $[gt.default]%menu/terminal.xpm%" Exec exec nxterm -fg $[fg.cs30] -bg $[bg.cs30] ++ "&Rxvt $[gt.default]%menu/terminal.xpm%" Exec exec rxvt -fg $[fg.cs30] -bg $[bg.cs30] ++ "&Eterm $[gt.default]%menu/terminal.xpm%" Exec exec Eterm +#+ "X&iterm $[gt.default]%menu/terminal.xpm%" Exec exec xiterm -fg $[fg.cs30] -bg $[bg.cs30] ++ "&Aterm $[gt.default]%menu/terminal.xpm%" Exec exec aterm -fg $[fg.cs30] -bg $[bg.cs30] +#+ "&GNOME Term $[gt.default]%menu/terminal.xpm%" Exec exec gnome-terminal --foreground=$[fg.cs30] --background=$[bg.cs30] +#+ "&Kvt $[gt.default]%menu/terminal.xpm%" Exec exec kvt -vt_fg $[fg.cs30] -vt_bg $[bg.cs30] ++ "&Konsole $[gt.default]%menu/terminal.xpm%" Exec exec konsole +#+ "&Dtterm $[gt.default]%menu/terminal.xpm%" Exec exec /usr/dt/bin/dtterm -fg $[fg.cs30] -bg $[bg.cs30] ++ "" Nop ++ "&Xterm 80x40 (7x14 $[gt.font])%menu/terminal.xpm%" Exec exec xterm -n $USER@$HOST -T $USER@$HOST -g 80x40 -sb +sk +si -sl 4096 -j -ls -fn 7x14 -fb 7x14bold -fg $[fg.cs30] -bg $[bg.cs30] ++ "Xterm/r&oot 80x40 (7x14 $[gt.font])%menu/terminal-special.xpm%" Exec exec xterm -n root@$HOST -T root@$HOST -g 80x40 -sb +sk +si -sl 4096 -j -ls -fn 7x14 -fb 7x14bold -fg $[fg.cs31] -bg $[bg.cs31] -e su -l +#+ "&NXterm 80x40 (7x14 $[gt.font])%menu/terminal.xpm%" Exec exec nxterm -n $USER@$HOST -T $USER@$HOST -g 80x40 -sb +sk +si -sl 4096 -j -ls -fn 7x14 -fb 7x14bold -fg $[fg.cs30] -bg $[bg.cs30] ++ "&Rxvt 80x40 (7x14 $[gt.font])%menu/terminal.xpm%" Exec exec rxvt -n $USER@$HOST -T $USER@$HOST -g 80x40 --loginShell -fn 7x14 -fb 7x14bold -fg $[fg.cs30] -bg $[bg.cs30] ++ "&Eterm 80x40 (7x14 $[gt.font])%menu/terminal.xpm%" Exec exec Eterm -n $USER@$HOST -T $USER@$HOST -g 80x40 --login-shell --font 7x14 --bold-font 7x14bold +#+ "X&iterm 80x40 (7x14 $[gt.font])%menu/terminal.xpm%" Exec exec xiterm -n $USER@$HOST -T $USER@$HOST -g 80x40 -sb +sk +si -sl 4096 -ls -fn 7x14 -fb 7x14bold -fg $[fg.cs30] -bg $[bg.cs30] ++ "&Aterm 80x40 (7x14 $[gt.font])%menu/terminal.xpm%" Exec exec aterm -n $USER@$HOST -T $USER@$HOST -g 80x40 -sb +sk +si -sl 4096 -ls -fn 7x14 -fb 7x14bold -fg $[fg.cs30] -bg $[bg.cs30] +#+ "&GNOME Term 80x40 (7x14 $[gt.font])%menu/terminal.xpm%" Exec exec gnome-terminal --title=$USER@$HOST --geometry=80x40 --login --font=7x14 --foreground=$[fg.cs30] --background=$[bg.cs30] +#+ "&Kvt 80x40 (7x14 $[gt.font])%menu/terminal.xpm%" Exec exec kvt -n $USER@$HOST -T $USER@$HOST -vt_geometry 80x40 -sl 4096 -ls -vt_font 7x14 -vt_fg $[fg.cs30] -vt_bg $[bg.cs30] ++ "&Konsole 80x40%menu/terminal.xpm%" Exec exec konsole -nowelcome -ls -vt_sz 80x40 +#+ "&Dtterm 80x40 (7x14 font)%menu/terminal.xpm%" Exec exec /usr/dt/bin/dtterm -n $USER@$HOST -T $USER@$HOST -sl 4096 -ls -g 80x40 -fn 7x14 -fb 7x14bold -fg $[fg.cs30] -bg $[bg.cs30] ++ "" Nop ++ "$[gt.Remote login...]%menu/terminal-remote.xpm%" FvwmForm FvwmForm-Rlogin + + +# ---------------------------------------------------------------------------- +# ---------- System + +DestroyMenu MenuFvwmSystem +AddToMenu MenuFvwmSystem "$[gt.System]" Title ++ "&Top%menu/monitoring.xpm%" FuncFvwmRunInXterm "Top" top +#+ "TK &ps%menu/monitoring.xpm%" Exec exec tkps ++ "X&Load%menu/monitoring.xpm%" Exec exec xload +#+ "X&osview%menu/monitoring.xpm%" Exec exec xosview +#+ "&XSysStats%menu/monitoring.xpm%" Exec exec xsysstats +#+ "&TrafShow%menu/monitoring.xpm%" FuncFvwmRunInXterm "trafshow" "trafshow -S -s 2 -u 1" ++ "&xconsole%menu/terminal.xpm%" Exec exec xconsole ++ "&Gkrellm%menu/monitoring.xpm%" Exec exec gkrellm ++ "" Nop +#+ "&Midnight-Commander%menu/file-manager.xpm%" FuncFvwmRunInXterm "Midnight-Commander" "mc -x" +#+ "File Runner%menu/file-manager.xpm%" Exec exec fr +#+ "xfm%menu/file-manager.xpm%" Exec exec xfm +#+ "xftree%menu/file-manager.xpm%" Exec exec xftree +#+ "gmc%menu/file-manager.xpm%" Exec exec gmc +#+ "Nautilus%menu/file-manager.xpm%" Exec exec nautilus ++ "kfm%menu/file-manager.xpm%" Exec exec kfmclient openURL $HOME +#+ "Dtfile%menu/file-manager.xpm%" Exec exec /usr/dt/bin/dtfile +#+ "Xfilemanager%menu/file-manager.xpm%" Exec exec xfilemanager ++ "" Nop +#+ "Xsession log%menu/viewer.xpm%" FuncFvwmViewFileTail "Xsession Log" "$HOME/.xsession-errors" ++ "System log%menu/viewer.xpm%" FuncFvwmViewFileTail "System Log" "/var/log/messages" +#+ "httpd access log%menu/viewer.xpm%" FuncFvwmViewFileTail "Access Log" "/var/log/httpd/access_log" +#+ "httpd error log%menu/viewer.xpm%" FuncFvwmViewFileTail "Error Log" "/var/log/httpd/error_log" ++ "" Nop ++ "$[gt.&Browser]%menu/folder.xpm%" Menu MenuFvwmBrowser ++ "$[gt.Browser (&cached)]%menu/folder.xpm%" Menu MenuFvwmBrowserCached ++ "" Nop ++ MissingSubmenuFunction FuncFvwmMenuDirectory ++ "$[gt.Root dir]%menu/folder.xpm%" Popup / ++ "$[gt.Home dir]%menu/home.xpm%" Popup ~ + +# Note: +# FuncFvwmMenuDirectory, MenuFvwmBrowser and MenuFvwmBrowserCached are defined +# in functions-appbind + +# ----------------------------------------------------------------------------- +# ---------- ScreenSaver + +DestroyMenu MenuFvwmScreenSaver +AddToMenu MenuFvwmScreenSaver "$[gt.Screen Saver]" Title ++ MissingSubmenuFunction FuncFvwmMenuXlock ++ "$[gt.Save Screen (random)]%menu/display.xpm%" Exec xlock -nolock -nice 19 -mode random ++ "$[gt.Lock Screen (random)]%menu/lock.xpm%" Exec xlock -nice 19 -mode random ++ "$[gt.Save Screen Modes]%menu/display.xpm%" Popup MenuXlockSaver ++ "$[gt.Lock Screen Modes]%menu/lock.xpm%" Popup MenuXlockLocker ++ "" Nop ++ "$[gt.&XscreenSaver (Re)start]%menu/display.xpm%" Exec xscreensaver-command -exit; exec xscreensaver -no-splash ++ "$[gt.XscreenSaver &Stop]%menu/choice-no.xpm%" Exec exec xscreensaver-command -exit ++ "$[gt.XscreenSaver &Demo]%menu/display.xpm%" Exec xscreensaver-command -exit; exec xscreensaver; exec xscreensaver-command -demo ++ "$[gt.XscreenSaver &Lock]%menu/lock.xpm%" Exec exec xscreensaver-command -lock ++ "$[gt.XscreenSaver &Activate]%menu/display.xpm%" Exec exec xscreensaver-command -activate + +# don't build xclock submenus immediately, use lazy loading (build when used) +DestroyFunc FuncFvwmMenuXlock +AddToFunc FuncFvwmMenuXlock ++ I FuncFvwm$0 + +DestroyFunc FuncFvwmMenuXlockSaver +AddToFunc FuncFvwmMenuXlockSaver ++ I PipeRead 'fvwm-menu-xlock --name MenuXlockSaver --title "$[gt.Save Screen Modes]" --icon-item menu/display.xpm --special-first -- -nice 19 -nolock' + +DestroyFunc FuncFvwmMenuXlockLocker +AddToFunc FuncFvwmMenuXlockLocker ++ I PipeRead 'fvwm-menu-xlock --name MenuXlockLocker --title "$[gt.Lock Screen Modes]" --icon-item menu/lock.xpm --special-first -- -nice 19' + +# ---------------------------------------------------------------------------- +# ---------- WindowManager + +DestroyModuleConfig FvwmForm-Restart: * +*FvwmForm-Restart: WarpPointer +*FvwmForm-Restart: Line left +*FvwmForm-Restart: Text "Window Manager command" +*FvwmForm-Restart: Line expand +*FvwmForm-Restart: Input command 30 "" # was "fvwm-themes-start" +*FvwmForm-Restart: Line expand +*FvwmForm-Restart: Line expand +*FvwmForm-Restart: Button quit "Restart" +*FvwmForm-Restart: Command Restart $(command) +*FvwmForm-Restart: Button quit "Cancel" ^[ +*FvwmForm-Restart: Command Nop + +DestroyMenu MenuFvwmWindowManager +AddToMenu MenuFvwmWindowManager "$[gt.Window Managers]" Title ++ "&fvwm-themes-start%menu/windows.xpm%" Restart fvwm-themes-start ++ "&fvwm%menu/windows.xpm%" Restart fvwm -s +#+ "&fvwm1%menu/windows.xpm%" Restart fvwm1 -s +#+ "&fvwm95%menu/windows.xpm%" Restart fvwm95 -s +#+ "&AnotherLevel%menu/windows.xpm%" Restart AnotherLevel +#+ "&AnotherLevelUp%menu/windows.xpm%" Restart AnotherLevelUp ++ "" Nop +#+ "&afterstep%menu/windows.xpm%" Restart afterstep +#+ "&blackbox%menu/windows.xpm%" Restart blackbox +#+ "&enlightenment%menu/windows.xpm%" Restart enlightenment +#+ "&flwm%menu/windows.xpm%" Restart flwm +#+ "&icewm%menu/windows.xpm%" Restart icewm +#+ "&kwm%menu/windows.xpm%" Restart kwm ++ "&mwm%menu/windows.xpm%" Restart mwm +#+ "&olvwm%menu/windows.xpm%" Restart olvwm +#+ "&sawfish%menu/windows.xpm%" Restart sawfish +#+ "&sawmill%menu/windows.xpm%" Restart sawmill +#+ "&twm%menu/windows.xpm%" Restart twm +#+ "&uwm%menu/windows.xpm%" Restart uwm +#+ "&wm2%menu/windows.xpm%" Restart wm2 ++ "&wmaker%menu/windows.xpm%" Restart wmaker +#+ "&wmx%menu/windows.xpm%" Restart wmx +#+ "&xfwm%menu/windows.xpm%" Restart xfwm ++ "" Nop ++ "&xterm%menu/terminal.xpm%" Restart xterm ++ "$[gt.Enter&...]%menu/windows.xpm%" FvwmForm FvwmForm-Restart + +# ---------------------------------------------------------------------------- +# ---------- Programs + +DestroyMenu MenuFvwmPrograms +AddToMenu MenuFvwmPrograms "$[gt.Programs]" Title +#+ "&CDE Menu%menu/unknown.xpm%" Popup MenuFvwmCDE ++ "$[gt.&Utilities]%menu/utility.xpm%" Popup MenuFvwmUtilities ++ "$[gt.&Applications]%menu/programs.xpm%" Popup MenuFvwmApplications ++ "$[gt.&Science]%menu/science.xpm%" Popup MenuFvwmScience ++ "$[gt.&Editors]%menu/editor.xpm%" Popup MenuFvwmEditors ++ "$[gt.&Internet]%menu/network.xpm%" Popup MenuFvwmInternet ++ "$[gt.&Graphics]%menu/graphics.xpm%" Popup MenuFvwmGraphics +#+ "$[gt.&Multimedia]%menu/multimedia.xpm%" Popup MenuFvwmMultimedia ++ "$[gt.&Games]%menu/game.xpm%" Popup MenuFvwmGames ++ "$[gt.&Amusements]%menu/amusement.xpm%" Popup MenuFvwmAmusements + +#DestroyMenu MenuFvwmCDE +#AddToMenu MenuFvwmCDE +#+ "&Application Manager%menu/programs.xpm%" Exec exec /usr/dt/bin/dtaction Dtappmgr +#+ "&Terminal%menu/terminal.xpm%" Exec exec /usr/dt/bin/dtterm +#+ "&File Manager%menu/file-manager.xpm%" Exec exec /usr/dt/bin/dtfile +#+ "&Trash Can%menu/file-manager.xpm%" Exec exec /usr/dt/bin/dtaction Dttrash +#+ "Text &Editor%menu/editor.xpm%" Exec exec /usr/dt/bin/dtpad +#+ "Desktop &Help%menu/help.xpm%" Exec exec /usr/dt/bin/dthelpview -helpVolume browser +#+ "Man Pages%menu/help.xpm%" Exec exec /usr/dt/bin/dthelpview -man +#+ "&Mailer%menu/mail.xpm%" Exec exec /usr/dt/bin/dtmail +#+ "&Calendar%menu/clock.xpm" Exec exec /usr/dt/bin/dtcm +#+ "&Calculator%menu/calculator.xpm%" Exec exec /usr/dt/bin/dtcalc +#+ "&Icon Editor%menu/image-processor.xpm%" Exec exec /usr/dt/bin/dticon +#+ "&Print Manager%menu/printing.xpm%" Exec exec /usr/dt/bin/dtprintinfo +#+ "&Styles Manager%menu/configuration.xpm%" Exec exec /usr/dt/bin/dtstyle +#+ "" Nop +#+ "&Exit CDE%menu/quit.xpm%" Exec exec /usr/dt/bin/dtaction ExitSession + +DestroyMenu MenuFvwmUtilities +AddToMenu MenuFvwmUtilities "$[gt.Utilities]" Title ++ "$[gt.&Calculator]%menu/calculator.xpm%" Exec exec xcalc ++ "$[gt.&Magnifying glass]%menu/viewer.xpm%" Exec exec xmag ++ "&XClock%menu/clock.xpm%" Exec exec xclock ++ "&Rclock%menu/clock.xpm%" Exec exec rclock ++ "&Oclock%menu/clock.xpm%" Exec exec oclock ++ "&Bclock%menu/clock.xpm%" Exec exec bclock ++ "&Xdaliclock%menu/clock.xpm%" Exec exec xdaliclock +#+ "&xfclock%menu/clock.xpm%" Exec exec xfclock ++ "XFontSel%menu/font.xpm%" Exec exec xfontsel ++ "X&ColorSel%menu/colors.xpm%" Exec exec xcolorsel ++ "$[gt.&Color List]%menu/colors.xpm%" FuncFvwmViewFile /usr/X11R6/lib/X11/rgb.txt +#+ "Xcolormap%menu/colors.xpm%" Exec exec xcolormap +#+ "Xx&gdb%menu/development.xpm%" Exec exec xxgdb ++ "&Ddd%menu/development.xpm%" Exec exec ddd +#+ "x&apm%menu/monitoring.xpm%" Exec exec xapm ++ "&Xclipboard%menu/unknown.xpm%" Exec exec xclipboard +#+ "Xgrab%menu/display.xpm%" Exec exec xgrab +#+ "Calendar%menu/clock.xpm%" Exec exec ical +#+ "&XRus%menu/keyboard.xpm%" Exec exec xrus + + + +DestroyMenu MenuFvwmApplications +AddToMenu MenuFvwmApplications "$[gt.Applications]" Title +#+ "GNOME &Panel%menu/gnome.xpm%" Exec exec panel +#+ "XFCE &Panel%menu/gnome.xpm%" Exec exec xfce +#+ "&GhostView%menu/ghostview.xpm%" Exec exec ghostview ++ "X&pdf%menu/viewer.xpm%" Exec exec xpdf +#+ "&Acroread%menu/viewer.xpm%" Exec exec acroread ++ "X&dvi%menu/viewer.xpm%" Exec exec xdvi +#+ "&Lyx%menu/word-processor.xpm%" Exec exec lyx +#+ "&Thot%menu/word-processor.xpm%" Exec exec thot +#+ "WP8%menu/word-processor.xpm%" Exec exec /usr/local/WP8/wpbin/xwp ++ "&Plan%menu/information.xpm%" Exec exec plan +#+ "X&Dos%menu/unknown.xpm%" Exec exec xdos +#+ "PgAccess%menu/viewer.xpm%" Exec exec pgaccess + +DestroyMenu MenuFvwmScience +AddToMenu MenuFvwmScience "$[gt.Science]" Title +#+ "Thx-1138%menu/calculator.xpm%" Exec exec thx-1138 ++ "GNUplot%menu/science.xpm%" FuncFvwmRunInXterm "GNUplot" "gnuplot" +#+ "Scilab%menu/science.xpm%" Exec exec scilab +#+ "Mathematica%menu/science.xpm%" Exec exec mathematica +#+ "Mapel%menu/science.xpm%" Exec exec xmaple +#+ "XaoS%menu/science.xpm%" Exec exec xaos +#+ "&Fractint%menu/science.xpm%" FuncFvwmRunInXterm "Fractine" "xfracrine" +#+ "Xtide%menu/science.xpm%" Exec exec xtide +#+ "XEphem%menu/science.xpm%" Exec exec xephem + +DestroyMenu MenuFvwmEditors +AddToMenu MenuFvwmEditors "$[gt.Editors]" Title ++ "Emacs%menu/gnu.xpm%" Exec exec emacs +#+ "Xemacs%menu/gnu.xpm%" Exec exec xemacs +#+ "gnuclient%menu/gnu.xpm%" Exec exec gnuclient ++ "VI%menu/editor.xpm%" FuncFvwmRunInXterm "VI" "vi" +#+ "Gvim%menu/editor.xpm%" Exec exec gvim +#+ "NEdit%menu/editor.xpm%" Exec exec nedit +#+ "xedit%menu/editor.xpm%" Exec exec xedit +#+ "Textedit%menu/editor.xpm%" Exec exec textedit + +DestroyMenu MenuFvwmInternet +AddToMenu MenuFvwmInternet "$[gt.Internet]" Title ++ "$[gt.&Web Browsers]%menu/www.xpm%" Popup MenuFvwmWebBrowsers +#+ "" Nop +#+ "&Vppp%menu/network.xpm%" Exec exec vppp +#+ "&Ezppp%menu/network.xpm%" Exec exec Ezppp +#+ "&Kppp%menu/network.xpm%" Exec exec kppp +#+ "XModemLights%menu/network.xpm%" Exec exec xmodemlights ++ "" Nop ++ "Mail%menu/mail.xpm%" FuncFvwmRunInXterm "Mail" "mail" ++ "Mutt%menu/mail.xpm%" FuncFvwmRunInXterm "Mail" "mutt" +#+ "Pine%menu/mail.xpm%" FuncFvwmRunInXterm "Mail" "pine" +#+ "Elm%menu/mail.xpm%" FuncFvwmRunInXterm "Mail" "elm" +#+ "Xmh%menu/mail.xpm%" Exec exec xmh +#+ "Xfmail%menu/mail.xpm%" Exec exec xfmail +#+ "" Nop +#+ "Slrn%menu/news.xpm%" FuncFvwmRunInXterm "News" "slrn" ++ "" Nop ++ "&Irc%menu/chat.xpm%" FuncFvwmRunInXterm "Irc" "irc" +#+ "&Tkirc%menu/chat.xpm%" Exec exec tkirc ++ "X&chat%menu/chat.xpm%" Exec exec xchat +#+ "X&Bitch%menu/chat.xpm%" Exec exec xbitch +#+ "&Zircon%menu/chat.xpm%" Exec exec zircon +#+ "&ICQ%menu/chat.xpm%" Exec exec icq +#+ "&Licq%menu/chat.xpm%" Exec exec licq +#+ "" Nop +#+ "&Gtk-Gnutella%menu/network.xpm%" Exec exec gtk-gnutella ++ "" Nop +#+ "&Minitel%menu/terminal-special.xpm%" Exec exec xtel -petit ++ "&Minicom%menu/terminal-special.xpm%" FuncFvwmRunInXterm "Minicom" "minicom" + +DestroyMenu MenuFvwmWebBrowsers +AddToMenu MenuFvwmWebBrowsers "$[gt.Web Browsers]" Title ++ "Mozilla%menu/netscape.xpm%" Exec exec mozilla +#+ "Netscape%menu/netscape.xpm%" Exec exec netscape +#+ "Beonex%menu/netscape.xpm%" Exec exec beonex-comm +#+ "Galeon%menu/gnome.xpm%" Exec exec galeon ++ "Konqueror%menu/kde.xpm%" Exec exec konqueror +#+ "Opera%menu/www.xpm%" Exec exec opera +#+ "Amaya%menu/www.xpm%" Exec exec amaya ++ "Lynx%menu/terminal.xpm%" FuncFvwmRunInXterm "Lynx" "lynx" ++ "Links%menu/terminal.xpm%" FuncFvwmRunInXterm "Links" "links" + +DestroyMenu MenuFvwmGraphics +AddToMenu MenuFvwmGraphics "$[gt.Graphics]" Title +#+ "XV%menu/xv.xpm%" Exec exec xv +#+ "XbmBrowser%menu/image-viewer.xpm%" Exec exec xbmbrowser ++ "Gimp%menu/gimp.xpm%" Exec exec gimp ++ "ImageMagick%menu/image-processor.xpm%" Exec exec display ++ "Xpaint%menu/image-processor.xpm%" Exec exec xpaint ++ "Xfig%menu/image-processor.xpm%" Exec exec xfig +#+ "X&Fpovray%menu/image-processor.xpm%" Exec exec xfpovray + +#DestroyMenu MenuFvwmMultimedia +#AddToMenu MenuFvwmMultimedia "$[gt.Multimedia]" Title +#+ "XMixer%menu/sound.xpm%" Exec exec xmixer +#+ "XplayCd%menu/cd-player.xpm%" Exec exec xplaycd +#+ "WorkMan%menu/cd-player.xpm%" Exec exec workman +#+ "FreeAmp%menu/music.xpm%" Exec exec freeamp +#+ "XMMS%menu/music.xpm%" Exec exec xmms +#+ "MiXViews%menu/sound.xpm%" Exec exec mxv +#+ "X<wav%menu/music.xpm%" Exec exec xltwavplay + +# ---------------------------------------------------------------------------- +# ---------- Games + +## some game menu icons are temporary, should be covered in wm-icons-0.3.0 + +DestroyMenu MenuFvwmGames +AddToMenu MenuFvwmGames "$[gt.Games]" Title ++ "$[gt.Action]%menu/game-action.xpm%" Popup MenuFvwmGamesAction ++ "$[gt.Board]%menu/game-board.xpm%" Popup MenuFvwmGamesBoard ++ "$[gt.Cards]%menu/game-cards.xpm%" Popup MenuFvwmGamesCards ++ "$[gt.Puzzle]%menu/game-logic.xpm%" Popup MenuFvwmGamesPuzzle ++ "$[gt.Strategy]%menu/game.xpm%" Popup MenuFvwmGamesStrategy ++ "$[gt.Tetris]%menu/game.xpm%" Popup MenuFvwmGamesTetris ++ "$[gt.Ace of Penguins]%menu/game-cards.xpm%" Popup MenuFvwmGamesPenguins ++ "$[gt.Other]%menu/game.xpm%" Popup MenuFvwmGamesOther + +#DestroyMenu MenuFvwmGamesAction +#AddToMenu MenuFvwmGamesAction "$[gt.Action]" Title +#+ "GRustibus (XMame)%menu/game-action.xpm%" Exec exec grustibus +#+ "Heroes%menu/game-action.xpm%" Exec exec heroes +#+ "PowerManga%menu/game-action.xpm%" Exec exec powermanga +#+ "XKoules%menu/game-action.xpm%" Exec exec xkoules +#+ "XKobo%menu/game-action.xpm%" Exec exec xkobo +#+ "XGalaga%menu/game-action.xpm%" Exec exec xgal +#+ "Xoids%menu/game-action.xpm%" Exec exec xoids +#+ "XSoldier%menu/game-action.xpm%" Exec exec xsoldier +##+ "Xlander%menu/game-action.xpm%" Exec xterm -name info -geometry 44x4 -e xlander +#+ "Xlander%menu/game-action.xpm%" Exec exec xlander +#+ "XEvil%menu/game-action.xpm%" Exec exec xevil +#+ "XBill%menu/game-action.xpm%" Exec exec xbill +#+ "Scavenger%menu/game-action.xpm%" Exec exec scavenger +#+ "Ice Breaker%menu/linux.xpm%" Exec exec icebreaker +# Pac-man like +#+ "" Nop +#+ "XChomp%menu/game-action.xpm%" Exec exec xchomp +#+ "XMris%menu/game-action.xpm%" Exec exec xmris +#+ "" Nop +#+ "Xonix%menu/game-action.xpm%" Exec exec xonix +#+ "XTron%menu/game-action.xpm%" Exec exec xtron + +#DestroyMenu MenuFvwmGamesBoard +#AddToMenu MenuFvwmGamesBoard "$[gt.Board]" Title +#+ "Xboard%menu/game-board.xpm%" Exec exec xboard -size small +#+ "Xboard (net)%menu/game-board.xpm%" Exec FuncFvwmRunInXterm "Chess (net)" "xboard -size small -ics -icshost fics.onenet.net" +#+ "XGammon%menu/game-board.xpm%" Exec exec xgammon +#+ "Pente%menu/game-board.xpm%" Exec pente +#+ "XGoban%menu/game-board.xpm%" Exec xgoban + +#DestroyMenu MenuFvwmGamesCards +#AddToMenu MenuFvwmGamesCards "$[gt.Cards]" Title +#+ "PySol%menu/game-cards.xpm%" Exec exec pysol +#+ "Xpat2%menu/game-cards.xpm%" Exec exec xpat2 +#+ "DontSpace%menu/game-cards.xpm%" Exec exec dontspace +#+ "Klondike%menu/game-cards.xpm%" Exec exec klondike +#+ "Spider%menu/game-cards.xpm%" Exec exec spider +#+ "" Nop +## GNOME/KDE cards +#+ "FreeCell%menu/game-cards.xpm%" Exec exec freecell +#+ "AisleRiot%menu/game-cards.xpm%" Exec exec sol +#+ "kpat%menu/game-cards.xpm%" Exec exec kpat +#+ "kpoker%menu/game-cards.xpm%" Exec exec kpoker + +#DestroyMenu MenuFvwmGamesPuzzle +#AddToMenu MenuFvwmGamesPuzzle "$[gt.Puzzle]" Title +#+ "XSokoban%menu/game-logic.xpm%" Exec exec xsokoban +#+ "XSoko%menu/game-logic.xpm%" Exec exec xsoko >/dev/null +#+ "XSok%menu/game-logic.xpm%" Exec exec xsok +#+ "Xmahjongg%menu/game-logic.xpm%" Exec exec xmahjongg +#+ "XBlockade%menu/game-logic.xpm%" Exec exec blockade +#+ "XAttax%menu/game-logic.xpm%" Exec exec xattax +#+ "XBomb%menu/game-logic.xpm%" Exec exec FuncFvwmRunInXterm "info" "xbomb" +#+ "XJig%menu/game-logic.xpm%" Exec xjig -file $[HOME]/flowers/3.gif >/dev/null +#+ "" Nop +## new category? +#+ "BoulderDash%menu/game-logic.xpm%" Exec exec BoulderDash +#+ "Rocks'n'Diamonds%menu/game-logic.xpm%" Exec exec rocksndiamonds +#+ "Mirror Magic%menu/game-logic.xpm%" Exec exec mirrormagic +#+ "GFingerPoken%menu/game-logic.xpm%" Exec exec gfpoken +#+ "Illust Logic%menu/game-logic.xpm%" Exec exec illust +#+ "Marbles%menu/game-logic.xpm%" Exec exec marbles +#+ "" Nop +#+ "XCubes%menu/game-logic.xpm%" Exec exec xcubes +#+ "XDino%menu/game-logic.xpm%" Exec exec xdino +#+ "XHexagons%menu/game-logic.xpm%" Exec exec xhexagons +#+ "XMBall%menu/game-logic.xpm%" Exec exec xmball +#+ "XMLink%menu/game-logic.xpm%" Exec exec xmlink +#+ "XOct%menu/game-logic.xpm%" Exec exec xoct +#+ "XPanex%menu/game-logic.xpm%" Exec exec xpanex +#+ "XPyraminx%menu/game-logic.xpm%" Exec exec xpyraminx +#+ "XRubik%menu/game-logic.xpm%" Exec exec xrubik +#+ "XSkewb%menu/game-logic.xpm%" Exec exec xskewb +#+ "XTriangles%menu/game-logic.xpm%" Exec exec xtriangles + +# we need game-strategy.xpm +#DestroyMenu MenuFvwmGamesStrategy +#AddToMenu MenuFvwmGamesStrategy "$[gt.Strategy]" Title +#+ "LinCity%menu/game.xpm%" Exec exec xlincity +#+ "Crimson%menu/game.xpm%" Exec exec crimson +#+ "LiquidWar%menu/game.xpm%" Exec exec liquidwar +#+ "Enigma%menu/game.xpm%" Exec exec enigma +#+ "FreeCraft%menu/game.xpm%" Exec exec freecraft +#+ "FreeCiv Server%menu/game.xpm%" Exec exec civserver-wrapper +#+ "FreeCiv Client%menu/game.xpm%" Exec exec civclient-wrapper +#+ "Heroes of Might && Magic III%menu/game.xpm%" Exec exec heroes3 + +#DestroyMenu MenuFvwmGamesTetris +#AddToMenu MenuFvwmGamesTetris "$[gt.Tetris]" Title +#+ "Xtetris%menu/game.xpm%" Exec exec xtetris +#+ "Xtrojka%menu/game.xpm%" Exec exec xtrojka +#+ "Xjewel%menu/game.xpm%" Exec exec xjewel +#+ "Xhextris%menu/game.xpm%" Exec exec xhextris +#+ "Xemeraldia%menu/game.xpm%" Exec exec xemeraldia +#+ "Cosmo%menu/game.xpm%" Exec exec cosmo >/dev/null + +#DestroyMenu MenuFvwmGamesPenguins +#AddToMenu MenuFvwmGamesPenguins "$[gt.Ace of] Penguins" Title +## Unfortunately the name freecell conflicts with other card game (from GNOME) +##+ "freecell%menu/game-cards.xpm%" Exec exec freecell +#+ "golf%menu/game-cards.xpm%" Exec exec golf +#+ "penguins%menu/game-cards.xpm%" Exec exec penguins +#+ "solitaire%menu/game-cards.xpm%" Exec exec solitaire +#+ "thornq%menu/game-cards.xpm%" Exec exec thornq +#+ "mastermind%menu/game.xpm%" Exec exec mastermind +#+ "merlin%menu/game-board.xpm%" Exec exec merlin +#+ "minesweeper%menu/game.xpm%" Exec exec minesweeper +#+ "pegged%menu/game.xpm%" Exec exec pegged +#+ "taipei%menu/game.xpm%" Exec exec taipei +#+ "taipedit%menu/game.xpm%" Exec exec taipedit + +#DestroyMenu MenuFvwmGamesOther +#AddToMenu MenuFvwmGamesOther "$[gt.Other]" Title +#+ "GGZ (GTK+ Client)%menu/game.xpm%" Exec exec ggz-gtk +#+ "GGZ (KDE Client)%menu/game.xpm%" Exec exec kggz +#+ "Maelstrom%menu/game-action.xpm%" Exec exec Maelstrom -gamma 5 +#+ "Quake%menu/game-action.xpm%" Exec cd /usr/local/games/quake/ ; exec ./stquake +#+ "Quake2%menu/game-action.xpm%" Exec cd /usr/local/games/quake2/ ; exec ./quake2 +set vid_ref softx +#+ "Hopkins FBI%menu/game.xpm%" FuncFvwmKillEventAndRun Hopkins_FBI + +# What exactly is the problem with FvwmEvent? There are several aliases. +DestroyFunc FuncFvwmKillEventAndRun +AddToFunc FuncFvwmKillEventAndRun ++ "I" KillModule FvwmEvent ++ "I" Exec exec $* + +## http://www.met.rdg.ac.uk/~swrhgnrj/xpenguins/ + +# ---------------------------------------------------------------------------- +# ---------- Amusements + +DestroyMenu MenuFvwmAmusements +AddToMenu MenuFvwmAmusements "$[gt.Amusements]" Title +#+ "$[gt.Start] XSnow%menu/amusement.xpm%" Exec exec xsnow >/dev/null +#+ "$[gt.Stop] XSnow%menu/window-delete.xpm%" Exec exec killall xsnow +#+ "" Nop ++ "$[gt.Start] XPenguins%menu/linux.xpm%" Exec exec xpenguins -q ++ "$[gt.Stop] XPenguins%menu/window-delete.xpm%" Exec exec killall xpenguins +#+ "" Nop +#+ "$[gt.Start] XTurtles%menu/linux.xpm%" Exec exec xturtles -q -rectwin +#+ "$[gt.Stop] XTurtles%menu/window-delete.xpm%" Exec exec killall xturtles +#+ "" Nop +#+ "$[gt.Start] XSheep%menu/amusement.xpm%" Exec exec xsheep >/dev/null +#+ "$[gt.Stop] XSheep%menu/window-delete.xpm%" Exec exec killall xsheep +#+ "" Nop +#+ "$[gt.Start] XEarth%menu/amusement.xpm%" Exec exec xearth +#+ "$[gt.Stop] XEarth%menu/window-delete.xpm%" Exec exec killall xearth +#+ "" Nop +#+ "$[gt.Start] Decay Screen%menu/amusement.xpm%" Exec exec /usr/X11R6/lib/xscreensaver/decayscreen -root +#+ "$[gt.Stop] Decay Screen%menu/window-delete.xpm%" Exec exec killall /usr/X11R6/lib/xscreensaver/decayscreen +#+ "" Nop +#+ "$[gt.Start] ActX%menu/amusement.xpm%" Exec exec actx -random +#+ "$[gt.Stop] ActX%menu/window-delete.xpm%" Exec exec killall actx +#+ "" Nop +## it should be: nice -n 9 oneko +#+ "$[gt.Start] Oneko (Neko)%menu/mouse.xpm" Exec oneko +#+ "$[gt.Start] Oneko (Tora)%menu/mouse.xpm" Exec oneko -tora -fg black -bg yellow +#+ "$[gt.Start] Oneko (Dog)%menu/mouse.xpm" Exec oneko -dog -fg black -bg white +#+ "$[gt.Stop] Oneko%menu/window-delete.xpm" Exec killall oneko +#+ "" Nop +## it should be: exec nice -n 19 xoj +#+ "$[gt.Start] O.J.S. emulator%menu/amusement.xpm" Exec exec xoj +#+ "$[gt.Stop] O.J.S. emulator%menu/window-delete.xpm" Exec exec killall xoj ++ "" Nop +#+ "$[gt.&Mesa Demo$[gt.%menu/amusement.xpm%" Popup MenuFvwmMesaDemos ++ "&UnClutter%menu/mouse.xpm%" Exec exec unclutter ++ "X&Eyes%menu/amusement.xpm%" Exec exec xeyes ++ "&XLogo%menu/amusement.xpm%" Exec exec xlogo +#+ "X&roach%menu/amusement.xpm%" Exec exec xroach + +#DestroyMenu MenuFvwmMesaDemos +#AddToMenu MenuFvwmMesaDemos "Mesa Demos" Title +#+ "Glutfx%menu/amusement.xpm%" Exec exec /usr/lib/Mesa-3.1/demos/glutfx +#+ "Gears%menu/amusement.xpm%" Exec exec /usr/lib/Mesa-3.1/demos/gears +#+ "Morph3D%menu/amusement.xpm%" Exec exec /usr/lib/Mesa-3.1/demos/morph3d +#+ "IsoSurf%menu/amusement.xpm%" Exec cd /usr/lib/Mesa-3.1/demos/ ; exec ./isosurf +#+ "Multiext%menu/amusement.xpm%" Exec cd /usr/lib/Mesa-3.1/demos/ ; exec ./multiext +#+ "Point Blast%menu/amusement.xpm%" Exec exec /usr/lib/Mesa-3.1/demos/pointblast +#+ "Reflect%menu/amusement.xpm%" Exec cd /usr/lib/Mesa-3.1/demos/ ; exec ./reflect +#+ "Renormal%menu/amusement.xpm%" Exec exec /usr/lib/Mesa-3.1/demos/renormal +#+ "Spectex%menu/amusement.xpm%" Exec exec /usr/lib/Mesa-3.1/demos/spectex +#+ "Stex3D%menu/amusement.xpm%" Exec exec /usr/lib/Mesa-3.1/demos/stex3d +#+ "Texcyl%menu/amusement.xpm%" Exec cd /usr/lib/Mesa-3.1/demos/ ; exec ./texcyl +#+ "Glutfx%menu/amusement.xpm%" Exec exec /usr/lib/Mesa-3.0/demos/glutfx +#+ "Gears%menu/amusement.xpm%" Exec exec /usr/lib/Mesa-3.0/demos/gears +#+ "Morph3D%menu/amusement.xpm%" Exec exec /usr/lib/Mesa-3.0/demos/morph3d +#+ "IsoSurf%menu/amusement.xpm%" Exec cd /usr/lib/Mesa-3.0/demos/ ; exec ./isosurf +#+ "Multiext%menu/amusement.xpm%" Exec cd /usr/lib/Mesa-3.0/demos/ ; exec ./multiext +#+ "Point Blast%menu/amusement.xpm%" Exec exec /usr/lib/Mesa-3.0/demos/pointblast +#+ "Reflect%menu/amusement.xpm%" Exec cd /usr/lib/Mesa-3.0/demos/ ; exec ./reflect +#+ "Renormal%menu/amusement.xpm%" Exec exec /usr/lib/Mesa-3.0/demos/renormal +#+ "Spectex%menu/amusement.xpm%" Exec exec /usr/lib/Mesa-3.0/demos/spectex +#+ "Stex3D%menu/amusement.xpm%" Exec exec /usr/lib/Mesa-3.0/demos/stex3d +#+ "Texcyl%menu/amusement.xpm%" Exec cd /usr/lib/Mesa-3.0/demos/ ; exec ./texcyl +#`====== end: Read "/usr/share/fvwm/themes/default/menus-programs" + +#.---- start: Read "/usr/share/fvwm/themes/default/menustyle" +MenuStyle * Hilight3DThickness 1 +MenuStyle * PopupDelayed, PopupDelay 150, PopdownDelayed, PopdownDelay 150 +MenuStyle * PopupOffset -5 100, TitleWarpOff +MenuStyle * TitleUnderlines1, SeparatorsLong, TrianglesRelief +MenuStyle * Animation, AutomaticHotkeysOff, DoubleClickTime +MenuStyle * BorderWidth 2, SidePic, SideColor +MenuStyle * PopupAsSubmenu, HoldSubmenus, SubmenusRight +MenuStyle * ItemFormat "%.4s%.1|%.5i%.5l%.5l%.5r%.5i%2.3>%1|" +MenuStyle * VerticalItemSpacing, VerticalTitleSpacing + +FuncFvwmSetFont-Menu * 'xft:Luxi Serif:pixelsize=14:minspace=true:-adobe-times-medium-r-*-*-14-*-*-*-*-*-*-*' +BusyCursor DynamicMenu True +#`====== end: Read "/usr/share/fvwm/themes/default/menustyle" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/xinerama/disabled" +Xinerama False +XineramaSls False +UnsetEnv FT_XINERAMA_PWIDTH +#`====== end: Read "/usr/share/fvwm/themes/default/settings/xinerama/disabled" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/gnome/panel-staysput/disabled" +DefaultLayers 2 4 6 +#`====== end: Read "/usr/share/fvwm/themes/default/settings/gnome/panel-staysput/disabled" + +#.---- start: Read "/usr/share/fvwm/themes/default/windowlook" +FuncFvwmSetFont-WindowTitle * 'shadow=1 r br b:xft:Verdana:pixelsize=14:minspace=true:-adobe-helvetica-medium-r-*-*-14-*-*-*-*-*-*-*' +FuncFvwmSetFont-IconTitle * 'shadow=1 r br b:xft:Verdana:pixelsize=12:minspace=true:-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*' + +Style * BorderWidth 5, HandleWidth 6 +Style * FvwmBorder, FirmBorder + +BorderStyle Simple + +TitleStyle Centered +TitleStyle -- Raised + +ButtonStyle All -- Raised + +AddToFunc FuncFvwmReloadDecor ++ I FuncFvwmSetFont-WindowTitle * 'shadow=1 r br b:xft:Verdana:pixelsize=14:minspace=true:-adobe-helvetica-medium-r-*-*-14-*-*-*-*-*-*-*' ++ I FuncFvwmSetFont-IconTitle * 'shadow=1 r br b:xft:Verdana:pixelsize=12:minspace=true:-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*' ++ I BorderStyle Simple ++ I TitleStyle Centered ++ I TitleStyle -- Raised ++ I ButtonStyle All -- Raised ++ I FuncFvwmOverRideWindowLook +#`====== end: Read "/usr/share/fvwm/themes/default/windowlook" + +#.---- start: Read "/usr/share/fvwm/themes/default/styles" +# The UsePPosition / NoPPosition for "*" is in globalfeel +# We should force these for proper operations +Style Netscape NoPPosition +Style FreeAmp* UsePPosition + +Style Fvwm* Sticky, Title, Handles, WindowListHit, CirculateSkip +Style FvwmBanner !Title, StaysOnTop, WindowListSkip, NeverFocus +Style FvwmPager !Title, !Handles, WindowListSkip +Style FvwmButtons !Title, !Handles, WindowListSkip +Style FvwmIdent !Title, !Handles, WindowListSkip +Style FvwmTaskBar !Title, !Handles, WindowListSkip +Style FvwmIconMan !Title, !Handles, WindowListSkip +Style FvwmConsole CirculateHit, FPGrabFocus, FPReleaseFocus +Style FvwmForm CirculateHit +Style FvwmScript Slippery, CirculateHit +# Simulate transient; it is nicer with title. +Style FvwmScript-IconBrowser StaysOnTop, !Handles +Style FvwmScript-Browser StaysOnTop, !Handles +# Applets are usually swallowed, so disable ActivePlacement if any. +Style FvwmApplet* CascadePlacement +# +Style FvwmButtons-ColourTable HandleWidth 2, Title, TitleAtTop + +Style XNoteMessage !Title, Sticky, StaysOnTop, UsePPosition, \ + BorderWidth 0, HandleWidth 0, !Handles, WindowListSkip +Style xclock Sticky, WindowListSkip, CirculateSkip +# gnome panel and icons +Style panel NeverFocus, Sticky, !Title, WindowListSkip, \ + CirculateSkip, UsePPosition +Style desktop_icon CirculateSkip, Sticky, !Title, WindowListSkip, \ + NeverFocus, UsePPosition +Style gmc-desktop-icon CirculateSkip, Sticky, !Title, WindowListSkip, \ + NeverFocus, UsePPosition +Style XSm Sticky +Style xsm NeverFocus, !Title, WindowListSkip, CirculateSkip +Style xmessage UsePPosition + +Style gkrellm NeverFocus, Sticky, WindowListSkip, CirculateSkip, UsePPosition + +# this is to override all patterns related to file names that are edited +Style XEmacs Slippery, Title, Handles, WindowListHit, CirculateHit +#`====== end: Read "/usr/share/fvwm/themes/default/styles" + +#.---- start: Read "/usr/share/fvwm/themes/default/modules/main" +# 1. Icon related configuration +# 2. Switch functions +# 3. Theme module menus +# 4. Modules configuration + +# ---------------------------------------------------------------------------- +# Icon related configuration + +Style * IconBox screen w 10 24 -130 -100, IconGrid 64 10, IconFill left top +Style * SlipperyIcon, IconTitle + +# ---------------------------------------------------------------------------- +# Switch functions + +DestroyFunc FuncFvwmStartThemeModules +AddToFunc FuncFvwmStartThemeModules ++ I FuncFvwmStartNormalIcons +# defined in the options files + +DestroyFunc FuncFvwmReloadThemeModules +AddToFunc FuncFvwmReloadThemeModules ++ I Read $[fvwm_theme_bling_dir]/styles ++ I FuncFvwmStartNormalIcons + +DestroyFunc FuncFvwmReloadColorsModules +AddToFunc FuncFvwmReloadColorsModules +# defined in buttonbar/* (only) + +DestroyFunc FuncFvwmStopThemeModules +AddToFunc FuncFvwmStopThemeModules ++ I KillModule FvwmButtons ++ I KillModule FvwmPager FvwmPager-Single ++ I KillModule FvwmPager FvwmPager-Desker ++ I KillModule FvwmTaskBar ++ I KillModule FvwmIconBox ++ I KillModule FvwmIconMan ++ I KillModule FvwmWinList ++ I DestroyModuleConfig FvwmButtons: * ++ I DestroyModuleConfig FvwmPager-Single: * ++ I DestroyModuleConfig FvwmPager-Desker: * ++ I DestroyModuleConfig FvwmIconBox: * ++ I DestroyModuleConfig FvwmIconMan: * ++ I DestroyModuleConfig FvwmTaskBar: * ++ I DestroyModuleConfig FvwmWinList: * ++ I FuncFvwmModulesDestroyStyle ++ I DestroyFunc FuncFvwmModulesDestroyStyle + +DestroyFunc FuncFvwmUnReloadColorsModules +AddToFunc FuncFvwmUnReloadColorsModules ++ I KillModule FvwmButtons + +DestroyFunc FuncFvwmUnReloadThemeModules +AddToFunc FuncFvwmUnReloadThemeModules + +# ---------------------------------------------------------------------------- +# Theme module menus + +DestroyMenu MenuFvwmStartThemeModules +AddToMenu MenuFvwmStartThemeModules "Default Modules" Title ++ "%menu/item.xpm%&Buttons" FuncFvwmRestartModule FvwmButtons ++ "%menu/item.xpm%&Desker" FuncFvwmRestartModuleByAlias FvwmPager FvwmPager-Desker '0 3' ++ "" Nop ++ "%menu/choice-no.xpm%No normal icons" Style * NoIcon # for NoIcon modules ++ "%menu/choice-yes.xpm%Normal icons" Style * !NoIcon ++ "%menu/item.xpm%IconB&ox" FuncFvwmRestartModule FvwmIconBox ++ "%menu/item.xpm%Icon&Man" FuncFvwmRestartModule FvwmIconMan ++ "%menu/item.xpm%&TaskBar" FuncFvwmRestartModule FvwmTaskBar ++ "%menu/item.xpm%&WinList" FuncFvwmRestartModule FvwmWinList + +DestroyMenu MenuFvwmStopThemeModules +AddToMenu MenuFvwmStopThemeModules "Default Modules" Title ++ "%menu/quit.xpm%Stop &Buttons" KillModule FvwmButtons ++ "%menu/quit.xpm%Stop &Desker" KillModule FvwmPager FvwmPager-Desker ++ "%menu/quit.xpm%Stop IconB&ox" KillModule FvwmIconBox ++ "%menu/quit.xpm%Stop Icon&Man" KillModule FvwmIconMan ++ "%menu/quit.xpm%Stop &TaskBar" KillModule FvwmTaskBar ++ "%menu/quit.xpm%Stop &WinList" KillModule FvwmWinList + +# ---------------------------------------------------------------------------- +# Desktop names + +DesktopName 0 Main +DesktopName 1 Web & Mail +DesktopName 2 Devel +DesktopName 3 Games + +# ---------------------------------------------------------------------------- +# Modules configuration + +#.---- start: Read $./styles +Style "FvwmButtons" !Title, !Handles, Sticky, TitleAtBottom, \ + WindowListSkip, CirculateSkip +Style "FvwmIconBox" !Title, !Handles, Sticky, TitleAtTop, \ + WindowListSkip, CirculateSkip +Style "FvwmIconMan" !Title, !Handles, Sticky, TitleAtBottom, \ + WindowListSkip, CirculateSkip +Style "FvwmPager-Desker" !Title, !Handles, Sticky, TitleAtTop, \ + WindowListSkip, CirculateSkip, !Lenience +Style "FvwmPager-Single" !Title, !Handles, Sticky, TitleAtTop, \ + WindowListSkip, CirculateSkip +Style "FvwmTaskBar" !Title, Sticky, TitleAtTop, \ + WindowListSkip, CirculateSkip +Style "FvwmWinList" !Title, !Handles, Sticky, TitleAtBottom, \ + WindowListSkip, CirculateSkip + +DestroyFunc FuncFvwmModulesDestroyStyle +AddToFunc FuncFvwmModulesDestroyStyle ++ I DestroyStyle "FvwmButtons" ++ I DestroyStyle "FvwmIconBox" ++ I DestroyStyle "FvwmIconMan" ++ I DestroyStyle "FvwmPager-Desker" ++ I DestroyStyle "FvwmPager-Single" ++ I DestroyStyle "FvwmTaskBar" ++ I DestroyStyle "FvwmWinList" +#`====== end: Read $./styles + +#.---- start: Read $./FvwmButtons +DestroyModuleConfig FvwmButtons: * +*FvwmButtons: Geometry 200x90-0-0 +*FvwmButtons: Colorset 10 +*FvwmButtons: (2x2, Frame 2, \ + Swallow "FvwmPager-Single" "Module FvwmPager FvwmPager-Single * *") +*FvwmButtons: (Frame 2, \ + Swallow "xbiff" `Exec exec xbiff -geometry +5000+5000 \ + -bg $$[bg.cs13] -fg $$[fg.cs13]`) +*FvwmButtons: (Frame 2, \ + Swallow(NoHints) "xclock" `Exec exec xclock -geometry +5000+5000 \ + -bg $$[bg.cs13] -fg $$[fg.cs13] -hd $$[shadow.cs13] \ + -hl $$[hilight.cs13] -padding 1 -update 1`) +*FvwmButtons: (2x1, Frame 2, \ + Swallow(UseOld,NoHints) "xload" `Exec exec xload \ + -geometry +5000+5000 -bg $$[bg.cs13] -fg $$[fg.cs13] \ + -hl $$[shadow.cs13] -update 5 -nolabel`) +#`====== end: Read $./FvwmButtons + +#.---- start: Read $./FvwmIconBox +DestroyModuleConfig FvwmIconBox: * +*FvwmIconBox: Geometry +0+0 + +*FvwmIconBox: Colorset 12 +*FvwmIconBox: IconColorset 17 +*FvwmIconBox: IconHiColorset 18 + +*FvwmIconBox: Geometry 4x1+0+0 +*FvwmIconBox: Lines 4 +*FvwmIconBox: MaxIconSize 64x48 +*FvwmIconBox: SortIcons IconName +*FvwmIconBox: Padding 10 +*FvwmIconBox: FrameWidth 3 3 +*FvwmIconBox: UseSkipList +*FvwmIconBox: HideSC Horizontal +*FvwmIconBox: SetWMIconSize +*FvwmIconBox: HilightFocusWin +*FvwmIconBox: Resolution Desk +*FvwmIconBox: Mouse 1 Click FuncFvwmDeiconifyFocusAndRaise +*FvwmIconBox: Mouse 1 DoubleClick FuncFvwmDeiconifyFocusAndWarp +*FvwmIconBox: Mouse 2 Click Iconify +*FvwmIconBox: Mouse 2 DoubleClick Iconify +*FvwmIconBox: Mouse 3 Click Module FvwmIdent +*FvwmIconBox: Mouse 3 DoubleClick Module FvwmIdent +*FvwmIconBox: Key r RaiseLower +*FvwmIconBox: Key space Iconify +*FvwmIconBox: Key d Close +*FvwmIconBox: Key n Next +*FvwmIconBox: Key p Prev +*FvwmIconBox: Key h Left +*FvwmIconBox: Key j Down +*FvwmIconBox: Key k Up +*FvwmIconBox: Key l Right +*FvwmIconBox: NoIconAction SendToModule FvwmAnimate animate +#`====== end: Read $./FvwmIconBox + +#.---- start: Read $./FvwmIconMan +DestroyModuleConfig FvwmIconMan: * +*FvwmIconMan: NumManagers 1 +*FvwmIconMan: ButtonGeometry 180x0 +*FvwmIconMan: ManagerGeometry 2x0+0-0 + +*FvwmIconMan: Colorset 12 +*FvwmIconMan: IconColorset 19 +*FvwmIconMan: PlainColorset 17 +*FvwmIconMan: SelectColorset 20 +*FvwmIconMan: FocusColorset 18 +*FvwmIconMan: FocusAndSelectColorset 20 + +*FvwmIconMan: Format "%t" +*FvwmIconMan: Action Mouse 1 A sendcommand "FuncFvwmDeiconifyFocusAndRaise" +*FvwmIconMan: Action Mouse 2 A sendcommand "Iconify" +*FvwmIconMan: Action Mouse 3 A sendcommand \ + "Popup MenuFvwmWindowOps2 Mouse c -102m" +*FvwmIconMan: FollowFocus true +*FvwmIconMan: Sort none +*FvwmIconMan: IconButton up +*FvwmIconMan: PlainButton up +*FvwmIconMan: SelectButton down +*FvwmIconMan: FocusButton up +*FvwmIconMan: FocusAndSelectButton down +*FvwmIconMan: DontShow icon=Untitled resource=Untitled +#*FvwmIconMan: DrawIcons true +*FvwmIconMan: NoIconAction "SendToModule FvwmAnimate animate" +#`====== end: Read $./FvwmIconMan + +#.---- start: Read $./FvwmPager-Single +DeskTopSize 3 3 + +DestroyMenu MenuFvwmWindowMove +AddToMenu MenuFvwmWindowMove "Move to ..." Title ++ "&Right Page%menu/window-move.xpm%" AnimatedMove w+100 w ++ "&Left Page%menu/window-move.xpm%" AnimatedMove w-100 w ++ "&Down Page%menu/window-move.xpm%" AnimatedMove w w+100 ++ "&Up Page%menu/window-move.xpm%" AnimatedMove w w-100 + +DestroyMenu MenuFvwmWindowGroupQuickMove +AddToMenu MenuFvwmWindowGroupQuickMove ++ "&Right Page%menu/window-move.xpm%" Pick All ($[w.resource]) MoveToPage +1p +0p ++ "&Left Page%menu/window-move.xpm%" Pick All ($[w.resource]) MoveToPage -1p +0p ++ "D&own Page%menu/window-move.xpm%" Pick All ($[w.resource]) MoveToPage +0p +1p ++ "&Up Page%menu/window-move.xpm%" Pick All ($[w.resource]) MoveToPage +0p -1p + +DestroyModuleConfig FvwmPager-Single: * + +*FvwmPager-Single: Colorset * 14 +*FvwmPager-Single: HilightColorset * 15 +*FvwmPager-Single: WindowColorsets 1 2 +*FvwmPager-Single: BalloonColorset * 16 +*FvwmPager-Single: Geometry +5000+5000 +*FvwmPager-Single: Columns 1 +*FvwmPager-Single: Balloons All +*FvwmPager-Single: BalloonYOffset +2 +*FvwmPager-Single: BalloonBorderWidth 1 +#`====== end: Read $./FvwmPager-Single + +#.---- start: Read $./FvwmPager-Desker +AddToMenu MenuFvwmWindowMove "" Nop ++ "Desk 0%menu/window-move.xpm%" MoveToDesk 0 0 ++ "Desk 1%menu/window-move.xpm%" MoveToDesk 0 1 ++ "Desk 2%menu/window-move.xpm%" MoveToDesk 0 2 ++ "Desk 3%menu/window-move.xpm%" MoveToDesk 0 3 + +AddToMenu MenuFvwmWindowGroupQuickMove "" Nop ++ "Desk 0%menu/window-move.xpm%" Pick All ($[w.resource]) MoveToDesk 0 0 ++ "Desk 1%menu/window-move.xpm%" Pick All ($[w.resource]) MoveToDesk 0 1 ++ "Desk 2%menu/window-move.xpm%" Pick All ($[w.resource]) MoveToDesk 0 2 ++ "Desk 3%menu/window-move.xpm%" Pick All ($[w.resource]) MoveToDesk 0 3 + +DestroyModuleConfig FvwmPager-Desker: * +*FvwmPager-Desker: Geometry -0+100 +*FvwmPager-Desker: DeskTopScale 32 +*FvwmPager-Desker: Columns 1 +*FvwmPager-Desker: Colorset * 14 +*FvwmPager-Desker: HilightColorset * 15 +*FvwmPager-Desker: BalloonColorset * 16 +*FvwmPager-Desker: WindowColorsets 1 2 +*FvwmPager-Desker: Balloons All +*FvwmPager-Desker: BalloonYOffset +2 +#`====== end: Read $./FvwmPager-Desker + +#.---- start: Read $./FvwmTaskBar +DestroyModuleConfig FvwmTaskBar: * +*FvwmTaskBar: Geometry +0+0 + +*FvwmTaskBar: Colorset 17 +*FvwmTaskBar: FocusColorset 18 +*FvwmTaskBar: IconColorset 19 +*FvwmTaskBar: TipsColorset 16 + +*FvwmTaskBar: Action Click1 FuncFvwmDeiconifyFocusAndRaise +*FvwmTaskBar: Action Click2 Iconify +*FvwmTaskBar: Action Click3 Menu MenuFvwmWindowOps2 Mouse c +1p + +*FvwmTaskBar: UseSkipList +*FvwmTaskBar: UseIconNames +*FvwmTaskBar: AutoStick +*FvwmTaskBar: ShowTips + +*FvwmTaskBar: ButtonWidth 180 +*FvwmTaskBar: BellVolume 20 +*FvwmTaskBar: MailCommand FuncFvwmMail +*FvwmTaskBar: ClockFormat %H:%M + +*FvwmTaskBar: StartName Start +# olicha: IMHO the position is good! +# migo: I don't think so. +#*FvwmTaskBar: StartMenu MenuFvwmRoot Mouse c +*FvwmTaskBar: StartMenu MenuFvwmRoot Root +1p +27p +*FvwmTaskBar: StartIcon 16x16/linux.xpm + +# Animation +*FvwmTaskBar: NoIconAction SendToModule FvwmAnimate animate +#`====== end: Read $./FvwmTaskBar + +#.---- start: Read $./FvwmWinList +DestroyModuleConfig FvwmWinList: * + +*FvwmWinList: Geometry +0-0 +*FvwmWinList: Colorset 17 +*FvwmWinList: FocusColorset 18 +*FvwmWinList: IconColorset 19 +*FvwmWinList: Action Click1 FuncFvwmDeiconifyFocusAndRaise +*FvwmWinList: Action Click2 Iconify +*FvwmWinList: Action Click3 Popup MenuFvwmWindowOps2 Mouse -102m c +*FvwmWinList: UseSkipList +*FvwmWinList: MaxWidth 180 +*FvwmWinList: MinWidth 150 +# Animation +*FvwmWinList: NoIconAction SendToModule FvwmAnimate animate +#`====== end: Read $./FvwmWinList + +#.---- start: Read $./fonts +FuncFvwmSetFont-ModuleWindowList FvwmTaskBar Font \ + "-adobe-helvetica-medium-r-*-*-12-*" + +FuncFvwmSetFont-ModuleSelectedWindowList FvwmTaskBar SelFont \ + "-adobe-helvetica-bold-r-*-*-12-*" + +FuncFvwmSetFont-ModuleWindowList FvwmWinList Font \ + "-adobe-helvetica-bold-r-*-*-12-*" + +FuncFvwmSetFont-ModuleWindowList FvwmIconBox Font \ + " -adobe-helvetica-medium-r-*-*-12-*" + +FuncFvwmSetFont-ModuleWindowList FvwmIconMan *font \ + "-*-fixed-bold-r-normal-*-13-*" + +FuncFvwmSetFont-ModuleTips FvwmTaskBar StatusFont \ + "-*-fixed-medium-r-semicondensed-*-13-*" + +FuncFvwmSetFont-ModuleTips FvwmPager-Single BalloonFont \ + -*-lucidatypewriter-medium-r-normal-sans-12-* +FuncFvwmSetFont-ModuleTips FvwmPager-Desker BalloonFont \ + -*-lucidatypewriter-medium-r-normal-sans-14-* + +FuncFvwmSetFont-ModuleSmall FvwmPager-Single SmallFont \ + "-*-fixed-medium-r-normal-*-8-*" +FuncFvwmSetFont-ModuleSmall FvwmPager-Desker SmallFont \ + "-*-fixed-medium-r-normal-*-8-*" + +FuncFvwmSetFont-ModuleLabel FvwmPager-Single Font \ + "-adobe-helvetica-bold-r-*-*-10-*" + +FuncFvwmSetFont-ModuleLabel FvwmPager-Desker Font \ + "-adobe-helvetica-bold-r-*-*-10-*" + +#`====== end: Read $./fonts + +#`====== end: Read "/usr/share/fvwm/themes/default/modules/main" + +#.---- start: Read "/usr/share/fvwm/themes/default/modules/pager/none" +# +#`====== end: Read "/usr/share/fvwm/themes/default/modules/pager/none" + +#.---- start: Read "/usr/share/fvwm/themes/default/modules/buttonbar/enabled" +AddToFunc FuncFvwmStartThemeModules ++ I Module FvwmButtons + +AddToFunc FuncFvwmReloadColorsModules ++ I Module FvwmButtons +#`====== end: Read "/usr/share/fvwm/themes/default/modules/buttonbar/enabled" + +#.---- start: Read "/usr/share/fvwm/themes/default/modules/winlist/GlobalIconMan" +*FvwmIconMan: Resolution global +*FvwmIconMan: title "Global IconMan" + +AddToFunc FuncFvwmStartThemeModules ++ I Module FvwmIconMan +#`====== end: Read "/usr/share/fvwm/themes/default/modules/winlist/GlobalIconMan" + +#.---- start: Read "/usr/share/fvwm/themes/default/modules/normal-icons/yes" +DestroyFunc FuncFvwmStartNormalIcons +AddToFunc FuncFvwmStartNormalIcons +#`====== end: Read "/usr/share/fvwm/themes/default/modules/normal-icons/yes" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/animation/enabled" +DestroyFunc FuncFvwmStartFvwmAnimate +AddToFunc FuncFvwmStartFvwmAnimate ++ I Module FvwmAnimate + +DestroyFunc FuncFvwmStopFvwmAnimate +AddToFunc FuncFvwmStopFvwmAnimate ++ I KillModule FvwmAnimate +#`====== end: Read "/usr/share/fvwm/themes/default/settings/animation/enabled" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/menu-system/disabled" +DestroyMenu MenuFvwmMenuSystem + +#`====== end: Read "/usr/share/fvwm/themes/default/settings/menu-system/disabled" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/automenus/headlines/enabled" +AddToMenu MenuFvwmWebBrowsing ++ "%menu/www.xpm%Headlines" Popup MenuFvwmHeadlines + +DestroyFunc FuncFvwmMenuHeadlines +AddToFunc FuncFvwmMenuHeadlines ++ I PipeRead `fvwm-menu-headlines --frontpage --wm-icons --command "FuncFvwmOpenURL '%u'" --site $0` ++ I Schedule 900000 DestroyMenu $0 # keep the generated menu for 15 minutes + +DestroyMenu MenuFvwmHeadlines +AddToMenu MenuFvwmHeadlines "Headlines" Title ++ MissingSubmenuFunction FuncFvwmMenuHeadlines ++ "%menu/www.xpm%FreshMeat" Popup freshmeat ++ "%menu/www.xpm%LinuxToday" Popup linuxtoday ++ "%menu/www.xpm%Slashdot" Popup slashdot ++ "%menu/www.xpm%LinuxApps" Popup linuxapps ++ "%menu/www.xpm%DaemonNews" Popup daemonnews ++ "%menu/www.xpm%GNOME News" Popup gnome-news ++ "%menu/www.xpm%KDE News" Popup kde-news ++ "%menu/www.xpm%RootPrompt" Popup rootprompt ++ "%menu/www.xpm%NewsForge" Popup newsforge ++ "%menu/www.xpm%Kuro5hin" Popup kuro5hin ++ "%menu/www.xpm%BBSpot" Popup bbspot ++ "%menu/www.xpm%LinuxFr" Popup linuxfr ++ "%menu/www.xpm%ThinkGeek" Popup thinkgeek ++ "%menu/www.xpm%CPAN Modules" Popup cpan ++ "" Nop ++ "%menu/www.xpm%CNN" Popup cnn ++ "%menu/www.xpm%BBC" Popup bbc ++ "" Nop ++ "%menu/refresh.xpm%Reset all" FuncFvwmResetHeadlines + +DestroyFunc FuncFvwmResetHeadlines +AddToFunc FuncFvwmResetHeadlines ++ I DestroyMenu freshmeat ++ I DestroyMenu linuxtoday ++ I DestroyMenu slashdot ++ I DestroyMenu linuxapps ++ I DestroyMenu daemonnews ++ I DestroyMenu gnome-news ++ I DestroyMenu kde-news ++ I DestroyMenu rootprompt ++ I DestroyMenu newsforge ++ I DestroyMenu kuro5hin ++ I DestroyMenu bbspot ++ I DestroyMenu linuxfr ++ I DestroyMenu thinkgeek ++ I DestroyMenu cnn ++ I DestroyMenu bbc +#`====== end: Read "/usr/share/fvwm/themes/default/settings/automenus/headlines/enabled" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/background/theme" +# do nothing +#`====== end: Read "/usr/share/fvwm/themes/default/settings/background/theme" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/banner/enabled" +*FvwmBanner: Pixmap $[fvwm_theme_bling_dir]/images/banner/fvwm-logo-clearglass.png +*FvwmBanner: Timeout 5 +AddToFunc StartFunction I Module FvwmBanner + +Style "FvwmBanner" StaysOnTop, Sticky +#`====== end: Read "/usr/share/fvwm/themes/default/settings/banner/enabled" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/gnome/system-menu/disabled" +DestroyMenu gnome-sys +*FvwmGtk-Menus: Destroy gnome-sys +#`====== end: Read "/usr/share/fvwm/themes/default/settings/gnome/system-menu/disabled" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/gnome/anotherlevel-menu/disabled" +DestroyMenu gnome-redhat +*FvwmGtk-Menus: Destroy gnome-redhat +#`====== end: Read "/usr/share/fvwm/themes/default/settings/gnome/anotherlevel-menu/disabled" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/gnome/user-menu/disabled" +DestroyMenu gnome-user +*FvwmGtk-Menus: Destroy gnome-user +#`====== end: Read "/usr/share/fvwm/themes/default/settings/gnome/user-menu/disabled" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/session-manager/none" +# a memory file; maybe we can move MenuFvwmQuit from menus@ here +DestroyFunc FuncFvwmSaveSession +DestroyFunc FuncFvwmSaveQuitSession +#`====== end: Read "/usr/share/fvwm/themes/default/settings/session-manager/none" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/stroke/disabled" +DestroyFunc FuncFvwmStartStroke +AddToFunc FuncFvwmStartStroke + +DestroyFunc FuncFvwmStopStroke +AddToFunc FuncFvwmStopStroke +#`====== end: Read "/usr/share/fvwm/themes/default/settings/stroke/disabled" + +#.---- start: Read "/usr/share/fvwm/themes/default/settings/wheel/disabled" +DestroyFunc FuncFvwmStartWheel +AddToFunc FuncFvwmStartWheel + +DestroyFunc FuncFvwmStopWheel +AddToFunc FuncFvwmStopWheel +#`====== end: Read "/usr/share/fvwm/themes/default/settings/wheel/disabled" + +#.---- start: Read "/usr/share/fvwm/themes/default/startup" +# Stuff to do at Start/Restart(/ThemeSwitching) + +#`====== end: Read "/usr/share/fvwm/themes/default/startup" + + + +#`====== end: Read themes-rc-2 + --- fvwm-2.5.27.ds.orig/debian/menuentry-fvwm +++ fvwm-2.5.27.ds/debian/menuentry-fvwm @@ -0,0 +1,251 @@ +?package(fvwm):\ + needs="wm"\ + section="Window Managers"\ + title="FVWM"\ + longtitle="FVWM Windows Manager"\ + command="/usr/bin/fvwm2" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmAnimate"\ + longtitle="FvwmAnimate: animate iconification and deiconification"\ + command="FvwmAnimate" + +?package(fvwm):\ + needs="fvwmother"\ + section="FVWM Modules"\ + title="FvwmAnimate menu"\ + longtitle="Configuration menu for FvwmAnimate (after FvwmAnimate started)"\ + command="Popup MenuFvwmAnimate" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmAuto"\ + longtitle="FvwmAuto: autoraise windows with keyboard input focus"\ + command="FvwmAuto 300 raise lower" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmBacker"\ + longtitle="FvwmBacker: change the background when changing desktops"\ + command="FvwmBacker" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmBanner"\ + longtitle="FvwmBanner: display the FVWM logo for 3 seconds"\ + command="FvwmBanner" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmButtons"\ + longtitle="FvwmButtons: display a command button panel"\ + command="FvwmButtons" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmButtons (Debian)"\ + longtitle="FvwmButtons (Debian version): display a command button panel"\ + command="FvwmButtons DebianFvwmButtons" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmCommandS"\ + longtitle="FvwmCommandS: initialise FvwmCommand handling"\ + command="FvwmCommandS" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmConsole"\ + longtitle="FvwmConsole: a way to type commands for FVWM to execute"\ + command="FvwmConsole" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmCpp"\ + longtitle="FvwmCpp: cpp"\ + command="FvwmCpp" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmDebug"\ + longtitle="FvwmDebug: debug"\ + command="FvwmDebug" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmDragWell"\ + longtitle="FvwmDragWell: drag"\ + command="FvwmDragWell" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmEvent"\ + longtitle="FvwmEvent: binds actions to events, such as audio actions"\ + command="FvwmEvent" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmForm"\ + longtitle="FvwmForm: Form"\ + command="FvwmForm" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmGtk"\ + longtitle="FvwmGtk: create menus and dialogs using GTK+ toolkit"\ + command="FvwmGtk" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmIconBox"\ + longtitle="FvwmIconBox: an icon manager"\ + command="FvwmIconBox" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmIconMan"\ + longtitle="FvwmIconMan: another icon manager"\ + command="FvwmIconMan" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmIdent"\ + longtitle="FvwmIdent: show info about a selected window"\ + command="FvwmIdent" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmM4"\ + longtitle="FvwmM4: m4"\ + command="FvwmM4" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmPager"\ + longtitle="FvwmPager: virtual desktop manager"\ + command="FvwmPager 0 0" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmProxy"\ + longtitle="FvwmProxy: manage obscured windows using proxy windows"\ + command="FvwmProxy" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmRearrange (vert)"\ + longtitle="FvwmRearrange: rearrange windows on screen in a vertical fashion"\ + command="FvwmRearrange -tile" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmRearrange (horiz)"\ + longtitle="FvwmRearrange: rearrange windows on screen in a horizontal fashion"\ + command="FvwmRearrange -tile -h" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmRearrange (cascade)"\ + longtitle="FvwmRearrange: rearrange windows on screen in a cascading fashion"\ + command="FvwmRearrange -cascade" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmSave"\ + longtitle="FvwmSave: save desktop layout to new.xinitrc (pseudo-.xinitrc)"\ + command="FvwmSave" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmSaveDesk"\ + longtitle="FvwmSaveDesk: save desktop layout to .fvwm2desk file"\ + command="FvwmSaveDesk" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmScript"\ + longtitle="FvwmScript: script"\ + command="FvwmScript" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmScroll"\ + longtitle="FvwmScroll: add scroll bars to selected window"\ + command="FvwmScroll" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmTalk"\ + longtitle="FvwmTalk: type commands into a window for FVWM to execute"\ + command="FvwmTalk" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmTaskBar"\ + longtitle="FvwmTaskBar: show a Windows 95/98 type task bar"\ + command="FvwmTaskBar" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmTheme"\ + longtitle="FvwmTheme: theme"\ + command="FvwmTheme" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmTile"\ + longtitle="FvwmTile: tile"\ + command="FvwmTile" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmWharf"\ + longtitle="FvwmWharf: free-floating application loader and executer"\ + command="FvwmWharf" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmWinList"\ + longtitle="FvwmWinList: show a window list for quick navigation"\ + command="FvwmWinList" + +?package(fvwm):\ + needs="fvwmmodule"\ + section="FVWM Modules"\ + title="FvwmWindowMenu"\ + longtitle="FvwmWindowMenu: show a menu listing current windows"\ + command="FvwmWindowMenu" --- fvwm-2.5.27.ds.orig/debian/substvars +++ fvwm-2.5.27.ds/debian/substvars @@ -0,0 +1 @@ +shlibs:Depends=libc6 (>= 2.3), libcairo2 (>= 1.2.4), libfontconfig1 (>= 2.4.0), libfreetype6 (>= 2.2.1), libfribidi0 (>= 0.10.9), libglib2.0-0 (>= 2.12.0), libgtk2.0-0 (>= 2.8.0), libice6 (>= 1:1.0.0), libncurses5 (>= 5.6+20071006-3), libpng12-0 (>= 1.2.13-4), libreadline5 (>= 5.2), librplay3 (>= 3.3.2-2), librsvg2-2 (>= 2.26.0), libsm6, libstroke0 (>= 0.5.1), libx11-6, libxcursor1 (>> 1.1.2), libxext6, libxft2 (>> 2.1.1), libxinerama1, libxpm4, libxrender1, zlib1g (>= 1:1.1.4) --- fvwm-2.5.27.ds.orig/debian/local-vars.mk +++ fvwm-2.5.27.ds/debian/local-vars.mk @@ -0,0 +1,128 @@ +############################ -*- Mode: Makefile -*- ########################### +## local-vars.mk --- +## Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +## Created On : Sat Nov 15 10:43:00 2003 +## Created On Node : glaurung.green-gryphon.com +## Last Modified By : Manoj Srivastava +## Last Modified On : Fri Sep 21 00:33:23 2007 +## Last Machine Used: anzu.internal.golden-gryphon.com +## Update Count : 16 +## Status : Unknown, Use with caution! +## HISTORY : +## Description : +## +## arch-tag: 1a76a87e-7af5-424a-a30d-61660c8f243e +## +############################################################################### +AUTOTOOLS_FILES = INSTALL Makefile.in aclocal.m4 bin/Makefile.in config.h.in \ + configure depcomp doc/Makefile.in \ + doc/commands/Makefile.in doc/docbook-xml/Makefile.in \ + doc/docbook-xml/ent/Makefile.in doc/docbook-xsl/Makefile.in\ + doc/docbook-xsl/common/Makefile.in config.guess \ + doc/docbook-xsl/highlighting/Makefile.in config.sub \ + doc/docbook-xsl/html/Makefile.in \ + doc/docbook-xsl/lib/Makefile.in \ + doc/docbook-xsl/manpages/Makefile.in \ + doc/docbook-xsl/profiling/Makefile.in doc/fvwm/Makefile.in \ + doc/images/Makefile.in doc/images/svg_rendering/Makefile.in\ + doc/modules/Makefile.in \ + doc/modules/images/FvwmTabs/Makefile.in \ + doc/modules/images/Makefile.in docs/Makefile.in \ + fvwm/Makefile.in install-sh libs/Makefile.in missing \ + modules/FvwmAnimate/Makefile.in \ + modules/FvwmAuto/Makefile.in modules/FvwmBacker/Makefile.in\ + modules/FvwmBanner/Makefile.in \ + modules/FvwmButtons/Makefile.in \ + modules/FvwmCommand/Makefile.in \ + modules/FvwmCommand/scripts/Makefile.in \ + modules/FvwmConsole/Makefile.in \ + modules/FvwmCpp/Makefile.in \ + modules/FvwmDebug/Makefile.in \ + modules/FvwmDragWell/Makefile.in \ + modules/FvwmEvent/Makefile.in \ + modules/FvwmForm/Makefile.in \ + modules/FvwmGtk/Makefile.in \ + modules/FvwmIconBox/Makefile.in \ + modules/FvwmIconMan/Makefile.in \ + modules/FvwmIdent/Makefile.in \ + modules/FvwmM4/Makefile.in \ + modules/FvwmPager/Makefile.in \ + modules/FvwmPerl/Makefile.in \ + modules/FvwmProxy/Makefile.in \ + modules/FvwmRearrange/Makefile.in \ + modules/FvwmSave/Makefile.in \ + modules/FvwmSaveDesk/Makefile.in \ + modules/FvwmScript/Makefile.in \ + modules/FvwmScript/Scripts/Makefile.in \ + modules/FvwmScript/Widgets/Makefile.in \ + modules/FvwmScroll/Makefile.in \ + modules/FvwmTabs/Makefile.in \ + modules/FvwmTaskBar/Makefile.in \ + modules/FvwmTheme/Makefile.in \ + modules/FvwmWharf/Makefile.in \ + modules/FvwmWinList/Makefile.in \ + modules/FvwmWindowMenu/Makefile.in \ + modules/Makefile.in \ + perllib/FVWM/Makefile.in \ + perllib/FVWM/Module/Makefile.in \ + perllib/FVWM/Tracker/Makefile.in \ + perllib/General/Makefile.in \ + perllib/Makefile.in \ + po/Makefile.in \ + rpm/Makefile.in \ + sample.fvwmrc/Makefile.in \ + tests/Makefile.in \ + tests/hints/Makefile.in \ + utils/Makefile.in + + +FILES_TO_CLEAN = debian/files debian/substvarsdebian/ChangeLog debian/control.in \ + debian/dirs debian/docs debian/fvwm.menu debian/fvwm.menu-method \ + debian/Makefile.am debian/Makefile.in $(AUTOTOOLS_FILES) +STAMPS_TO_CLEAN = +DIRS_TO_CLEAN = $(TMPTOP) autom4te.cache debian/stamp autom4te.cache +EXECUTABLE_SCRIPTS = $(SRCTOP)/config.guess $(SRCTOP)/config.sub $(SRCTOP)/configure \ + $(SRCTOP)/depcomp $(SRCTOP)/install-sh $(SRCTOP)/missing \ + $(SRCTOP)/mkinstalldirs + +# Location of the source dir +SRCTOP := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi) +TMPTOP = $(SRCTOP)/debian/$(package) + +LINTIANDIR = $(TMPTOP)/usr/share/lintian/overrides +MENUDIR = $(TMPTOP)/usr/share/menu +DOCBASEDIR = $(TMPTOP)/usr/share/doc-base + +PREFIX = /usr +SYSCONFDIR = /etc/X11/fvwm +LIBEXECDIR = $(PREFIX)/lib +MANTOP = $(PREFIX)/share/man + +SYSDIR = $(TMPTOP)/$(PREFIX)/share/$(package) + +MAN1DIR = $(TMPTOP)/$(MANTOP)/man1 +MAN3DIR = $(TMPTOP)/$(MANTOP)/man3 +MAN5DIR = $(TMPTOP)/$(MANTOP)/man5 +MAN7DIR = $(TMPTOP)/$(MANTOP)/man7 +MAN8DIR = $(TMPTOP)/$(MANTOP)/man8 +INFODIR = $(TMPTOP)/usr/share/info +DOCTOP = $(TMPTOP)/usr/share/doc +DOCDIR = $(DOCTOP)/$(package) +HTMLDIR = $(DOCDIR)/html +LIBDIR = $(TMPTOP)$(SYSCONFDIR) +#DM_DIR = $(TMPTOP)/etc/dm/Sessions/ +DM_DIR = $(TMPTOP)/usr/share/xsessions/ + +METHODSDIR = $(TMPTOP)/etc/menu-methods +METHODSLOC = $(TMPTOP)/etc/X11/fvwm + +FILES_TO_NUKE= + +define checkdir + @test -f debian/rules -a -f fvwm/fvwm.h || \ + (echo Not in correct source directory; exit 1) +endef + +define checkroot + @test $$(id -u) = 0 || (echo need root priviledges; exit 1) +endef --- fvwm-2.5.27.ds.orig/debian/local.mk +++ fvwm-2.5.27.ds/debian/local.mk @@ -0,0 +1,197 @@ +############################ -*- Mode: Makefile -*- ########################### +## local.mk --- +## Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +## Created On : Sat Nov 15 10:42:10 2003 +## Created On Node : glaurung.green-gryphon.com +## Last Modified By : Manoj Srivastava +## Last Modified On : Thu Feb 7 12:21:26 2008 +## Last Machine Used: anzu.internal.golden-gryphon.com +## Update Count : 64 +## Status : Unknown, Use with caution! +## HISTORY : +## Description : +## +## arch-tag: b07b1015-30ba-4b46-915f-78c776a808f4 +## +############################################################################### + +testdir: + $(testdir) + +implode: + $(checkdir) + -test -d debian/system.fvwm2rc-support && (cd debian && \ + tar zfc system.fvwm2rc-support.tar.gz system.fvwm2rc-support && \ + uuencode system.fvwm2rc-support.tar.gz system.fvwm2rc-support.tar.gz > system.fvwm2rc-support.uue \ + && rm -f system.fvwm2rc-support.tar.gz && rm -rf system.fvwm2rc-support ) +explode: + $(checkdir) + -test ! -d debian/system.fvwm2rc-support && (cd debian && uudecode system.fvwm2rc-support.uue \ + && tar zfx system.fvwm2rc-support.tar.gz && \ + rm -f system.fvwm2rc-support.tar.gz system.fvwm2rc-support.uue ) + + +debian/stamp/pre-config-common: debian/stamp/conf/fvwm +debian/stamp/BUILD/fvwm: debian/stamp/build/fvwm +debian/stamp/INST/fvwm: debian/stamp/install/fvwm +debian/stamp/BIN/fvwm: debian/stamp/binary/fvwm + +CLN-common:: + $(REASON) + test ! -f Makefile || $(MAKE) distclean + -test -d debian/system.fvwm2rc-support && $(MAKE) -f debian/rules implode + +CLEAN/fvwm:: + test ! -d $(TMPTOP) || rm -rf $(TMPTOP) + +debian/stamp/conf/autotools: + @test -d debian/stamp/conf || mkdir -p debian/stamp/conf + WARNINGS=none autoreconf --warnings=none -f -i + @echo done > $@ + +debian/stamp/conf/fvwm: debian/stamp/conf/autotools + $(REASON) + @test -d debian/stamp/conf || mkdir -p debian/stamp/conf + -test ! -d debian/system.fvwm2rc-support && $(MAKE) -f debian/rules explode + for file in $(EXECUTABLE_SCRIPTS); do \ + if [ -e $$file ]; then \ + test -x $$file || chmod +x $$file; \ + fi; \ + done + test ! -f config.cache || rm -f config.cache; + $(SRCTOP)/configure --verbose --prefix=$(PREFIX) $(confflags) \ + --sysconfdir=$(SYSCONFDIR) --libexecdir=$(LIBEXECDIR) \ + --mandir=$(MANTOP) --with-stroke-library \ + --disable-gtktest --disable-imlibtest \ + --without-gnome --disable-gtk \ + --with-gtk-prefix=/no/dir --with-imlib-prefix=/no/dir\ + --enable-htmldoc --htmldir=$(HTMLDIR) \ + -with-readline-library=yes + @echo done > $@ + +debian/stamp/build/fvwm: + $(REASON) + $(CHECKPO) + @test -d debian/stamp/build || mkdir -p debian/stamp/build +ifneq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) + bash -n debian/preinst + bash -n debian/prerm + bash -n debian/postinst + bash -n debian/postrm +endif + $(MAKE) + @echo done > $@ + +debian/stamp/install/fvwm: + $(REASON) + $(TESTROOT) + rm -rf $(TMPTOP) $(TMPTOP).deb + $(make_directory) $(DOCDIR)/sample.fvwmrc/manoj + $(make_directory) $(DOCDIR)/docs + $(make_directory) $(DOCDIR)/html + $(make_directory) $(LIBDIR) + $(make_directory) $(SYSDIR) + $(make_directory) $(METHODSDIR) + $(make_directory) $(METHODSLOC) + $(make_directory) $(DOCBASEDIR) + $(make_directory) $(MENUDIR) + $(make_directory) $(DM_DIR) + $(MAKE) DESTDIR=$(TMPTOP) install + mv $(TMPTOP)/$(PREFIX)/bin/fvwm $(TMPTOP)/$(PREFIX)/bin/fvwm2 + mv $(MAN1DIR)/fvwm.1 $(MAN1DIR)/fvwm2.1 + rm -f $(MAN1DIR)/xpmroot.1 + gzip -9fqr $(MAN1DIR) + ln -s fvwm-root.1.gz $(MAN1DIR)/xpmroot.1.gz + $(install_file) sample.fvwmrc/* $(DOCDIR)/sample.fvwmrc/ + $(install_file) debian/manoj/* $(DOCDIR)/sample.fvwmrc/manoj/ + $(install_file) debian/manoj/.fvwm2rc \ + $(DOCDIR)/sample.fvwmrc/manoj/ + $(install_file) debian/manoj/.FvwmAnimate \ + $(DOCDIR)/sample.fvwmrc/manoj/ + rm $(DOCDIR)/sample.fvwmrc/Makefile* + $(install_file) debian/Fvwm.desktop $(DM_DIR) + $(install_file) docs/* $(DOCDIR)/docs/ + $(install_file) AUTHORS $(DOCDIR)/ + $(install_file) NEWS $(DOCDIR)/ + $(install_file) README $(DOCDIR)/ + $(install_file) ChangeLog $(DOCDIR)/changelog + $(install_file) debian/changelog $(DOCDIR)/changelog.Debian + $(install_file) debian/NEWS.Debian $(DOCDIR)/ + test ! -f $(DOCDIR)/index.html || \ + mv $(DOCDIR)/*.html $(DOCDIR)/html + test ! -f doc/footer.html || \ + mv doc/footer.html $(DOCDIR)/html + test ! -d $(DOCDIR)/fvwm || \ + mv $(DOCDIR)/fvwm $(DOCDIR)/html/ + test ! -d $(DOCDIR)/commands || \ + mv $(DOCDIR)/commands $(DOCDIR)/html/ + test ! -d $(DOCDIR)/modules || \ + mv $(DOCDIR)/modules $(DOCDIR)/html/ + test ! -d $(DOCDIR)/images || \ + mv $(DOCDIR)/images $(DOCDIR)/html/ + -rm -rf $(DOCDIR)/commands $(DOCDIR)/fvwm \ + $(DOCDIR)/modules $(DOCDIR)/images + (cd $(DOCDIR)/docs; rm -f Makefile* *.in) + $(install_file) debian/system.fvwm2rc \ + $(DOCDIR)/sample.fvwmrc/system.fvwm2rc.Debian + gzip -9fqr $(DOCDIR) + gunzip -fqr $(DOCDIR)/html + test ! -f $(DOCDIR)/docs/TODO.gz || \ + gunzip -fqr $(DOCDIR)/docs/TODO.gz + test ! -f $(DOCDIR)/docs/TODO || \ + ln -s ../docs/TODO $(DOCDIR)/html/TODO + ln -s docs/ANNOUNCE.gz $(DOCDIR)/ANNOUNCE.gz + $(install_file) debian/copyright $(DOCDIR)/ + $(install_file) debian/menuentry-$(package) \ + $(MENUDIR)/$(package) + $(install_file) debian/system.fvwm2rc $(TMPTOP)/$(SYSCONFDIR)/ + (cd debian; tar cf - system.fvwm2rc-support | \ + (cd $(SYSDIR); umask 000; tar xspf -)) + chmod -R g-s $(SYSDIR) + ln -s iconify.au $(SYSDIR)/deiconify.au + ln -s new_page.au $(SYSDIR)/dewindowshade.au + ln -s new_page.au $(SYSDIR)/windowshade.au + ln -s new_page.au $(SYSDIR)/new_desk.au + $(install_program) debian/menu-method $(METHODSDIR)/fvwm + $(install_file) debian/docentry-$(package) $(DOCBASEDIR)/$(package) +ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) + find $(TMPTOP) -type f | while read i; do \ + if file -b $$i | egrep -q "^ELF.*executable"; then \ + strip --strip-all --remove-section=.comment --remove-section=.note $$i; \ + fi; \ + done + find $(TMPTOP) -type f | while read i; do \ + if file -b $$i | egrep -q "^ELF.*shared object"; then \ + strip --strip-unneeded --remove-section=.comment --remove-section=.note $$i; \ + fi; \ + done +endif + @test -d debian/stamp/install || mkdir -p debian/stamp/install + @echo done > $@ + + +debian/stamp/binary/fvwm: + $(REASON) + $(checkdir) + $(TESTROOT) + $(make_directory) $(TMPTOP)/DEBIAN + $(install_file) debian/conffiles $(TMPTOP)/DEBIAN/conffiles + $(install_program) debian/postinst $(TMPTOP)/DEBIAN/postinst + $(install_program) debian/preinst $(TMPTOP)/DEBIAN/preinst + $(install_program) debian/prerm $(TMPTOP)/DEBIAN/prerm + $(install_program) debian/postrm $(TMPTOP)/DEBIAN/postrm + k=`find $(TMPTOP) -type f | ( while read i; do \ + if file -b $$i | egrep -q "^ELF.*executable.*dynamically linked"; then \ + j="$$j $$i"; \ + fi; \ + done; echo $$j; )`; dpkg-shlibdeps $(TMPTOP)/$(PREFIX)/bin/fvwm2 $$k + dpkg-gencontrol -p$(package) -isp -P$(TMPTOP) + $(create_md5sum) $(TMPTOP) + chown -R root:root $(TMPTOP) + chmod -R u+w,go=rX $(TMPTOP) + dpkg --build $(TMPTOP) .. + @test -d debian/stamp/binary || mkdir -p debian/stamp/binary + @echo done > $@ + + + --- fvwm-2.5.27.ds.orig/debian/system.fvwm2rc-support.uue +++ fvwm-2.5.27.ds/debian/system.fvwm2rc-support.uue @@ -0,0 +1,3666 @@ +begin 644 system.fvwm2rc-support.tar.gz +M'XL(``UIB$H``^S]!7@4V;\N"J^UJCJ"ZS`P,+B[>W!/".X$B1$2TL25P,`, +M.NC@+H/[P.#N'B`$=PLA@1`@TEVUUN^^G?\^YVPY>]_G^\Y^SKGWN;MG($E7 +MU9*?O%+='<)BPL)])]3SBXR:T"C4NVY8Q,2)UM#P^NP_\]&@08-&S9LV=7QU +M//[UU[SO&S9LU*AIXX:-&C9MS!HT;-*P>1-6H>E_ZBK^G4=$6/B8T`H56*C5 +M&OX?G?=_=_S_I8^P_WG^PZP1P3YA_TEE\/][_ILV;=#\O_+_O^/Q'^<_P-L: +M'.`74V],Q/_*'(X$-VO2Y-_)?\,&31HT^U?Y;]ZD>5-6H<%_UB;_H\?_Q_-? +M+RS8!U\J,%;D/;YRQLJW_\?7O`??LYO\=V[??832#TR*^@\>X?'>HY+O#NW: +M_>[@X:@TXM7_/ +MF6N-GS5ZU.-=LP]19^/=1S=OV^AYXHGC>PZ=[/"FU<,^IX8E?^[?9X*1>-;K +M^:UK?>OW:%:K3=>;R8_V'=D_^ER+'IW:NWMW&3KYQK'#YT_VZ![7T>J1$WKF +M^9/>'SS\/9]ZF3<&GNM]NTM&`VIY.WN">[M&C1NV[IQZZMA?9X^/V!MY?.#Y +M'L>N';UV^K)?R-XQL-:.S9XK[GV:MW;]Q_WN=&P(F4O]\>\SWB<:EU +MUS9=NOJE!9[I.Z&U>Y.D01>'G!]V*_G>\_BK7A=]SW\ZU?]X[.D^QWO?]/C8 +MQK-=VW:M(@9>]CG9ZU2/\QTN=;[6[>;`E)$^G[*O>9X;8W.UP;?+K? +M/5N,M?>;+GEWJ=[W4R_8QWJKM'CUX/ +M^R>.N-7].>/T]Y..B5Q^L^#WI=]K^1?GV4[-O=<_`GGTMC +M[WF&M?'IE6:]\N1)0GCT@/2>;P9>_7P^[H;7.X]^/89_4DE#7GGF=GLPXM:+ +MBZ^N?)@PL+='K_!13UY%%8/K(-Q.R?5*])W@-[3]XN(?7D,^3[XU]I9YXO8QYGO)^ +MHF^L5T;`1[_'06^&VX<$CXX8*1/B8W(_^7T*3A_]SB]J9-3(K.C4C.?I'U_; +M;/0QP#[<>ZAU>$3DE\`@_W$1$[^I%Y01DC8A-2@F\-/D^)BHJ)"04>,#<@.^ +M^@>.CAN78T__E)(Q/CH@8$S$J-#@KQ,_Q9J1T2'!DZP4&3]^__08^&7QET)?VG5IT]KIW_LK%\Y>2?,>W&QIZ^N[%Y'$>GMXW +M;]PZ=^94M[8=F[7JZ1Z2??W\U1N7`@,]T_KF]!@VN'?D_9>W7D;<'^XQIL^S +MJ[=N!G?U=!\0>?OBL4N7;WGW[M^V@]O@H.L^S]KW;-VB17N/>S>O7ILP,<+' +M([W/[7L7KMR^=>7FS=O[AZ[N*IF[=" +M>G;HV*G?*/ +M7#M]-<-W^/AA.2$W3QT[E=.W4ZL>XQ)N/;YP/GY(FSYNGOZIUZ]H,3?/W;IJWAGP8.C=6Y +M\&\OS\"A'[_Y#VG;O$FKGIYGCA^^?O+5Q1%#/'J_"+[6OV?'3CU[#.G2 +M9<"SRX=.7NG2KFO08Z1J[XG$D<$CGMQZ\W7KXS9\9'C(Z%?7KSY(3HN)3[EVYM#?>X]> +M?CK:NUW+Y@W;M')W'^+Q(.U^[X$#?4;=OWC]XK7C9T\_N*WBK0.\>W;V[-J] +M7;N.?8=:@]V'=(T:,'[<]TU\?=[U?NFGHI)OO+CZXF%4 +M3LSMB#LC(CQZ=N[SY>KU.WV&MG5KX]EI1&_K^]>W[KU7B;?N7CMQY$RBM7>W +M]EU&W$F^GCJF71LDR>O;J\2Q25&O$:(727=/7;EPX\.(X(![]Q_<-`9UDT?_W<=\"H/KV[ +M>7H&#/+Q&>#>I\]H3P]W`$;@\+`W#RZ=.WSRQ.F+,=Z>(X:G^]T,>C%@;!_W +M+CU[]@J+RPD.CGX=?2/QTNTK3S_U'];;;[`M>.+XH:,'].@Z>&2TEU]@YH@Q +MMH\9CVY>.GOSUOOPWIVGH,]//J-NIUX/SG4?WA@6N+ELXDO/#JV:=O6?<1W^YU7S]\'I5A'#GGU +MY&KBK>=/?">\3TZZ=>]%SW9N;3OV]!P1^^C:I9NOO/IWZSTBY^&-BS>NW'V> +M\?K-TR\)?B,']NH_O/>(@7Z#^HS\/-BKOW?JHTOGSIZ_\31P8'?/X=D?$[]^ +M]K*.&C!Z3,3'=WZ#1Z6\?Y!X^_[3Q)?AH\;T&^[1T[W74,^A/7H/IL?W4Y[G +M9'QZ_.C.@UL/DM\^SDBY_^CM*Y^Q?3UZ=>S8M?=0\_-]^Y=>GN[^@U+>W/[Z +M_-FM&U>N)CZ(]O88."P\*'[X&)\/&:]B?/L.&-"[9Y\A7N-]TA[>OG;M;N:( +M0=XC<^*?W7N2?//IB\?/TWR&>PSR&-Y_U$@O]^^3GGJ-ZNK9^]7;Z\G7KUY_ +M--;;:Y#?RWG7/SP<$Q*2]NSIBULW +M[B?'18X9/-AON,WW8]I$_^CA`X>-\DJ;&!@Y>-2$#)F2\C#EH_>8X)QGSYZ\ +M>)[RHT=E +MY#QX=S\S/6#TX(%#1OKF/+IS_?[#^(B!PP9%C@H-S!X5F_+I3:!]E-DO=X@Y +MXOV(%%\9\23C<[:A8@+&I@8\_7[/YZWUP83@(0/=>WL-"ACQ1KWTLPVQ#?U, +M&6D?$^_=?77;EC+L;3]K/V/(M^%Q`P-'C1PS(<@G.N1[UAOKRPDOXI]29DB8 +MZ9_E(T=\B'\1^_+S^_"1HX8.\?N<=O?-DZR78^,&2:^OHX+[>_7U#1PZ:F16 +MPKV89Z%OZ,6WI^DO7X<'^ON,?/69U>K1O]?PD>E1KSYFI$\:/S;$)S[@ +M1<;SSY."8N*^F3&3_`.'>7G9`@/'98P)MJ91>OJ[]'0Y,2,L?>QW:^KSM/AX +M_^!QY#OYVX>HD(F19NSK#]F^$5&!P>;7$._A?L-'#8T8EQ/U?4)@6%2V80_- +M^/#^4UI@5M3[T,E1*3DI0<'CQXPU1@0-2D +M[.SWGS^]37G]^?.7U+37E!$4'J.B`L.L_H'6<=Y>/MX!8T=:K09EJ*B(N"CZ +M:OL8'>)M]0J'%A$\;Y6'.Q +MS:?OTT+"1_F/H1!KD'?@^/B8K^,2_"-\K+[C)P29WXR,A)QWWS_YYOAG![U- +M>);QA+Z/BPP:/WK4V.$3_+]X31J387R<^.'3AY0WGSYG&&F9WR9\"E)>$T8& +MCQGO,V',V.``>_"D"6^",D:$C;3ZI7[^G);Q648$(LHQ]I'^?C3^B_UK[N>T +MKVF!WT.R`M+'IP6G^0:/&0?4]`[Q\1_J-R(S]IV1$O29TB=EJK1W]A3U??R[ +M">\#.#O:.'V<- +MCXS,RHC_'&:,R[!^FFBS4DA._,?XN-S8B>,"1@<$IH>_C."0Q79O\LO]#G`G&@/L'H'CAOEY1-H34B(\A\] +M:D)03E1ZUH>T%^^>O'F>^O%KS`29$Q+E/WZ4OX_5WW>4MZ_?*/]HF2$=9[Q( +M2XV-BPR*4^F?4XP<7_\1?FA2_Y%!03$3LKYE?LA\]]6QOD_T\O,;>YK/."_O +ML2CDP#$3?2<&3(ZR6VU!DP(F!%KC8KZEO$Q-SFA7U*>AK1&Y\3KA-?L[X]#'^.]&X\5[^7N-' +M!4*\RHXMCA)( +M&C31&F@-GAQ-4;%1$?Z^_J/'35#9&9DYD@*MUJ@@LAN4$_/5^$PV&8IGQH=8 +MHP*CK`D.DQ,4Z!L8&!5-AI%KRS)MV(_C05$Q5FMP1$).CH'UAD;9$A\<045@DSHD*P3E14=;@\>/]`R>$)>1D&SDQ9(V+MU&F*6.B*!PG +M^?N/S]MC1DX\3G9<13D&453$A*BHR5%AUB!K8'C0Y)B,C(P<6U2-Z:-SVVCC.BHJ,2)%&&,2G: +ML0,*L8<#1B9,"(^.B8^GG(2H"59KJ'721(HEQY(#K5&1F`ECXA$3/XG^\9B$ +M!5HQ-X5$A8=$1<;A.(5/"HD*Q=?H27&Q45&A81$3:1)0PAH>&#F12$+LAT?$ +MT"23^4-Z.P[&/6).B8P`Q5FLS +M(NVQE(#,X;3(L%`K:@\Q1)%'3<2(A$I-B%;QALIU##$Q"H<1R^")$Z/B0QTC +M)DS$418U&0,9">;(]=1D["PJ#!';>1%*`ISYNTH*@Q+GA3_CQ0Y&@N!,Q")O!L/ +ML?\H;#P9CR4[NB(Z^''<9Q +M8N@_/6/-NY*B_D_=??D___B/[_^-\?$9%140[&.-^E^Y!?@?W_]KT+!QL^;_ +M\OY?HP8-FS7ZK_M__SL>_W3_KP9C(I']L_M_UF#?"CZA`1/_VWE*D9*D5$)" +M_*2$A`1*2%"3$Q0>4M)D^]M70[IV&71F]XY]3QM4+%NV4O/CZY?.G[=P^8ZZ +MI0JZNA8L^M/M-0MFSYJS:&NCTH4*%"Q>X?.ZA;_/F;OL:)7B!0H4*E5W[_)Y +M<^8NV5NS9,$"A4HWV;%D[N_S5Z>6*U*P4(GJ1U?,^WW>JEOEBQ8L5*K.GJ7S +MYB[ZL\6/A0L5*W]_]?RY"]9Z_%2D4/$*MU;/G_?'EB8_%BY73%_P:IKY8L7*55K__(%B]9U+5NL>-EN&Q8O7'&\Z@_%2S?J_/ACU?-KEJX^ +M5J-TZ6KGURQ?I=+7XN5_O4 +MNM4[W"J4JWUZ_9K=K2J4;W!XW;HC]V[!I>JX;;WUOW]JI5VWW?]J-M:M5_M'O7[49UW([O +M.MRU;J,7>_>^:ES?X_#>2ZWKMS^]]U3'AFZ7_CK9O;';M8.GNS?MYX[MU#/3,2W_0?]/(.]1OUZ('/ +M@+C[;X>->/TP8DC(XS=>7BE/PH='/DOW\GO[>MRHKZ^B1\6]^N8]\5VZ?V!: +M^OB`C#3K^*\?PP._?HR:D/UY8O"WSQ$3,S,BPC._A49],ZPQW^)#Y;?8R.S< +MZ+C/&_X7__SL>_X3_'1C[?1>^:HSMZHROO%Z]^H[_\^JB;E@P!%5, +M_3$1/@'6^OZ0@+YUPX("?'SK18V)9#KEL%OB1]VN3V&U[3_*.]2"39?:]U?Y +M=E@ZFNY9I7Y;=W=C=CZG?*6-;;8J._C>6@JI1]S2QAN>=<4.7:E]N^\"[.=YA?;A'VI];94M;( +ML8TUGCA=S]?6G);[V+:-ZEJB\M\WGMABC&KLJ%[$:;$]-O>S*O*#SLD\6'J:+F(] +M*\T^4*2*LP_BJ_,78+>_QV7-LJ3G=[,\L;_-"LSMIB_/%V6YGV/_'J65MGRV +M5*+U]EFY9?G(?!%LG&V2]-?'LLGF4+JN_N*S],>BDKU03BU+5]<+U"[[?I1J;LVI)I5SH-;.>;39[UO-K`#GV87?.=?,;?+IH%FBX$U79>SZNH;I +MKE*;9M3,K:GZ6-KF:TFKLZIF_:!G%O;5FV7>S+[C]%+/L+2UG37AI3;1?U1LX=]3-?;N4>L^PK>(BMS_DLY]A\ +M])_S33(;9>>(;_H'==LXH!'5R\FG'7(IQ8[F!E(L.ZW>.16@)O9LJ50^/=:I +MIBCS_9IMIG-M?2F[8C8Q?5E3I\J4DI4H;Q:PJL*5S-^/QIL/S#Y7?7$70HMX@Y6]YAMUQ>:&/L6^T6^2?==^U/!>RQM7_,Y68IV=/X] +MM\775[;#^K$"I5VGY!3_5(G_EO^ZRR+U\%O&]R7.>XO.8UN^%,O^TWEC@<$T +MPR9R/K-G3KV=^\MF64?D,I=:XK6JQ/SD,-M0F>CJ8RE%UMS=67_I"PM5$IVS +MMV2?Y,.=J^C^ZI$M_=NY?"4+Y5NMWBK31?_@R +MZ?-2K6NQ>ZY/VM9UO*59_"OQMK<;W3(Z3?GTT9"]EJ6 +MK(_F$_E+,\VL)JJ*:ZRCV<#HH1WD&5I7>FB_+WWX4WY0J\:'&$GVVOR$-E-; +M8'1F[^F8V8VF:D7U5K(-+95A/%->5Q?%:PKA`^0V.58[1A=Y>?F1G67O[<[R +MJ=,9,4)N8V%\I:V:W&MQ8A>THI1E^.3X.@US]C$NT2?SI*BK8N0PIU8BUJR7 +MX\=^=?Y!O\(&9G_+/NR4E'^(UC*GZ'-KYJW\S,M6';^BO@[96@/ +M99/<#R*3+V`_\\>RE?JJ[3.F&Q\M,X4A*M@G&V7,[:ZQSG_DSL^I1S^Z_NC\ +MPE;@ZW1^O<`!YQU9`[[O81[:^/RUG1OFWLR,R`W/?ZAH8?4JO6)VF,O)8N&Z +M^>GCUSIL;+'4@CNS6J1=-WP*ERLD5,D,RNEC"2GPS"7[>_-OETG+7];RJWG? +MUEX>YAWTY9;#]LR<@;RJTPE-JG:YFBW=^73^E4;(]ZG&*^>YKE=DW2Q%%RP/ +M^$0Y1!Y67464)4)>L,VCFUHY7*&K5_9RJKCK`:?PG.\YI?AO3M[:)A67NU^- +MTXJX5)2962GLK'Y!:TT3C&'&%MW.9O/?V&U5SSZ$`ISFZV'FD>QD&F'Y;HE2 +M;^SNAI-V3/=FD\S*K#5[0D4H7!GJ%N_IE*9RLQ\8`UT6..^PC\H9+GYP:F%,Z^QMOEW^*MC378@]F,4Y->`&:@(KRR;+Z8?"WE:%O_G"+,SR5#.TZ/;9OL\T64\QGF8E\O"[+&3M[B68YI +M/R6*YGM$57,GF.Y:%9=\:D7V1UJJW=+ZL6?V&:HC#^6K63*;26/,>[R)Z$&5 +MC3_41ZWC&.?#5?6EVWC;W@M=M;6 +MWO[4Y8T^PU2V7%;*,IL7,=)EB-K,L_6_^2G[-',,#^1_\>]\M^IH3Z7-VF:Q +M34XUDMD#RWDVU+;,J&'YVV6,63%[KC)<\VL=;-.-O?RA7E4T!(YNU#6^F;>T +MV^T3G"[JOYDE5+B:1,6<6O&O.>/MSYVJ6Q;QI_:J1@T9X3S:^4=;47M%ZN!4 +M1YQ2FU73W(T\4#^AV]4[6TFCH=,/>H)\8+^GS6#!*H[]J>Y3`;Z=_RRW6&-SD=HB +MZE(S]I9Z&>?$>[T0VV&:QD`5I(VQ-"8[>+J%*$RAO)_:()?Q.;R(^'3=N=OW^2OSH;30]4QMYCM +M@3,Y5Y!)N2-,=WV*92(O9'RQ?>9+]6A>@I+-$V:P\'-ZK6[8MM`(%B6<^5VR +MFDO)(I:(&-+4#>DFYSI=YDOE+/.I^9=ZX^RJ5Y9+[*FVT7HCU\(L*[>R_9#V +MW7)7?;>1^LFE)&78>LOGSE\U=_LT^T&V4=35$WB)G!ASC5.\TW,U,Z>&V=*I +MM/-Q8K#SGVR/W6(S6)CS +MKYIIQ.7.91^<)[#/MN\FUVXY)U&+G&>VN^(/UP>6CKE&EH6M=W%RJJCJ9+L9 +M:YTK.']5P;F_V9M9NCJO5VMRM\@MEJ:6TJI&[L_*R:+K[=D5(\OT9^GB`A"[ +MKS*X)OKS5"BS*F*M\RMMN^W7W`:\M5-%K;N]$YO"CLJJ/(`_Y.O43[8E?+?S +M:-[,-M@($V.=3HE>MDGV`F1W[NHRP_;NZQ<^QG6[GF:$Y0Q0LYT6.`V3'VQ" +MWA%WQ$UZ3B5HDW*G&:(L+\)IG/V/4U,)=^_+=69FVT:*C2Y"EL>%INV8>U%I:QE,W.8/VLV0P_%!U +M#2HJ7;0PUMCKB2I.J531GL^LYA1@B9&M;'WE=M'7*5@(VU^FSDUM./])U3-_ +M8E&6)]!'0]1E;;E>QE1R(&4I'[9$+R\ZFSW-W^4,;8#6E-V5E96+^J)=9;6UD;K;A>")IG)YO)3^M365%; +M+?F#GJQS]L2L:E:E8?H2/MD\P03KR9ZIKVH7;1(E^%590IYCNE:+AC%=7:8Y +MO`&+4:%RK_:9-IEV&B).\CER#L7+)-Y:-./N\B80XD?N2Q?9/C947N20QQ.<)JVZK8SFKA^4[+5CDOC-,NWYVX$9^S1XUR*J!]IP+& +M>'51*\F"*$O^S&I0&:VM^$->`'X&ZUMU3?YI]*"7R/LZWD6FLY'TFQS$SFKS +MV`'#SQPDMNDSQ%I[(S.7/^<:7\K&JX;&+='5XJ+NV4JRTI;AHK-QSMPG)FA= +M31?4T#SUE9+Y*U3!5',7/\3&\S=LGS%,;A%61.1R[FOCB^ZL1Y-=G3:WFNMN;$'[+!. +MN\W=S=]D65Y'#V$^1GL:QE^IOYB-GZ;E,K^Z(G8`S2+1:0U94_&WMH>*F"YF +M,%MB$:*5NF'6,`Z+_4ZQY&7;9=B(D.K&@NH!QZ*C+8,UID[E*%>!%]NZAJ*V@_81EEF42>9G>YD[KARBG4C;>E +MR]*?C>1%X##6J/$T1ZNEOLJ5Y,OO\>>RL'S.3=%5#92Q_`?M%HVPW6(=M:]B +MBMIF-I?7V%"GO=S7%F&?R/NXW-+WVVIE&[R;\Q2MD1EC%I"*QPJKMIAR!&U5V;:.ML].4-+$7%25G?B&?%P08K*-R,D;OY +M(6V%[FK?:1NJ[KK<$H$8VX?BQ5$Q@JJJRU*CY=HT?E4YR?KHJT;,A_I0&O4# +M;]]EJX2'64X5!N(U`;?-@#.8(OJS/8:/[*)EPQOLMHV2)_0YEM.RE]%8!HB! +M^@<^QZAM?\Y/.\UGHW,/J!5.#<1GHXJQGS74TBVCY(6XEK9PSX][V3-LCD5^?JKT`5QFRKJ6.=A)>9KPY23S2WYIQ1FUML%A([=0* +M51+LG`Z\,.B,F:(NPR6=YA/-%_(E.RV&B#`S%'%[:BG%3IKUS+]X`?T,G$ZJ +M;"]::.7X,'72;":/`F6<17MCG.TG?LBIBZADO%*EV0XU77B),NHON5\FLL[Z +M%+[5:&@^%S'0IT7-<#5&6\Z"900;3\>(`[NF4@_^CAK)*<#;B4Z]::W![*_% +M:Z=`VFCHLJ96W%(7^-E6/=&Y=EJ-L:75&+#Y +M-+8%O9NA-1!KX22/J^.\M/C`@\"[?_)/%NFTR-;XVR7Q=_X9>L'L9SGCQ(%\ +MNJAO*VF6H$2]MEAE5E2S>2S?S%Q5`56'+1%/Z(+YBK7FF]A(=9A:L(5TE>[3 +M9O:(U:=VK*1ZR*J)+D0[Z$>JE2LMQA%JX?F)]9LH1]FG!V?L0GYP[(?<^]\_77M]BGY70U&SDO="DF,W-VF=,T +MLF'VV.-AKR\_D$_9J;F/F>-]:W`IP)0TW4H49A_44-:3/Z4^]E364$_5H\V?;,55MO,3\:M!]LMP-+GPP5/M +M@TQOUAZXFL&[0;<,5>E:%1Z@G*@+K>;AK*4:0U7IF_`B*ZNM?D?O/Z0.;#)\ +MI:O9FTW6FK,P^5R1.LQ/L`4TC(:P-^P/*J>>T0_,772C<]0!B%H7+.M&4V1U +M^917U,^0IV%3ET4,^Q-8>Y6-ER=HBE9-JV<&V4H)_XG7X#]1BJIA5A,7M(IJ$WLFF?K" +MEO"_A+.2]JTRQW++L@+:\[/JH[M9^E(!>S6/J@$+$G^P2W!&C8VC?+6E#OU@GI#=:(93$1%K'$<_5-&&[S]PTJ==6AA$'];O* +M&P/-8"C+(Z*FZ6L_S^.!1YW-!;*-J`GMNYU-]X +M("KH!T2`=,O]D\UV<@>&/S$&FS=%IN42G3/>&C:VQM*7US'O0EG&B:JB+/MH +MS#9/B.?Z2O7&*$G-H#!OJW+RL-JCO:-S4JG%?+DVD@885"349G.]GQ[/ZD-O']*O:YOD`\EX+)E4A'G!ZWK++?91[(GE +MM(B2\49QU4`[8ME$_7*WF,OU^=H3$6+4L`>RK\ZNHI5]FB'4+:??G&.,I.PJ +M\K5S>Z?*TC6G/'-W>FI99;^7W5&==)GE?-NHEO/&3'7*=*XBE\%S=G..LRQ1 +M.W)_E#VT24[.?(#1$%U:RA*B+:`9MO'24^S0B[#CUGV]0R +M5HE>LRN43)MHD'JD4*=K;>L +ML[W+W4F:4XKENSJ:FV"[I\]U+<-JV8;;._%-3G?TW^RIN05IL^6>GJKNV\N9 +M)717?2QU4:@7=4VTT@O*)&,5;=6\14.5*MLH%QZNU6$#E9,:I3:PTF#>SW^'A@\R=,IJ#:UAW\S:Z.U,? +M`-]Y4>Y$MHZI,DDI]W2T[9.W.0N;($Z2%EP.,G43[Y6 +M3@+1I[JRILS17[+/9C[SH1BMS6`5Y!]R-7O+JO!F_"[U,^-44[Y3F\PNF9NQ +MGB2>">WQ3;43G8%:C>0!8P)[H:W0BD+I50(J=>"EC&19FPW6MVHQY@E[*G5B +M)2V/])]M3K:.VF6G#G39?D=Z:;.U3K34B*)R_!A?2J_5&G67N8A6P%Q7U9NO +MYIG0AFWLF]5DY\-:E)&>NY]]=,K'#,6,_O*;4PFMK;QN3U0[]-I`Z@Y&H)H' +MS$XG3QF@CM(=FL^_\PWR5^G#=XH?J8=Z1PFL.#O-E1IO#*;KEMDLPCQ('40S +MU4X5%4PL8<(HS@I3LO9%3+>E&'/%5&=/FF7,E?7IM7B@AND#P+N +MQ,H?>2.G!FRC;;:LH$W2=U(/HX=:Q$[RN5I%[.J2FLY_888H2//59-F,]HK# +M(D)=,1LP'S#`.':<`M4":8C:HK@<0=7AJKJI6F8:*TH=]-&BE['6N,7?Z:OA +M7NJ:;W@?_HFEHQ=>J%%L*+_*[ZFB0"%=S92=V48XF8LT6E8W5_%PIUY\I.V) +M/4.0I;.(MW^R#V`ET05+[8]S`UE!I[?Z)[.+;::LKFUVJBJBC+"<%RK4Z;'3 +M2M8^FW*]+9[Y7K%U66OM@W0WETC^-=>`EZOJ6DQ?G_MW]F"AN;;7F]C<K8A24\RV,_T6^,MH<+.##Q=_F8'LGFF+Q +MLY25JW,OP,/Y:M_A*=N:#^F^WDK/,JO9EJE*3A;+:.F7\PO4Z1V]KCQ@Z\U6 +M:4&BE7239_A2D9\ZP:WG`DTUG@_LMHUV,G?MLSINQ$'==X"#;R;W:Z':1-E> +MWH%&[<1/4:IZ!560K"ZKR:*^"%#=C3U\@^C!/J+W9YO[^$,V'4KINZFS2FP! +M*D;=4\?9&M&0^D$SM5%?M0(:DVWLGVB:YJ)/)6^SD1Q(IJC-MHAEU,?8 +MQ4KS[W2=GE-^]I&%J"L40KZB/>7**[21_RK)JBS:0SS`>F,^U0KHO)1JES.Y:FN6L]+.[J]9Z6:3GCBGTOR[$P,5A%&.?D(+VOV*NB5!U4Z5@]OUAHCC->J_*Z +MIV6!6FP3YE/+SY:?*=#67=43V\`;8'&;*I.TQBRL^-\'^MH +M;I+7^%4MG-4U3RH7EL1>\'IL/%3I3#C\6K0([OXDY:C-5!-Y'"].`3%SS%)@ +MQ=5LGW'%_$T4M?Q$"PTW652+TB;#B:^42]0U2T--MZ<:(2S9LDP\4GZYG62D +M\U#ML_'%L-$![3Y/->?)3/:%![('U$#58KM81UI)H;P#U56[Z`B?`=SPE#>A +MM&>K^S*9'>!;J1O<8$>VC2714]6/'C)W=HN\61R=4)5HC"C!Z\E$U9!=@G)^ +M;*:I#=`KO0P_N+F6O)E63LZWW^3'M#0V&GKB)]JI13*=79`)JC.OS%>S@NC* +M>JP]&\YO\P[F&N2I*2VFZSR45JK&4.0F&*"VC#0Z4GF+FVXU&]D>J#%.:98( +M>['<#[33DF-IJ$KGGE(_H7]SV36@_CG>5B_$FCON7K+^HH+6DVK:CTA_+5O_ +MIOK;PV5_?9@^0':4?ZMU#(Z3]56+U%^T6(!W92_HYPFZJU;/<#8?\U?@GF)R +MB7F3C])&HJ*]\GCBL;IL=*%5[0@'F\`7J#&\&&(78-[%>EK06_:SS%2OT!.^*EUU5:GL!=S!`'.KR@4/ +M-V&Z+"$]66>-:)$:)]W(U-KR=Z;=&,HKZU/@`+>8@U0U[8VVP^QD?F5^0*F5 +M\K`YCWMKC^F`V4XM$ZM8:ZJG!L(O?J!FL@6UTUJSPV8D>6F,.IFW::[6&7-W +M->KR,=I$5EB!?!:B?%@$BH)B-B([76LLHM0^!5]'OMH,K8',LBWBC70KS07O-66_\^I` +MQ&W\NSBJ2AN?J:9VDD^$IW@D]VJ5>!/E0@/H`JO$8^%7J['&K"D[KE:QF8CD +M.B597=H,%!Y@WA8]Q!2'?D)L>NI/^63S+-3(;MV;MS.>P&&W$#75?76>NH'1 +M*[.QW)VZ,"'G4@GAQE-5`_B%2^(4#5,M53:K@I[]SL:J:JHKJ\L/4J;Z"BZM +MS`=@O7WX3E:8A9G?Z:'X2!?5$UE4ID.Q+Y(MC*'R*)"P%US2<_,IY^")*',5 +M-0,#1=(0M4O-I)O\'FO-W*6_7*W=8D7E$WI,<[@+CZ>#LC9XZ4_-E]KAO^V. +M>F$-Z0<5RB?R\XJI&-X$2!E*BO6DRJH/>RLZ2H.:X,Q;/)$-9B5ENFH.C[B- +MRIK>5(!;^$517U6P3Z`F^CZH&Z^L!:ET&B)KJGQBB_:%[M@.J\':/C%7!H*K.!"1Z) +MZKR;;&'NX4_%46#AK^H^&PBO4DR]0G5U8&\H7GK15?Z#*,K\S(NJ'735-5'0 +MG"7;TV.MNTB0EXPOJK>XHEVG=D9]U5(QAVY +MDKWB=42Z;&*V9'_H'N1/Y=&+?VB?Q195',AU@<_CM]E"N=8TV1ZL>[GY!KQ5 +MA8[QTVJ/>4]48NM8A#H(IY[*=M%&,((/GR5<59PJI`Z+`VP)=$PB.JZB?,[B +M\%,U1Y8HE9T%PA2C?F"T^?*8W(U,%:)HRB4W]ETM,O_B/<'ZFBQJK%*:IUD-ZSX'!Q#.370?I`*Z5-T?_G-K&<6804MNE9`/K&W5:15T3WE +M0&,8&P[,>R)KFQN@$PI!.QCU[G[[=VT-\[IO$;NI=P,K8_K`U8R=[2]@#;- +M^1EK:NMJ-\5,IWXBPC[,:,H:ZT>@E-L:/XOJ8C#O+5>;S40/]/YJN5(&T"(H +MDQVJCUE9+N1/+2_(S7`U.XD6^A$Z)=?*3-+8!W$<#MU?GE,_074W)5,.DM=Y +MMFBC]J`*/[*C?!*_)X]*0ZX4&\5KU'9_)5A==/I(?ET5-0SJHOVN5Y<*U55/ +M;Z85(F<5JHJ3!UO%5K"O=%&>4?>`E8E4SE1JAX@'^Q2`[JP"O_96?N`]A3.K +M+RNI7:R_YD(7S%T4+0ZSTFH-L'J@.4VW:CWE=J,^^6N;Q`=9WXAA/2U=V4#[ +M=;E6\[;XR2'VQ3))"]8Y/&E)F( +M.5H*A9NI9B.VQ;*"IQB?[7VX9NG.)YD7C=&\G_Z47ING91@OIA50U602?R?: +MJPJF$]\D`E4%FL;<>2?JY7BOB?`15O,$*G.<[LF+&&M41WY$S*46YGWE(I(T +MH?)A[NUL"H_GOZB.1A)E:G%::3/7=`'O?M+:L=%F"9!%B?6BBE4SGY$,3U6JZ2B#*M:H8?Q2!F-[EC'AVO3 +MZ)PY6'Y"?RSB7&7+2%:4Z7P/FTK+9;)J2L=$0[V0.F1O*VUBF[Z5#90K[?'J +MOB5._]D\;TQ7<$%:(;9%5I+[V3SQ@1T&NUK`:J?X)'IN')>UM1W:`K4"=5U# +M7ZY5DXV-CW15Z\,FPX6[HA::BW':&_7*O`[V^8LWXN6`W,_-0WRWI2Y;8KMG +M+-':6LKR3?9<(PIGWN>M927S-VC6*<+/?*Q:,R?1F#G)$^"PM>JLW`EU=XWO +MD7^3/R]/#]4.U-Q=^0T*K#@-`C.TA@NH`*6[1>O'VZ*RJ])^]EY,IX/JK*K# +M)O,>ZJOT@]H+`"I78!=X116LTGD]2J"UPHM2[!GJNSY6RR<3H*26BU_U<%;* +M7AV1"=1,5M8HJ7J*O\5)>5."T[1?U%_0`(U%*V&A4\8>U5@PC5@%8R#\8#=> +M@]U6!]4C]D0-1);OBK+(PU4U"2@?HD[*E13`I,@DJUQIAK/3^D9MG/V3K896 +M4C?%:/L]8SHJY;-881ZS_<*LEEWZ2H-R!K#9KIKV5VZ+W&["T^68YFWTS1XB +M,UUSG+V,B._GY4V7WLX_R`FY18QK>JQ3,D>>3CV@U#V`Q%&ON8=?T!.PP6E42-757 +M:F"$F;.USTXKU>S<7^&^H_1P,="H;X]F5YSRB15&&V,)6P.=-ILL]KFRC-;. +M:SL>*!B%>EH>N%A!^-,791`;9.\Z-AP+L?6#51G-U5/\4T;;UDB+]E/J>YZO/!2@\V+;"8+@9H(8YW1Y^\H5FO$ +MKZK24$/%.:J?#94AT"89O(Y*D3_#>:ZG5+D<*^\KPG@1LXB<(PYHR^F;.1C9 +M-"TV7L->3M[A@\1\UA(L_0=I8JYX(J>8GY3COHP;33,[R(;BO=:`K3):JL6" +M>#B0TYVL[!F\WA/X!B_U62NJ#LFB_*NHB36YDYNPB5]5?S!O>2%%!>4N]X/= +MI_/R\AO%L_7DZ-)B9@JK*P+Y.E;-7`C)L;:`B<9GU>6A3'N;7IK4I! +M=RJU&9FO!?S.Y+%&;>G*H[5^HJI\"FXHS'_C_G29]M)5.L5*P8,>9+^ST0'IN$=DH]%,IRFL+Y2/G=Y3#[AG3JYL*A^B"F.V(BR( +ME<$8K<$%+BQ,C>=<),/EKN0E,-X3E2L#U'1M%51"'>.;2MB.L>P`T`\>`SV&1IGI1QD*N&F[5.GS4-J +M!W\,%%QOKVUV<.IG<3>:VUOP)GH&7R1_-!J*JKH_O3=FRMWBC':$SD`;W6-% +M]5:,5'=5C*">>C[OG964Z:ZC&J^^4)F;R;/.K'($:GXM^J,I;\Z=L@8PP3XH5 +MVBU*D'OE>RC'(\*"+#R43U4=?AUN+MV^7JX6J_E]MD)]5NOH`#WF[9B[6J;> +M882+-$UZT!FH82=E8`62YM!BYL0?\D*JANI).WE5*/31$@I5*\HK@@,WL06: +MN[@C2Z#^CFM7H:%>PBU.U:>RUF:PF@U,3*=0.4LFL)':96&5HXT$U0^ZO*6J +M`_P10%^!\=8K.]`\A-]E6?*3VL=J\YN\D/0!+^6(E[RE6B!;R%9BBMX!R,#5 +M64H`PB:3LU1J#YLBSE"F::=^&GA"O:`T.D4':2&RUH[_8MK-WNRC?ABTL%W; +MK%^@G>8+&EV37E#1Z;S012"6@G!]6_$,KG1[,Z^ZVZB*/0S:7YZ +M)'MCO(`7"=96B`C55,ZA7!Y-SV4S=DD+HLOF3:EII\7?RI!/I`^O+!Q\Z'@_ +M4C*OQ?ZD`4#BF>PDFTF>*HX:\&[@L?PRFB]@*\B9C84S'7GQ2H:;8X!B_XM=JN_C!?T6AAB +M-I4P)P)[5^IEV6?I:E9F6;J-_6HP8)1%W\C.&3W,;GRNOI;=4#W5[^#CD?IR +MEE_5@3IN@NN[JB7F1!HFGO`T%6=>Y)/Y*T3A!=S^8,1WLH@Q5YJ_BYJ:G9I! +M';?12@/C4F4K^9'OT_*Q.#-2O>(#^"9*4_/4//C-1'9+KI984\S:_`:3F^U3L;>W%/JLG.\Q6:\RBE%L4[/+97, +ME-SM:I-ECUY?&?9?C-=Z$7A>E6^SHBQ7^C%W:R]:,5- +M\Q=SG/:3MIUJ&TO40V&#XH^0/ZC3;(U>C.S&)>6G]82_XW!])9R[.X\V#F=/ +ME3Y.T@G]O2AK#\7%Q"'61^+$9JE*(5XM7E#.G#9NJ_ +MLFW&*[,!S["\8^FY-ME"KZ__2A6--M#G];52W,58(YDV3CRCO>8,>5,K@#$G +MF+E4GB>*IE01/O2FZ*R-4:%RN@H2+UD%&L8JJ70VF+O0.2C#3G2"Q_)?9(Y: +M3(F\D59$-32=X"KM_+*T\^GRMN>EO[&(C=0VK4M*3W>!C>#-U2S5E3BR& +MF]1&W7:\NBP&@DMFF(JG@@^6T>5F`X:`4 +M.ZB6?#M?!`>9I&+X0S&;78"">4&:[B$NR*FR,Q!J#_:Y2,Z1,UAAL9[?1S=M +M4YM9*9%?M%"CY(^T7OS,7=0&6DLE@*;?Z;TZ2(4<]Z%97U8<<>_#RC*KV*B& +M&U>@I&Y0)UE&;:,,H,%52C&;J:/,2]O.IYGNR"MDDL,\<98X5%V\Q+RXV& +M%]MED>R1_3%TTGWM'2\GX^W9O+<^A[\Q'QN>K)3>07.2'PU=C=%7:\ME?WC_ +M7!&C59''C-OLAC81CN`!E>7>R.0?*A4(5QVQ2&)?T/7.2L@R<*ZI/`,U'`;. +M,J`7YR/C5M%0:\>:RX;&+K79\D1/E'UM/TNIS[%LD]'&,AFBC=&+T'K[!/AZ +M-ZVS>=N8PKYJA[A%1B*VPS%.J-I@`KW%`7%.!9NE&-.:\XGRC!S-AO+K?#EU +M4I54/N$'C9@.A3X:&N`"8O6!;X+VJ:RFJNM70HL4'&K_*YN*$KM(HP+X]U3E-'@3:?^&YV +M15ZG5CP(JC6(:K):+(R.T6IYB573&_%NY@!C&;NB/Q7Y96?C3S78,E4/,`O8 +M\ZGOEL_Z!;.Y;3HULS363\A6]G[*26OKY,Z&YJZT7]3K.M_FK7/_M(W5BKNX +M\XGVY;;BXE>G#6*TV22W/-OO-,J2S_PIUY,N.$5J%\UJMGOLDJ6M"#"OVG-) +M65IK)65#>VORT%UU.'2C#=43N[6>ZJYI!])K<,/55&%VF)]B< +MI"ZC&QDO!.WCIL91;7:#A4`CMT8^%%W@DZJZ(W7!*#^5+'J"9;*:1;A;1?M,OJ5_,$JHMOZJ5I_FR"Y@P4"QC>^0I$VY7 +MN\\WR1%F/GIOB>&')+,O8.G:/C#;"D/20I[+'D"GK:<>;`MKR3S9%#CE'7`B +M)WD3WE*NE,O8>NAD+]I(5%Q`=::-CD$O%9&\XK&E/,RGRQ_EBL +M,*J9+FR>5D^\5&.,:NBMTBQ8GB'.5G!OU-01.)^&]!8JT8O5!1I]X8MX"GSQ +M2S:0;T>%2'JN%8&?/JG>"!]PY'&S@_H%"!D`YS*(FO%9[`FM5C?4=S:;>?)I +MK+7\45X2TT4&S3<>`/'/LL]T76UBD^@YU.=O;#V[0IW80(J%PIO""!Y7P%69@;KF^C&M)V<,)3)6515@6^WT*SS'GJ+)18 +M-]452%%1K.+WJ*[Y4#46+;1*Y"E=X;^NPG7]`<^B\_/,II:@CI/81^2S#_96 +M62V@.8BN&\V@]#%U1O2L-Z:_/A[(*:B6?S(U+E4"5^T(D+ +MV"Y11>9`:Y5FIVD[GIM"KVD^*N4!.ZH.RUF4I7,>:EXW#K"CVD715Q:6=5D9 +MOD?_,C=$=MD/%\ +MDKC#/$T7%8=CZ2J4FK#B[&_L[(*Z0B64'3I\&_(1+;_QD>(#FRHSY3*:H'7F +M!>1>Y<(,EDPI=)WNX+KQ](DVLX5`FEFTFQU%/%M3&W:)-Z*]\@-[@SAO8DDT +MG_V,,^[3)JK'UO&7:B*5H6A*XQ79=V2K$._!+M`AU-=]RE&]66.@F(^:*?V! +M:T.%CYEM[.(=]+%LO7E,+D&MEV,ZG5$EZ8#X,:\&.M`1L-X358F%L35\".NL +M?I>1"E)\LG+$IS8C7D6-6=71!N]%HQH*6".UW.A_$YZB!4Q75HN!:H\;D8 +M;:I<+9@HRP;*@>H+5N'-5J&*-X/]9M$GM4$Q$0A?\:-:S#/$#NHE7YJ#^'(M +MC>>3E8USS,E27.PWZ]FWLX863S%=5C8+J47BFU8-O-]&9O`A<*O55)!DJ(YR +ME*K.J\)R@JBM-65=S1GJ$4,%L57`?3_FHGG3*:.'.J@UU@K(3S*$7K/3<)$O +MU6562WUEP7PX[5?#U3R^B=V%$]MBWF-[M._@A(9R.[42'G!^;\Q@VG,8E7YB]9&752'6)ER61W +MT9GU$-5Z&/,$DQC!BNZ.5'7,-[R$\&%^:ATPM3&?0S^JXFPA#X126R+C66'= +ME14W'D#+NHI>O(FL8%YFO^K/:8A]$PVS,+'-;&Z49`NU,2(+FL(&!UB3):./8G^8AE<+]Q4(XHV\TA!6$]R@E;TH/^#(; +MMTL)%MBL'1(73-/81E9]F/:76=%T@?X[(_S,&G(M[\'?L3_,4+B;X?P0_6@. +M)F^M+6\AHZ%['_-:HCCYFL=H*="N`6*\!#.$4:Y:I::!2;Z#Q9+-[=(0KGPG +MU\PC\A2/%_GY(+7(_$K;Q6#VAUJD)K%7HC]<50_P7#Y^&TYTLAG#ANN5A<7\ +MRUP*Q!@KQL&G[N/MM))JC1D''W$7-5C4?"7_Y&>U2:R_6=F\*[IJFUAK:(^^ +MK(KF+AI*F]&ZWOII=$0^FBJ^$AMS%M`UQ5T'Y7;0S675O596RI\C.-R.J^# +M:O,S@^5JFJL7$HW-<+!>14MA5M+L8'YE![14)J%D7'D]UI4UI@FJ(YAS-734 +M/E1P!#B]FMJBQK'NHAO=E+%42)1@MRA6[:.R-!5*8*UZ**NRDMID-EG])#NJ +M5:(S=EU)N_6+;0: +M%5&;E=&RD;GGY@*:HO\F-DIGLPY5U`:++>9->2SO[NTDU-IT5HD/XHV4MTRF +M]]IO%"@;,Q=HT(+@OO:C6`C[&QZNJCBJ_20]S`QU%WHX%([11:YE=W57OM68+OONKUE@OQB[9-QA)6KCEN]IF +M+Z1(Q(N!;+!L`G?F(V+85_E>*KK)W\#KE%0"?S=6WZ&;'_!XLLIE<%=%Q"DV +M3\TV-Y.W2.*;Z9.Y#RPQ![EV?+:H"_M#KTN1\A'<<4C+UR_&IU-1"\LAM>*H<'J#JR/6\IXE4_X-%^5AN*YAQU`T=;U1AU +MFA45B6RLN57>Y.6UDVRHN+"\8*QE +M3;5=HA?XY6\ZHLT4[\G#ODAVU'MIM=1W(-P\_IN8218SE0;`I3^6#^`*FO"G +MXE?6W?AJEA:9EJ:497@:/R*WO_,:1EGCI*BDE\4:[ML#6$^GFOR5\<&HR=KH +M+[4XZG]2,?L&Z8&Z6$K+C4KF/F'3 +MA]%<\Z[9A#ONIC:71^5ZL/8.*@`O4A",_()F<%\@^W(>JA6BZV81^43$BN.T +M"+U[E'J);^#?\?(H5,!5=@X*\YEII[>B/WNF3J*3SO%%8+IGM(@7HQ`H_.^< +MJW'R&+SQ=)8,9UR8P;/2.3D0.CR)[4%?..Y$>LDS+(J%\+5`F@IP&J_$>AH$ +MC&K`C_"=J-<'K"^5)X +M\;^HK/H._C\*-5R;?.D'J*!SM!4,>8;/4HW5.]Z/76+MP8?G^58P9BQTS$%J +M(GX4]:F141^J[K-(IF_F;'.D&*L]9./AY#>(HOH2>.$N:J*V1AM.)^R;)/*O +ME6>_2LV\S(/$7KJJ)JK[-(T78ONH'];U$BB\&/->I7+TGCNQP4"X_32%MX"# +M;J*\V35M,&TTOU,A[L1KT'P%+0U5YJF^T"GH^GD4"@POII9A)V%0P4-58?#^ +M>I;.:J#[N[%2[#`=A/-ZR5ZPD5""E4E!]S+:*2ZAVA_(!&838\%-^=02M@IJ +MNS\5(R^:P`;S<(I6/ZEU+$N48;?-57*(5DOL4!W-->J=>,]/J$WF%U:?UT*L +MTJ'@;M%%7%F/WZ1-4L+-[E1#@1L_,PE-=EW9,6\2L_%0*(EUR&<7]AT:X;)R +MO`?P9WCE]:HEG&\TW'(+61L[">&AT)L7Y$[U"_CI+F98@+I;PRI`P4Q`%/)3 +M(U8#?#F&K10\:(6^J)<#MRU17KJ5!?#/[0,?4`BAG +M.R_`OE(O*)X2&,<76MS3O`7-=EM;P;K+9D#Q+R)95)+QYD5Z*J)X*:!3$_J1 +M#6;!;)PC6ZP*-$$!NJBZJWM\C*A"KN9W-4X,UA:1O\V0Z;JOMDC9C6'R;_%- +MKZD*&R552_T<'-X>^RA95I]K<5+C[=7E([V^%BI/&8*JZMY:%57!'JJ:ZF6U +M-&IF3U)-^28QF[TB;@Y53<5;[1X<[&WU$9B[!9JULW3C$]%KIGPB>R%[6?"3 +MUV4F'RY^I4;F7ZPD'-]ZX-E"Y@HFGLVZLVW0DQW89*C!)'7>?`S)%(B^M2LI$^,1NW`2>#^8-P&.EY!"X]C'\#26I*M+&]HL*_!?'>Y;Y+Z(K +M[93=V*_L#_BEAW29SV5G98XZ"YR7O)`<"QV9Q'M3AJJG^C-#_$'=9"96\9EM +MX4OEWZH_UQ#+-CC^JVJ`U3=C'M`>H7PI'-`">#4X0/C2,6P<5ML5ZW*&Z[JM +M_D)%+F3UE3=9^'9@05FXAEOL`A1HD@JBG?P'=DTFJW;@L(_`A"OH^BW\,3Q: +M)-S$=.#E1NHG6\BG6A$Q6MG-3 +M,HNQ&'TA=Y(%@;S[17^Q2@TW=U)5'J@-I2-&?2!E<3U#;39"7JSJIQN +M#F+='>^4E/[F+/5$KPJ'VL5LR_[4BK/29@9P)YYWPH[/LBED4@XIU.TN^HW? +M`UL6H(K(F<9:*H'O9O._H+>+0YV_%IYD(%[3>^TF-M)/\._@NE3_"T&]10.9J. +M<3O6TE#]SKEX2]6A>T;PT[P)532OTD'M$,LRGYJU^&HM&^.V-N_SN\`^9997 +M/?D"+9RZF;XJA2V#8OC;_`75/1=[M,E9\KGR$]71.='0FA:6K#WFU\V><`;N +M6DGV00V4(:P-E)XO./]WM0DH?Q4H^@@]ZJFEBW'F2OLLODAOP;V1NW[,3_^! +MUY(KC=>L-%SP==7'?*'*B6=B-?4PWE,;<9@742/5&C6.=Q")=,A\J/JQ):(7 +M6P!$BE-WV5ON0CO)0ZUAU]AT,,<#3,/V8ES:<.9K*&K,GS%55H4`6P;X`B;:1QCOQGBQ)EI&]>&E1 +M6'26YC3<1=>F, +MG*'V\7`^`"R[C;7DWU4$'-T8NI_WSM:E]!9>?R9?K'Y7'=0KKO'[4#/EP9X_ +M\5="`^LW@[(/X2WY?=1345K)1_(:*D[ZLV3^D-U0"Z!D/7D@KTB+X>^'P0W\ +M2:/E)=HMQB%^^>#"#](B%4.=6#KOAR-3U"LH^:-J`SS\(M$&(S20AQF)9O`# +M+:"=&O.*P)]P^E&+Y"GRHRQ*'G!U(['VM?"Z7<18>FDJE2,S`N/YO*0J@5:>I7(?@>F:2*LN%@M1`ZHOK3#/:5]60'5%%X +MTS]%&3J@7J&C'O&+ZI5,9(Q79W?)$R-G0#$T5978"ESW7)T$HN6P`ZR@W(\J +M_IOW8.G(<2GES?,)/ZCA+'6<$GDX^QW5\T;9>1";#'T8AU7%8/VSX-I;L9Y: +M6_;&])8[^5S@]7TY!-_]Q*7O5'.S)46+;V*M3#?JLTOB"G^I@HS7JJ'V3%NJ#/MS +M&JF_2XT.4S6ICM@X7Z$GE%]F!`>K(H:IZHA%K%* +MRD_T7!ALH?D4WDABGV[2"[ZI-*_!SL+_C:4Y_#GX9SP\4UM:J2:B9HJP`]0+ +M.C!:=$3]?Y4%J9SCKH"*4EN8U?'J,;AJ(S4"2R^G;SR7O(%P(>3%AT._I"AW +M<7HX;[T#1V&EQ\2EY1!_DI^*86Y`O7W1&]-$7=5QO81A8%-WB8!E$NSZ8T +M.4?N%IK66,TS9U`K_D9455UE3586O5)8[5'@07JH-14U3=.\Q8+@9-'0,\&H'S\5I#:Q*ZB[J;*H6B':\&QXWBW0)(NX+[*AV!1&K`RP +M?1KUH60VE*QT#`YC#'FB`K_PY>J@W$D7V=_L`RM%%G48GO$B5>0U@`@;9`_, +M7)#W5)5D%B(UADU"#D8S3^C+,ZPP=:.MO`?5DWM9!1'#@\U@5,$0N/PL\SZJ +M+E,H.5 +M5?UE$U:!?\<>2=U"UFZQAC2:[B#>NY'A3(I4O8'?#=0Z^8"7!L.7E1=4:^8F +MYO*1LIGLSZS\-W1C-I1Y)ED8ZD+=4Y=983Z)ZJ*G-K/Z[`L50FW^S,JP^C2% +M?J,#=`(H/86%L0=43Y6CA]P?*OE:WN\>F`O'\$$]H97L)%_).INIZE<>R>=2 +M&_)2-\"6;WF@_``T6L4^`PV*P\G\H78Q:&O$>"U4=!_Z0?1E5:0;6"Y>_$A% +MH"*@DL'8`"T:_Q$`E/1&%V23Y379D'<4X5-QA(-A]_@//(&^9 +M"(1OQR?2'-41>;DMJM-V7+,`SF`=^%+(,)6".=W81YDL?V6[^%TV62U2@\G* +M75!M1>5>-9Y[BP#J8NZ43\5\D4/EC,_4362RF5!K?7A;8&(66.L@ZXP>;`$U +M[WC%5E>=U4S$?C%YRH;HZ''ET;2IUH>N$R/%.5%%F +MT'7X/A-,=84MY(.@E2JA]MZ*<\R0#LYYS=_@N7TTEZH"9V))R8U`^Q6L.!3\ +M9U4#O-"?A6&VTFP=:F$T<"2!-V/%Y0EXCF%PJ>UH)072!73I5"748'X,^SFH +M4C'666HE#U!9OE945X/-;-H,W3.'N9BMY6HM6!.JM7$;53B/MV,>JHX\!]UY +MER:H4:C=L]#@/<#N4_@GEH,\Y&/'X4WFRSLJB/\DVC-F_B7!9B(&T:PG1]!< +MX<;#U1/9BJJ**L#Y=N9V2M2*\P:RJJI'CT59Q'6A^57=$"VPEKMF">JCS125 +MS`UF:?9>V\$WFR?-#BQ=8]"/H>![3]X-WCD6/?6*PGEY*,_5R)`';PWO':X> +MLOZH`!^P9B7X\?NLLQJHTNDA&*$%..V8FLE>0)M/4F.D*Y47AB@KGYAW*4"< +MX5N5D&W@7Z-Y*-U1S4EC<>R[VJ+\X,'>H"\39`7E(X[#&X48L]4.\5[X`6?S +MTV-^"-%]`B]H809[3S?A.5?P2;P6[54W5&%P7P8O!UZIP,;"Z25!+>]#+8VC +M&-G8C&2']4:4;*Z4;>#G +M?H=*>J6Z0KU75\5E,SHANO%Z4*+N5$](7D*=EF[4A*_D-UE_N=/,96O062_4 +M-,E9*:Z@3=:I&%:650&&KY))U$,DL-:RDKPBXOD&Q*PY',9'*/F'E$M6N!,K +MO\P'R"MR#M-Y*O2)FWQ)Q7@Y>+C?@+HOZ3ZT_&;UD^1@4G?^$W-2RX#%S44` +M=/!A2=8W-U`C+5Q443/-B^HGN.Q[&*F+:LNKBC_8S])?/H&F:,QV +M`.]GJ9RAC+5#7Q7*Q0 +MA55Y*-UM(H2&R'/0@-.!M"M50Y7-W=E78'@4I4#;0!*H\X/@4#G_.?E:L2N90.Z24.23 +MZ"5W0@=[TFYXS&9L)/O.ED`-326[:,^[J2A342-14Q2&`TE5M7@?K2?4H6G> +M9H9>%EJDB=P(3B[(WZ@"<%\+Q1`^2\4!D4.U2ORTC);+D)U`L5Z=E;W47=&5 +M_P4\^9M*B-I\)9Z;1=WX<-Z-CLAX['0_AR-1@U5Q"A5C@0OKI#.M%\`/=5OV +M@$Z?R#-8>SG7/,;&:\1[FRGF)N:B-68WT.E]Z!.0*0J.H0.;BB@_47YR(P]& +MWCK`"^[@.X$VB#B?Q?;!G=2`FUX$';1`7F&"5X2B^*PJ8"T'X;0*R2:4`Y4Y +M3DGU$2K@%7-!+`OP\KR1"I(W66GAB7EVP@$RYNGX["84PDC@8B"JI378JR(O +MP0JK."I+R93)]@&'=['6J,_R\AJ9HANP,%,=90LPJ8_A!S@EX[0W4I`-7NT$BCR)6/$?W5[^99 +M.@.M7HRU:@(S,9T\JQANBI)>RPR&#!\H'J2&.X/_L. +MA]235L-77%#?625H\`94FS5EM\'MLV@T:F4PO56YX)/)./<.L.,>W/.?*E5- +M8RYPOUFJ-Y"C*^_-WJO^IITWX1>Q@Y*H\BY`QE50]X4I@P:`SY(P?E.ZCCTT +M(E\^A#+1/<-X`1M>3'E(]^#:]RY-]Q!5RBC0RP=O-Z& +M?@3_/4==[X<23Z8VO!34L3=J(!MU4HX64QEU&XXT"?PY@56A[>3)>M)>)DBI +MF93)B[%?58S\Q)AHRN:IB=*/-=1T.B$+0]Z +M0.#>8/5OJC`[`,1W1^U-0HZ>LIEJIEH$W3P46G$\.*LG&PU=O1?<<0,:F3=#\%]A;RLA[KT`,/TW;Y5AUF9\6L]5!PU"[M';0Y(.-HFJFUE2;J;[: +MLV2&^*C75B/-.NIW9A-;T$L[S0PV7NSG^>06.-#C\*J)<)U-H&$.HTN(UK)' +MK+2Z#:8XP=JS,*H-W3P$3F`>G-AP]@1X-$B=QQ6]Q&`>+9_*N2R*]V,75#VU +MCE@K?I"WQZ`@050(;B_"=965Y@Z6"46JH2?.<9?A#HY:?@G\$QJ^`' +M3O+*P-%/E(-.?$SS*0M:AZ,?K?`W=2@)_!BBKBD=&&"@*AXZ%"\YW@48KUZ@ +MFA:10P.^8A^9Q)[6H"[^9)*^J2IJ*'O#;]-;^5ZUQ/P=J1$ZK@]SXC?IE%JC +MTE$9!Z#6%\CGZ/D*;+P:FO<;CQJAJSM`.2U@P]%C(:A*=\>G?^D83Z.Y8!>- +M#K`E;#U<]V3$*I8\X."GLF?<#E<_0BW@/40$796:/,$;B.-LM'PK'U`D#^3[ +M5#HB5AON-K^J(`V@2AP0-!CXVX0MP7?OY7-XCC%\)3S^:RK!*_-!M$C>1)S\ +M^7?LPD-:C7(T`O5"=0JAP;[?C->O0>&1@,QED+1:'C[TVL/_W& +M2I,'N4&9NJ%;QE!EX-\GN,RS-!\ZJ2YMAAYHJ+NH-C?>,P^7WF'%E5")EUE)2H%W*>'X]#5;2`^A"'8"/5R` +M"=_)SI*@`,>H^_CZ%7,[WI%V'MR7S*9#!S=&7J[Q/MAE*34;$1K.*JG.;-EO"I=!E,<`VZZ0L'? +MI#1ZCXH;1$>04R=:K`Q*0(\GX.]J<$)N5!Z1>H_ZMQ.G,=#EE>@0\'$IJP'F +MV$D;:36\Z=_DA?.<63+7L.-#U`NJYGI6E;^P/:8YW#%(+5'HLV+48M8$7_1F:-0;LL$FM<.`7W$(?=0A<4Y`U +MQKS#U#;UD3W@=5@I^8W:L-OPJ?[842FXA?>.UV@0DVA@[45\?Q-[?0G>70A_ +ML17550O/!=`BG'>93):?AM$<>DO],$M=[/XCE<5NUR"7AU%S+=E95DHM4W;D +M?#@JMY$J3XH_ADJ*4(R5ACK8H5;(P]`QQ?EV%>%XK9Z?@@YM(9>K7?P=GZ:. +MRD@Z!22_0@/@7_=`2>="ZWY52_A7T8LZF+/5&]&8[Z$?9!O$/Y4'JCW`PN5P +MQ\VTL2+U0H70`W.FDOLAT&@VW61ZHONI7(K'U5WA/"=132#,&E2PI*O0QLOQ9R&B7$HM9D6Y!5@6!33T +MAG89D_=>M/?HW#GP>E8@Z$(Y[[#C[0`,<=8+5 +M#:-VZ,([-('6(_\/T$%>R/0/V-,>U%)^M4.]XAOX(;4*"#!<5!$+U35S@SK- +M/XD5E&`V4^%\M7!#W*JH[LR-9?$>*D4&DJ>HP`/4$GD%&GL?7TWMY%K4T3Z6 +M@WK8IIJS-G"8^Y4/8K6?W>#+@;++U"WN)%QI%IS9,A[.#U(!.9"<'>\C4)-E +M7]HIBN**.+6"9G`.=3D0=17"=T*A=U6W4/=?66,P1U7TYBYJIMX!XTOE]>D, +M%0,D[XJ*=P5"=2,K)5(B7&,D5:5>X/[FZ)YH1* +M@)KQ%NP*%$\J=-Q[.@`D*4`B5R#+%"@57_D'+Z2&_"L]<"_ST$HYM>MYO'.3PWK=H +MFM+155G0(E54'!\`5Y&*:DT#]MX!KD0[WG\!SS4:VL85.GX@KGBOWL`3-L;N +M9Y$WA'P\RP0^H2ZC)X(8QVA^`\!77L`P6;#TS6! +MEBT`Y5T1.+H!N]L)U65`[11E]?EJ]E%FR"PVF%]E<7#7U]D2/A?J^AMJZCA4 +M[#AXQ`7@R\JLM;H'U;]=_,R^R-?R(QWA#WD7-53N9.WY-+9'-5#3605>"Z,< +M!9:40B].4N_42,QQ`@JS`_;_#!K3JG:!_1;P<*QV,SII&[32?'B2`$0%54P- +MH*6N0A'/I<70,\O5.E82NJ(2JI\#AZL@$UO5<7B,?3A:$STPAPEV`/W['3SC +MSKH#SSI1)^BC-?1:'5>7X3(&L4=0DQ(13&4/E+=,!)J_@JMM`XTQ$+C_'AJC +M),:O#@6_ADU57Z$E9R.KF\!C^1'K5>#^1V#2YFPLU&!+U-0+-AS[[*YZJC@X +M]`:(S"T@@0?O!Q=8%IIQ$R\/1HVE>N#!E\CE0N!P&2@+@?XZBDK\",?6#E4" +MEN.^U)J$6+V`DF^9EW!C>^3?.*^HJ,D$]8N%GQT-+ +M/V%1+`M\\8G5PERZ*@KV]<':7:@/#4,?M8%F^4VEL!KPK%G0.L6@\*8"PX^! +M$;;S(N@S3_BRRZCKL?006-$YLS'V:5H) +M7W\.LY6!-]P,SI;(1'7H4G?6'RIR?]X=>\?O`(^$+UE.3]%;K^'!'[)UO`076%0*^EL0A6 +M4GF3,_\)ZLM?;8$&:,+;JG7HSZGHN(_$U1)ZS;R@9QR_B68U=GX&2+("ZKD_ +M=%`Z^&HML*X,JG$H-*A5=::5T-'3J0CX>RX+`;;5Q#[V`O\K@`760ZNTS'O5 +MN1[KS7]!@PZ!$WX$F#%8=#]:(`=9XY[BM?`%Y5A$X=RHH#MQ+`R!'`PT;T`YL$ +MY;X8U6=GA^$(UL/Q#P"_&6"M@:C6.G#*-3M=%$6KCN)&@$Q +MDL&"6X`^K8$T5J!9.';ASNZJ9ZH>Q6/>="JK2B/ZCO?M_(8:.8CN#<8NBL$G +M^W$G.@*'-(!]YQ65!)Z/YL5XD`J7?[/"_!CPM(^\3J]Y(KL&A0KT0?UT5`>! +M>G4YIYV8*S+/H:5"RTP'3X@:SU@[``7*0<$ +M;(,><(&KW@RN-ICC\]J)%")^YM759KC/BKR'XQ/K0".#?<#.+5"R!5E+5/\I +MX-_/0)$^4#XI6$-K.!]7<,!M\,(RG+T$BK$-(G8;_'$;NR^`CCP%C=L?F7K& +M=O%^9%%-Z3WO1H[/93A^?]D;N*\?T7,^.'M_GLN:RHHZ^@D=/PQQB\)N/P/' +MVCMT-CK-T1E]L9]D*HMSJP'SKT.?)J`OVR/JA]0F**VO&*L#&,D)'70.6J\+ +M6X],NJG?P7T&JOJKN@CU=IS:P"EY@`'+JAW@T^K`@>_HUCNHQ9;`20-(^`IY +M>:5>(8*7X!SO4VWDXCCJY!7B^@E\5119]J6]&+\UCM:$;AD+;)E!A<#]66P! +MLMX*T4M%E*M@E96A_BN`_];#JQV`6[A/BZ&F'R+^)M3C*\1Q.M"M#**]"EA< +M&7[['/1+07AE5SC'W['30LAA5^P^%I[R*7`H&2-LQZB5H,G\4:\+X;F&4R"3 +M8.]RB/UK9'H\\*4`5IG,)M$WJ*)N3%9#VRG0P'6P%[/``=G4F;L-?\F/TZ%,1SQWU;1"$_6'H>^'JM.@T= +M`WA:CZIRCJK9KU:H&RR"MZ6#JC>U`+\%0\4LAGK5P#@U55NZ"+?D\.4# +MZ3Z?B$Y<`+:J"F1S9T/1^].!J$68!W531VDSLR%VE>$G,A`]@3AL +M!#?F`D4.8I?MP0>5T5,^^+D-$+XK.ODF:GP::J\U]EL>BF@%"U$7U1>X>P=K +M6QV?SH+2J8:J_P@NV@%]2L"-TY@O0%V!LU_'GH#%YT%M08FC(W*A1_NS.-1V +M.IBM(=!G$>7@FMVH3WF +MJO(I]8("RP?/5X.2^1CHL[OH("?V&1WHC#X7<#$C@1]7T".[P)"AR/Y&@;E!3\UCGHBD'7[C!:*5#OT>`;?=$E<[7H4\#>_XB-W- +M4ZX'H.4]@3(%L'9'%3N1'?WAA0JK"ZVQ%S'*!-\4A9NI#D;Y`RS@C+.Z`J_. +MJ1M4'GBT`/K`#=IB$3I@"=9YG$*A\+[0"'42'L;*-@++O:%)7*!8\F.\4+@" +M3S8%&O<^\"<)^]E,WEC;#53(O#Q]U9>:`=76HM)*41?T]3?X7\HQZ&`E\B`7.=`!G3@)G+**WB.YCZ,(9U``5:T4_>D`_*;B1AZC_2""\ +M8@XOYP_^3$2W'`.N%T7GFT`5QQW;KZP^_.AMK/49OOL"'AS('+NKBV<89KN` +MG80@7BF8:2KB_3/FF`(\+(J9MB)K-QUHB4KQ!\Y>A(+*`:<%HO=RD/=H=$0( +M%,@0].1;K#$1W;D5U>GXC3@_`"E_=7P*$2@:@ZJZ@!S58QO9-HS>!)%O"%38 +MKW:A2OL#@V>AOD+9#O8!'C@"2/4$.YF"O.QG>[#3VNB^M]S"&BIO[&DC+P5= +MYH-NG8087<7\=<%-TQ&A-EC!>RCQ(V"E+FPF^.H`W%%M8/$VY.D'^(ZB4%I0 +M?%#T^<$/<-#(3BE$A>4JP%)X)@((NBFI?A*I(!A;NQ-?YJ!E/.(XOV.<>(%HY +M]1?..H?9%L+A9K,=O"743QPBN!Y'T]17\!E8&#-$XVK'74H'ZVY"C/>S7[&> +M(5`6^Q%#=]1Z-O3\1C!5'Z#P?%S5&*A["*Q:!"O?AS@40YX5SBT,=;R,7G+@ +M,0U`I=]$E5<#"WK`E=0%(E2&LLL/[$_#2.OI(**?2-M1CSG(Z$;HIX:HQ4#4 +MWU3,YKC_402*(`Z5V0$1:8A*/(6X'0'Z%4>])B-VD4#+HHA4"%C0T2<.+_X0 +M&%<%'=\/+L`/?-X)KF$!XMX`*-L4T8A'UNJA,])9434/.F@C5-8FM0,LMPIU +M6AU[.87S')@P!^LZ@^XN@Y4[7GOQ0@67R5NS+_JH,^IL*JV$:FV/:$0[>A77 +M[8%O<_SNP:)@B-+0]NG`AE7HJII@P,Z\%I1;*)SE5/:9DJ!$R[+:\-,EP3UC +MT,L5$'7H2]2:'1EH"1W5#`@U%BOIAPKHBU7$X]A5H$E2WNAXU.NZ+H?4'MQ6-U\ +M_&<%UG:':BJ"[O1!3!VO+V1@/:G(S$;4;\&\W`1"I_1%#%I!X6>BWH[@:RJN +MFP(DKXU56&EE7D8<7J\'&'@DCBU$WF\"(2Y@%4?`IUT13<>K`^LI%R-E(II3 +M4.^.9YTI'LZN)Z[(#RT7AZ[VAW+:#T<[&!DO!'QJ"667B+XX@LR>8WL7\4(%X&+FY"?;ZBDZWA^$#!W,JZIB\CDX-RMF#\'%>7X +M)(?#R=Y!A+H!%]J@_HZ!55/P9S%0H"G6.@/CP*DB[M"0R,-#=.)FH*H`$O=" +ME,,P>T6L.#]6]!YU>2C/!7F@6QW*925&NHHS'>_GG@NF<<'SQ1&QY0XF1QP< +M64IQW'W`J)F(=S+P^2:BMQZL5AI1"T0-=G=H-\0I!#EI@%JM`131U +M*JJW+OC5"6JZ-CRMP0XX/).ZASJ8`GVAD>/W'EL1B^JH^N%`\`0XM.UL#?9< +M'MKC6]ZK@/V`R'>0)\B%$;T05&P2(@*V`8XI +M1*81JL@->]N*D1(Q3RG'J\FHG448-P85T08\508J=3L4QG+LNC_RU05Q<+S2 +M]@TCST$_".QE.]3-;N2^-/AI(^9E&/T0QC\"E"V;]UI1,G"K.+(\`/&N#1X] +M!<52%\_-QC7M$.U36&MM9#X!=?$0USQ$KA=C3UV1E7)8;P3PI1-9T.-_HELL +M-`==T@8KL*+*CJ#F?:`T;P"GKL%3S`*+.:H;GA7Q'H":'PU$^0UJ:RW47U=4 +M1B_@=2DPRP5H"B]U49@:Q^,70M],`O'TX!4A?-4YGOP8&E'-M`M +M#3'*?CA@7T1W*J+7#6SNBGI^B[TY[B`[5$*+/-3MB^=&(R>.W\7P#?TS%W_> +M`@D+(E8[\[`G";$Z`A?R&N-7>2/=!%L9CM.2)V`2.L +M1G9R\KKR$)2[CO$"'/]J!WKG#J+M>(WV9YP7@,@^1B84ZF8GNN<0JL21X6-` +M)B]HCS\P8P%HI99L';R+^6F'.?EB'"5WJ>,7O&!BG+-8=D/=5H=&V0^4.(2YOP'YMJ(KHH$= +M11V?"L'5IU!5I1#5VEC#%*QK`.KC*>JS).+R`Q1;&'Q&)%@D$34N4'.+@0$Y +MR-MES#0`?3<%*H"P1@5%7`O,Z87UM, +M5A!>]@4BY=`%0]0OZ.NSV/]<7#LHCZL3L9L1>+8UD,@?7)H,#>U)5BB(MVPF +M:LH#6%`R;]?>>$5AE/N(^W;PCN/UU7",7`;QG`IT*HGXG\A[Y;4A<.`J8CP#1]U0_Z/!,B8< +M5":ZN@OZT0U\-`/K"T"%[R%3W877\8%B?:X.PJG,9B=I)YZ;D/=IKK7HRY6( +M=4&,%X!92P)OUZ.RDC'K*<1Z)S+S"5FY@#E.(/YEL&8WU'`EY&\K:MRATI\C +M^GN!FF[8T53\]Q#8_C.ZKBQZ1ML+/XO->"GR)"3\GQ.8O-Z`@3 +M,QU#ESGZ/!G7EL0YLU"CC3'_4JA&@5IOQNI,K/<3<&TE^K]T +M'DZ=0QY-[+H',#,&S+02M1'/QK.CM!B:(![^;#)B5ID;\,;N0/[W +MP*UAJ)=K3$>]<+!,,M1+.O(\GCE>+6\!#^@X;S?J=RV^JX]ZZ)&7LZMYGK,& +M`SJ5PS#?/"V7FL>]% +M=&,NSFZ"/FJ-<1^BBQWN'OXN+YH7$(DSB'`2,NU`B3NHH_S0#'.A'!>R$-1B +M+*ZXCXK.14.X$QBF,[(V` +M%]>A_U^"9Q.('.BL][%_ICJ)W=>6[^&&99 +MCUP^1!S.H(93L>IDK/,ICES%>O[AE5?BJPNN6.J(#S)Z"I$]@_6FH@+6YVF- +M0[CV8E[L'@*G-CE>D<)UVW'%$2"_"[Z+Q\K+`'$V`\5?8ORG0-89V+?C=SMX +MHSJ*YKD(AYH8B]TY(U[C<2P0M5\*RN(<,CD?6%T7.1J!Z+;![!,PIX,9:^3A +ME3WO-;T>COL5J+3EZ.:=J"F%>68`XQ[FJ7V'#LZ/_LM"'R9@QEQ$=S5V=QWC +MW73F7,6Q3(P9G>=G*Z#>5B*W)X#FK\$`UQ')@XC1<_07ZBI/ +MV4[!&5>QF]>HCP1@IBOVOSMO9H?2/(C(7L8QAX8[@)P]Q[J.X)ISP`43X\X" +MYQ;&BAROUBQ$S=7`^0O1WVD8?S=&3\.?C0[ED<>0&5A?*,Z]C%TY7'LLXE0! +MNUB,Q;[/PMYIV/.?+GW2T=`:1H +MC'BM1>YW8JX:B.]\K#$C3Y.C$C":0Q^L179R_Z$)L&:'J]@/9&,X=P8Y[F'G +MQ]7>R+0K8KT^CY\K84]#P)[N8,Q%>:H\`DIRJ7J&REJ`'6V` +M-BW![EXX)O#U(7(PUW$W-8_3IZ!R:N.[6*PG$QG+1'^-1L<[$'YJWJM1M?'= +M-%3J?J"Y>][KXDMQ9G-4F4-QWV$]D:NU4&:.U;3&^KIAQ,:(Q0%@@^-5$89] +M+<49-[&:AXCQ_+QZ2,0J%B,^A8&76W&FXU]Z<-3^#.36CBM>D^/?TUN*2KF# +M&ON&9^9#VY3"N(?AJ0=!:B7QPSS<=9:7D([,"@MQCA(,:YBK-?XMJK +MB,(I1/:ZX]V^^/LRXOD8?]]$W$_A^\NXYBG.?(OY')Q2&\_-Q_<90(F;#HV* +M_3;.N]]Z'YESW,/X$:%(7 +MK.Q$WIX6HVJSL/N#6/'#O#5EH4?78K8DN$^&E4[`&"4QRU;L[P)0P/%O]TP# +M)CP$0NFXWC$S%"_BL#GO=QJE8#['W=.-6&\-[&\"SC#!'QEYKRXZ7LEPW"^< +MAO@6Q:P.Y,]"7V_'L/(.:+HQXAR(:#L;=G*?2WR)#Y["NG=AW0;#)E#Q%U#3O +M58]PG.G(S44\&XIG'>]=&@*4+X[<.7[CQ4-DY7K>JP^9>9KD&$:[BM5D(FJ. +M5QP^X=F]F#L#HRUU]+/C-TDA5J^QCE.(ZU[$]RG.!?X@8U=QQ7;L-P5[2QS7S\^X-.3!V/ICA9ZS4&ZM0B*2#30\"RQQ.V[&C1'152<1P2EY-M<%( +MB\CQ;P;U1Q5;D<5,9%8'I_5#%SE>.>[A\*YL(%8\`-ET:(+MN.(B!CV":#_%.4FHQ420-6A'QUUCG',&1RXB9JGXVW$_92^.O,1Y +M!]$#J7GOU#^&];S&W]O!FJYXSK%6!YNEX>AR7)F)8WNQ@IMYKSPF8DU9>1B1 +MBJC>Q-HDC'(3,=N*>;XAOAW81Z +MV`GO7!CYF(KZ+8J:GHM1,O/NC#N4XR?PHD,MG$*M"!^YX[X/-`'6=C_/ +M,2;BZ^.\R%[.8]['>=6?G/=^J*MYN'T0<35QOJ,W3Z">4[$&1PXR<(X#=2_D +M;[$\@-W9<=P3G/,6*'F+] +M"]%%=;&*J7GW4PKF\<*IO'O@5_/8?[D#1?',\[R[7>N15957(0Y5E(-5'<"N +M3F!\$^/OS%N_HW[/.?[E*^P]U?'[>!QUCOC>QTHW8S69^.D<9G.H*H5=AN:I +MST^X>C5&MV,FQWMPSV'6%'QW`G\<.L9Q_>4\W9Z5QV?;,9)CEQ#W+<1\Q$3\=R5/G1W#T<=XU%[!7Q`)SG,,.]D*' +M%\Q3<[NA/6KEO8-G/Q"]),8-`2Y50;WL1_3.(=*.SWRM=;A4S'('U^S$+C+S +MWA?MZ/Q_<-AK]/*=O-T^S'NW]59\GY3'#U/QO<.C/$17;T06?\8JO%%S99"W +MK:CT).B)-$1W*;"\-*Z/I0-Y+GAW7DYST;%'\O#`O*_GU___IKPP:-&K"LU:MJX8:.&31NS!HT:-FS0 +ME%5H\)^\U__I(R(L?$QHA0HLU&H-_X_.^[\[_O_21[VP8!]\J<`8=WRLCC-6 +MOOT_OO[CL6[=NOIUK]M^Q^/+=[-ZO_S@Q7*EZ]4I\6^?W9&K]H5 +M_OO1*C4;>1[>OWO[MFT[=_R/(8ZTJ5/QOYU1N4'2R7^Z>OV&/W?L.W;6?Y3W +M4/?V]?_[&JHW['9Z_]9_NG;3WF/]6]>O7*%2U:K5JM>J4Z]1RU9MW=H/?G1F +M_YYM?V[`"9MW'+I@;52G6MZE56O6;>-Y]NC!O7OPV+O_P-^'CAP[=O+BG?Y= +MVC2H6ZURI4I5JM5MW"OC\KY=V_[XY>&=VO3H%Z=VG7JU6_4II.'->76]KD +MB>/'CITX<^E!FG>7MBT:UJ]7KWZ3%FT]`Z^=.7'H[[\/_GWLY)F;R2^L_OT] +M/;IWZ]JQ7=LV;=JT=>O6RSOCP;E3QP\?PMK.7+H5.+1;IW8XXN;6N;M[W\$C +M`Z/24MX\2DJ\=O7"A8N7KEQ-?N$]V+-3^W9MV[IUZ.P^T#OM6>*-Z]>N7KMQ +M*^G!DS=OTBC*?]3P@7T=4W3ITMW=<[C_FP=WKEVY=/G*]5M);S+\AP[NZ^G1 +MNW?OOOV'#AX\?.C_H3+\K\?_H<>_@__AXWPG^-;S]O/_SYCC/\;_9HT:-VKV +M+_&_8=/FS9K]%_[_[W@,S\OTR'S>U@D3K<&^P>&UVXX=XQWH'^H0`/_B64B` +M@&#_L'_^G+X0'6X/_YDW7'3)SHF.N? +M'_0/LHX=$^3GZQOT;Y\-LEH#__FS$WR#(\+^S1-U)X9:_4/'3/BW1\)C@GS_ +MQ9-6GX@@WW]Q7IAO>/B_WGK8OXZ/HXS"(R;^RZ=B_M5(8R/"P__5QO\1P[H^ +MOM[6T'_^_#\D5][N_`*"?!V1#<6!?([,3*S]STZL]8^GZ@6/F>#;%O'XMV?\ +MMUG_<=Z_S=^_\_P_K>G?'/T?8?LWA_[9HO_-L7]:15W?Z/#0,?_NG/_.T?\^ +MY[]WPO^8^5^4L6/"`KPKY*TJ[^=._Q3*2-_0,)1@?Z^K1MD`\%%!GP?['W),!15=EV"(00$BJLAD5\28QVEDYW +M.@M),%3(1D(60G=8$ATGC_3KY-DK_5X'XHR_@HYL,I8LB1#`K\@JD0F+E#!. +M%0@,RX##(DC&<4HM$71T?M7H7\;_Z_OO\KK?WND.I&'JVQ&[^]QSSSWGW'/O +M.??<>U^#>#B]J`+,E0UPU,1X*-*B0\AI[33H?=*>!F!+O;0'XG$20=;E4*Q; +M'FRAK*37SNH$&N0+S="V*K@1(H!7.6DEL(EB5"J8*09*K%*/*Y569UB7NY"? +M%`I1J0Y"TXN0'DKX"0/CF:^J_AJ8)UGHT05S`@DP5O6!F9A<9=`",;BC5>M8Y&W\1E[C)QRPQY( +MYV924`L#,CEV>`!JQNN$[/E`:.)HZ'!3>F14.THW'$Y&4;#!D@[\,\$Z" +MOR15^J4=I!(_`]*'U`V`/J1N"$"_D0(C>MG@6C`@"2#]0!(LI%UVBAU4"_E9 +MX"\C>8EA!OA+(G0ZCXL%(YPH,*BV9J(L%III&TQS6?G9J+D9AB5!-S?'0U'. +M0;<'6X3MP1:#:Z_$[@VV-;/+3EM08X2G=4EA;KX>_:=$&F(&;\D2P@;#`(2# +M-F%%C@V*RD"$0[!=.6G$MBKI$(Q60CK?H,^!_ZF2#L5");0!X?R`M$,R1SEQ +M1%^5.&=[?*BF]S(>/?(7>L;3HK=02VC2J4?3+O).C+YTH1G]HYT,JS-DSLC, +M0G68-M)#(40]A\@Y#J&'"A0<#<;Y8;^L4(`<,><0?:&5T!T.QN4QRVBVI4WG +M<`'>=$9=MLCYF5$A@0H)+C8CC$_H9F4K])O3I=`A=2X%S`X0*\E1&_W08'GW +MP%0UW<("[BVTE09.4\2]B2LF_,6$EK18"',;;653AT@"?LU0"[6V>+%P%<%9 +MMIEB&VC63OGCXZ&U5#X*5PC-%0T4O#'"1;ODNW^]KFS(W!(3VRD7MLN#-52@ +M:K5&:<\;13WO\E@HCZBSD4*7D!X"+Q2(>4(,46BFT)VZLI*6NJ(L`KP[ZHJ, +M\-U55Y0-W^FZHASX[JTKRH7O3%U1'GRWU!7-@.^>NJ)\^&ZO*RI0,(E2NXNA +M,HAYJ(#)`+9'6J@%;NY#F6N9)GNE%FEFZQ91!5+2XG;>W((&K)Y;2# +M?I92YM;%<=O"<>OEN'5PW%HX;FF.6SO'+<-Q"[A6FCX'SV8&@20=G&X9CENO +MA%NHVV!T"GGR\>=C?)"*9"2*M$L4Z0U6@4'Q=%=:LTNT%I2V[I&:[!(UA::> +M\.@%\)`7K#[NL1I4NF*`-H.2FI9([1%(':*THV1(X#IWG,'0Q?P!,H>0<4UVKO\(<*@M0G#D0XV7`@DJT2 +MB*C&4:)XA/2R+IW%XW)+,[`XMXZ#%%E<@E%D8)C1A2&_0HG+@F@II8V%Z6`9 +M%+5=']7S2KY4RL*YNDSQ7H?SM#;'\\/WR/\*`FZET0JX>"`R!Z!X[Z&?[P-@# +MM0V+.&$'-LB@O(I@`N?-#?5">$)5OCWY1"`*%D-PG-RJ@5<.UH=$9N2.`RI0 +M:4&*E<1-]&TTT"6P?+%[T^&ECL\;**T-O4+]AI;D=@,ZXB1W:9O+Q5!$O;`@ +M@#.6IT?`+&+CJPJR(F7R`M^>B)-2P*_CP<'NUN!TQ1)2420N:U]"#DXNRDDN +ML?,G-Q1WE41ZH!FU"O[]GF#E6@:WX!A622J\BB)J0#%182?;78.3#L=0T"O7 +M2C:H<6NXG%!"P`1@[ZI7AZ4!*D-K4Z\,2P-4QJPUD(Q-T+5RUI40>-;5JR/6 +MU2M7`K<9&@>$%@9)!*RHM$,(X<%S-``QW#*PD1J!^<@Y4T+@=:->'7&B7IDW +MJA+7\L!&)440&Y5R=;]1*5>^=].*T^5QP%D7Q:S",;@`#,`Z5$A4"0M#&GH# +M;54'OWVLDYT;X^,ZSLN$987*M:5WD+0SI)6=%`A)2?G)"_XDIB31C&,A&5A.4B'X,`:W_PUL +MC`4Z!8C^DY\"V!+2"5H0`$1+#D%=_RI"6%=P.M\'%$0O`J+XZ`@/P$=&Q.1] +MQ^5],&&HR4-!Q"GXAH)684/XW+`.6`P*1O@2OR9YD&3E@\^=^`[8^X,C?.+$ +M!W9[:)>'9CO`..&'0Q"A(1];\4&5J$'^7*ZDZ=E^^)"./SD?>E_THG9.6%'J +M=M(#>&$E\0P'Y>9@"50<*XE0RSF@BD6W`8W`] +M)UXV*L3Q0OM584_/"R!FM-(/#U.GRSGR=[]@(N36^8NH)24>US(&5%4HA>]F +M+/9]LQ"_C^:=L[P+\'RF8"$X&27?.U!/6X6KCQ#+>K_2[I5^`P4?(G)^'G2Y +M!H._-N>1L3\6JT;4+*]<0INE-Q(,U9)Z%RP8#7?)PR`Y\,44=]%TK81$@*:# +MGXBDMQ,4KRVXX)%?1OE6`N(R7+NV"MQAE'L\:V":(D2\-QRB?^8B):FR$#!< +MBH*-^>?E!W=RE0168I7A1#I1R14.-,M*LN_AT+.8?7ZV#7CUZ?X'0\*$L##H +MEZ9_^3(^VUE)Q^)P6]R?<^KFU983@PR'A38D#JCX!'_@ +MR$IM=W+`++A_)@R05Y=&XHA&#:2!HL@PV:.*!+QARF.P>OGNR%"&9_#4B\SN\M\/;QZP-*UE$>@YKPZKU0:6##B"(640ZEA."N)A2B),7UK9D +M&(@-H1X6$F986.]5VM)'J^=P35=*#-_[$/%>>(DA'>'"<2L?VX*TA&1ECZJ% +M?S@+V/UI(-]-LSK@IG'.3ID!XC$"'4-A""T#C"+UWLTLA!9\0(:5JE)1AQVF +M6G54.@`%%>D0%:ED]W<`\M%$Z*YU`:@;_C'HY_BG$7@7KE0Y*<8M<,6&HCH+ +MPYT0SI@%[I0_O,'#<'5N7R70XH$_+Q0.@^(ETSM)EFX7GB80'(629?IQ\E`Q +MNS]H)\TQ(,*L(47R5Y=5A[:6F_(W8_B(2QU[HE91821"'_9:ETU?T9=@_>B%-TCF!XE569A"XKL#,5X9-N-Q`6_-]*.RV4!T2* +M+1)')UY/Z'+RQ3Q*%DLY^`2'>ZDFXOBGT:N8#0B4YWBP#3Z4+(78DH5F+[90U!3G:+1E +MR!8SB%J++8/(S,Q,5;BW(#"1\-BT@/>@4@]A""G`PIEH@W,`T_'J$%DSE:?BEG8:NE!'$[RQF'F"`$A+BK +M(SK6*#$66$34XZ)`&26%VV5A,2L!ZTJS!2Z';#`J6]2^IVQ*3YFJWTT<]-P" +MV13C00AP2:[E$NNC&(L(6=EV."Q""SX03A=+."G*(DQ6<6>"++0K"&HR/%_U +MH.K**WJ"J.=1J5863+TR0@L%9@CT32:VAV7D"O=!^=&606`BL,02RC:!?WJ5 +M#"9\G%$1=! +MJQD_?_=!TK)8I_XSX&*U+N;`A!G_Y$"8=.OC9JCVZEF/5[I,`&1I`IXM%F,R +M=DE^VPP8M%-$C:N5!J(3YA;X6$S90U(<4-N5#O`"<351F,II6WRF4+!S(_!3 +M0ZMA%7>G&`NH7M[6<7>W\>\/H1LW"(QO4PJ@\AO3O@?PRY?7_"%_>1EWP%"I +M0'Y4DU>K^(GL@LTSX9/5>;#TD>H"0@I/9)>5RA_H/I0=R>DQA)NW@HNR2K=M +MN>Y!^8W@#HD([%=Z/VA()>]0OK7D/UD4U-/Z)7>=%+<9`UW2QOMC/&4%K2BV +M'^1SC$1U\(2"/")^+%?Q73U!3/;$-+6[W<)'"JEC\8\4DLTKOB:4'\1TOW]5 +MY9_GI?+[/R@+Q>CO31L&@\$X(S=7[???T&?)[__DY&1IB-Q[TWS@U__SW_\) +MW/^"6P)WT4;H_3\C-\_P4_^'XQ5T_R//JO*[%`.T$?#WOXR&O*RL',GO/^:" +M+S_]_E,GQ$]Z9%HB\F):?H4Z9/3Y^9H<_.S<_/3TPKFOU$WFSCC/Q<2"1B5$Q,W.BXR6/&3,Y] +M=/JCN2&_?GQ?,S9ZV.)((C(B23-L;$3DV(@?3VNF:#21$5`,_RMB6*1F^(@H +M4)80`OIY[O/O^O0+8[7 +MGC3,MJ58HK^^7K`XMG"L<=J4P[V_VWRI]OQKN$KIY]X_9#Q67:C +M^6,Z?\G4:>LFEQH2*^:LG1H_TA);V7+(-N6#6TLG'#R3L,YX[MSQ32\EK'W2 +MKMOZ^)O+=D-T^S(Y)H+IPR]/1?7W3#U)JP\>C/K +MS$.QZZGK5[JZ#*4Y8\ZMG9^S/E#9 +MK]DP>G7DBIBFW`^.)CA>6;-VT]\+.[L>9U9?/!T?\W1>5,.8$>7C' +MEAOI$RW9J=TQW7E;QEVZ79T>L\7N:"ZVU6WX/3LO*N+HJ?SXDWW,P2>W14^B +M$E\PMOUWY!.VC"[+]1X9V8 +M>S:GO:$R-T[[O7SS\$SJU_^VTV@TWOXH[VOW&2U'> +MXK/&3Z9]_X>*!>P\X[&,G^5.*,O0C][0\,ZP,1LB#2AD1 +MM7^^OLNF8X9W;^HK7GCQTFM-"S)Z^L;=')9QQQSQYY0Q>TW=.L_QU3W62^FK +MIAYG6W=F=RZ\^*O643N_3NOXN*A$ITD\N2,KXOJE1M?VS[_0=A[;UF;+N3U3 +M]\?L5<=&%V_[+FK%Q>B+\=_.6O-&K?U`:K/VW:::R.C2'1/V;#G0<>[9]6MW +M5\3>Z9CVMWV='^4W[WQK2\)CZWO92X>^W-(^B5SQFB/CO<49>VK'O=SY_NJ3 +MN_=>6#,W=FOECGB-P=IQ)>_.K?<:_["1,:XLF?*!,>FK`W,[;TPM2)DV8E?C +M%4SC]B)D>W_D3-QVQ3:U=4O.7A)V1GT[NGU7\ +M]VN/G3A8EV3JGW+YT(%WO^W>FAMVW1QLK-541!S53(^ZL +MLK:_>"NNCUA7;6X_=ZUY7$WNFO%O+>B,.C6R].+M73$WG&T7KG;':;W-79_? +M6O#.N>8[B=V+1^]K731FY<2S56O/)V[-:G073G1M._#1C/2JG:8I)F;$KH[> +MSSZ__HC&N^/AQJ1C9GV%9MN5@EM[V?CFSUKG=V\Z9SY3ZK7T?OCE^Z\2WH]2 +M8E-'QO:L/)%0.'7_JWN*C+N+'3W62:MRCQ377=OW9;)M_*/'%G@*#A^R.[.O +MQI96]^P[\>&PY$EM[9Z#\V]\M_#"M;@7TDG=@FMWM/UMB\AQ/S3IJI?../^/ +MOWH_+A@W)>%RRMZHHZN>NO+F-]YM7W=E,S-R8DK&+3WPS,V7)J:N[SL\Y7'+ +MP;.+?]?VKT_\F5_8W__P8BCE2/&GOPIB96ZZF'W`\\7WT]"_>^PN]46LMN?QB,K/BH92Z +M204;ZTN;UM#:RC^6'RJX.[NP0D6 +M%O?@[N[!'8(%#_GR/.^][_^>;\]NGYGNJE]5RW953\WTK%:[O"^JA^-0*G<4 +M_593J'+'[5U''4"3#?D@#%EG'3%P:.,N-8#0E)\=7(PK!M/'*NNGO:_G1A*0 +ML54(FT.PE"19P-31PPR;S*L2834J",O#]P +MGZ`M&Z^TG9W4;TZ0&C]*^$`X`R/\WHJI4APE8E)`IOUV5E7.0)5<9YQ[X=S% +M+=ASXI!['GLND;2\\/#AH+1PIO5DZO`#^Y0<:\ZC2%L2!%4K,PP6MFF6/9=![K(6":.&BJQCV`X%7X;S"6U"EJ7AY3@E[H,E +M/[*@KQ\YB#&SLK@CDIO$5)&F#7NM@-^H9)DOY>35U7-.CY2G9P_XEKSE4HZ' +M4VK$@N/J:.U8Z>_*!;^>E)@5N%V'MT^`Q+,:Z3JNA0+\8X357MMO3V;::^2% +MCH%@&4:^::7;)4;2&[[5]@_T9+$A##E"?Q*P-(:N)S)T$(W$7^ +M//-GL>^_%C-D]_,HRU>#I*=93_)H%P^/8_II`PB/SJ?\+P.GC/=XFQBJ?0]S +M$FIY-.S4=M9\=*U3R4K4[%2R]WSS/T!S$G+.GMZ%B\@^E[+R_^4MV6Q0X=N- +MH:P%MYY$Y_)^Y5'_6LG>K;>1GY'#K"H&!9TTQ;=^]:ONMGIBK[>R,4+O0@5H`;7H, +MPI>1?#2RZ=)27640MTBA#X3V:E("#H,&95DP-SOX_+ANXSEU@.$;LTY/PO2\ +M4U2IC\W7,HNED[B>LF@,\TI'PARY!@]N;JRJAI@6I'ZR6T>AE,(\:PX!F38. +MBAM9CWG^B[3KM2*M&+9Q59HR2^TN=8[Y+$KKPJ,FWQ3A<@%YMD$Q2K7 +M-W.;2>U2A/M6[9ZHR=\P?9WB3;IXOB,5'BFEL#C4+$\["#/[T+-5!Q\Q'50T +M#,4)<*B+?*BT*?OPV?<6W(.\\<`H-\=)7[:BO)SA8:#4D&VTEJ2=R*?SC5PO +M`&2F60DC[SNV&?69?3;XFS[;&^J$'+>GNWA,LDX62L&@N17X/P:N]`,?QWK +MZ_\1MGF8]ZH9G!5G.V=KTOT[Y4$3J6E)ZE^OG=H6K& +M-SXZG6\JOE:WR+*?BU5"B.S,%U#DI#LGEDU-L4RP+D\?:2Q6/OM!! +M\[5T9G/LTW/8E)*9=<,)?W5^TV;9^'44@VEWEN"I5IJMSJ[6W(_X#GV=8I-.`^TF1%S8VWW4JRRZCB>G\*X +M!CEG.CQH&F^:O(O4*%0'(+9?"]F,2%EK:B?S'94.!IU,!K=7S8Q3I$-X +M)[X:A"B:F2VH>8Y5,6"*"#_ZN=02+QDJB/#,R#@(T#\A)I6T')E)&\(.H8[N +MU=N?^P0\S;G/T1@,LQ%KU>_-X-JKE$J?B$@I\$Y85H(4U#W&YA72LO"/6EBZ +M@N;%BY+'S9L[ASU4[!)9RN1;$HH8;V:SA`^PE..3QQ3EOL)SA@LZ=`"@!RJ> +M7EG90PZ3I/1,LBE&3V'W5?F#*7C'\_XA7RN%/MKJ]G>\;V.9L6K3_KIV.^PK +MN)G2+=`_N$F'>E9&/+\`E=R&(ZYQB>FPBL^7!"`/PO7CH+2IOA58F)4=M8C5Z:QT5 +M3U#B2QH-@,F%.E`"8*TQB:U`T2#=QL)IS*"<,2ICE9LM,5R9S\SGP:&@5`3K +M3=ZRN7&0U2(3N+Y0I'I9@&^GFP;Z5<\L3&_2#K.UK$!JK\18KW2!LV&BC-Y; +M*Q*RA#B%:LM5)E1:=%=9OV'^7=Q^ +M2<1O:*W/6Y;UOL1BHUU5FVUD@I0@3AO2JSIK!N+7]6&CN^-T_3H*6WOW50%C>J/3CF)4VU1ALUD/VO+B +M0U_BTUO9B`S[<.Y*.+84-;5XY70CWN3Y7AT82^REG]L_XQ@+W99M3W.(L:OK +MDQ=DX9T^SE'@"XTW*9.TR*CD<<++6)/ +ME5:N\Z)4B#)B$ +M7ZT27STFF`U;G-%B:X5_B96,I.="-8`0R&;DSKQ^=P;D[=:C0&G.7M&4HLUJ3A$-.'PUUPSM6 +M^UHLGG50K48`(,-$_(R74$0J:9F-YVFKSZ*#%E)NF5?S3M*6FT0.C[Y(D(7" +M794]9:",73@$?(0)M;I&6#")U.(!<4="?F_6,C,R.EE$'R5*;F4&RR. +M?[\"PY(=^%/BFTAU9=N,OU3<.SY0[#(_P*977UI3KL.J81JKM-#A8C'=H'ZU +MFEMYDD=Q_\;.#C,KK;K7$-M2-*?3+J^?_6,]#V)CK\L$J).=,43+[#TLN2%$ +MO;1L=9YW#`+'EWZ-8$"O1'*J5LRY"P?SGN?=2ER>=1*%%2H1G=71CX>F[-BW)4K"26`P'S@W?B5 +MID`WI[)-,"1I1%)#6E2,W!V>&/[$*;BH'N6(83[VN0ALWL\[J"0@SZ&S-)4B +M*V>[)6?\(W]NS9'7C4:,A-UL=C2H?IM.PX,]R[#QQN-]'#D"LQ04@?@$CCN< +M#`Z?\:R%0TT8FX!/RND#)RPV'VN'@GFN;99D]&?/,4(?T?E4[BOTWBSL]Y.B +MM@Q9)>>",&@Q29'F/O@>"#QZ0&N?("E-3B>G>+^TWEK)"3YV/%VSF;.]QNZH +MM.A!DN)FRI**\#ALH=4/1L!@'EVAC'2`XEY\W02S.HC_2(!\5A#1DF4H5]/,(AO#DTJFLJ.0QR3>!> +M,]YYQ\2>"=(4#^X#V31B;4K%B^B9U, +MKQ$11NWBG"*F#-8E9H.)5GYX;0P1E0[>=WI<6N'C$2;Y[)'EJKPCI"5!0>N836BEF4XZV..IE=A6*X<&XK8Z?Y6BR4<=0PK]:M&(:863`$?0:E9F^7Q\)9;`<6711R6R#@ILD7` +MO2LLS=G]YCSGV7'9FG5I7B5>(\-6EHW09MNAL:#5:G[B==ZSOPM&'9RZZQ6N +M%;3SL'4`Q>>+E&$SR09IAYX.OO@),K/I>C*'"HQ0K_YU@S708)#OK+4H:UM#[KTJ:Y[PR,(QU#9YZF__C;R3)7O> +MEX7@E=^$_M7M>GC@U0BKYY5EZ%49"TW6RK3?.U#P.]Y>_UG/TQ6[>R#9U6U8 +M#(?*]W@3P4<0QY[_(TW&5/F>T>&=:T;&CKZO:3QQE;KA-3L/J%.T6N.6@B]5 +MX]6>+RRZ<0G[#TS<]6[4D-AQM02];;4$N@_I/,CRFHW7)45LU[LF,(:U_NX[ +MN4<-1^Q6Z5!:QG2PZ(EL.BB0+V8R@3R=UH3*A&@XRKO*&?5J]$.XZ.H4X[=M +M_6K'6A-\";QE6_B: +M^@_;X=$S46R>H?1-!.GA>I#:1FE"@;)XU#6HP1<)V/ZC7GVI^2$.C,M7[$6? +MC/WJ&J[7C!@R#LHH[VU?7!9D_7O7F'D9GT$;!86B*,>]*AS?XPSA6=QX7KU? +M$4/V.I]$R?/:BAKHF]#P78NB`:'UBY'M_8'T(W5WK&[JQFA<.[M-TVA:@.8 +MAN%!C/)>WP"-@PDE%0MFE/PGI.(\QX0$A!WW'"%;+.X]\K.N1I-5_\W3A@T) +M==4,:R'_LU_%[>.4\7L9]#N:@U9U#6=\M<+VE)E1!-$W>A&COCO39:Q>J;J0 +MRKYE?:/2G,V3(F_?)1N[B/*E['E*F>CI\BR;&IM?A3*%M]M1OCZ#&%K^MK\* +M:9OH]%@+*.'OH=Y$I(S5K(,G-=S7OO$VA30T^=>^&<*L4$CR$8LJ"M4!%L6Z +M39$?VX>PGBS+>:D]U0293\H<:4,.!<0&9S8G[1RVN+\AM@F"72AQL3+?00;5 +M_F(X/OZUP*'L83J]S2+B,<;B68.MR)K9X_UJ35G4+C2E +MP_BY>"5R&:Y4Y>Q)^S\PHCLHR'=NFN*HBU*F>J*TX=%]T@;Z,6.$;#N4C6H2 +M!L1W>A;1@J1B,P,@=AG70@NJZOLTF69*')D6[QH5V0/-7DA#$EI\65I8@IYP +MWZQ^!O%W>-EH9NA(/JTGEIXH&T$W*^2XID#8IEK>*Q_0.P9=PCGI&+2Z]C%: +M6MV7IR=0FRK)L2=/U<..EV^.875&3_$LM2D290N7-?1*WKA8';9@/25/C9YFTBQZVF07Y1680*T".#2EXDXN@ +M7DDC17XR6VLLZD#U7#?&GX!6OV]2S_'?6/"Y&:OI$YS)S4'L'DMIPT(J7;M3 +M2G11'$WFEEN^%@U!.38*!4?R0IT>F_+)X4FR#JQ^IWR%]B-8. +M01;"F0.''.S!VNK@-?V[!L-9F;#L1<@.P$*''F+A[QW@\-.^OSL%_.H#$BZ&YV#4F@G"WK#,GVC<11YD7TOP?UV_.J+S#;[DG_%D\7'H:5^*A!:=4(6%;=(T?!: +MPE=7=MX.]6+QL)X8Q7\(_ODQ$8H719$4>FH\)UT$%+FP\[FR(\TMVZ[CS)3B +MJ)JZ;@B5^$2I-*C)!K\K,O)Z!:TH%#Y=MU5E/%V66Q#]2N3\?.I +M]-/XL@.BB%`Y$)'NXCOHC^^RA)8CO1[*14$OK[F@GZ1W +MG%N?8;-6&T%@_<':DL,RF8F&57.]76D?:`VO?P`&JW6+O*`K6&YNM0:*%46Y +M7X(T1;Q(>D<)U@DEICB(FF*/`]4J;A$4`ZV;&?UWG!9L&1WYPEW`?7[2+9NE-9%2SEK+7FQX/G@7 +ME\[78J?BJLR.>IE&RJW!/LV0D5D.S(6C+T*^`K4\V@MBZ\(E1*;^Z0Y6A1@_'W9+M;ALI3$21PS +M3U^^'H;3$\=+J%@BRMY6_/JDV$C596A8B\ +M'Q!D+\#/L0VMS@[B)AQ.*)?_C,FO(JI)ANQT)R#B!Y[V**4?KK-^%";*-/67 +MX/:\+!4%$37U$7 +MSW@9C\FHP/;6_5@OHTM/>H/?HSB&U/" +M$CD-5=W4M2I=.0U)#CEK6LUR$GI1;AZM-NECXR\:CPM/%V9N`(_BB@. +M!',$RD3\4I*W_ZGO%"5^/^M]XC)5M(:Z[TFO&%GY09X>^S=HP5MI$POB=_-A +MO>+%TKH+@U#V(ASD!VB])`^_H]^8+QH5+78P<;"6CFA;LF"-.!UB,!G)T+\4 +M"?_U8K$KDAK^T6)J5R?TP2]>BE[\@E#R>^RILHVP\9V2UXC;JH!/^/B\U^R\ +M8FSN[>9]SLM?C^=./H;?6\'>85P%H)_:X<&ZQ#\M'U(U$GI2F0R5L4LM^Q$3 +M\EMLOU4M;[?"D$HOG]"H639'5)/@#PRM=\Z$!(]'75LEPU6D(XDP"QG>NA;K +M$1K^5:LE^[%4HA?@KRTW6_8K:Y%!',R +M?W#/[3CU7&I0E%;BJ5ZA79TE_"6?6LG/!'?SW-3]0L1UX=/=3%C:&&/A4%UX +MN%A&Y_"ID(VRU&#<4?&389ZN-2SCB>[TL7&D32!38%&+6JX]6OSQWXGU('\O +M.1Y>4SK.LOP/3!;-<<[L@`QT?B6E&6H)_@-S-TEN`=7??H"LE"BFJUUP%^DH +M16E:Q"H%K:,]TQ::DH-6$J*!`PGQ?-RQCCB^>J1P/2KSUTL+YJ,M-+5=)&B_/LRO@J&!,W +M[$0^:WZ/!@[^A6E!+C[^2$\X'NRWS%WBHF\[?E?*&,)_KG8/O]O[%=%G+F-0@N87HK.&2UKC>TL#6X$EU+[ZH +M1A)^-"E]H_O?7.Q6N[45M1@RPN%:%*MAK)F$I_X$8^I0JG)W5`I8$VE%`N_B_+'M(CB +MTGBY\-#Z50C&WLPO.KVI^/7!''25C+-!BN(H-#3+#ESRK^+N!KYVJR>=^O5; +MTWE8C(:T^O[5PB(.*1<@@]VO1,TXD&1"\I9.43%\24*W.2KT3NZ'CD5+[P2! +MT/O934ALOL.]&`YKA]')WU6*[$7FY<>/A&(4PVR`RKO5CX5H,62L]5?Y*\X6 +MY]#CAI7OZ#5#]Q8#2X.V!C1#+**YZ%VK'$MEK'+L%97>=G4QP+)&Z?2/3GTO/4C.E +M$CU6?^4\9^S.E00#7."N[&X\+TC@K]])RZHI)26-?77PZVKXEPW4/$'ZP%O8 +M7_2CXU]GG(+0).UIPEU?02:!2R,BZU0\KB?O7W4-Z3'&'+<:AQ>P9OWSR +MP-`0[1+Q8-DXR1G3P4UK`7$72D98AZI-?$[A^.E=#>>DQ5\3KLVH#\'7,Z>X +MNFUC%R*.(+86VSKRYZ[:;+J"0VB\6K*%S6)4$43%[HF +MR!1K%B9(S\X?!>4?6XC45YPZQO0MSD?I*)OOX/-Y9Y!FQHP5!X];TXJI_UUW +ML:37IPO.3-_Z@+IPMNO'H=PCBYY4RXL):#IH9"(QDXXQ]%/V+,@11VF6U6RX +MAA;7OH1ITI+ +M(O.D+RW$6,T@_:]/ZN!L\:N:NZZ9A&*]D6V4MBY?B'(-![*3US_WN`0=R5AJ +M!OSB9^'^9/0A&'6XL`-OFE9>.V?FKQ>*28@KEN#?C;K4]FLD<6KGLJZ[Y/36 +MI[KF;N;.30R?^XXM4,"3'1EDVY4@@]&:DJ`YZL1?T]B'( +M/8:U8S*CP\=W6"`3*U<':A:5"^9QE7>0G@9`(R(Z>MFIY\YVC>=V=^..B +M>#2RP>0]K?7IGP2UPL[V$^F/740%CJN^A`1QNZ89.T9+SE@H.[N_[AZ'X7PA +M0QUC?L#"+O4"=/<-$SV&ECV!&F0?%:BH_MU6VB21;%Q&UW#^8MT8_Y:Q#^.RLTCH/.;#5[U1V +M_)`1>>VC[PWR?_Q`2@+9#22^Z>0H0/7QZ>*^KB'D_TBH'$<(\B5T)M\A!($[ +MB2*O8P;3]5?917$&,VKUN[R`77&/0E1QHJS=)I1G@U0(!V<^,>N][*)H.5?C +M3Y#A*"R.GE_#N7^;@+[_:A@-2WE/]43_0(S[383UUZX1I.CV;)#2N;_G57.O +MY_&*W;77MW371&#OSB1F,AWDNRP(ZMRBBJ9/!WWJ]>4@BK*M?WW8`W4NI[E_ +M<_B.^R9A<.[_R7>A[M4^CUAYDY$T5 +M_BH9##8M-P\F%^UZ2%@Y/0]/\WRL? +M<._>2;R;*PDH_45@:GCBJ1MP5O-1N+([L_Y,-P#[[\&OI#OD^Y4N+C!2P6*.A/9-A@H7EYP2KQ%24O*(A>^O+A^+4SZS]40H4>R/R]:H +M&)4!#$UFYXUMVL79%>,:<#"*!<=%&I$79**5B)8R7#?_'G +M.B-'AX95J\2JQ.+\5H&180^6 +M7M8_Z-,*722S1=5+2$[ +M\:81A69VRWV:TS)*`6S1$@('5>E\%`8`R`JCH]';#L/S#):Q6:YE/TG]KM'! +M2<`0HIRDJPC=GLQ<*A):1(6;#7O@U[#J3]%);9S;GT:N1N]X'I2#%:B#R.OA +M6XG#4FGEX;$EX>WW_:LR9NDC5'O$$5X4WW/MG_ZE7#014RM(&T0IY7[Q#>F2[A2G5`]NGWW/@MP +MXBESZG7:6"!U\VVRAKD[Z\QSV-WC]+6RZCF^(C]-KYVR8,'3(#],=E[8T_CG +MUTO>BO8OGL;*78L?%4[;4ZI./?4"QFJKNGXCS%6>=OQ8_5MR-_WH_/]&_CN8 +M?Y/_C'QL'%AJ7!HN3CA)6N[_CGS8?T9^!+_IK+_>-YWQU6B]!-U;4X*J1:<[ +M`XD<#MEK`ZAJYJL38<+A+U,TPC;[A$F;-V>=-Z;3W0-'#[^BV9C]\5F[WS$_ +MF#2:W5V:6R$Q'THS3P]W[T9:ZP?$]%?=NC$)FRH77TU33-'#0TN%E\;QTJK2 +M:0B-NE@-N&33@XQ3V^4%(FU%>9R5POBU=WVQH+6XE\M; +MIYE[,*J77%,6O1P_]C=7SW8\LNDUN1P=3S2/CEGU=D3TD+#8N7ZNPW:TE()W +M,;E-X9T;GJL.LS7-/5-ANG$J??'X'9W&'GM6S'$Q@#*&6:(Q4/IZ^-Z2ZL:# +M/2E=CC&`DL'L(I6.7WPJ#-\GU=M"9W]:EM`->X"],/(UYHG8H["#ZP*5>V)P +M'>=)?0!L9G5"%>?%Y8>QFO%+@JKNIO#(P?3.0LHX8?Z>IHI+M_@27V,F*>,5 +MEQ1*$SD]3X4T%^LKQ6,QM#J@\!H.9X48T``/GM!,^4U<965"E;`RWLPQC**_ +M;`6X,XE45LDL&V0=-BJXX;H:[R5^Y/>=\"\8L7@.VQ>M*@$ZA1__SJSD>2M# +M!&DFN&18AZ7RK4;'0M"UI6)#:SE4EF^XC$G80S_M##;$H7ZB#I]2*^^/BN<% +MT"]`'#,KN0.B2+PMPH^'6Y5;:QRD"O135\^M?X?M:]1`[0L@&"`/7SH-:&YF +MK(YNZW@SO9QQ3/$\@>%,:#OKW]Z=.'23IXNW&5WG@L09LH+(IQ3VXVTZ\.*! +M^`9")9^2R&='`@;3@?*`9/DG3-.&9#8T>:*JW"R7E%+C^`QJ9K,4H5Q3Z7"Y\-)(UO6?,172I[L9]3UF9W7`AE,(-$?,!7 +MA\-S]`Y("(IELR."0B;'8O7:Y"-*O=@,?AIY3J(HR4D0X#-::&HUC9%B=ZR^ +MU(J/:^P>V/RJ?;,W6IA)GY1.NTP5:C74H2'H4A/>U_FJG9X.O-)H_EZ_.*AT +MR>R635S66,AH<'"9=FNPE)\Y.:2@-7C=0.&&8XIT6740.Q-1_#@KQV+49+`? +MVFB*0'QZ;VI=N?A;AR-[\=5H@MY\)0]_G/_W]MPMBP\#`(L,A +MP<$B_J^A>P>+C4--PY6\P\G=^UY2T]4M"*IA9IYTA4OK$EPT*Z7U.?%+X?]< +M]$>4@/T#DR_XXF01>)%P2B>6@U&:?^3\@AX^3>4@CTG9NW>B:2AF1>S2DST- +M"4?_[>:DZFX4X!Z/[^7$T;^N:C7;;Y<^-`%R<.A]^I6)S"Y"?F6VKS?AAM<; +MODD_^&C^\^YX9_2;)*!LUUIU8"HG*D\`3]B)AUYUR+)LCULG=E3;-8OYWW/P +MU]9LG0TK83G+LEU;;5>>?QCZE1,09(ZN&#PV5$Y:L^9=,_]->?X/EM(_*;;B +M?R'^M_@O_$[$@&H(U_\CCQW^EZGT7[J)-`$\Y8(=DOBDOYA_3S``PDY_Q5C] +MF_X5EO^&&O4'!N<_O+C"_PL_\2_)?]3?M=7BH:"U_;<"U/]JO"=P_1\%=G)& +MKK-_+O?N-FZ)%RW*_ACMG.^UC_(D?GX4,##;,!<$[ZG0+_[^2FF0#V\>0D"_ +MX'35&]*5,(0O`V>TVW#TNZ+-SJF%A+V8(J'_50:),;P-2;VB24NT2=0'D:G! +M3+S8,W,S80BK)S0_NPPKRZ[$Q\Z9DME83KR;*O,)+QYIA#-`=GLA@4WU9P;X +M:8!^P<*/R/(Z0G";2O,?4N]$'?@-\6(J4[1#<:X_,*[_Y#DUJKJXV87F*E=< +MKP-%J.*"T2X-OE)U'>YS35<,6UZ](/-$/[%DKT@Q.WSGLBL)?,B),QW+"NY# +M--(2(`OI^ODMQ$W_:.%?CL,0;Z`U#I\_BF`&#T5"7_:=L44V+WIT0D63IMO" +MTN#[]]4G.>&[JG]@-'<:X,YVIHB/)OZIF(!@U\W7A+Y:3"K-^.&=/I\BM6L, +MS5LVG00V(XNUGV/;#2B>E,-BPWN6XI#*I)Y8KAY=Y:YI`X(W)SUN<8 +M7:*M6R_F<'0,6W>QA+.]=QTA)*%^W[F\N:C_MH/5V]4$W"D7V_".JR_<9TN* +MZ.E_6Y-O'%:*HW3!`I:8K><\$&-O4+QH@9-HU,Z>B^^UTA&[5]Q*A"JD_W6> +M:JX;[M-U_Z$)N@K-N/9?/VDA4.;*/&3EU4P:?77@'R0N461S,L',\T#.+VV= +M_N.Z@'&-^2VRT$6^A?982GA=BPLTR05E;#7MQ +M7_1VA1`.H$+A%%>XFBY-2EXC:8&[5#=O[JU9# +M93^SKGX@OF+>@BIC!AR)5N4_N0MTGG\%D:@5`BI[J_^/.(Z#_\KZKR(DUT,1 +M9?Z^2,/%BMH?]V7=^YY6=BL<\5;-HX<%6S?3];4Q7#-O>O?JU6?H[NXM5KW? +MPN67R>KZP=&KS<,KY`$X^:7D3B*B_(+/HN2BJI?]Y+]#)&2RC\Y>76GJ7?OB +MT7\G]:\Z//!Z"9U?W_/^;N*0B6@R/\_TNP\,XE-_"\.[_\?E8OPWS@K_]_O? +MQU_>X=!P84MJFKL&)5$70J]Z9W>N.?\WTBI!\RS`.;-X1B@O)8@B&1ZC>&XP +MU5GB1O=>]RL\-IW=6R:@OL)&B9-NMI`680G)C4:8DRQPL`K7.%$&AS&&NM&) +M5PV=AY+7CCNL)WHJ5MWRF2@)K$]<$PV`GW7*P4]"#I?95^V*N9(,7IM*JD9- +M5^0I07F?&*)9)J'V!T8)G]F.@6=H-.`K +M20:_KWZ_0,N8=S5`D9-$&T1(@U-LJK;;S(I)BH]Z#=E+*H9O[+.IQZU'KJ$V +M8,VBJ<%.C)#IS8OEP?IJ,T"#M)4H"=<+:WKU1%%M&X?=Z*&81!\QDSD;0RIV +M*,-1Q!O'2?\'!NT\`S"*X5P$92=YFF50X3KC^N:^%4HS_Y+0)8H,,-_8#P(< +MG:@AE#T[EB1S2+9S/=\6+3C+QMHR*(COD>G]D\MP%&R2FZ`^RFTV)A@61^=\ +MTJILX36R4J2R"NU.D:_WHC,)\2P+3%,+4R*14455AL-EM5342RG!ME0I +M*)$E:`[A5,F2&G5/(2I;XRA"#"L)3Y_6&4)LQ\T61PKJ'\TBA50!9")GD?&. +MM4FY2NR%AR+ED3[3.FDG%!OQ$="IB)G16.98YU$3\ME55YQEFJ\E$+,76@1`&#V+P=07/J88EK> +MD:6<$QD)X?=G`,-$OJDL9*X[22HY2PT\LA[CG^4RJK\C5E(H+!6(ERKC%5`+ +M[M0RBN"U#602S5%27-CH91]HG<]Y"F22+0MEP*F''L&1LGS%1F?(.FKI]#>2 +M?WM97(9TALR#\-9]*,N:RH)AB,Y4I9DP7EV:A).'@?2BB,96N`O:1VCCQ>^# +M\E#%(6V.5R3W"Y*HAI+2BQ\P#@Z=.0[0XO(0H3.1KQ;3+X!O;O)I8")U&\Z> +MS6)`$26SJ98%%!\5!1$".=WY^`7THXE9,XKN:_]I%0*+ZD6JMPD7KP.'&T4!+1#\+;L*/MEC0;2 +ML_:\-#''"A$(*$N\'XKA8/L<@B=L-HY]Z#HIPZ`V7(7HIFI/_*.B*3(H;I;$ +M;$G7+W*(6,(F50UL?PEBJ:W-"[%N6&B$BR:C@`IS5=/"S!$RFXG*O<%R6#B4 +M<2,V=[3(E!'0^3P4;%FB.`)4)$P9:F691OEZN0DNL^@T6BVC&]SSEB3`]Y&] +MWDO$+WS2`(5E>-%4:6]GAB<+'@?E+WK[B9U'1.S?TL4ER1U[AEI%9" +M&7EA;!NE,%]F?+O$1GIX#)8D-'N"0+7>,5]ZK1(E9W-5\(WE?F"$TT#*]Y%M +M'ZZ2*Y4X)\3#46DC,I-\^2`:4Y<:25#@W&'QB&0S+<0F8@_CZ(`8]^:GB$'LU\66V +MZW4#(X]E[L`U-C'4N_$!<0I70A*T"C&I0Z<;R6\>*$*D3_SUR2O']*`BA#)R +M+VD98/!0!^Y)=%Z[A9&!+[UJ('I&*6$\U3,?``7YGI^KM?830&%+K3^T'EH2 +MS8-6;]*,ZXC[Q2&Q$WL6+ZBGM)H6(MW\C<[+<64U+JH";]UR-A:4AH%FN!0# +MRS_3+Q0/))8/G)PH!^-XON;?(46RV%+*WYN!L\RC&+= +M2(+R$$LX<14AZ7MH%4B$%KBR!2>.^`LH";F49-!/O!+3@_T$ZT)Q)]U%I*)/ +M]Q)BL'$BS/!EQJOPTS%E?V +MUZA)E?$:SKO92]!JI-ID:2;+94'F.),<$_1G*3T40@Y0LCY)KZRD5=!(JX`L +M\L;4])-_[-_*T11Z8QI./"W)5,21V:(WZA8LR'QEECF_`5SBWOBDK11FBSN% +MO]`>AR`@7Y==]SZZ03@'G<6'Q(.U5]#*#N3HW#2N9)6[V<=4A54%;>U&HKH?8*-*B!TKBI8L@JC +M20!A2;I@71?@9%H:IXIXI-/:O==Z"I/M$T'GL&7>I1@E0FZ"J:RU0C+"&@JY +MDXSD*TZ?]$J$.!:MG8B48I3;ERE6Q6_[15T]R/["V"=[ZQRN7-?*$>/.VT&'/3Z)V((W>+_ +MP/3=,YRY+BVH_8#SA/(N[5)4C(R:-7CPM4A`V^!MKZW++")W7_$0B4*0^@N; +MDU;2A*WV4UYQ6N!9(NN5-/C1365$1+$ED:2$9%#&4R!TZ<0YY^KV3!_V9,$1 +M\!IW]BF7@K!=,`51B7(C$?'4T]AKK;>'&ET?21V%0 +MOZRD;)(+A9,,B\:3M':N8GSHP00W?4/>M"M/4@RM;B%_&J6\7Q*L(/[/T3E9 +M8D>D4B^SXK*;5B6ETU42I7L_#`<;YDG3LPL;(!2:4\1PDX44Q +M0YN5N:G3R(OH4U#QP$JQ@4@$0LQ.H%%_+@=+EK31X\%4OM:?E#*T9&Q,T%H5 +M*+,O6W"EA;+W,%B1H)W")B4_LDP;^#&;D&$@+D0'/04U"^#&LZ^F\+ZFGV"S +M?-^'*8,4N\7#:C0M7.3R(U6R@C81H$E/!:.54;$[28ZR(L>#]QO\&%0QWBZ5 +M?V:])%Z=UFU+M$22\9,O9()T7JSHW#VT+-N"C?9=ZVQ-4,*@ +MB@FX&JO8P*`"6O>><$"AI=Y$R$<%S?7>GS>^`"C#PJ@,7X1QHC-\1R:$@%C% +M121?MNB',K$,/_<*;3V0=24A/*['@'#<+`$6IKR?6M/$INM<+V26(DJ15VKH +MA]@#C)SQOG"+#+@*/*2$IU]P!K0-3AL%+H"^91$KJ^OPT!*6@?.U6PK`>JJ`V%_87#RAN*(_78\[_Z*\[.T=0^U +M0B]KDAO]KUDZEGT=]W/[`YQM._=B&P9KE:EH_[9$::>HU:CU>*,L577/Z +M1RHE<@('UH5A$H:87UDX,432&5`+^>,P_RARZV"$M>,+.,6)HC1^;J,X+V?W +M;-&V\_$)PL@,J5T!QI61VX%$&2"[_%S[_R`()`K\EDZZXJ*1E?Y2IQ\YRV%I +MRI@`UWF\1I:P/SZD$!KF,)Z2&:KD17`,)J?6$Q_DN:T"S(682O,%6SSJ9$.[>*"5>&SSX,0,X`J,R`=[JQ.TQ"2> +M8WB;*>-@P32K?L,&VMC?C9%`8KJ".T?95V35G($KP3PQ#.V(YMT8`/C`OU>` +M5>Q8"1KDW_>O$FPG,T=4X_(JVO`M+@L6\KF.D4"+3_/N\T7J@W=1Y&IFF[4U1TE<=["6E7GN%G*GRB3]0^3U(:TZ,]?SNK"?4B4&YJ.=G:E88] +M`KV?D/L.?)RH$*%N8502AZQ%LS#TBF)5'16L3Y;%-#Z00OOEAC3?/PJ%EB[$ +M"+?E1F`.[>]<^H+/3/W,>=19:)"^4>:IWL>#5VC02[>'GI6,GJ45H?\CA(DD +M2`WQ4&92?11\05NQ1+SLL!]T=(`BE7?/(X"*@M@J0G83E3<0VD[.@WX@Z)@$^G)]1TV5?:X'`[,Y8W+FL7)>JQ6B:`6@SP* +MD?K`76[U!R:$V^KXRP6M\BV1'?-Q9<:5=.%4">[9^1^8^H0!TUTX-[C\DBL4 +MMT=8W:CI,[J*=&'X5RO=2L\9'JWMY7K;AHLKQB)M/$H=F0?[_(CVRUU\'=AI +M9#K3$B'=4\9U+889Q\`@AD;ERJPNF6RNP[1VAOB^4XG4]_Q(W;#93#/Q+N31 +M4D-#:Q"N?N94)R'ET!]7_`S[0T?:19M"-XD;?C/`/6Y]!V,X'+6R;_.N%K^W +MAIK%O)':IW9)B8>I&_I0B$XP=7W#Z!1G5:,9A1+$[H`Z,T'.JDQ.RV+895*@ +MY;K,D6T:11^?\Z(FJTU$'6J)@L;Y0O:$@`3Y@XQ[_A +MBU&1NBL;H-DV2VA<^"A(V[0$N=SA@S]*MXW5`5'/FKL,XY92:0"#Z)!+(]W^ +M7SRA*&"0^+1&KK)1< +MZ*0,P3YU'A1W?XQSY8!)LX7^BC]W%E4@N:U`2]EKNL?:IPWAJ;QW4DA6%(UX +M6.XB3C"5Q1#+SJKHM/`F-U/E$R!-RS]O7#3ON#[B^(F>H +M>$Q"@K>5*L-/=9"YB8URE)SKUWW$95.1?9X([PTJA05HD_04G=WD#GJ6K7^3 +M_(8;V1KQPXP]A#X0?^C%'_B+)::<>%4^^L#@0FO,U;RW4&0-#P@F^ZI!;0I+ +M2"\`8A5X@WD9C>J'I0R4[4JOC(]U$-VCTW*4V,X@[UEWR2)I]V/\7G<+;J:W +M8I=E)^=>D,71LPI?)/ITPJK.W9DLO!WE,;1>'7N>F*:QJ8,G[080BQJ)$:T= +MUDYB<>9P'?P`:38%JXZ_R$#*-!D5OY+1UC-"/]9NH7HS]I@BKF522UOY1-*S +MG!,AP04.%$:]?6ESU*;A+1M83A(2B]'$=HM(7E%Z(E_$`_38&B4EZ=3I:N'F +M4W3#9R?5L]"[J]]PC=H5WR10PA\F#NV.19->]QY2IWZK"^)!5W,.B%+6I*6' +MZBEE;A?RA[<"H4+G!DS(QG498"0"XX1SM'\`TV,LM*BG;8C+6Y(ZU4>2*:+) +M4HZGM'NN8RU4$*[,NQ)KPKVB*4"UH7( +M`^EIZ>(B@7*S.!S!"C&Q(BLRA1(6!IA+OUZ+V>/*2&2*R#*K1E*!T&BR[NA! +M9C?SNA-MAL6B$XTUV22_"%#2^@G4]-A,:LL:NN:V;^)33Q?WI7/S7+'O`Y3F +M,HSQ'SR=+RI<8UNAM-"64?Q,[9+%)P(?W-![[IRQ)*15KV@B0C[):LOY@15<$'.$;2>-^"/YJ'H#(T):LW_V[X" +M9I%ZQ=!^'<;SE;I#K7TU^726Y]!TMQA03::6,UAM_QA8[$O\S7UD/\NV/3F# +M<]`^(:F4X4:;GJM8?8PG^P'30*N-\O`&CW?P8)#F)NK!PNU,;$2`'=^+#!=VQ+-:/-/T03 +M14M?WXEN^,?1B&4ZTRF_A5')[?BKR=U_LSAG5/?@3#\*$I5-TKD\';C_)L>. +MN.N#M_;6SX7LT-I&S5OGHG"URNIN^!M^80/EO$A92"9\:$SU/&I##P"MD!YR +M2(!D5@WL9\RD+AWDSPAQ'J^[]6M&N,!GY,PY1553PEWI$NTGP#>D&PLE"R3( +MQ'L3EW:WT)?>`FQ45^=-`6Z!_4';L]D>?;01L:O,SFVZVH;YZG#O?8YMMR=# +M5ZUF437V9[;0/FT.1Y6K_`\6G,/!IY7HI]=@;WYEB(%US7!LV4>5G63G=[3K +M/X)RDCTMW0!V>F/>MDE\]Z1.J1&Q*X/TH__`RM21T=-.(UTA,5!0Y1+B4HB0 +M?S4;U/@>*(/26*C[1/PD,"J)RQ\OE\PO+CL-/U%ZJK!.NR47VU4F.M<4RK0F +MK.4C"FTCXKH73'QTM,7YI]X6G_I,K>3>2H`@UU6V*%B>#OY:I +MGCVAG.KKB/2MX(5],(LGU22"?[)IL4Y`#^A(##6'^&^/.4])-2<%X6 +M]PTN)!QR`TCGU/N*5++GI+!#EG,E8%B#W*I=>/P2QS8J%OF_0"*]#;_)&+XC +MU=7<,Q-HSJE8=B9L;SA_A_7(_9'ZGC$L-^=[1;12LHFDUD%4.HEKVDI*?U#/ +M(0ZF]3XCLM,/HB]_M1/^&"@3K:`ZXH.OE4&.K%1>EWO0FD36)3>2>3A*SQLN +M^HJK6/])QY.U5X#E!I#[?O:UE7+E?(5VND/@PRMKQ+AB+`]M+EZSW&#"\817 +M='9(X]A)"CQN\W;ZCLC5IYF'/H^7(ZTY(D-*`*S@UB857.O-VA=4 +M>]:'__79TG6"75DR.7"0WO"JI)!9$5]RPXM40BKTKW(VIE9H$B.CI5(LGH;% +M/+\M68<&(F*VHTB5,!*C\;XCC&-@<3Z)9G&PZAW$L;RO0`/?@PFTER5>]'P+U.!>Q*6 +M<"E(6T'6.1N5/A9%C$>SRE"Q*"(AG.R1>GR5$8ILH-[BG#^4#I-N@JH +M$_8"RC-9G+96*%VR[??6&@>9*`MR'Q$<>$Y[]`0@W$);+8GJ`0_'N<V$W>%+#<= +M/2B<;42AQ=E7-)63:V#*X;B\UWYROSU0]4EW*"T+RX< +M'%(M]PHN!W]G2_-B-N%]"Z]R>^FRAFZY7B!+PQ/9/9?+2YK(VAV>N/P3F@(/ +M']LX_X\&0<(I3F_JY.36#=4JLH(K0XU3/W;,]X8`N6GDO\!T\0Q:LQ+TXCL' +M.0-?\2(8S<.-8IKCTAAUV3_0S:\PI$'9W;29`?7HM(A;$QFC.=O>`7]@&`NL +ME$EP/Y(>AO,2W,D/Q8=')/'AU(OA6Z2.>*Z1D[U_J!H]]@4+=.3!&Q4,.DVX$RNC]V!HE#1U<\^"I/)3Y@K1[Q"]WZBCAE&T"Q&909/< +MH8Y07,Z9F/3PG??S8?XWI@@J*?5*/DS;Q5#)7MKJ!9P/5#/TYZ-]7ACEP<>& +M>.T^D5D/>E%&I+A2IJ$S+OT]:K#3,?QJNJ/\*$[9&43G:'G30?I3@6`?O8V#2-")N/A?P_"HP=!\9\GHN7B]C\`T-[28CX5P54BV]!NJBB +MJ0):T\'K4T5,9OO]2C?FR:FRT:U1#BEN]@\<"E^UZ,71G'Q0O`Q'DC\^T65' +M3FH.H%N$V?S8?<^XM9)=CZ2A6<@\[^1[ +M[F.VO.$RDIJ=O_1X[ORQ7"F*"HR/1'16%%_$Z)(BB_S\29XG`-:"(P!N_3;8 +M\7/0-O-.ZM[&%1HGQ0QN'?O@*?%3'!0]5ZEQX>:+@Y^X,&LST=GV;[Q'NC=D +MUU?UXY@V*`A$P9&\V=&'2)@<8EEGUV^&$<.I(K=\])K.J".H..YFVY8AYN6F +MO\EPG/G1.7ZX'O'EP9MC^/FXEFKH+7SQ^S;1(\>Q,O-[9YA<+S@:*::V(TK` +MNX'_UD52[1,./QK#\0L5#9._S<6ECQPVZ_A+ED4;3MF/Y/7WOQ'F9XE5OX4; +M_(%!9ZFG+UT*JJ%U_5+52XX>$.M@M]S+\?X)4 +M5D=FN;F-?_D@*@RC:EOCEJZDCD]LC5@SGTZ2A4P1,G$+8#%L\>(03)#GF!-. +M^#=;R"X%OL&IKC27/N/[J$,?!?9&DDO3W<4GHT@DI0[IN(:O +M.6/XXV[\M>.11SXBFL +M(8NZ-[.4_289%W,:T2R\>4"4ZOG[MJ&#K15*6%2,`ZYY;N4G5H!`BS'8_P?J +MT#Q]R#ER42X[":N.`]W:#U@[P`V(GLDKT@>]S(BHQ&-0;4MV\3BMK,\E^3QU +MJS^Z[5Y!*[6:?/R2KN5)(&VES#"I9=2-'F5K3WEU)35]6%/&"@==9I:[&`Z( +M2]`FS"%<2_2\:/N_*E9>N_ET@/'1I( +M#LKG#O,S!3A:C#,U`((3$-"P@4Q[L[QB8%/:HEHAVD5;ZS-H8H'E(_HC'GO) +MOXHD<,"_U?\%X1T]7X?66UK8P=^O5(PG-4,A6;RB"]]DL14KC-^7Y(NAT-0* +MDC8PD`L1L+2H*C7MXI=#+]9%2!*6!*^Q"\KX.2!* +M6[G^OM5^(?*5+Q1WQL>=44L)K>K)3IJT-T&M:F]]Q@?G`GH;7@,+HSPKN;4H +M1S=CK7WD]E'+#])NN!L]?HH\C`&T]IZ7+.NI+!]FGAAI^C<^JC4320J98.&H +M/OG3^B(HO];6<$81[+C(;OT?\K@36Q;"%7O#H\L__A:&) +MV69$"B#R93B#TV(6RZ=K'=\.OSV^(TK<`%H8'P6U-^\U,]0;A>+5,'L(S+X4 +MMJ%(QCR1+$"E44?RX35'KE^DC7\&F>%; +MW8K$I\"2^R(O<<)-!%8HXSE/VU;]U/O3.N@P+K(I,/;]!FH_YP.GD]J43&'T +M=K#.@H=HX$QA-MDFKH/:KMZ7,+IEJ7$@-P+^C +MD.[B@=2'O5V&]I,F;ID\+A"]/Z@U"6GL7'WV6*`QR<,144]1LG(E-1=*KWWC +M\XUN@)?>K"50M95XHUH?-PY/)AT$=F*Q\WK!+5$C.21.:%4>%1T[U_@H[1PE +M+Z6O/07\.N6,Y%Q!N&.'TSWC[AQ/Q"/G+W8U +M[=_AF#9JPEA"F&6^<2JGH1=YR:-@F:<#>_>GA0BB2'J#D112@9/YZ-CN_%U9 +M6QMQ;O,W0`ZNE6F_!/D@@A34XXH]@[P3/##*1UA30)'(:"=ZVY4/WNP:/A>[ +M#DE_DM*;$@?2&F[H4T,OG:B-VFC&:VP@0FEOF`?8'[<#3QL8I+0=CP.8P(5( +MDP[;D#\3%X->OX&G*> +MQ:6>0NR^K?H6"4JP]`O`*'40<`/JT0%;SS/JOA0ZT.V7!ZHE,TK;V+^$.M9= +MCF$%B6.F:WV3E8W-9E)XS=0K'-)(_H9K6<@TGFEE*+3A3&O^<76>$BF<92;] +MWQ@?,6M((8XCRJ<52BV%51!]./L+QJT=TX<]^95M>R(,KKH7\?T'R-U^?_+& +M"Y5I4+7BP)M<$'=Q[_2VX.9;-&K4L%&B!RU;#;8(=\CV)TO:Q&]#T2..:)'_ +M"+X)+Q?D6A5R1Z^$"&WT9$D3R@;ASA6/_'2#+P+\%AY)JMN,K;=`:6#F>I09 +M,V8M2DENXZ9*LG8310$8QE_O*R@SD9>,*$/'MYGYY.X$'3/3#8SPL_9&TO>EO#?]V +M(<,S_=-.--[;Q`2>943=XG:6'A/7J`Z_-$7F=)(0=>(/NK')A.;^X#9N#F1+ +M]XU+;JE[=:)METV-H8IO8'ZF!ES&_CEYBT\68*61")GH=^.NBIT^P2LTJ?Z) +M80(--)HF-M*?!`V3&RD3++K&:`G%!VXM2Z4AV[Q48JAM^RY,$>M;X-$W'_458Z![5J36K[/`;U'K*9A^>A0DU1^F^?:'9F`^J +M%CYWVJ6A\WT]^"/Z07WL8(5@SX`-8 +ME5Y1^?^)VI&&&:)LJK@F@Z`2SV`I5F-,D\'(.*!J%%K3+'G/)3BU!;N-M8%C +M-#2V`:%-BNX.QTD3FE0>)83ACS,4QU/X_?B@`#E1-]@0C="7D-/HM2D +M1/*AIVD,63S+V]9CI-XH=B353T:(\\>00Z5!CP<^8N"%0UN+1NI6DLF,CR/( +M\Q#O/%AQ-W$56PO+;T(?P/?C41^*R1IF\T<2[D)99/E3&!:4L7.H>:2577&) +M4[^E):NJ[>MQ`G^3_R<.:"!"\FT@>9.83,K>_V0KRC@*2N5.=8+:5)SD8[7` +M_[!>Z(M/-+`]B>%&*R.'[/BQB)PL7XR"2T52;#8N_)^@G8GNB<[W(D4&U4:5 +M'&IVID=2)P//H/P%IAPY.)DWJ9+B;84M%-M91FG/E/R#K-44.+D^H&7:D4]:\E6F3+6,EF6;I!1XCHM>5+R?*&'<[#.0);[M7VKWX?`,*-\EMCOO%?F1L(G%]-4XZF2`]CX+;E\Y)-Q.G +M$W=F?X"+#PLH-@Y]LDV!LW$;R2@3'VFOE]03;:S`FU]M(RH/6C]WMNE1Y+.& +MS25/9K!3(/^*;?Z#5BH85HNO=^5'4GPLW=L+BAX25C&FWQ@A]Z'B[S@*7H:U +MGBDDE2S<_;'")0'<61=^%EQOJ8I;BMN_LTC&R#H*8BLWKWJRM1M\!.+ND,>6 +M?JZ,[TR./;P:YT0R';BL%!/Z'=9D`KN5##MK820,X2\Y$2!0T_&?N)IXK!`A +M]PWH#TQAL@.+3*-*E!N$F+H^VH6?'I6("U;SM\*1K\"!-P4["A!=821)9;8) +MPY^&S%YN8&21;M]);G))4R3KYGVJI3DP;B8V,#-U*5R:*,C^PVO4XONO +M,V>2=,>QV0^R%+0%6Q&"^H_<>LQ'<@-#YWE$MKA[_W#,AUCO*^$`+@"7(^`: +M@CM+F618EGA9>-$-SL=N^RJ.?$EM),_\1&>XR8B@.`[:W_5# +M0K)7O$>\4O8^5`R_XT2Z(D/9E1N*@:JD?B1R&Y@A=IP]:T-[A;0?1?!Q-_C\ +MRZR.6"N$:5HW4XY5NP#U^%Y\JYP#['+YMKDIR?F8WRV]AG*5>&!EEQJ*RQ1" +MG5)N^*P^MLVX6J"LL_K'W4I9R\1Z206+S"$;I:./G,%ZBF"(Q1:Q>%BZK_X3 +M!J/@5LE$_?7^.*ECEE]\(_&)1MY"M\ZI5'*?/'Z>HKZG!H52BJJ"JRYTENZ& +M%'MKQ`]C,*>BU!0>#UMQ%<_BVMD_U@^@6N%4D4V6)T)]DV00!)C0;;.K.';B +M9V2H5[,:A8:^A7KPJ*)@3(,53AY&S?%:Y]D1HEFO9GD%JE%GTLO\M8(AX&1( +MSW!K5E=2S[$)>J16^.]$86E?N1R-I;]S=D[O/E!D5/&>.\D_2R$)``:H1N$` +MH78RVC;>5T#>6-J@!M'=V,+97H]+TZ2#*'0+7+5H7M9&410B.OHR319SI:2[ +MP2BFG@V4T2"N-D9\S)#`@=)+6D.JV(25F("4HCA:Q6"Y4+W9`98X_ +M9,8=U.G9()?A1;W8[BBNS@(+-+X`#-RHA)5A-?!#=""0F +M.!X\DGGL^>D2563C&//A#@U;9B$E^FLM!(*!'/^.6A$CL<]5HB%HV?EB*-N0Q'CAWJ5*J)?>D"94E$L1!P +MQ'X/W0.2YE_B;D"5R(O;07C[22D@FVI0N45+#BGBJ"8D!'T@63&.&%H\M^_Q +MMN=_0F$[LPE.L)#^2YC>*(5][.86E1:"'D27"@R*@;\7AVTX*XF@0BW9Q +MF0H.LM\8A[;1S8KE\G)(ML\#0^F^\,KTX]&SV.B[:(=Y\]#P,2U\&CXUDFSQD!>`5-PJW +M&'`_B]-<3I`0AY@08Q%W/FB%$1>OF:.D!A%/(H[:8Q=+DY`7W;CNY`2R9 +M*>5+1NL:K61V1C91XF;R$[EL0E?NDCV'L@ACBRUI,$7C1G%"1N%TBP`ZQ^6R +M4IKGD9V8&WB]<8D,H:UZV0CWDGLN%1($`]\Y#[4H8ZH` +M2N1C7'YNUACYBN?T!".-,EZ=Z5X*6Z`C1G7DK"UN1-$S.AXTYP5]XIE1X>1* +M,,L]:Q%Z_+*$HXH(@J<<;:"5_O(@LX%FM#)+=[(AG3M5,R27.I5`:#8B&>P9 +MIP]6\,!VVC;^67)N-5BO^%QB)?U334&JR*.>M_^X#X_A+;4-E\FYV!([?98O +MZAEN82L%/JT0*CX.+A,6]U6+0)7?'J6]`9;$)LO7B&Y%K(QR\H.=HIX)ZUFC +MCEU"'\F20E^(',D4Z0R2U2)3Z'J!(18R>O&Y)W0)*LFT'G;$5;TKJKP*(1JM +M9'Y<1\*C!>58QWCAP.:1.QDN33"W?(T7#KT8+C\0*CR:?!>T%X)UK)*G43SB +M"ZSM*ZX;/4YX]0*HB`:@]`/EOO2:&M`-)''MA_]SH[65:((<&U`&Q"N8)YI) +M<"0'5^0SN_7UAHU#MCQQ@/]OB;(KE.XWZ@A!8[Y'1DG4#?!.+^$/##R(5U%" +M"EI(]H4OJ=:D;(21H=:*2[PAI-O"V__[-A,8.!@8&.PG'?J>[P7)E7JTLW?6J(!5 +M4PKY,[F,8&,Q0!(Q/D_QFQBQW&F"GLX-M]@T-S&*LX+V8ZU7[OZD(\WJ+UBK +MS]LVMRC3>1:O`X%?N/`IQ@$X7N;5*L:#!F)=VW.'-1$!SI\Y.^4JYHEP^-UN +M0O:Q[-]%CF*!SK=U:LB(CPJP*;3*U`(M##;<6E-B.*1TF#'213R.J98+*7*H +MUIW@3'^.74F +M-NVA%9%5S_B#J//'X"H3_\\*FYG=GM\%4E/%>`L=YJ@O*XP2'40+OH@80J)2 +MAISOAVY*`N_J\RF\Q+`1D&-6II[:/N.>:MZZV";+LP9(E%^222"=+ +MJ_41TG9(LQ$Q]9'8Z>%1(^L=3O+%0O*/?!W6ZAYMDNH?#2RE#;7(<5QJD +M0'FJ8>D;2,D^L7T7W'--AF8GVS&WVQOH>?K6M:2-T$L:E2=,%\N3;!#TBY7\W* +M$6\(\DVM?`Q_&94%ACX>%*94:I17!7C;+?2!IP[>8X8%9[PZ%=YCJ>U[C'^7 +MXMM%].(Z*B7?ET@C?4"_Z("DK6ADD.G;)[QK4[C9),I-/\O@C9#X)'C#Q'R7 +M'+,[.0%7D7+U#-W?NK"S^4STA>B=@:&.Y@6Z8N'LJVK+V"U%$ALU<+CERVQU +MH(#OD43^'Y@YKNK-06WQDE[27;<,7"W)91T?/R[,]#\PV-NUJPF(-VGL[M6S +M@!KJCO[B8M%*L+QN>*`C*74F(*+;6I:'(X.I^I,]SEUS/ACCH+J]]P\,O]D[ +M_063.+-]!Z[O>'R-5'?'P`88[R+INR_2(8D[]C)0#$E2?R6!TTC'^P!@6/R",\_5;91"Y\V6=J:7`H[Y0):=J\>W3 +MZ5"B8HB,:LW"YYNL]IS7G82A#6-MV"[_PE:]&&@C<%K.-#=L;Q.P`<-I"K9Z +M6-6&K\FH87I!87(WZD&/82[+Z(1F-\]]?EJIC7'[U:S4]SUJ=-^+'@*F@DG: +MW-_)?4>C957SU]W&Y5YZE5?F+G,&]00X_2S_\;HT8LUXD6K?T76;'[,M*[S5XODJK367>RE7FGK],5?N^PKA +M>P5=!YK1X9EWO!8Y*1^VJ&3=$SO6V"A90]V?3[T*Y[GY!L-X%)D"TP?@KV+5 +M/'A\'.9OHS\4'6M>`8_IWSU'1#LECMUVPX@;A4`^8DG'$N5&#'_V(#9UHY;` +M^&GV:V0CIL?RC;H8[=$,:[D/8QH02R3]9P"&"N?=__G\^T@>#`X--I_5_L!(][Z% +M^K\-AX@?7%,-#U]YD]QE%IAV6X?TI`SO@UXQ08>*0/]QT=<8VL<'4?+D<>IX +M\73YO)"Y3P``P[C0L=_UX<`SS\Q=B$1!UM7(M'6AE;>AP^\WA'Q*:]9I=X=1 +M[T_;B.G@@>-UGNXS6AMX%KOIQZ@CG?&SI1!`89VX(#3X' +M/F-:?!=LMYVBH&B)D(7!CB?N=G$-]N6_R.=_:?8G]J=>/[C&:/8V]5\](=SO +M_CW-%D&_3ON#WY_=2)2$MUNV^;U"+`,E)#\`9.5MG)+N()-`,\T-&-[H/EAG +M+^Y1H824W$XT`/<[D(JGLN)]/I>2&#9/O7\ +MJNVFEG$W(ZQ'Q4,DAV_JNZK!ZRPM`!,UM!M.Y68WC`)!CH9(`+8XV:<:\IR99^MHCT\^#G9E%BQS+!U3;D[G2J_:/] +MN/#IC49IS$<<+<0:B<3#@>FD96Z!ONGT*0,0\&:]I]'R4Y#U.^:!P:9N_C/H +M'YCQ763@.A4`\[W;9MS=$Q-:!SO]R@U>P>O*N\;3=P6^D]RMZ+'EKKXD1JY95EL<^>@3(N6:: +M[99C3D@PW0&:XJ9F+&3)V73[9$5X41(L$D,C!#OA^>)"=S!1W-6MF*Z. +M)Z[D\KXFFZJ*%2,-+($2`X.U3MN_/[W. +MS?V4+Q8?V9,Y_";E^0*S_J':E.-'HK@RE.)]'<7G@V\:9E)LMQ;#O^ERB?MK +MGLJZ]+<,T`N)DOL?YQMNQJ&#(:)Q/IA@OA&I(<@76/22VM`-@LQVQ.''YU]`],8I^U.:MH +M'5I9G8?2V]H(]A^8NB#&7XD6?V`B$?*BTFHBTM^1=V=YS:QB2+_U(='/UP5* +M]M[\@8G"$VF1$L!.7YT><7`9EPW!>H%Q6S?/?!+Q5TN._(F&:OSR:8"62@-0 +MOSJ],G]0PBK]T7DDPJ&A=DT!<()\;^AOX!(WI32,+>+6!PRM1PQ?;?#H-7@? +MOR9.F92%8@$:C;&6JXDXLQ;Z-,$=B'O.(,$J'8IQ9G/]?;+*SQF(9`;GA0FV +M/B@G,D^(^T"'EQ),`YC+,9)273$:(('"RD'X45URT9 +M-4^,?UP:UG^_WR[/3H1RAN[UY-"31U[O!=_AT"X3VZI<]P>F1:4C?8CM]GZD +MI>_$"8>2+5S$)?5TY`R'5M^>?47&QQEXD4_D$)STQG%WU49Y,+#ED\4B/[%" +MUTJ?D+P1`4Q_RJ>0Q#04\W[9PW3H?1M/&;B*BG$[N6K,L!R]L3`Q)?&/VG]M +M86OF@*;XJWQ:3U3>X3H70M3GFBBXN,&H?X$(=YOBK4J5T9VOV?H,5%3%/?OKUZM#!,!Q&Q=>`=D/>R#'";P@1`,=`UA._T?6]IG53 +M.C:?I]RL^R]-?*<9]7H-<>YP[!X->!1UZN4ZFEA_;#$[ +M2!JU/BI1$6W83%\%^_PZ,UOE:C9T;!%E:\P`'G4XF+)EU1_\\/)/?X%TMFPV +M4QIZO38;13R2.5P=Y%V)B4+>,-?3G]UF1=%VR:,>#LU;_!]_B"&[69A2)7&N +MXUQ>/!#VL_URCE66^%0PT@PXNKWEN'HVW.]V+L!QON(2#_9?/QUQ[,`>7N[? +MQ]N]8;V%$/K]>JVR&(<<_7I"7]]6O'MQH#QO[C\<&5%\DUY:=Q!8OKVF=,"[ +M7']US'T3V;DW;W!.'O^Q_W3Y(_\B`W?]]`_,MN/;=.+P2/?YT57`G0_+T$C( +M]/B-8T:^M1CE)X1\?F_#UT#U&__O_^P?_J\-A?GGT?;_V4OH?VRH)G3VBMH\ +MJ=S>Z_X^T]VB[TZ=E-RM_03)NTT!X!<,P!J!LI)V]?GYVXK#T?^+ZO@ +MP;,]Z,[-;J#;B!=K7M*;[@CHK=QK:M57/@WS#\R[%LNA@P[,1W^278F0H("=$6?WZD$$2GP81=)P-_RG/D +M=+*YGP-QWRC?O#:O_,R\2$*ZQ:X;3HWB#!D'&IO7(1D<`6T"N!=MF.NLT,;T +M>4P5LLWQHEV27E)(;&%C^F*^@+Y\U0\GPW7(R,_09\GT1X0SL$K*<&@&\L4X +MF'#"H1[=:O*#4>_ +MGO"N`.&Z05C4L:6:>P7\--C-/R;B/^Z)S?V#:?6!O)G$LUG_`>&$-<*QJ[]9 +MQ6UUO&Z_('(S0I15A(/#R]MEF&:?^W[5.=2SA<22K8#,KWDCI^G@9T-,A]3< +MWV*CY%^>-EUQ"44/KMN?V].-'+RVT\<7>QM5U6-^6,5SF*`^V"?NMX^LIJQ^ +M=3(R3[PX52#;X#R7Z:9B6S(>1^I(".;0AOLX+K(RK2DFVS+1-4X_59O40+>$ +MWK7Z*Z%$N<3PKJM^F95"GS."#G+J%]&-2;?O;6C%#N)91V/I7Q!K'FV"UJT/ +M-G?L41^$@G^M_A0E8S<8CN!?=O*K7Z_;;S9`#UN/L'2N\K.J1X^HW_>[WD*; +M6_+TI(&V8`[E''+";8@EAD_4_[)U.-B@%7#`_/'.?[0.+)8N[TGWRXK-?S`< +M81S^9(CK@>G6[`_,P?+T^C75CXO'S_Z_OV/GYX@+7#PV?@QO_Z +M?E/BTT#((<7D[S\P1`\!WW'@?JS]%D)$#JCI>+D/VGP)!)2;MNQJ+KZ\S^7X +M`R.!2_FC$:,Z0+UE][W[KF4R>4C0B_K#B_Y]X(^H9:2'5P.1MW*\AVNNT]<_ +M,,N[`_F1+;6R52'6Z.:D?MN3]3L>PVT99,?QG")<;&7-H+X`KJ*S#9(EW_K> +ME,W?SUM=([]^D8-_$\03H:>*B"I7_DYX:G_8AFDWH*_%_EB?KD),$4KDM%:_ +M\EL%^9YRI#U@O*'?[+(9*]#9,8481=3.Z:5#!\:(U=MOZ]P( +M/4;VHI>0^5LGPL?G09'?#P[RH(`D?7Z+)?2!8-;8F'3Q=8=614-8;Z^E1\.- +MJ`[_B@2]+Q<7[0G*!#';?[LJ<1O6V4N(4N([B,IE?\7LA*=OO=D*.!LMYU;?Q5*W65!@NQF<=+;CG?'QO.?;);9W$3UF!G:+K?G^5<&H#,L1'*&&Z +M<6W4P9$:&.G]GE/2VLEM,O`W6-^JG'#$6]`:R^L;-GJ&)ORG0`N2O3L#%43C +MNA`Z;43E!/KQ]$='9Q4'\,?$&J*)I]!#++"M^HR4_;AT_V=4'S$CZ4:*+QK'%/Z:J;#8[EUG/6 +M52+;2>(O[Z[M';C.=HX,FX)PT7=-0[%/__;]Y1^8'-@A&73`D"$13LC#2Y#B +M3JI_W8.8OF>W)=WTC^HXB4"RYF[,\%4A0I6HP>'Z5]8E]6!EBOWJ%CJ);VLS +M$Y]=V,7%EUO4FQ(*?K$]F]Q2E9DT:PR\J/]Z"72*V+OU=7E1("VPQS&J38$F +MVY?D_8$9Q5K^`Y-,@=7H7W!VZT^+\P=F>N(M"^+S5A:+U>@`_G6?<';_V0JT +MD?!4\.O=IYNAL]_*@4DFR?W\482N:+=8YNL03#GC-ML(LGU9O[/WB.F%/LA'U"H-1G1\Z1)][A"NS4K_.$CBG8#*`]TUSYRZQ,YR, +M;[1<3U$46(8U'=2@,,C%#K*_%8Q?7=EQZB-QA!;4/FM3_H%!Z,A:;3%;%<54 +M^:`"9!UOB'"XOMSM6^=?V@!NN/>,MV'ZIEPC^5$XAHVZB3CFH-.BF^<[MV:* +MB)'%#2Y>I#OFHY`#+>[C#1Y3=!,01419UZMD+P+0?EA34M:4$S$T"WGB3C1O +M0&,ZN^Y=/(*?&65EBV2D(UWX9:!5]FZU=*]X.#?3C6O-K?21%$\EH +M'%GO3E'\$"YV'ESJG"A91^DB6)][X5?WUL7<1E9X%EA'W)3YWV8HOQ1(A%R^ +MU^?_G0Z231_N@(S615UEI7LCL99FB7$^1TSV+QH[Z[7 +M61O_NA&7DG%U#Y@M$SDP_:MT%,D\W!0%,*%.*Q1QXM\RSTEV+!1/)]+'NXF3 +MF@DO;AF&`!MMOB#(*=E\[]ON!VZ3)\<+0F>':;C5<_2!NUSZ2Z.)5T)0\@.K +MNIGEALP^5/RBF75KF*W9#^&,L'G43;^>`6067Z>T8HED&=9-PF[88O)*0KF1 +M0((>1$X3UFR8T4&=TFP$J$DZ3Y3'PHQANYH\\F>[(`SOF^@V-X.:37.8R?=M +MYE"1!R$3;:GR005ZT!^*HIUX,=?5CT9):ND8_3WZYHP/U@BMMN=Q(:L"$QS_CIJ!O_.,TX:PSU12S)*\]H_31ZET/] +M2%?G/A22#H+DPV[]@4'T#I"D7L]HI9FFV3D[`OP('E_<(%3<=N_=]WY`2#^X +M1!,M!Q>8,Q"5UCT%>-.=8\&-6"=W8WV<`"'Y.SLG()M28KEC4J)9.+R1K"3` +M[3Q\^O'ZS^X\A5?0?S;GP?[OYCS8"$%D9RXZ<@UK2!]L +M&!E*23EC!G"SKY3E1M)FA=_SPXX:-?OVH`EM5+5_#+4)KR`^PAXJZ^/-HV^2 +M3=UE$B$IH[+YP>D27M3>A#CVT\5U2V14D_2\:X_!30EQ6*2SU_Y5,J]MBEKO +M;(G0KLCCB#1(C1TSR"F3@/FX@R.>`<-`4IY\EV69@GX]JG!3\O)UXM;_=8T8!6-EK0/,[8,430<<`*HK-NRR2BC]IMKQ8LJ<^;?Y4*T+V?XA<9QXX$/:-+'+#P5M,9MC_'S!O7, +M_+RQVUF8$]R+[;6_K7Q!_C+?+!M+T_)C@3#TFTJG9U$01S/C2R+7Q1Z +M^DGM%%3W!."Y5"[">K'-0_VO:1%\%;QDK@5=!R:9:&E;]'CJYSTJ+14B3EU[ +M:0F.2I.QK$_'D@>ZR89!TY(;)H<6QR0GV(:=.<'IXM0.1XWB"ZV[S_WMSN$$ +MIJUS?#`_$;8GP._.V/K*N#!CE>-54KZR7L!PT$_4X%YBH::34BF$@[JA$:-; +MQE8GX0\FU^.6+`+<_G=!0DN%CD+'(E$;<1Y^RC$0@3=YP>!O&0[]96(,<3XQ +M'SI^HEMLWG]N"4T][BZ&]2=&\N9`A/`3M%F16V#8X[Z>YWE:V\#LM[F4=$S> +MHC$7-];-'.Q,J+1U0ZT(/N(MFV%/*H=7/O)_A,H[PM8\XP(W:1I'?U\@5LV]&]=ZT[ZS&A(DP+&O/Q7$SE+B!&EPR$-D>@7<0GGVA8?F4DN?I3 +MC;0"'E+2UDWEG^Q92UVT%F8"[D;/&\>K%=0'@=3:5IZ9N<'/[SOLNICM2S[A +ML?I+I9K>?&2C/[UYLV*HR\T;]R,6D/Z)N\4,L',5_(B0J!W!R;99UG#->0;+_7%5J7NIE$:]8ZW27P$6(3TP6 +MC#K^F!:M[MV!2]YTK=U+-5`UP!2)YI2Z.+YX\-I?EJT"VH#._'YIZV&_1BC& +M/V6S1QOB0RL/3)P/G&M!&-/V$D1NJ#Y]/3+V4\9BSE+S+%W8G/P4JICQQ_%@SODLS"%)Q`LR5(?TL +M(6Q`T>I(SBVX,`%=BPS2L;]G98@6):\E7 +M.%EE,0]V1=SV6R#,N4OE^;J)I6CF0L'0GE$YX6#)AZ1\QZ"^PS&_RFG5?I?6 +MH[N+Z,HZGIT%3!V^/T%`_`.##?TZ\FG4RU3?V-ZMRZQT3FK&.GW7T=B]+6Q; +MF"M(3;@'I=MWC&&5.TUSU4&3QF"41^EU^S?BRM+<^:UB!I^BA/:A+=P)GONSR2YC/"60# +M?J;/\!IYM'BI3';35&7<,&5-X_!;)NVYI)GL_L=W\R;U9\0*B?;Q=9;?I1B$ +M)TR8R]WT2,F.-'K#7[+2T01/T#3][T)^J]2.L(@)45])K*1!KG'#[)A1AVTB +M`$#.#5'G/S`H^<2B*1.C9BYM:2T!.Q%/C,;".B8&=X>$_=N6"315V6PXRH;B +MG/U63L]$Y(2F$]R#'X@&*'QV8:H&RTI#R#W"2DW%J*_WQ]QBZWW:-CX;Q:$J>(D9J!`=^/DF;U?KN+;TS+STJ +MJ>D0[@L7O@OY(.-E/T?8?SPIK$Z`W]1VC;!9TTY4T+7+!%FNYIYK[191\9JF +M:I6<(CM$*_;9U5@=5NW5Z/:57K%VK2O\'4JREW2D,95P[\EJ*"(K:3+KX(3< +M3;,]H?RF$IYRB,5@9]#ISJ,9<'V&SG_T#3=Y,R,U#)6,HP365IZ&B*-!9XAJOK+G47SZIF^V9']C/.;/.QXF`ESQ]0Y#'-DN$%;F15IN(&!WYB* +M1=UNZ?<1HH_>Z2X'_>2SU3V5J,YS(O+P72$IFDQ5U3WIGU:+R$[0ORX@84[- +M.\HT%PRT+]2`T^VJVZ(G..UT?2?B[V5A#2*-E-6U71=Y[S8$44]3U3XVZVNO]>AM.&$SYNY0WBSF?&U\2Z[Y$ +MV-Q,OF1M]?R:1.IDE$[$JC]9;.6KTQ62+&AWQDDS(?2JBJ0,!^@NJGRJ>X2;?8]!.`B%^D+]/W7-5M0= +M(L8+;B_"2W_6E2(B56/I%CFD-M3SR=;^Y#<<,IC2@LTO,,?DN%>,^(V?TP9D +M[:,;@>$=I-1Q,6?%!D=VZSZT#GY5>3ET?`G:,O$;:Y\R0]7,3/U>XQ61/17X9@$RQZ0F +MLYFW8F!"_`W4+*H[)2QDC6!CQ-"2A-6/WUU4UT\]_4+09L]&4H"GNM>HFVKS +MN>HQJ$NFT)!>KG7R?0/&3[*X^+/P@P8V=P*.LAL03EGXY4D$3(-W%J1LHTMA +M<\H$!!4OZ7S(YLE\5Q%O`ZH^9'[FQ*@1&(V*EFS+DM+]4D]8.@K;^(7&8KN7 +M5=YE7-CSTTKZ8L4`:MBW^*1W9AR4EGZC/FV1M,LH%>>&<`+SG?;:1N_7EJM[ +MFG^ZP_;T)\0-'064J7:=:HL)+#&0DFUR;A--T98CY.Z!IWVT6;'P;UR15+XY +M<,>V8';V82\^!B8QFW#$YGVQ:BCXGF5W%8$=5XFP1>7)&Q5;I=V6U=-3?%7;!JK'<$= +M+NZ11(VW7.5B$IR]_=/"41=&(*9R4:.ZS<&6[S9F`]\>TQTF:*TIJ$,T'[#3_(\A37I^AYKZ1_'$ +M;6>K`HP'HA:E%]NSM!FK8+ +M-UV5M&T84-C21IB/ATHG/S:F*35[NF*C*8VZ13,W#*,;_3K/"77+66)VP`V1 +M_3WA0=O!XLKDZ>QML#84L8M+O/!L??"B8)][K@7I:%>,J\S!`'=PVEJEXJ0I5E,(+K +MNSQ<,O;GU7]$BHGT#EXB21\2Q2=QZ(?F@%0"D^/9`8+P7_P:!P&[PX;A*GGSKB*['T"-F:NS^F.[0 +MM.?0:U@N%%S5[C5@C>-SNVI9^1=,5=E-R[B6R''@IZ=W.E_B"C4$M=A@'`[WZH-#NBDSH_UY4V#V +M?9U0;97=HR,)!?.&.2U.M@J5(RM_XB&&S#&H;A3S64LAM%$/$IQQJ&)0UF$N +M2V1M-7SEQ?LO16'C.<7+:N&=W]=11F +M/FBAPUXLBRI]T&LF^5PCXG$(7V<2\]JOE(29%5%YZ!LZHWFCSM+*47#N;KR] +MN>I60UF7\4'/[>>E&?D^&4MFN;[O0*,O.QSJ5\CP1$G/E/UKE$I^_`S1P1)R +MK>S0E_)?.&L'1ZF%34>=%.QE*BV!].NY8JX40G]G]?>;(,,@3SW^H/:+:R9C +M@Q4KV,:Y,Z-^7?I,=OR[2>2.^5'6#:B$M!^.I$;GS5 +MLW3>_7UE/?4RX`1[[78QN-GV)W<-]`B/KE.@N6$-.]W_`PXUL:!M:^;_Q]=? +M1K751FO8:*!(B[M#D1>*NTMQ:+%BP=W=W=VE+>[NP=T=6@@.P2U8(4"@N/:T +M>^]S_GS?./\C][S7?*:,K'4%>:/*TYH&<WX]X3 +M6N:.]NWTD8 +MH!\2=%)$CD$6;_(<-MVYWFZV=B"^5S#N,1&R1E.BS;!J97=':LZ*G]^5+H)\ +M\`M!'[M///D#T'"2%J-12%#DI4#D;ZKI)Z1`Y[V0->#+M2(CO_AYQJT_'F1Z +M5K-:96\K!Q/)0L4XOWS'J#5J"N.R9?-S9]MWA_(+B+9NA"GETR.X2$4S_-@6 +M@.B0)UOIQJL(E+2OA]",51'#,2F:(_G.T&3)9K[<6M76$R)8W+[')ZKEP`LO +MO&+D)R4/0R4O(LM3WQOG^>O"9UDY48D68RG>52"N2P`N,:8UB/D%K]::3KNS +M64$`3%%X.D`UB\;/\F&K&:#H,K1^=X=PZ+ZR043U<4EJL]*3MB3O\TN2;,1# +M_6?'\*_XEX2>H3#0F%WQ17LT[C2I(>:DQ*,CG,*(`OIS/N>0!$)B24QEKIQM +MQ@AOG?#@^F+CM4-1JRX'*NN)L.8_*>=!MVL2H]?HNDF?-]V-._:]#VDK"%;S +M6Q3A_[W(_TOI)A>CPD+?9]SMH$989)&M8HVD.]QK[Q(K;&P]0*"CNS3JJTTD +MJ$]6JI$@X'H$8=#3Z\/;U[' +MYKWKFD.7LP#X"U-@H:%Q"HA'WJUJ4]&6I,V9$]V3PT\;R.8][!_/.L7&PI^ +MWU!0.Q2QI7X#L,.1PFF(V[67-9^S[AHS*GR:R1@;=W#"U=%U:SK^Q6?)[E[Q +MLZX*BD*HK<2!W7=51\)].J%V(%>F#C;=/)#T3N:":OJ?'*(3`;U(16>]R(9Q +M/=/&7&<-U/BX+<9S@UYK>;_(IH\;2BF-QW=G"DBEQPM@5AR]BX#'07>/!?^S +M^7>*HA12F=J-)O8<9DCD8:R.7B"570M0D1ER$#XD92MU)-A?U'2T!^`T_1 +M>6!E^%?RQ4]KYVP+JICSY)R7+S%\H>S]S91;EW>E2`S/"T1\'=W:;DS3S]*J +M'`8*?K$0!M`(.\S(LK7`QS284U3,-/7=3"FI@^BJ:D?D?KJC#G$*]PUS;9S` +MVJZ@_+3E!UGW0X'1=0C)FODW,XG.`RL='YG#ZI>_,C;8>G)&N/`A*'YWJ:*X +MG?$=CW:D79+'7!,)*>.Z28][X[\!2LG<-N#1L.5OUCC:`<63FXXD'4BVHXL: +M@J@9,,1XKO4UHY!1]SO.Q9D>(N._2JS,*:>_WJ&.4*9R9-EMD@@Q:((N922; +MESE-Z@VW'3P2U[&V^IU(],Q3+W&(\K4L$8]Q5Q/N,YMI(&X*F`NM.7`F!-_U +MA3./K+6^H[6GCKA9`9`=]Z%\S-K_Z)KG@Z!U97(LP#\!N/7SOYG/<'FP=&:6 +M>R^1V**YQ\JYT4TR,ZGY#=V'M,QM?WA"L*'B^0YM7_88!ZT,SI%*I6FMSO=( +MYT?G,%/-"S2_3M;J$*UFQJ4BC))O<60^?3UUOS?16MD,%I:[+]]-+!@=\ +M2*=F]/AL;LX89]>D5:XF:.)`L55-!,I8B"FKEO_DHNE;73%"L&62)&Q-EB:U +MFFFB,.7*3/UF'5>VI%,_!$&#>&(])DK"7:]C$9U/>/@7]$W.="9I;SRMP%_@R26YG)+&UX'-9DH^4K/!;U``[X>LJ#&)U9!T6EDLU/F@O>W?%$%`+[Z4Z,(YE>2[G^6.6PJRNHGA($4L?X`@KD( +M`753`BQ<`15$?E\7*=C2O`VT=;*V*J42;NOZ:(,98=KK+Y'=LGEH)/'$&+DT +MJKIFQ]5I``,3^!T(0&(?L5T*0J9_6_/Z!_!UY?U/1@("HM@J2VC?JQG+Z/-` +M$;.A,;;/"M1*<%%:?N@7`[JTMX7WCT1];0%M8T[5EN&%_U33&G/6T!763EX7 +MG2_HUT.N?"J%U9=-E'PZ$`C,@6`MX>LPG>-Y5J<3#`_/4%0B=Y]DMG`8'AZ< +MI_OO[%;^E8*KOO]4QR"%(FU$H;*.ZEM9\P?CH!.V0D%PU^67_H]WE-]KIXR, +MOYPRTA-=F,4F;G%N?UIK:K;NH2F3X_CZ!]"XQ*B!;U'=F$)7;BMN-94,Q6Y?= +MXUX?#7@Q:W#L:;H9=[I`8&P/J680\#)=-33WFYB*!LF&2MX]X2,N)XV?F$L, +M>YGFZ./-.1JOY1Q3W/I)2A6/TUO$5C?G!A69S=4LH"O\%:BM=)MA2PZ/B\W5 +M-5@<%^R05!VKR6P3PU%$&8^!V]?[V%0GM:7!$(T:K"X>'N@C!LHI1J3M`PJ" +M_*?:*P2GF*@TTT:C>NS,#%)(FCH2JCF'%Y:W$.=DNVZVUZ!LA:8%'>GL23WB[5\^V;3[\_YL9\:AK0]Z[D+Y]FIQ=DB0W3 +M^!P_)=O3;@[6=N_Q4^HD7#:0BE!/"MY7'):%YA1=`30^CR@P%MYT=`\0_V1M +M(=PGN0D-BL+/"F0FYUUNT:/8+M7H]HFSJ/4VX^>&]Y#_>E$DEYXPGW]K+]^C +M7B.E;3OHI-`0!<@8GQZ!BUSDVFXW7;\=A">T19#XB_HGJM"&4,165!T=G*'N;Z[2@>,E9U6L?/ +M20.!GAPA!W.+=G7#A%;5K'I4&E1?:_3$]O9`0I,IUKC-58]ICEO>O2/1`GKE +MS)WM)!%'5.H])Q;Z3IWV$%Y6@?#9>0Z[UJUV0`5C:,/]XT8)J)J>4;\;?VW=_[N";:I8 +M;H61,/.=$44[V17'MR=_*E=8!CZI$9LS!SC5CGJFXUV4GFGCH+U;-)\-<$66 +M1L7F6W].[-(6[,/))5H#IL6D^8IXI&I_WY=W1K/E<_-U./AQN+I^QZGI2-SY"R*H-@!WOE"9AQH +M!WEC/!EK)R-%K&1:^@:CKGF^3..;Z,"XZ@@*NDI,(O?B)U*CI[S4GP-]JW^[ +MM#S@C'$_9F5I`T*\NJ%'T"GI'CKZ2Y)LS,?9-^K'V.2VS[$3:K0J@B)1O/=; +MD-ZNSQ7'QG1QVX+!""8;;+QT_V[$$>_%;"WR,I.@8NO@X2[!?JL:32/!2C/' +M*.F<(A[_T_E_^Q7%&Y22#S1IIYMIS-GR$^0446A3DE,R-LPFC-$<)_]AU`?^ +M`:S^K'+B,7:*;2G6W-X_PR_$;/8UVA^XN4FN- +M%F\T`JAMN[UAK!#U[.J%NRM"*4(W8@J[N*1+O3W7NW%ZOCO7!O9'EH2-N#T> +MY+F#(%V'[9X50^N18N,/W(OM@:1)1PK>>&X:L\E"V(O<73/T"N7?1$=L[+(I +M%VF^$J"='-+72/N^CQF8V-I\;68O5N_]>!M;HC@%%"]HQ:W,*W.CY6?RYHN[ +M]1I]$VC#.OZ2[U"&)!VKQV1(]'(=HK6R=T9>233RWGD:_8I&M?59H +M['L`RYC"-*7E +MWX35,>KMU)W2J&[5,UABO(E[ZK`[RL;3,A[`U86M/:$*:[E)MW]$$096K"^.X*5L(MYFU^! +M`%F(_)"%%RM%/'."/2V@GV_^#9]Z9-=MR)238<:67KQ=-M^K?(=I(W!]A&_N +M=.P%RN?-3FR^1K"[GS-`>6(X7P]N-A:.(R[0X(8**):(^X3J$2<88^5OX[3[ +MLU_3!T'+M!/;ZWMIB%J<37'(:`WWM[>NL-3Z%1_E50=LRE]?H>O_7%0?.BM0 +M#%YUD6-2R^35!S3N?YTE4?TW40HK-6O!!- +MY8E,;)H]*F'(UH%!\Y:2#7X]8B$%4PZR8BTVV*6WBW@SUO+QZR.:IX)4C4HHD.WH?R#5>8Z?I.I"J;%;+>6 +MY(BB7%&H":Y"%3%E$TE\+CCNH]KE'*"64I3'E^O4MF&YQP&':W?=/P`Z)=:V +M/X"C;2YV5!1?^A5>[);JA-P_@!4B9!O#]YX0:OEX/:)@\5,8TS*G@*)G68*^ +MW'4[TH\*>?6E]+E+]33-I4MNL?2!XFWZ0T#+W*+\Z["D6G$3X5N*6%_NM$4X +MJZ;4L8KX"K*I+.3]X@2"[P;W+U$NP-2<7??D6R)3H1Z3L%!GWB11G]A"BHCW +M&Z:A>Q3R'I=$Q^5-$HSN:^5H,I@WJ;^2!""(^G-@.[,);W0(OD]SSP09\5^1 +M/3U/`V^93+I$7X7'`2Z_?AW?'3+D#;5`48[10W9)0BCYMT>Y2.<][9;KS`MI +MV-T^_MU5WJ(FO@^8-OM6`SLD8/MM9/E.[_0;"[$Q)_6^>TJ[3CQ;5",:"-/W +M19H;%<0S6`'JQ,CC.+0$?,#.E<1+-_V!E4\/B6*C"YJ+0`"NXO,5)9W26C9^ +MKHSY7V?'/V'T.L-M%9U4-^%P4(.?L#551R#T@K%V\_7C0Z1NB(9OQ<(Y_0H9 +M=DS/-\,@C>C,].M+MC\`#'QYEDQ\`C5RM>:X[=ZC\Y)4R?FX2-E48N<*W-KY +M<3X$1Q8K<7P^K8LL`0C*/MJ61]`/!,DEFHHR*'++0.W/%*]1Q<1-X1RPB_(B[&F$<&-?/ +M,FOL59&H+@LA0P?NWL%KJ[!\(?>+*A)]>AG6<;G&3^CDV)#"=]6U#?TQJ]RK +M*L;B>).8X5B#QW=_:?Z?A`>%(H>F8K]#F4X63%+":9YK-0I'6CA.9'] +MHSOEHO^$^LI[@74021D*_#&.JJ_XB"*?>HY4J.@/H*$5,;JM9-^ITGJA?E/I +M&ZH"_A-*#2/[%G/'JVP;1LT#.X$6V'RAF5MA"Y_AQ@7I;89*8B[36N82FK6.F+DB@DKF.TA@YNF9 +MX7'U&2[=%Y^?=O/YWK\EG;#Q%F[?+S*K^9B`^,7HE!SK+'^O&YGJ:0B68^,$ +M8IFSU>KK\GLEL!H-B(N12*UY'V;X^9NZQ3$=R$NU<0 +M8%F:()'[=`S;1GNGM""6\>K*,L&23S=E.&04<)EJOP_B9;0==F/YAO&O>;^O +M3._&TF!V.#2R,#H=UN4H]>BX'L%5HC&H4\9F7."_X*I_>H[DYTM<%[D$"-^- +MF<6U44Y*$(F4EWQ=(VW_;.N6T-:J0XKSGC +M#MUZA!(`^[FJ[R9Q_`+4 +MY2:<@_WDJ]4W6NOZ*UD+N7>WKG8[Y%(%7<1,F4>W@#LXD?- +M_@#4<%9?8DWF,+,Z36(5UWB4[=S!N&T_%U\4778,&$,G"O2J?(*RV +M*M/LOB>:WKPH$F@Y=]']A[16E1F02=(/_TU0J27@`!^AAFWC*ENR03DCO*7& +M2FILK%8#B@?'@OX`OD>&#F;<839JM8_QL%>RY;YL%&K%3]DD$G<=:^#1V:'= +MO*N##E!_<%2*&/5^&>FQJV$+HFU!0Y+=B:U("55\VB)U$VB8@:WQ$2*U8B^! +MYXRE5`BQFAKLC=H:I^$&FTWFX<^25Z>73)NV,`*K(.'.[3ZBB\*(./MLI4A)'T[*L@:,6G3U'3>3Q-#QK4[0VZA-@VG9\E5O:*TA./<8!86 +MVYD=T6J&M_&5,;%HKKB,O[VRJ2X\5_N$51FZ;`P5]!08=!XP%%J@\* +M_#Y<@42",BV`*]GD>\E#7=[Z;,8R=K4,07OK!,"YK4GNA@%930L7(JZ/#H&" +MC`??65E>F>_L0)CU"R/?+QENOC>2%4WVO0,&4#"T\=&< +M7P4%[6X=K,R>$7Z?'R! +ML_F/N@;FQ`&]*^K!:H;)XIES"MG$=_"$05I4+>;GY2R[K-EX"K*NB[V/U`9V +MZNK:HO#Z>:9OE*D#/ZVC=2<+!+A9HF._!UEN(MP>,EOH'Y42+3UF7W*\*_D= +M08N%1<7_TEPYSY.0M;P[(RI_+93W.VA08,NJ!/ZCC;BAV!JJ@]Y2(O3C*FQ+B+KA)DR3:'.;DP2HC>$=6@"2+->F=%>?-#5ZN_7C +M_`I.8`[)RF7-W6J]),,I4^V/GALS_8:2_D^O#_H/VG&4NA[!F1A-KE&DYY=% +M50(1NYS[RV"<)H/%1=,R86%_,X'"``'FYF:!1WNWQ[?+%#?'7?YC@U>XD9U&M[GD*X._5_?J8'Y_ +M:I3N>1[X,6\.;W$A]:/7G"[DI[@R"I@PC7,+%QVT&.HV^M)N0W2:U(RR\J'' +M-$7,\W62FKJ'E$$"55$=L54_]0H#V=R;R(&]M>!3#:_^0GO[=::8DJ1<[A'F +M-\2S#4P3;9ME@0S,P:]"=R%,WGJI9!SDPM+2NF*6A$5^FM@MV^_JQ46>):5. +M.,_)QJ(%J`;(&_IM0@P5IB;VC3D$3_P'D(NZV49?CG$-L3GY>'DAV\NX +M\BQE[_8^6D8">LVC/:]\C]F-J#Z%`B+#UN +M:(=N7=CVN"Z/R1HH^WR'6,R_V35(QZ1K+5[@.H=S"UTC.&R +MY,3[B.*(`K5K\"V=YEP7L(,V:3'KO#POKM`],/G:;T;,M5U4\WD.48I: +MM?*"`_X`)N71?L]N"T4=FY&KM?4$\6R1KO%6&',JQ\$$^VW"O]5`^LSQL"7S +M*URK1T78JK0BM"+0\`]`5*[!6/7R^,Z%KMIV>Z39HB=6ZU#-47'7DTM' +MCO(0;RS*Z0_`FVH@YZ_7.GDR4V,6_^/UX-NW+>U8AL&Y&R[.XA][!BWF39^. +M24W>Q/F$3!;D_+H6\E`&??!7S'1S;[VTYW? +M;^P73[4>"9]A=!-WHQKE%=I4.I?P\Z/+/DEI31PVB3L)D/0QZ<34IEZ23:-F +M]\>(9)5NQTBL0(%(QMGU^X4PLNY([^RSYXS:>#FV2HH\SIA-`U>$=G/4VIL1 +M"ZJ'M&6X(<,;.8=E@?HG"J"P7LN1A4'8O;S;MRCRCD7U3LU)0S,'KF+&Z'&; +M[$9OPZ>OU1&M[I7DOQ0GW[-.X.BB1>8638.BT?IJS2^19^V:)!H01AEZ/SY* +M>&&TRT#KM>Q_6:[TKK0>KR&:%?4ECJ:8M!BW5(LI2HW/P%QMFL8),?T&:F!>-J"GR.:HP7\PU9):]7>0DR-U2>YY,_,?D;0D3WE->K(HJP9TBG +M,SD>#1D1Q),$]YRPZU&9'+<)@;="\744@R6`KL/2T#?-9LTJR\L:_AS,)2L> +M=(@XNI?WE,:DLT#`$VOBT!PZR5UT]?/N)0+!@J7.;]Q.]4A+4HC$$>1Q_!"[ +M:-=DU/.Q1Y'9;)3/ZX!I&1ZSYW6RP7"Q#'WG9=G@>8Q'41EH*AVT:6EQ//$2 +M?"K903E1R1`6M8;0#Y=$IQ=NECLYN`I6"@Z;NJF^81;=9HCJND_)1*X0*?2Z)[ +M/="BQ]HDD-L0ZJ`O/V(U_`53P9JJEQYSRSY/AJ`\WPR`"UFA"PL9-(&I,%B% +MA\N7#A9,=A:R$29^O$[O5*]['/Z/[\=OCRXX2]CI?.L7I\"N$4[B"<:KR2N. +M6'X2A1.?#E$&)M&[>J.FZ=$#[E?J,-V)&%,@J%Y7N:T(+&=`[.F-",KV2CCN +M)^;N((-U6JMDSJ%YHJ"":9@K(#/X9K%CU%.WI!\]H5:"6Z#2^D6/?:/407(D +M]%;L=HI2->'WW$-*`E$Y>V=*$AOH;0\:9XS>V>N5<4P>5X@A\NE:5>[U'T`K +M9:)C&/F^\279'AF"XSZ:VY571&6J+=`NRL"N*T0=U%2UHXPCEYVJAB%MC=%G +M>3E`\MI-4OI60LT:.GJ[LCB72RN+1I9R<4H'U?/?C=[%`\3%,AG39(7K0&G8E",K)Z25ZZOP:V@\8[9_^LM +MV(1\6/GRMM<,G>UP6Z9XJ,6MXS'X&Q/]PH/GT?D.T@D;6!;_*RC>.AJ?1[)A +M[IC3NJ_N,.D3R/:N5'8B+7"KZ;9&OL,-NQ[&2?]7C-,(&P.,\G\I?1=_6Z\U=Z=-'=71B?'B];4'X!]PX*[P+AD7RGVW0B +M(5D3HP6]X/:&O^*NP^[UV1T(4+C%:=^^YYZUVWC)QI1+U/<\4MPX.!D<_#-$ +M[:?_TQF9%@1.ZF<.U[7MR?-$[BIR.U+5(@:/ICOL98K6Y11CQNR.B7]-7[J* +MCFF-G-399(JU@#H +M7E_CN'0GF5VL3841`Z9W(9]Q[Q4_DK-RN@*UJLO%ME@@-36C`V)I*S"1CV)_ +MIJ>%]F)SZ9LT4NI=^M!:`AGF'NJ(=[HP.WKV-#K)[&BAR)Y1P74ZK_>O1ZX& +MH*:F0_/>%1R9UW.Y5\Y09S(79X'41,;(_=Z,C@8!SN8(+ +MU.5271TOQZXW=NS-6%BSD)G.5A)0`B,S=0!F93!96T,LJ8X9=9H/>:J&?=A[ +MZ?DE^7=\^2U6\]I.G(^C;]U)X1]'F\@6NHJK4%+.H'M); +MYO1KQ*`H=AI)V,^W=(,.N]N4?3=I-/B6CUY[+?\_[2F?7"@&'8W\1T*!ADFL +MZ>L_EU7)JU4,3M"*`L"D5M-"X1/'7?0,J;M-GE>00G[973XUO-HCUS5<[\?4 +M)6*O[L`>'%Q9K5UY2C/*#=6LV_2!')Z7O(^])06&^1L3&`Y%H]\$52>E9D4" +M:74&]9B68^W4_"2?X"Q?-Z_F`2O^93HF[=K:C)H>5;*).\PK?FF_2%T&JLIA +M,\$V8N]JMH,_H::85\(%B'*TNJ;">.3"SYZE5YI.*]8S,)DHEWRW8UU:_,GY +M1]!#-%B)]-NX:=82^-].6HD\2HJJYZT3^]BN@OW0G,$(+?*4)OS.(M0MAY,TQU_`/01LJ=_`(VE6$YX$KR)[4TO'.*W[$V/HC!#HPN;QE&* +MP"M6)IMSV-_]>%"(*^H*E`.K=!+[J)I.]7*HP\RV5'8++M*=KS^;<)A%<(K1 +M!B*H*8[WOU1I^Z/T2/Q2-MJ)3I_^X,+>5*719_]?B;>S'`-?PGD9LH,_>5A\ +MI&7&:\GKI:B+B)X]WP2^.E_[20 +M-8YZTP^'OW0)WE\J('4K_"JOVS'7:E\_[X";S?L^J1]OB=##WO5[[=_F +M63N(_&[#R(F:XL:_V,RJ'OQT%)^YU453*KA.1)C(7BX/I)=Q.5Y[.63^7\L? +MPV23`'OP+%M%%:?.IU>%TOTQ\NDF9]"TT,T$XYCVC!PP"MW3TRU27B%-9PO` +M%IK))J1KAXN2G6KA&=$CT^ASFU7^0Q-`]F:MWXCD;9VA.78,.3+11+TQ5[@@ +MF0I+8/Z%M"OF;A2@/*"1_)JF1#NF:S)BJ/FFRM>,!##"I#:?1/K<:P;]V8OT +M+22^8>?J00)IE"CS$4;0.KF8VH#D0X-M3/EIKM`N@7802Q>1^.=HCRS]#D'" +MXQXY+>#Z"W4Y%[R3'`^FE_R!TY\:TT`/ON\9H3,&ZA9+`E.O_<); +MHO:-+MR-A4U(28L1@UIG$)=SSABL*^R>E^VZ\QN53?%[QSBH +M94OV5S%I')MK?TW2*SNG`]].["*:KJ22[F\!SG6%ZJ,I":Y/$,'PRAR/^A,2 +M:5H;6=JCI0]B'3Z9.VM=C;K4?A^^:E`0SYIQ$]']B/(+#RDYNDE#UX1@YF^" +M&-A(=-F7/J@5Z(STK!%Z&X$F1A$BT$EH&.=,TCD-<%T#/B,8:_ZXON'>T8W<0^T/T(^T/P*C1I#8>*#&81(WNJ)6:8!HHYN"*QH[)G'[;]JV+=R?XQ#::>N'>(TLN<@%M_:PF +MH6TI1^`.KN-X3-A8?SW$:JYEF#]N16V!P7+;OP^XK$>8>-%(S0>-_N:[;K'X!O!EM4RZ:?S!0Z:73M8;LX&_:( +M4*C";`4=/-EG=X4#.1#Z5M+&<;OF#\#/)X;X/^Z,+WH@N'Z:`XE:]]-#(H7; +M5-XK%P)"^I+&V%!J=/S[$41*O"U!K.]#0P56[)@T'MV11!`_8O.3<<(7\L[)`K&5/Y`AT$+L5YZ.*J("7639O*XJ9Z^Z=0:C"3O[\\L +M[SWV.JV54"=:J:YHOE,%T6S)7[Z-M)C?XBDI+64L[N8>U<',W<>BD6W-SP0C +MXZU%1R^K>1FV+`)6A3&]^SA462S3-Y)9"`;EX_X`$AH5_FX[WSGL4\*>AWWT +M4X?WVL=MYBMK]O>?_I9XJ7&K@D\0.;R)5R4N>8T'Q++2Y>1V'K\6'2'XN@@< +M8*#L@GV8?(N8/M?T!]`SF:'U_7AXP36:VW(\_P]@A3IM#F,#`)UVVX:JANDC +M@G(<;\9[>OV)S'/N1Z7NP\Z(3ZZ/\G/-.+3PO@6U&E(Z\3>D=AO_AG<QJXEC8 +M8HUW5"+KB.:`LC2=1W9N@CE=M&[&W%\'D5@Y9^H_-G@33V;/"#X=TOD(#\Y` +MBVG5D%N=/!_32*O7.M]4G8VXI3G\,N]_Z4S\)I=Q^0?@BL<6;IU"5"^GETO? +M+]1!$^GUM,9<[]GU9!QHQE87+QA8@6-DU&?)8.@QZG>=I9[$46_&68'66GUV +MF6266U@+N9HQ#-H3^VJ#-AZH%,MXT.4GZRX)?UX&H]>&O1WNDR.HK.ERQC;P +MB2TI+']HY+L/:9#/$'/[`S`L&6OJ@VVUM5YIFU]8C +M++_*1JKA,)HO/[F3TR9R[+U"_]-'F6$0J\^?Z^\]U*/AR>"_[4BS_?*INA<" +M.PN\B6GK8MV]3=_1&EV`_`%8ZK(SS7>_T/H3NDS-U9BIMD>?6Z;>%`$WK:@K +M2_*//20C]S$FY2\I/4,9`H7%\B="UY3?)N)ETP-32=F,H +MHL22ZM9O%!AHVJ2H<]A<@(M;[1E>,"JME&%;X].O.LRG;_2F_CD>K9A:=;S^ +M]I!?ELQX_&7D4QMFOI)>+ZD=N\#IX:$Z2>GR9>6AFJEG-6@!>`<1Z8I,7YBV +MIKOC*@,:*^^.[(THVOHP +M]3DH!U%7X[9=!4H^51H@S3.PK+^DI1)WSFSK0#M)!J^@B`;2&9>L?U/R87.` +MTO:0'G-90?"8BCW7G=7I2:6;Q,:LV/`-:5_V4ZPC`C_R'7@>L+KW]]CX_,88 +M:B!P#?QX148QG--[FX4P3-UN]-SZ=0;Y:?M6UT.0&5QW +M^)LL%@1YW,YJH>Z-:2.4T:[T)M*=?O_7"KLMKY'_:@RRF[/582!@=NXA22A"F7>-2]\:H3'TDN?"4WCBJW3+S$@[F0TH +M[?[A<&<\Y\"EO48H.63N.-_$ZF?.ZE505T@A,6TD!=F,CE?V@+X*`<2&1HE@ +M^IV.:?6T":J.6-\B%Y)[ZIE_''GU3UFUN4LUZ/&HE4[11;1+A;B05S8K!FD1,X!@5`ZHKDA^NN_Y?)W.GOZ1V[7:5-] +M55L0"VF.K0K1-(,DA)LKZ!N0B:)6]K*@5)N7R&LPVWQ34XI%D,]5S^/CPI!$5:HOI5YLZ%`7I?J.B]J*'BHLWD;$YDEU$?C62X\M!9T^-;(]PS=Z8`) +M9#+.^Q`ZS7G@.QXX(>#IX^K91YM="&]$:MU*^VW2O<&.7,O6BMX@&-7?ST.D +M0(FM`^5XX?M)6I@(]Y=0=YHSZ. +M;=-F5'S^MR5,FZ>.!]XE`LMTXQ[A$,XREC'W_>1X];F:ITQ#VZ2&OAGP6BKO +M"L7]V7VZLAR8+QP%%C"LJ3!HY'IUD^8$BR;6AS+28JWC71E;/?IN$(9=;WPN +M&5A4`_1DX+8B-?`%UB=>X;Q%3^/$ZJ/;(9AL++>'Z_95;\U6VN[[35NF_QH= +M`"J*D3]&F(0(1EW-P034"?:%7_V&T%A]AHE^ZZVOSL)':,@FQXW/N^Y"`CD^ +MC2WE+*`UHSP8?P'QET-L)Y/DD]KO%QDBR=F"SVF%DV,:9S5,@^YRM(16A +MA.+MRH'`9Z&-:24C$F/K0PNB^>/NU_=VNGSDG!`,\MHK9E,FG:W@)KBG"136 +M3K"$&AAC7X_NQS6]`R(NARI3H92SEO,;K%0:$QMSC:*,9&(JV5X*.9_1VRO]W\`'P1%FNOO#/T'*K`,J92B2]%2L;#J"CXQ +M3R=IS_2UOTI^RM8+N+J#BJ0>86X_Q6QDZXX)Z)H#;;7,^KIOLL2D>>-\V&^= +M//0;EK=,_S?!H+9V$!7+;W2'I#B&AP^1V6KK/`0[FRRRQZXR2G$_M7>+>XNQ +M?K@![LVHU:9)Q.B'^Z8:P#;RR)AYA?ILZWZE$>NLS4IMX +MOUZG=V%6?0WN3/8#7"D]6^&RF7O/N)$NU%B5D^BOZH8&,DH=Y\^GHW-7'JT7 +M9.[3H@I$B$[27`,V>:R,TRFKV/T4/TZXU[Z6G>!`*] +MSSB&%#GMZW];TQC.>\=Y$-W:X^*]A4U=BH2Z#0A5Y_S3'\)<8Q?Q67JTB%]7 +MTWA3<;9A]U\$94@K",_"<<"*7!+:55)S!QZ`S)QD)ZN[WL3P4T[%Q+:Q%Q!PA`]R.GA7%K8TV%Q&-V? +MA5.91>JX%HB*ZTOP+/H,CB>GG245N.*DHFQ.[5'\`?QT +M817FE\KF]ME\E.0V*)JI/Z$&.%1C/2Q._KHNJQ%YRSE+C]#1%+]'ZJ<#OMD>\9W:`RJR<53<;:I" +M<<,+2;2:$LD'%WBS`W])K +M;\31$'>,&/:K@*$IQK,LTY(/4EM^T7ZZX):(#""Y):[,`JPV\HBNV +MYW23*T1BS'#'-V6C&+V/[NY<::@H:9T.:O0GD[:]<8/0WM?Y#>L;0:R@,Y2DUJP#-4',$M%*X3B?HZ*$-STNVOV]^SRY;/HR:7P=^K!> +MY,J4-NZFKKEF0[.9HU/(_MW9]%Z((/!I%UZPPP"*"Z^[%'!; +MJCT8=^Z.Z4?&7A8SI=/BH'P+<`.MM+;J*AN-_0W$?!--M]Q7!VOY[6SHDA,5-N#72EGARH]*3)0/-K,8\O>T#AX=,-NTA+:0@_.;V-M +MG%K\%8RDB=3@+]&QA%W#1KXOGM%T+'&JP4+@PC<8(.QRL2?Y6MSZ7GH%+5D' +M40PNO5$7;!*_B3Q4`:.,A;G4[!971B^])!Y>(@C9?F#-UC:`]1L/^&/],/\F4LBP4W<->AI+X]MGB4E*RY[&'\%A7%%)O;7]IFQ;GB +MMRX%VN[`W2NX>N`7R?'/]9::T7L^-'3==35(A#W\LU_/O1,F[[S9]),"AS9\ +M$\S??&ATK>N[H6@2E=&N,^AV(0HE*3[KYT!W._S*S/@'D,(;.?-E+.A<%UFR%31I@[-ESIAX'6A%D@O' +M*-9+77\`GW!=TP/&/QT[.,%`""8]NMYC.P8CC6QS\VI1"9Y_`'A+'D()BYNY +MMW^/Q@]DNW7?QV#Z2))4/O_B1,[]OS5V9&"1C$SP*?FC.6)O=;+@P]_IQG'5 +ML"Z`;8+AGF@^]NO.?9K7>T)^=-VMQKOG#';='K*CF]%!IN_H[*&$A"W`I"#^ +MI_^_87R>&"+T:)4E@5,UAIU$98+3G?AP?O%5RQ^E"(*G'-)_5`K=+)F7EG; +MMAWG]E@%(ICEQX^_T@E4\@64FWDKK3(8I@+%.3&ENFSVSD4?TKN>+)/>&3)? +M!081'OW4>02SR@FO#RA&2D)L@-[YQ +M<]9HAMD\OR10"=$][,XPR!G'C2]C:MBCOV?'(OG1JP718]D]/-W%B*AQKLUD +M<@.7V:T$0GZ-(PO">":6H*MQFMK4Z5A=020?(DB,L`J23SL=6]CEZXU!-(64 +MPANX:BUN68L.M3Y&6QLG[UR**V%15"'3MLG)M\S5B27]7Z`6<[Z4EA3BI$EH +MC6.NI(2>+&@JD:^[](>]U#CG9_U9>2W4O`Y]'V]NO;RT?H,ZFH@@*LZ/5EQ+*4D1H'1]77'+O-$752L773";[ +M5)%XK0K7L]MC"*35:%G7)^NP'7`V2+O("2GCKE4;.E%1O@[13J;IL13Y;DDU-50`_1*CF,U>LVR8)B6-+'S@I^W^5 +M+>2::?D5X/#3^;W?H$.&[^\ZQA4`O.!TH"W>0GR5;V+WM[.19=(SM#`*BC/&S&-_EYZ\BQ_M&;"A9CL$&V%Q\>ID5[] +MN)`&OEK))B5@N!&53XBDR74]M@T?1<:AI0^";;-QL$L=<8JOEGIC/JV.:WN^ +M6"`]\C>RH6%PG\L1EA,Y?Q:/-8$`%DO$9K:H.T&K;+70\0)GD13P.M7U#2?E +M\YA34BXQU$3Q.T@L]Y565[/=[5<+54)CFQ^$-%^KG@B,INL)4W4LAHU +M+<6+`(V-.8VTZ.I,+;5U2`:/QG6N&;?L:YZ>P::R*C-@KZ2WIZ1DG6896C#5 +MGE0/F"`#I7!E`V.Z2,4R9S."$)9?X$.V1$_A,!0C"BYLZJ[B(42K=J@;]GVR +M!DZ@^GRNQTH.5E1E/HI^B0SHI.3"&>3Z_DH=4=6R[0UA,@%BL0;/9!(JK,5\ +M,OB93S"1+@?7_0/X"+5&6$N+7";]`S#5H?$K68XVREK<;AN6O0OBV88P'*%& +MBPBH3@=8W(Z(G,Z@DHLLJ326RG>W;('I$(L/WF6<4N"O< +M?&ZC[+60(E_&8PC%I0H60XBM@R6_C:-?_=T3<6B.ZO!"6)5O6POJ%G'XU%PJ +M8['5\IW@T7GJA!PZQ.3MC_6`A_MTMJ5]=MCE'P!=6ZB6`?83-_$;S?3K2WPZ +MR>]@<[V[B&.IT#E(%Q:OV"+S.$096_*'[]K+04#O(:%"?T.C5E)S]IR%R.@IG\'0C +MT[A92\UMKQF)HM;M<=K]H1Y*?-QHX]]87,\DJCGPCHN\@;TO!ZGHGY>@_]@G&NB89X[8_9NCJMSMTI6IONEB*X8P(64HXZAW]_H1 +M5.=BP19O$:US]P_`Q$%?F<'Y(<8"V:)O;;GGOQW9BZ4KRNHT`],0$I9J&B'L +M,LU"=?1>*S4[NMP35F#S\A.5.)&$08C:SQ]!CU*+]();7UH[&C1I9+=;2!1, +M!,:_]%%7>21J#<."Q-T+6TFZ]O#6TGL@KE=7^!TUPSU[1DZ,SOQ.\.#M[B0D +MK3(=+`R%ZL7IU]LXK=6XH)M0N[EI2Z9.R$&L5EZ9+S+0Y8L(#'&R@O[V:8N4 +M*=O][`X\SK#NT*2WZ'2>\81%H[P7?&N=1NAV0^$,,+!S6"E"D1&\EG[^`03-7S>@$KGJ7=Y$V$K!L>-;9C$SY/AE%84( +MHVF"++\/+?44V+MCQUBR;Y4<(B,#M@GK^Z@1ZX8=MLG[CL[)NC+-?G&%KX;2 +M^$]9?V@]?UA4&.#`,MBCR5NET&%Q;+SL[XY#(!36$DH#5N6]G!'4-A.\P!"7 +M2G(G--QK)_%J193BR2<@+][D]88M? +MN.+]3T7'HAZW^BI.^FZDU-4(@5]J@'"HLARH_UXCJ%F5'8[HG`L3\<2*)Q#A +M9K=W5C;#ESL+FWQOX+Y^AU?+*(2UM31XA2Y#*+X;8/6QSY-!O@^D]UBV4(9Y"(6G- +M-!Y_O3IG0VS5W;'6N;]-]TTV37A]6^:860'7G9.%46BB',]S284.$^$S0QH> +MS_D3EC$GV!TPX"U5!C3I$^1IS4T@8PB%5,[?B>147:>3:FM^0L@N5=GG/EW' +M9B"'-@NHO!JEGA%>S\F;9I8JVL?31VWW*1+O>%KH&"3M5,^A<3:I'2&8YEA& +M/GQ>CHLR6>ND_^T?:Z3L)V*CA-3H(%(C)9@=5[*@[/8)`D2K*^'=E(=67UI!X_.)XTXFD#CG/N69IJ5F +M*V3<]=!O=_2^W&:Y`VJHZ-G'L7VD%1+1U(Z1"!JF1GUR..$M2W`2")T*UN$20>MKOUO1"=C2[X3+JJ[.74!&@ +M57_1.2)J.M05J[ +M8"IM(@N;AUB7WT`AG=5X4*#=VT:I^+$#!K2#U;LMG4[]\4,L+9:\KN11('1J +MPHX4^@?0J"=ZTZ3'6F8?.=3PR;3O#\!YI$92Y53KHXB4%B=YZ>5;%++/BKU4 +MXRW$+!@+-7;V8SLXC1(>?>$/G1(-VI8[\(57B52(BJ!7??;++DV'95\1W31,PJ+;J"J&V8*#H=9Q&M&=? +MT.LA8_6)8,#&SVZCE*#?=1ICS!:EA7LP5R769N6I[R=;E]I*"+E0*XDB!Z73 +MTB.^2P)(C&U[*.QU-P.9/2_NZ?!_PM((8@G]##SM^-'VOT21,7))WJJG&.:' +MV=<2/BW_HT.S.-#E,)S;TX\!NH:FNVIVQ(D&]'B5Q!"I/@#:3AB)05>1=F#Y +M?A,VNAX:-(0M=6G&WC#BSX5Q0E_VT2*,^7R=>#FL/V2%$*SP9KDB:WN<84'N +M_<[)])/Q8F7S?)]&CE./N0R\X[_I<"F(+#O14L5<6*%E_DJM`]$V&7J9;%7O +MTQ=Y"4%%E,+7F&%XG3U2H&CC!\!:*:%4@8\/TU.\U/)2!JED8[36QQ/:;;F4 +M6/5]]YROCX@MC*:6($>JO,GCE'U^V6=5PRINHN%_0H,^`NR9O: +MM2H$0LG$.@[1$!DH^;S/,D5-'5\ZQ`[(D-7K%Y[3TRY0'JU!(N0V[4D=%3?\ +MZI$P!C-K@*DV:O8Q^3[;EKBJ$%&D:GG/V3(8ZB;Z))Q*@Y=CK*S]DAH6]GM< +M#MO^#)=I_+,.6!T8VQQDKOKY*[`=\I_G_*-D^0>_&#Y[3Y^[.(,V%\\KYL)F +M:0.9)2RVP#JFKW8-8PGIF]KI$A^H10[+-](=>0>!FR+2K7U4W?%HJWXS7Y9Q +M5!NZCIH?HWD$JI.&ENQ2GT;`U:U))FY1;U(JKOA8?CM)6)VHJ;/F&(:]NNEG3]9O,P;T&*OZ8SYMX;^BS)[K:\'M;A?].MU!K"0<7X>=^A%L+G9`UD*"7M" +M'T)MRL*3`JD+(6AL1AW4,M,8L\:EM-;[8\%!](G0Q=YN#>KFXHC+MNZAT9HGC35P:P1HO +M4MFD4RI%O\XP<[LFBW*(GLZPL.Y-/YL98]^R'8@&'N,X^IZ`(Q6S\NJ64"[O +M[G@21-;`$8JBVK@H8?5,*,CMXZ(RBVJAV?<^)HX2J$J/DB&,$I]Z?E'W\:"* +MPLYI\#]\S,IL^Z!.&TEU_-Z_S]HO?]J2#,,8Z8V9,4D(S2P,?D*N5E$G_A7+ +M#8/>'?&)S:#7K048(?(#UY<;EH$D=>Y%A`3[EI;5DI8NTD;GOMD= +M>!1!.OW%'X`9R29F2>Y*N/V,%M'2`IO6RGV6T+#_F+^"P19+3+BD02D)\C;% +M)]'D()[XQOR2;C-B?IZ]1SODNLB*;;D'#,.679!2CZ8+=UTT&,@$N@F+TFXLB-5J6_;1M[L;62TC +M/W+5<7&JNT0LWZ1UOZ[/SZ=(9Q5E)%&50HG=^CJON>[_@. +MGT;N9'=.-ZZ+T!MBK5Y3Y]PR@M2LO[Q%/:^F.;C]5S(&4WL\=G5)B:(8RQVW +MU](Q8]WOH>.59=MXK8S8S[.^88F0G#`,`5D^HBQ_*'-9E"^%C#"OH1GA)_X! +M62V@IS,A!49-T17+)P;II399D?;$`CFZMFOS^";0S!?1R9609=17&<95S_2W +MU`UJPEB^L%NH`J6W3853P2EQ\=7*QDPT=H&,F;31A;#?"YP9\3YX(7/!*H-B +MN0(O/FR%\/[_H9K^TK7:9#F?!@-Y*/LV7!:/HSQ8@+#IO*OP1%IWX9Q>93YC +MADH5"S6&<=.V@WK80T/--J./MKCMIQ8M)=D_*`ZY"6T-<_<6,\WA6G)Z*_/6 +M)`2-U&@LB%YOW7#G7A(Q'5N\,M:$PNV*,!KE!([#[#C_X;UN3#H*T79_I[U[ +M`7G&A^2?4&='RD\?!OZ38,<_).P00J>ML?,[\6SV!`_0\D-V8ESG,^`4MB_&OUG(&%@R*I\G+<.;T0W%#M_.?RTMCF)06"Y%)F1C +M9!(33)U#ZWZS`+"U>:/%L+B0_[U_T*(Q?(S>CC//IA_71+>G +M(QFB_>.RY*Y2EO(N'.XB*8-EAX:$MF)L]+L;N6V?ILQZ*6",K_(BH4A>8G7S +M<0,-(E\88HJ5.OZ=TU=$4"1O`WQ5K96_0?>V'Z4:(WR=CB0._-4&!`")0X4E +MI8E/Q[@*8L8_A1$)HYT<:CF@V`@0:DBN?V)+-#*'L&I3?/@=L%>VF:9P?)+( +MYZ`.2)18I<&TR]9$>J&_@E";>C+/N@T@_#J,""JDXR0;0^*O\(U[EF:1+:M] +M7RHWF1B8)VLLAH(-XE2'\&<7Q1>A(M?(*)4"RF);>8]ZF&Q$"S@!["D-26^$ +M$6=X/JW(%RNBJV3WC!&L',D'?[0F3*SYXH177JBR(7=I+6&/JSA0'&^&:N5G +M'A5$OX?`RR;+_4.8;4@+5-@ZGEEF75+^4Q4A#N.Q0#!0EI+,!W1&9K=2BH`\ +MK.7W!B#2&>F$,+'T'S*3)"OUT-7!B)4GFY3^&X3*"X;_L_JXT+)Z=[$]R>`] +M6(MDK,^T<.S@GVS*PPD2'&&MH4#_\0;^];#/N,Y=/WQ"&-*CLJI$4U8 +M5PQJF4SV!/@4-?[V)J:Z.5T9OV!I7*O)YF_S\8]*&4FI[.:X3%KW.V+0 +M`V%0IJ^0,TW[YV27)'F[Q'3TR8=\4\9NRNP^&D<7X7U_]Q%ZBB6SR8NP&H5S+D\]Q@6>2WJBH7(.U%V3/)H9.^P$4HP0[8NK1Z>8#^O_B> +MI>26L0X1P$&:T1SH*O4RA^JP_8`),0`76@NX0Q2GM[[&+]T]Q2S88,)P:<^\ +M\8XKO8XQ,WU>AQ!*[-PK,@JX*AUG9+4K<$I"V[YY6)D.VM400UQ"K;$41AOT +MUGC_`'KI-NB^K958AOU^M5A5Z]>*0FL(]A]+Y1E2`C6NO>ZB?3<(EXN +MQ1W$0GD1GN"1&!'\6;43)ZDK+$RU3:+T#`M^[@$G#*6A+GA(>$PMK6Y[UY +M^F+5.9^@&QB^*MIFHD!RUM_W"C8O7O*&""BV0+L>LE@):(KF\P-D5#1=EF[_ +M=N&?PPW#4-IPAF3R,?$(9G062[M">>%%`(;?Q#_@3OK_`'<0_P%WN/%^!4%I +MB83V/[6_S:;0?P4WFH[Y'L.>0M17NM0+WF^ET+<]OGZ,HNZB,*:!,7\'YR<, +M-D95]8]((.I[K#T'_SAA\GT3S*5NPN8;]]%$1H^_NK[KF!&07L"]U"A4U(3! +M?E6!NMT=&J684_OQU?*G2;%=5#$G@1<8(J#4D$\GC=H`ZP_`;Y`"9\=Y`53" +MJV3RU-F@5V.8>G5),A^E\XA/PQY]3DMCGB\364-_#:6QI"NE8&8_J;I\R10= +MS/68YF..;/X/`Z_90+.(`)5)Q4.;+QC)DZ`GM#]+1S*^Y^P]SP=J>DB=*@M% +M8WPZ6S0O4F:+XJSTEX4GQ"3S%#GRO8^6/U@<@P6O8Q04R#BPMWK-F!'TAY7_ +M6NV`!ER:_P,07Z&-/*L=MU]Z%_XQS[SQAZBQ\ZW>6>8O,T*SL?'8&-;:M.I0 +M%<\P``H71!//-&)DKI:JW.#C[U)Z2TSS]?J17H.^K;-+]SJ +M'BCZ$(:N2)5%&U&;L#7+K+6L3?C\+N4?R8<%G6E8E9G_LF#$S>Y+1OJQ:_O='P!)>JL"4D<=.R'_CDO>TRF,`QV9?> +MQQ?_R;;%C(1Y!EEZ5Q/SL2+.`)MBEV?/I*1\YSN2-C7/N_,22_0Q2UA2KEZ? +M)[#MDM:(Y]/(I*-Q=AHAAEVS"_?'M^C_$$!-$(WRW>'4+B-JZ7BA'B[=K]33 +MS62+PSFBUKD>G5YKWR^S97Z4UK%B^"R.=3)P%KL2>NC\P^R@S8YVP?*NGUW) +M`44IP6#%I9^]QF+>072%K'+U'`9><*14XEGF[HY8HO3[4QBY#F@5_K89)X'3 +MZ7(E3?$?0FDJJ=9@^\M'D[`%;*5O4KH)6YMS+791J]L5T.[F?[K!$16.A50T +MH$7Z#]K)B\1>2W`//Q5Z,EWC;1_=I]O@52E@[<7KY+"%Q_K=]<#:$B,>M*/3 +M2WV&GF;YJ.<-DFJ%J(1D:]]GK[7.=K.MAT":=@V4O]/-LG8J=&RBDC +M,0:#.%@E@2SCT:N\H$V/AL='2S2%7!E9`%4[H0_&;T4V=%\4>ENM3>6/IL5T +M$;R769%J>OGB,'[T*6&/P)CL#8Q?9^@?I:Z#Z4WLNV]_".#=(":%XE52=1]<:)[^.R?JZ7%CF=N4>[(BAO +MVLW'Y[C&F+GLMU\21JW7&>Z]"@H;AKMJK +MD4J)/`H_;,$I29RIJ&;#_C'Z^4[F>^GG>$5'Q)&Q&UPCE8HOY*F:3?L*1GU_ +M`+2R`E'U26<&]6-*P,;[?_]^ENJ6/L-`LT;4H)5S_=%<:K37_3'T\_?&`"6\ +MOS&P:O3%&2A.>BUS44Y?'A/^9JE=QF%L*"EXH-@MOE2>?<@"J?6E$=*HH.G_ +M#<&&J/#K::0T'55?,U[YS=P5:QMZ,=E-)A#7X^]UMIKS+5V67V-OVE6)T?U- +M7/+`@5#GK#ZO:-9<.E:6VE5]O:'30G6;J,^;:?7'=&<_K+X +MS_'>$10GF%:JP7J"M/0X0S`>M)X(W8@G!M#LP^5[^[3E552&A/J&5\.?`_X2 +M1B(WNAU$K^\BRF[T!_##M#8.]+<&DH1(_"/O8)41]"ZO\_V$$VJ%&XRRL5%> +M_@^;2&Z._:F=ZEJW&HRF_N",-_:"URQ`+'M/CW>;.X;<_6O\>Y5*CKC?6)7T +MG#-\J_E[]'Z40>+JC;LR:O$?@!)_)R<+WXR +MN_ATU"0&9%8]GHZ0MV1.*V:]9/L%P1;`M\`?AO(8\TF7NOQ._-?V'V+6KENM;3/3[$II]J7`W +MI+_G1_C^"/IDZ9EAJXC*&H4V)3%8S$N($(*YGUS_?WH-_^I][R?SO\2@ +M\4\D0UYY(W*C[$^*(.ULK[_=)/I_J$%Y';:2:^CE-N6WQMM/R+BU\0S![U>E +M[GV@*/%$">?4B"C-6=ZIY34]0#U,=S5T17F?>N7!J0=FYECOS8Z[(F=@)LI6 +M0QU5J816-[7`NK&38.:;PNZ60\Z<#^3&(_Q$B70=94WY\<%!-W%GTK^E +M15:[66"\LP']2IBY?V6[SX68E]K?)I[:=^*0&CW]`30K5U=N<07("B*-,\O[ +M9PP]<16J'LM.OR$?T4(V)EK490:NORIX[?@8]!Y`P_'Z3MX8H"(;\=TG$77\ +M-Q5]E:5(%,W@YSI22#-WO)PI-:A?7'ME`<*BF!,S'MDB*R"?$6[*P076-FWAKE3>_&*$RFB4?8B09CG +M/U0M#;)2WR&,!FX`?I6#VBF@ZA@2!RD5(YJSPDJOOHFR\_49AUT25@FJ;;V% +MW&T9EG>9(=T0QALH44M/A/7+(MO:\G!,=N-PCZ1-!.%Q@8V#8;*M9/U_W0.4 +M)Y8*S7U0#^N^8MJK$^OI"B;9AZ>1:J+V_02<;3KM-M>9!P*@I6-OX#'6I-PM +MKN0(T6_GOZ<^U7G^]5LJ)QE3[\M-G"/CWI>9TB*OF=K^4Y"M9J5`8R.79?#/ +M3^1ODUB"OC+^GW(%-+B'5A`M&HV*')3XZ_$&6CR]LUN?B@ZFK-MI-,I[)8DE +M"T4<8_$?S,"%`,'8QN$U5`TJZD8O]IJD[=^J,'^NO[FX+N%=OP]%&.T4,_.P +M%ER`M.+I^NW/Y("F_1EL^OH/3PA9$PX\%FO8$F&$3W$LVHF'@+.^N;$P8]'! +M.HU+TG%L=:9-H;$L4Z^[=PK&K#*Q2B)ODG7V*AW8AZ^E$OTHLN('(IW@EW=@ +MQD(U@]A<5>!NVEQ!^A4<#9".7C*S!VI:&]WQ\/A;/IL25@.-1/^1DM!Q5M^4 +M]9<@_2B&?M+F*2*LN14U42K9L8&QGUU8:TNJF'P$9^ND*+)&KH*I!$:?? +M*#H6G$ECX.A)OOB!FSB$@EXJ+79\[%_,$`J*E[PS<-B&R'MT?)_!Y@[%@I=0 +M/ANS>8&SMR%`(!T3%MG +M*#O^D9'2;LS)VD8VCE,]F"Q>:87@[D#F-SG[<_[5\H3:Q>^2BW;+33"KY2?# +MIKGJ(F)-$[N-CGGWVU4'=3M=+)_JZ]&;B-202N%]OI39V%+=V[GA\+Z2'[VZ:5WZ2NCOFNC*.C#B +M1&WQ=1W?O^,>:`\)0U'^^RDXW)9>Y>]U0]*^R.B__%U=^;X//S!STN]/:&N4 +ML`$CYW/$5^A-(N>Q81`+!-_)NS-I@=#=)U>)J?F3[LE/_X-\ND)'-^OV?H[Y +M03B,+CTFF'0,I5]0MHBDJ[<+)XAQAUB;[`6:6O8*D)$8<)>1(>R_*NT6:ES7HGQL^Q/^/C[N+?:BR3@S#U6:A_[`V7?J]E33C7I->Q. +MXS_)^8A+"+*6JF$/T'6O5&^25/NW$74.ZWB%]3%AF="0Q58=21CY=&\6==B; +M-%RN-90=?%.@"ZX5A5H,RJG<"5A!$K7).D(4'+=[\P=@HKZ*PW)9>YR8=[SI +M#.%U*1D>2.`J^'%X=Q^3KP;JK#*+."%-1$Q"Z@ZBJ6VLIO2-B4KE2XBV@](T +M%A%4LOV#%UGJ4]K6?ZHBNR(P0-SE]P/G4M$GG9>@2JX=X:VHQURL^R1)ELP7 +MZI2/"Y!F.W.FSW>,H.!K-QO]/BG9EC]_"Q!28]8-J8W4)-"FCPS!1*Z^>+I; +MPI'.]^SCHRHT9E.:(13LI]S1;7BQ>QO%_-==.K9O;.49TWNZ"\L5[2=6S4'] +M*VTW("L2"K$?NP_LY/YCU73`.9`K9S,_:,[;N5="$BO7NQEM[%$1/#_ +M$D&6A^]7SG342@4=&X/CCG%?["X?A2%E(-[UH[)9K"5GOC[.6FHIZ5Q.13]7?8N#*%8P_G] +M6L[N@>/C2%:SLZ:L1ZH]=CU,-=W5\2CEKF!IA+SHA'>8NVM\NY75D0]ZQ6@H +MLL=971N%',+JQT=F;F.UZE#T/U"@KR,)>-(-E'XF:PR96>='M<45X!U4T]QM1JO +M-WXQ$JGKX[7\LF6`0VT1FB4VTS!3-)_@#Z?YJ; +MZFPV]^.&UP=(X3J(A&1SKPQ/O2\(YBKGCW),GW1TS32@Z6)*4TG[.>(D$)C? +M=#%ZRG+&'3K9UY%!Z`QF,WHP(\'[WAS<)OHQG +MUN7`A*3N\K+^EVN%F0W/-Z^=O2&+LO2,-;>Y[90ZW@8QJOF8T[#U\%Y>)R46 +MY033-^6@DCZ]*LI]^P!_FG +M2&"Q+%^=<185&V;%DZ.'V-3'N"EI^V1$`BTKSW08Y3IH;=>>.L,,RF^=X;:? +M99$FWE>Z$=[A]>Q_?'L-`J;S-1\9XS*NY%K7>F4!D+F->KA_^C5=P<#(4NP7 +M$@"_-"NSX@,Y9>WO[Z8Z>\0N>7=B)_]3'7V7"_W;\:*^4/3]/@@EF^W<`U$F +MX<\7TM(E;M@Z"J\:9^)=`4>#=OZ';V2DL]I+`EY4SNVQ/K35EEW0$Z-!KD() +M2^EOW^)D5C^=Z1GH:`#@%U6Z*VD'3Q)._0-'<;&:%,H8O8USMT;,>'V(HD@\ +MY;D7*YE3552%K1VLTP'SS+?H.TF[^)`0Q\D3&QSR3288[(W'^'.]83!`.'D( +MDECU0=B1,5YQ-<^\*K3X-ZQ%QM7*/3Z5VV?^::@NVF2[E)6,*BIE7O5=Y#^` +MU.R:9U>0J0K:G'&GRVRJY3Z<2NFJY^\T:75MSD/&,&W +M_R>-1BDH*AEKUMCW)%8LT2HX$YOU/^2H=):E_+Z>0*DW/F@_X(3$=:^O@T04SO=?1LUVRN5> +MW$>0_Z&-TE-W!*R>I6ES.#Z-:%&(8.OHSSD+SIS3()CVZ/[=X4UB"+N)73=X +MRS38!V8@-'+:E.YL;80[B:`D^,=+*S';>%=_:>9-7E:"1&S5/P"ZPCZ"TBS/ +M=)[?7OW9L83RCIZ!H\,_W:65/!I5DO+G6M_L=D3FW;SP`!>KU\]@&&V"HF(, +MCJ:C(1GSG$+..CJ6?E[QNN27PP3\_V!&`?L9@S_.=Z21"2&FRG\`*Z;#O@MD +M1:9ALT^3M'>[F<6(PZT%@3N+Z$YG&X(N)4K:"+U^?G;DX^1-0U8N]:C;O0>U +M2ZVN@C8Q9ARL'(IS2O +M/9J::/;QB5NXHD+50!6OM*:[^*O-T-7R0ZQ41G0_%XW"/YZ5I"VEX$?:K[C: +M5B^%9/[[+Y/0G:75?C!`3=:"0E%!U'";>Q!9ED!95K^S,?(#,82MDO@*J9(] +MR)*SNHX^2N`F-IR]ZU#7@660/(OR<;0@VPK)QN$.GNSV=U$M>-[7M'1R-F/5)D9K^FH\,]*9I+68 +MB1W@Z:-:P$,!AEM4_\,744M+-QV?**&O#CB/F791H+/U^T05E577_0%\FD<_ +MH1+[>*X#+-#L-NF);>="-WD\N\,58$\J4J+5%L`GN5!T<3P#F]7K_E3LT8\9 +MG"S(=+#ENEOC)!6FUQQFK%,6N)GRN^C9-0(J7V4U-&)6KAO19%AXYDGH(]V- +M,/[,[_H#L/R*8X21POBFK`I!+V4"MQH! +M,:Z2=:)GNJ!_HI4#J^\,YV19W^_T8Q,UIRL^6FZM91AT,V_":S7E/H]+HY)A.[T74K-+.8%"X@154SC0"#*?/1_E +M1"=.\KY451C;T.U13%(4I``G'N1N4XH$6;[%DBJR9G1?#"\S]@O[Q:=+HP.` +MYHO1*&'4Z3_%ROX/XRGD0!J57\\2E=,!4-K0Z"RP$-,QNL6(*='-M/L\^K^0 +MIZACSLL$OXG$A.6M?BX-H3CI% +MS2_NL?%)[A9"&J.FV52AI:\J5N3V[V/R4&H^7+Y*MS#%2B>N=P4FD7O&*_P,45?Z[IZ(R-/TLU2TY:FDG2'"L1`H%4OLC5 +M_754L:>WX*>$MDK3JD`"+1="D:.UL1.U?(<6[)C706[F-RYCA6+731)B^Y!( +M6DT]#Z;L$9^#&\P?BHSR/)2/!Q,>%J-F:YZV9,1J?,.`@I46]%5;CH4S=K!T +M/Z)(4>N8ZJ7N?[%'`)O9>]/,KGU?8NW$(W;7LL+/3(-II=*SG2W8A3FUAP8IAXSQ4#3KG]-A]DD$L--/S&; +M`:;_J)_'I.DV\;P5K__@)^]E,1KEO(2"H]C<7;MF^J#BW6X.Q6+ZS`PO7`=] +MF5^*GSFWR)QCHH*TZ^;CT:24DN"EI)R_R(B=&98D)^Z>L00(! +MLBJ!_#-AW1JT-GM"1-K3G4VJD4A_3@;\&UF%A(BJY +M;PC]*+U1:^;_.,97GVFWKGKHQL[AZ8UAX")#&YD#;G6A\=]P5-:`";WQ,I9C +MR0X\O>2;$QR!)56(7XU,NK3J?B_>;;WQQ$M"WHS0)YH[E9O%75D(_FTN>'/, +M"><#2Y3Q7@$B:0ZREXZ,K):8#M)M"8^2YC?->Y@Y7L%\M(;Z]13+=UFF'=YE +M_XLM,GBY]A#YE@AD(X"-:"[Y25:_P#-S(YQSN)@[C["QC3>53GK#]/UE>LV5 +M97NR(N`F>C5F$CQ=DA26S/+/$47E?5@EB@>[`9C_(4V3 +MK2]WT-IC$X>?KL?\`<\Z<99P$=&@'N +M5.2W?N*N]W!_HDZ'K:9QS(.;+)1(/,B.31YC>J3?R'WEC +MUTVA>P=[UTWIB=!5.IFGQ&B4KHC1FJ`MOF*U*2#3CMDU&(R7OLS88G8`8L_2 +MB#3*':??G^$J^="D7EKQG;>9D.%!]@<0?,JBBD:_PY'K!Z9@J'>1?,Z5G!@] +M/U&%9_]$=CJ#DW>-^2E,;!)G')RG)@TLYQ;HERM,I4]*8L%FDL\[_&S^@A70Q+F'/55H++M/LW2UN.]MIU+-#,F9)R>OX_". +MS8TN2[&]V70+RW%5XCFY@B0LF2BOWFUD2T2.DL#X,(TF278&"Z:O/9DU=I +M(7;VC&P>-EGC'E\H^7L?,_FM5RF;,SS*S*4TOT17*&I[(NY9KF=%$%/8T^R7K9OH4@T'PBU8^@T`T)^AE +M$87L6GP/:9\OP97,1*9'PG;*O0,A'`*U.Z48U*4TY>2_>16V#=J5)7<-4"& +M]Z^N;&3AMR/&)3DTW-4^'/?#`[P0?G^_44X$GS9\/:&:&1!20\N!Y8ZJ*0<$ +MV<*SZ9)\%(IE!^+7O)8D49PACQ(%@LL,)Y,0NP\9X*)9(P/NUU#3'R#T.US; +MMKG4XGB!ZG!%%5MQUT*`WN5=#ZK5Y*'@8*F/DL-!7,>:4Z*L+K4W/FT6-Y^: +M8>ZVZ,A>AT;)"BW6\1_>Q:-;+;K5BRQF_Z2C$N@7V$$/?/^IR>:(I#-= +M1F4]'9EE\9",MRZJ>+X]HJD,?>`DF.9KXV>@U>FRCJT>A3D^:069L-\DD6VM +M@-$W"G322&;'7T[:45M_`#]66=OPM;RC'MS':)"QV)<__@'<,OFK6K+GMTX? +M>J'2;X[I*VZRW+:>`1R.YE7GP5STAIWF48X?YV>[5(A=#/9>1PTM`F1QG1E% +MZW6&9HAJDG6BT$2U(5B$\JU.R+UR:)WY@,/VO18U3>>43`!G7;;[?1P19[KF +M;LC^JXP.[<7MDRL.E@=AC*I3MYVPFM'W0<^G.,&!F]"!HY;?L=TN1E,&?.VB +M\N:J^PXG1W?$+&J@LB,8CXZ1?B+O9+:.5%KZC6YF'-4^0MS/LJO*=V$%5IQK +M*;S=&;0AO1V5-;6T,6U07Z-&BJ.8R^AO[QFH,O/,K1TG60O^6ZR^?*?E8-H/ +M+O&A_++/AD[PK,2Z;_?]A^ILUZBF1[&]\:U!&]F")]Z.#IAQP5G:K8=_T,U! +M4-DX2TMO$_J#L?+A=<3I?#SO96.UJYT'T]D3P`&J/(CXD'/(SF,VHNN1RX5> +MHNM416=I85S1HT:TEOG.`32G1ZDJ(M!3_&%@X'SWZ0%^L(.3,M38;>/DZ +MH)595OY>W0H9N.4<_`F*1($?L/EP'=;1_/ZSUJSX-\W5C)X?0-V1-X44DZQ) +M%^U"TK6BPUH<_EF4>4XEK6HK44^TI'9;VU6?_U%G((S,B2%[5/TK3;9RZ#<6.&8$M5>N]&#AWOCB7!MM@CV:#GZ`9 +M`-_9^+"?\[>2!@-I]D1-EW/PY_DV3_+#D;_U+S7=O&!T:`3A,34-W?_E!$F8S]A%+; +M3!9WL>1!2^:MO0UN1Q47X"@R+*X^@7D2M'5QE`A*_;ZY8N*&E;-`^-)U:L)F +MY&JA#/$^08?NC`'&FB7E&DZ(4?AS?@,T\U=S2(9'6/T^M*OLE93X$C@ +MP"G29&G+,?J1MXM_U:$FX6EQXUPRLKFLQC%R`&Z1G[L_G98T:7]_)7?+!UOG +M/LM?2.J7QK?(UGK,5C85^4V_SV$I;F,]D^S16=X1)1X+4Q+I-]YJ\R_G"%^T +MP<*K/;9/:_H=0B6$@LH)F-=9/L)Y@?2UD51.K_3VBB-\A]E]@<4F.^?-X$HO +MC-69C1,$/;;1"(D,.0Q*SQ[%(BWI5LZ[5"X=D[%ML%YW768>.KJ[:]'TX[CU +M1R];5M'N3\2M1EJ%!$<<8!:'9%N7#A^H*U]-%L(9Q)"RG862U>ADQ(#'/,'Z +MO`0QQ^D'LJ/V6*%A30EOOK`B`I9.*@H9Z)"3Y9/@T$WHC2K?%#(MW7 +M*T7V`&:!N)&_'B5MOCK29?#/EL3L?GQ&OSS+HJ%M`;?(LJ0LA,BK]^2WJRIF +M-;$A^#K9UME5^?D]EAWC.Q,CGIND)1H5Z;.;"#0T4;,]RQW9PS<>W:ZL?'6N +M#Y&65M?#.ED".!O&&.SYE2+U6_2SW1Q4O^.FMIHV<%OK%HHWCG#V[])\ZC<@ +M'(E2:RL/:5K-S91G',TD,OPN=R$&?5-_`-ZH)KT"..14B<&KEJG-EM,*WY]> +M#Z0&CDC2'*7UX41`;6;^MAO:_6V<,N_\^5]2,[BF/ZQCD)A8?49Z +MGO8J7]O2_29JS%L:#!=+-&-ZI`C:U]XZ=%3"*?GX]ZX$]71M3-P]S#!(,2\HH659R&/MKA3QHE9S4WD4E,"P^VC'D!VNG@5APMM1]!WPAMK5'>Y7*EL]T^*Q*)M0I'9^KF;DN] +MK:G^N:8;"ESA8?<4 +M`4'';(J?&G*K3WZ-%9G.-5D,<5@;?W;X?$`4II9>`]&-5.0:WY1J).7`YMY+ +M^2!V"$GW`C-/*J9YQ7KG7PAJEMH$4BLU!YHQ$%UW+*",2^,FO"HI7:35ND/= +M,(]*^='[HJC)NC`RQG\;_Q,4[#^-R#,6LUR(FAU,#]Q,W#[A)*ES?\XT9E\- +MCQLO7:IL#32!8(^T]G`JP!=CW@IZ"GL;;/\6P/.5;4"[5>2LLA)\JM2U).G[ +M'M',D']E3R3&\VN8>3YWXB?REG.F+Y"RN$-DSAO1,@>&"Q*8WU,B]Z(^T[M+ +M9_6W-R8 +MJ\5MML^S&B=0Z,>3$Q\)A#:_OO%H;#5/ZM1D18H5ZK;_LE +M%>T'U(I(HXZ'(FIR>'@YUE'D.HL\*I>83=HBN3@ZV#<$K4FC<*FNG*AYE1ZA +M^$!A.F9,^1S-K,:?;]+LE(PZTBM +MBDJPAZ!_SC[C<@S0Y`L]B41XNW=>(2W=+]Y!(^4ZKU&Z5->M)&;=%-AI`%`< +MMZF&89U-UL#F#5?\#.9OP83;3I;+(OMF/:2\LOI`:W9J4+Z?4AC5CP=D2&%E +MJ^X8LXF#>*QV_(5$86L!7BV:/?RS7=L?`",UJ_,7`;95-I]#BZXZ6CH5P9&V +M/'`,TW!6BJ+M^Y!S@Z&:#+=>AEK/-5.86,K9!$H\.R,:6&3CYABIEL!;@P5A +M[0#O6#>NFTO^O^$4/[EF=H04^5?.B6<5)C&H;31;@,+8MV=E*)#0U;5G(&:] +M=W#PY^AIJE'"L/TF/W/MP"BO`@4Y_?LQ.P;:"EFDZ+U4WK@\Z` +MT?M,0RWKHBO4UJ)Y56?=$?WI;8]Q!UJ/#$-W&"&)4YDS\J*=3M\&?E">'`/& +MLH&9EUYK>*D`".[)YL0-KJ)D)^\*8:DHRPAJ>%<4T0[%39&OE>./^X%%ZYAX +MFW>'9/C?P4RF47:F;D0JFBN$\$.]KN8Z@[H)P8FK@,;6Y1L?_W,B8.Y6D7>D +M?:9JC>2>>HD53S(>Q.#U.*8#OW2_1=@9#M(TYZ.::?GY3/_TI-2E;+?B*G1% +M?JR*.$GEK6K6\R``R+9E2]N?@VEPG]>7*G>*E5/`,[E/E1B:#XG3#-T[A@>- +MTB=0.F!HL3`(D&U_E1CKYR(G!6>+KR91[O*GD8NT-7PGG4_W&O0>H@LYYBABB +MEVN8*#5HSFMHQ0_'XL>$A@R8>Q1?=_X`FK6,\89;"IFN$],&.!(F=&8U9YZ? +M7-D-ME5H?I9>9=4TZKE:]`4T'.ZUL#_N07`OQ:;LYF-!2^8T_$4121,BM +M72]@VT\WLE'D&O2IX=J[0RV\?QFHR"[B70*WV#O;7"953+2,]"F>))F6JO/I +M1.(BL4]-.IA^0E0'SW3CM72@&[*R=NJX==%/K*X>]R'].!?6(/GG<(;O?DGT +M-W&+_3Y8Q%RSAD;J)'L9I6@V)5]SR*X7WL@/C*K,+MUFR!9>A_M;UYIF9;7Z +ML-,HLO=:2@\*CR_Q3Q\L%HY34M=RY*11'&Q;;W4 +M1N_E#`74'V79G$<6^J6$823V$8:^4&HFY*UFG+9OTYZ<_YXD?S_4C'<^^O40 +MHV^*51$^ZO\0Y5S%`\O`<'/.1*LN?Z$]H,#_*D075=?,2O$'T'1W'[=X;!DS +MX?!!PMJ!%'/;-MYH<%$ZO`M,J&5H[!./'N2;J8VRYS5?YQ.\@G[3*S?()D-H +MVNQ[=#:P&UV^X\)2JTDZTRH5]K4#HM>OTZC\`L>/CJ??VO9U7A2!%Y-V=S,8 +MZ+ID9N&6[W*B&<5TRB-Y820:?%J"6,8+/H^NG!%6+0B+B"B`A6R?E2B"/'%U +MZ3VUC`Y2-[PMM_%IAKQ.=CD@-^1(K3@=\Q%QQT4:#!-Z9_7U3%H4M#( +ME@JAQ2WCY+LU>CO#L[LTEE?I+-@,EX!+&FB[5-=K=CRTRFSFB2,XIE%8QS#I +M,;8M;R\]`VHV=RH<"Q)M2@-:GAMX^@_;C3C<_`',O#7$:=C7T2!4K]<)%[JM +M5`7B@EK="9V@+I<6;7)2#?NA'IW41(R8.AW4Z72=?1XG?P"-+GH)=@9OO,=< +MS_#B<>K=@"2NHW9JJ38AP'X;MU9D=*<[5J)F3,&KQ+%QSQ%_HI9EL3+T)6?Z +M;[RSFYNLE(A3>^ZBE35]I0Y''*SUCX*Y1/6.(Z1._E<`::.9>;W6O;9N178. +M+N^YU(F%@,QT=ON!3?'Z#)TO=[0O489_KARLR(3R\H$=V701G>;G +MB#GR!9B#G\?YU.4Z4NM`H#'N/M>9LD0Y$0>M/U9I+?Q?K,29]IAP\L0D6$Q: +M>Z]"QD*@V6Y1[P*'1+-/EN54=ZR3-\1DKC[6M\[J`8Q%]U.8T@SDCC9U^$"? +M!>X3S)D1H[,P,4MY0#&2,9L'WO/-*2I&51!478/=*3]M36PT +M+0]T7U'D1T`[P[KGP.AKONG"]^':L3M5?<\&1-KD8D]R2,!K%%9+]G%L7\G/ +MF"3UMC+5FVY.:HS&_Y4[EM="B;05EW\3'IRIEFSWV,J-^VQ4]72/EI47C]-? +M?J=A7H6Q+3C[QEV]U[:)#O[A0DQIEE)O,[$PZV11[3_!)VUUCG76<(3C;#Y] +MD.V^<(7&>S5=?,.2H+20S\Y8M<7UG=__-ESNP_N?5N")9--A<[INH#+F6G5J+*X1ZS9BHH..SUG0='="Z9]1W+XK/Z:J<%_Z` +MA?@X^<%HCN-5.,N_([\>U+BH.8ZY%_\!RZ=#M+[@TR9\/9,W"/_BF*E9/$MS +MTH!"*=(XR%RJW#?27U4:2J4Z^81CY'")DD.[H*8-H6T[`K&5/X/])]KZEG`. +MQ-6Z!7G3I2? +MMQMY3IF<:5P1`4*U?(""2ZD-<%O7E?G;-L;,9\N[*$+RN)X@^FC!,%2\K8Y, +MUFHX+F^U>5,)H7>G>4K?%?ODM%"\\J:8:>3I&=8XF()M/&9_-,]4GFJ!@,/* +M_E7IU^VAO8[XI>T+)ZK/(6)-&+LG[Q<)J*X;5W3\`]B5GZ* +M*%!S'IEYWB-\F]>=L"GPMMIE@$`'=@Q.R<2I$*50J*#/(^D\6%3S?YWR>C +M6@E],H42;"V`YYRSVNHVR'U"4/6NU@8P]X+B,7@H;ES7]'(,.FF[IQN^&![V +M2CMV?JCFU`T&*>;X*[=C:9MV)&EQX@;8[28"%;2?$%N$QXOL+TF##$T*T(-H +ME,4.VIH$?.5RC--IDQ4S=`\->ZF:$GN9F6W$Z/J<5*?,2P6^FVB)F;,H@RY5 +M[YJKB-#[CCF=SBUS'L#ZU:/_OD->FM\=1R5;(Y>#_H4JB5W)YE)?44E\-D[L$X+WN`=VB +M7C`5"=M;)YS2_.,H,*_8L;MCS6I80`5^$V?0QCPNZ-OEIO&JG)YP'U +M^?C;,"J/$6TA&/)5YL?F4KN:)+!*8UL\/?"`%DS?4C96,GUR($@(@6))9P)8 +MM=6M5'GP/97N0C[QL99._4I'%B^WY+H/Z3+_Q6Y/%JL@PO7F&QC?$]+\)H/2 +M"HU#[,"Z!JQ0TC^BU8[CL"6+]U4>QB+X""#0C8$`Q#"G9#"$PJ"2$-%:4DF30F +M(3V"%5%!4;&"8$'%A@T50>P(B"B*V%!1$14K5JRH]YOQO_?_WG/VWO><<^^S +M[W.?LV=^_G0]*;/F6VN]ZWV_[YM\S1C2M@P=LJ$Q\M`578:<6A");IFSA[9@ +MUX?QLN?*M9WVC_UYV.7$E,'$X@:Y+H`A<6J@Y+B_8UF +MO1Y-,HU7Z6*5:T$1Y@$VO^Y^_!A$<%!()_QL<_\W? +MI*!`(L4I,!""R$&!4"`YR(D(!9)(1"=/XO_[M_O?'V:C*3;)T],I"45-_]'[ +M_N]>___I,7ZLIY3/]1P[O@<8!Y,JWC,>`<,Q5HU:))1OSMQMEZ>=)LO9)`IV +M8F8\;D[`3LQ,P,UX[,1,.6XJL!,S%9A))F(G9BIQ,Q`[,1/!S6#LQ$P5;D[` +M3LQ4XV8\=F*F!C<5V(F96LRD$+$3,W6X&8B=F)F(FQ!V8B:*F_B!F7KUUAL]GH-A-J0@&JXO]"Z3:!"+S-AB($0JR9 +MKU1H$+W9H$?4B!DF01"%"$GX0JL#MH'7";%&(9$K$4M8#JO9JD/Q2M:IC'PC +MRH#-7".X`G8@'!MJX@@$$%%*IJ,:.@<6D$@D"M'T]V4"R@%7MIE,F`=T.O#$ +M!-Y"Y]"1OR_'QLL5&E1M-RL0!&$%4ZF0C,25P":KYE\^SR42N4*F%4%1)0&' +M+:M5939:^5P4>!!K#^)@CL0CJ`GFB(@4,EVC0>G@GR*1#7L!)<'87PB=CKD` +MT^GT?_ABXN!7,)'HV.L!&J7>I)%KU!H^ABT0BPN9`K#7;10;YJ65R^+R405! +M0]#@<$!C6%&K685YP"'S(L.AOUYH3#8.D<1!-<`=<)M_KT#EFT,A_"H:.HB( +M`#;9\`-%%']?YVDL4OQU@EZC5*!ZLR2*)B'QV2P][D$P5FJ41", +M1AR#C!*0!YAS'&H2JDUD18F)G'C,"\P)&,4#KL'C2.%K-`A-SQ3C0Z+0F,!@ +MV+!Q0+#W$^A4&<.`Z$RA$#Y6`:C>9*>!1(B"A'+L\_1@,C6(3*42(2RHL3:S +M6F&"A7BIJYC6OQXX$"VJ53-8UB1&)#X6"AN'CG*D'!3[1@$UF*M'%&:K18TP +MB=B($A0@,6TH:L/OP$(-I,EI.@0!?^PRW(LXIHT6+8%A_'682H&``Y1@J@"6 +MDK"OC"4HM$PQ$O!%U"XZC@% +MPH3-B%EAQ^\%>&$SX;G.H++L.HW&;I%K#(B%86?+\`17<$D0_KJ`2K9!4A(9 +MH%@0QR&(A"#LL@0ECXOW3FP,2*PD!%&B2C7+BLB-1J-!3!&+<2_P*T&4*#[, +M(G/U&H7:`6N0!$2A9O_]EMB_8RBS(WJ:GL$RTW0:FI3$"+,ZB%A>Q,;_]8`H +M@C@D$8E*!3X(I!R.64`AX0'&H1.\(SC2:DTR)*"$!'LXH%)@,,142A0BE^)> +M:,ADD\E*HW&)7%!K>AO7A,8A"&I&0O]Z$2^B\NQVO1QXP&3Q[#H]D\(*,\CE +M"NO?&HH'8\3G1Q!!5X>"R"`<@D@'`X8IP20(\P+W@4R6\=3:)#6:H$$0JUFN +M5#MX('LCD[0H`H%<)EFM+-ANL=KXP(23`PQP^P\B8QGUX-D,-AU!H,.,9AIH78:@<"02D40 +M)()%%"H5E`5$HA)AFP6"Q&0AG\11_/5!)(Y*4IN-248C/2Q)&\X#91$EC@JG +M)S(0;3B!(+5&@?9O,P"84^@52@MLM1HTB%VOL/)M`.^`#TP*E4@+BR!#=IU# +M9T`0H%(P52K%N60R`"Z0)K0__J`DBG: +M!*W:R!9'A"0A]#"669W$BPRC&Y/H#"TAGA\"42E$*LE`U1J%*33<`SVP4B +M`95*`BU(0((`^K/(9-M?'Q!JE#Q!;K=:U0RKW9P$$D..AM`-$0YC.%]),$5% +MRTABV&("\*]`U#0:S6*ELKO%8J+!PBB:"8P"E40#-TY` +M>`RQ#`RS+(P&AD$'QM]`0Q0*G28N#HP#QR:0T@'2&NEL/D?@$)&"(5A%9Q/) +M$)$$,`OZ.PX$:4("HN(E(0E)1KDU29F0H%!#$#U29C@[")?`BR(EPN +MC6MCZO5\":A>BYY'9C+$8!S`\&MT-+LXDF8'$`'2(98D`KU5`'/(9*F(`YOA +M(`H5(A(A,E%()46"<")_L1H4)MT`HA\I5LM1`):H"K&S@H/#C7:4H.'Q6$(B +M&R2!70T\L%MIL(3*9UJC^%:[@VLRL82Q!`M-KS>SPLQA>BP?+/HP(B1F&.+B +MX@@!@$](!7:^P,8C$6&1G2X`O@11@3N05``![(:(9ES5$!`^8@R7B?F1]"2S +M-H&@),@3C,)@:K@==!L;SVJ/#A;"0B[7H#?!,$_')D%10@F+9D:X+!O3QE43 +M5'P[(MAV(O89'LYB9C`AQ((-F`/W"0`.\1<07L8AD +M$8!EJ8,HL(M$H',&B!-0JPBXRQF/8!& +MO9`9!H*BH[$E1#'X/)LCHI(C2"1B()'$@T0"*#@8`E`%N"H$@<&1"G!Y!IQ- +M8K#)P6)$RZ.#SJW6@D.-),A1+6#J4C#LH&6&6&E<"8L-`(H81;."W%!H8)90 +M0F1Q8?!Y4`)('$UOI\D1@UJ'`*`."[.S(!XA%N+;^,$D`8E,H002R51`T"F1 +M`JF(S@$\'?0MADB$BS%``Y.2PJ.B&*B9;DPP:A&MV8"@6(6J"`A$C#*9:"`K +M:3"-9G?`-`O,AP`TF?1J"QL6\F$^%P1,D:#0&>P\,0WK%!H%R(X(!D@.@'`4 +M$5T:'"F@@`I@`3R@$ZED6$!DP`Z10"3B@'Z*CX.40]`DF4.2$@V)+(;6&&Y$ +M$+46!6@!^";!1N7;K8X0+I=IA<%8V'A@#+@2H<5NT&A,("8PS&+$$6P:1*%# +M=#*B'1L")`XQ$Z$PT#GC"!R`T])@$A%T"3Y$%(M@,NB:`K[#SN'0&2+4)I+B +MXT!R$!0L8R**@!Z5F,0'M$&KE2=HM4HE*$T.9%>8V$(;S40C4BG\T!"NW8I8 +M63:K6:FWT$P6.YLO!`S=#/JD1F^/,`!%H8A#9++H,)K=H@L@2$%A@V8-[EXD +M#2+"8`R)D)1#%_`@$EW$-Z-T/LXG(24`PR2M4FL%5Q>3V"#8*H(ZR:!$5`#E +M;`HU4QC%LYOX$B(5$DIL!I`20IX)D#D3;%4J:!+`^F.)818$=#.&/$X!&*<, +MT`D'S4#3$0@8)%,H(N"_5$H2D"$A!W`)NXW#)TMML$.%:D2X#W9005"22FF- +M-!+,8C$OC*=6VB,-6L`O";$RDUYCA84.A";DLT"CY%KL5BX,T\Q`RIGA4$1) +MHQD`N0V4T`QA@$1J@`NZ"")/0M,;[&$T0BS`=8@*60&'`A@%(D*T2DE2!MT, +M0:";JX`^8^"2V`B^@Z&6)R3QU1HCDTV$HM1:L5AD0&-1`B)$-%8+EV:RPE%" +MF"N)LF*MVT$S*4UJ.P(#5F-3*RP`K>TL'8VF`\0^3DZ+9,ID@+[P9`J"&G`6 +M*B1BV@"9=42`FN`1(0&=PQ%#)-AF4B`<#@_7%S`;""ZE1JDU`FP"5"8ITF3& +M63;H.":>PASBL-JM0I:0SR=*F&`00BQ6P&B!G+5;0$DJ`04%B`R4#R!7"7%Q +M*(;6H$3C-#I]``&F`.[&%YCI@,D*`1P0`ZDRF]TL`&-CAT4P+!7\K4T2]5\H +M_+]Q*!`3#4@:&BF:P1"2)78K*`38!-J7PJP'TEH-6G6<_M__>"R9`DG9?",G +M*#A21`392:7RZ$;0P"'0Q8D.@%4\?!*!(@)2QO1O'IB0I]G4-&X(4&QL@(H@ +M*'P)EX9H$O1JS`^K51&'8BKJW_N\+1@BBNPF`9G$80B(I.!@J@@H=8Y4*!4! +MB`3X`.%3%1!&OQ$=4&@&!).3+)8>1!<4/`T$FB"W`FT!*`R7S96`:'!#*'P: +MVX*Q6[U>8>8:%,HX3.K:.4(HD$0.),O$4HO-0@=:5&.S@0$6@'0PFF&1(Y0. +M\P!?"!+`?'!I4:10*A7`#.CO=!B0Y"0VH,-`7("8ZL/LNC`Q+0Y1&'1A.B!1 +M]%:SW@1Z-BR41`#6(8%H5IAF`H,`.(J:J\9H2BS98@J504+0LDF04$"W&10: +MNH6N,0&!'4N2\F`50A>(K!8QB4*E"!B!Q`A(*I5*I!R[&**0_G(8@1C1R!%$ +MK@NSZ_4\,2/,[H@#`Q,),!FH)(-:J=&K8=#Y_C&=P@1I:095:=';[8@9W*N4 +M:*(3I0(!7RJ523D6$\A+`TPW:5`#BLWJ".P6NI$#>@2@H&1*A(@42()8`*H% +M1*)`%(3\Y?94D,9Z!\#W")Y.1Q,S=$B8W:ZCD +M,^FCA$#L:+AL(,(M"BP2%E@JA`T<0-'X=!NJ00%4VDT:C98I!4[8B!B!8A*E +M-B5'*H4H9+(`PD@5X!126*3!.6TL68_$*0QFBRXR4@\J2J^16T!`##J)V!`& +MX!;4!J+6`T9'AB0L+F35P&3@A\(:Q;*JK:#IQE/%@!IR4)-#(!32405J`E$% +M)91P@&H!^D48&8IAD,@'^1@*H#;1G,!662`7$ +M@+\^D'1RP#X!]=+IXA(`,B$(*\(.FK`"X_),E@:;9#`YB$16-%%"8T:Q-0:F +M!2L)%A^V@E#1@S$G.(HX4ZA8`#(!-"_@`@^F"V0R8&M`6@NDD4%$*0<0?!@0 +MZN`(V`@SJ&0&*$P0*C8^U0LN)P=`#THSCA`7!X:"%0D(,B`EB(['TV.DTFZC +M,20A=L!C:790(C8:@"?8W*\%08-\>A[%#!),K>HN.)F/\^_TD/MAA,@N%4D@&*#:B06&Q +M+!1\B=ID%HC9'-#%P+@B@G__\P%D/>X#B#C@/B`&&DRX`RHB!S>"D51`RV@& +M%I&$C0/=CM(-=)0.#COX`SHI.#':S6&+R42+!2);-(C)`9&E@-&"[DD72YET +M5(.-#(>$3ZEB!VI'[3:;S8I/[]+I0(4)=3A&\0!7!77Q=Q`T&@M&QK!#;P`D +M@"$&N@-DMAEF1#`<+%2)H@RC$F5PS6:A!&0UF4P$(QYGD$D1U&9CRZ0VT/]0 +M!.60^!R'#7P51R0$/O#I'#ML@=E$?&(NF$0F4?GT4``N0HT#G\=GA#D0A&`` +M+0.$11>/Q0$+#""GB"',#)@?@1!I-"48N0PF7Z52&D%HS0PS:G18`3C`&@7P +M64@"XXY-;-L(@.&!AA]*$HKXAC@$%H1";(#F'#Y?Q*'#=CY1+`-*2\BFVV0D +M(#\B['^70\P&.0)2+53/8DKL>FS6`.0'IK'U+$F83@SI@$IP@`12\80,!Z)& +M54K4P>(G*)2`;]+IX`,F`5$`WD\`$(EH8(,-^"`0D\1L$X):8`Y)08B7"H1$ +MC@:;Y8<=#I$TE(Z:V%1R)('`B\#Y),T"^I6.Q;`S&&%A##U^>6P216ZWLX@\ +MNXR($%">&2685&K4R@@!(T%`C4*AE6!4Q1)L,`I*SD(''-<$@Z(QP38;'9`T +M6$0";!#DE4W(CR70^1P!P&J`GZA9:Z=K4!M3"#1/:#PAE,?"U^H0$`5#&,V@ +M-]!H9FP80$T@>IV2P"=@:FP`&^""0HH!#@#!)B73P)I$` +MQE@TZ&4("#J;#Q`[6,P!39,0@=>%'(R##H0#Y`2`>M`RL)K61Y(ALHS!(Y)I +MH&N1'+"0QT259H;#"D)A95BM#"$+=0"9)P4:RP2)H4`B-J40J@)#H$$U,`DD +MI\"&Q)F$0I#]%!G;8#/_I7<``VT5)L]MI++N=*8D$^!1)T\L)&I:5%Q2B`.@#5MR<1`#.7$*&PXX$!\P?R([U&B!89"ZF`\(0B<" +M'T#C"(XG""SX.&`L#A-(B#R.H`&*30/DBMXB)D>*@4H%])5@8Z`.,=?!9"A` +M;(T1#*7*"'.9/)XJ`+P62`+M$N4`6K4< +ME"@*N(2.I0(&9\AC&$RW#PC1I4%D88MC!$B.4YF`XK@\G@,I4:E<[,LBI1 +M/I?/$`JY#(#6G%`I(%)"$1V1`#4R45"#4*(%P!<`,Q"@V)K +M#J!P8(=9Q.`!C.X'R`Q;$8S`T2"(103F694(5>![JDR\QA6AH2E(-"!\!$#E-#`@%."%*1; +M+3!3P!8PP7TR(!OP@:-1(`$(WE`0Q`:S>:$"N@E5)&C4"C26@&O>,$`9S&)( +M%D&SZ_0ZLR&.`'`B3JX'_`5P`6P^1VEC2+@,ED3,!3&)5QF5!*4-!0EB9,(H +M`0T4$@6@6]$A@($<`9!X`L!I(%DDAV[A$U'L*@A&`VNIIB$&CXX&(\Q762`E7*)8P^0XS +M8`\V`FHU(@Z&BB_&IFI@P'U@F,\']0CDA8E/AH"D)1'9;(98J@#1$H%,UJ,8 +MW]5K.5A/@SD<$"\L:X$/`7@^Z)E,C"B'V`>VD@&\86Z2&A6`H! +ML@E2$@$U:=,#3#?`'""(.:$<`>C>`"^QX<'U!9L4S=(9#'8Q@P8H/38,""9U +M''I$08L4:@@(C#)1(T,L9'*Y5C5!2=`0C$:CV0%PBL$%K5,`P,]F$9`X./,1 +M!(JP!FD'@"%U0`9403")F!P[&PR3B>[@`-DA%DMABPVDI,ZD,=#_^F`C@5CH +M$;TX4F_`!`;HVR!%+6:]0L,#TI-@4BJ,#(*9P>`SN6:"1J%"330^<`(DJB22 +M":ZAT1A"I3)0D.#&.(%".B828(@",`MR`%+-`:!,(I&%VE"0J':@M""V!06W +M"@@-(U00^W<-)4"C,]`L.GL8)C/`S6!?AM#LH#[M!GR56*%T@$(PJ\PL4!:` +M-E@=,%^+FIF@?V-K^0%T0#I%N,*"91(8-&P%RB:1Z`H-9,#6-VUD"I#C9A&V +M@8(/`0HGHN-ZS,(FPO'_6-\$WX*P`)W4ZQ!L%#!AH3#8Y0">`OYE2@>%4=0A +M!\@`I*`#8JB$0I`9#(?B'Z\C'-"G0=.%(6FHB6`U@*9$=BCP)92_,TITAPF6 +M"4,-L$A&#B1)05,!:L/.P;\?GZ?%%VL!B,@QG12'\VL+PQX7%X`M(E.(^%HM +M^#Z5565"50HC7\@W6R&N$9,H!#4Y6(K@=P&2`):)10[$!)BY`_#L>'R[!)E$ +MQ^\"`8(3MG&$&*0*8!''AJWY$0BFOUNI;`(IOO"LD,MU>I"I<1H:#Q+KXG$/ +M!!H-_:\7!`(`!@!/5B&#Q50Q&-@]:,A4C*OC7L2;0J6!$-NDL-A`O`+_;M@@ +MB\U*!P_W0A,JL,`"D1`".6N`+2CV>1,4*,5Q$@6$&_]"0*$*(3`$=$,*]4`A`PP1,0A.@PW<; +MH&0H,L2()``HQ;T@T$,=L"/49C-:,#5.,)$H(I&8_W<<.$I$)%7C(Z;0.6@L +M'HHOY1/M)I,>XU\*A/YW;T@L8G2`-##^O0(YDDS$IE4H5!&#B'N!:-0P#,`( +M'V4RT4CG6[7RA`1"`IUGP2.J`HS.P+'A8T"ARJ0`0G"E?]NUP@JDR +MHHAC@8&VM*%8)P:53PGF_&/;$.8!24`74*A4D!`0T'NP#9OFD2+_4B=D8@(! +MD:/*!`*:1&+(-80$!.'_8Y_,7P\U"">0(C:89'_7LX#\X0@#(2E11L*\B`4> +M!$K9`@Z@H3``-@V*;7<`'PD.IG#^;@T"=Q!)-SED1`:9@JT+<&PH'$@"6`D0"Q0BTB,>"`@=@^%I*(2`J2ZD$>`1EKYU"# +M*=@B.@0!..21P3!':14)!"70'5IL.8HLU@)9B!CIAJ1PL9@"G*28%.`[Z1#) +MKE!HA;CVAP4<(O!`3")!)&PK`;8[`%`2FTUK`?T-,'*@HS0FAR!4"JJ0@[$. +M.T`\(VJ$Z0X&T(\4"DD%*&(D$&^!%."#5*L$ZA!-2-`:S.H$@S5)"P;$;$UB +M)+&B(,@.&BU0/T"9R_CR6$0(F_">!=2YF"B&Q"(^)`9,%]PNH#\Z;.<5EI$F +M-`[C7Z"V(R"9`*.7`D8DMEW)0)<*.`*!((A*XJBP.1XB$0H"GY#Y@$AGT92%,YP>2 +M84(\B2*U@.S&6BO^!Z.`!@[@14Q\:Q@(%DQ7FFRHB00)!"(KAT0A$6&8@4L! +M"IT0#[JZ/0E!C$FL<',"*K=CRX0(&!5^D)'.IFO!/<`.C<(D%&GB;#)8@_L@ +M)8$/$R/L&@>1%.@@("2!`8,$0,XQ(@'X%Z!I(@$@YG(4%)8)-$H.@&78)**2 +M1&8!C*W.D*0B"#`7@$DV@C%2K08M7FLT)R9B6XVTP!V0GTHM#U+;&4E:T$A# +M`81(2;`&E4HU"GR-%1(2`P,#F8A&(!63X@A6(=UFPAAHG.8O.<;:/L<1&@HX +M(*9$`P@($=ND9@>U@2^B4X*IH#C$)**42L8$30B=G@3JP*A5:3$5JP1_Y&B" +M$DD2F]6.)&,L`;4H#$2R&"AT6:C&A&.UD`]&4VI"Z1@)`,R+@TVH:C2H#L7Y +M%W`!)"@=R'?8I@&]"U07Q!<);!!$-`(US7&0R4'`'3XDY9#((@*!$W2A"$R +MMI@O8?-$5A&;!`I)Q`%]+Y(,4E(1J5(;4<1*3S*JC79M`F('G0XD9:(L2DQD +MJ>U):FRM04!'Z"02$;&*Q/A<$$D&$07@BD(9"5`)#20#>I$OY4M!EH@0!R?4 +M81%`,K$`4&:`J$#7`YT+DA"@"9D4"/!90`D.)@+I#UBLF&@C@-$SJI5J(L\: +MJU5;@890*='$)`0U)R:)^<"O1"/0VFPZR'-9((P">H>/`T`G,>@.;"D4*(HC +MV`!6D;!M;>`B(KI(R@;:4`Q`'!,JH+59!"(-:'ED#K:(#D60J1P>-1ARX`LD +M)!$?)7#,]J0DE$4*T>IL6H!5209Y0@0#2TTU-0I%U&:0$!P>Z$$6H@AUB&`V +M/@YPJ)!,$;,Y`F(@2"D!*3`0N$`6@Z2WP8%"C@5PGT"2&)`UT#X!W\'VN%$A +M`>B7)&PU@@Y1R71!!`?F\#DB\'FIV4@/-_+Y2DVCAB;2221*&0Q8%L6.MTL%TI#Z38> +M,9`J!8(9G(08=!AP*$'>A$V&:PA(K80#D1HB82@K%>AD@92(IF0I: +MC`"B$F$V1A]@`9EHM6L(-EX4-8IE-M.3U*JD*')X`J*VJS"$`FB-;7HRXWN/ +M12#@,JE(3!+1[3A6`\6*JW($=%2"34,7B0PH&!60$_Q0V.+@6`QT`X`H$VH# +MSL`V+?@6F\A.HD(2`-,4B"/%NB@'(HL`PA,$8HA'YR4E\AB.1`9='&[7JA*` +MW-4FH0D&+=!\26:0)`0..Q0*%()A!J(0U]T`8O!M_2:Z#9`*H&BYW"8P`(067S.0X^$5]SU]CL"&(@ +M0C8-#")EX-R:EP&:TP8F]"8@#L$`@MT +M*AZ;10P$&`G1Z9C,9H'B)B`R4!0@&^EJ@(Z)25H#&`8E*`DK(`]8@2;Q`5L" +M#2&"(PH%R8[-G>#Y(!0Y8"F%!","`P$)-9DX1#'01#8=8@+MRF(`H<"FD5&0 +M(Z!Q:E`5Z%P$#@>T&!CP+^`#@XXMHF,'2K`E1?*,0%*@\@2YW,I6(UKP06U" +M4A@#8U.H(80/D86)("EM=)N(Z+`IZ$(<)[%[5)C06(5&04`%-A-3"`%$PN;Y +M'=A,FLV&RAUL`-4:38("-5F`BL=6N[`<"E"@*FS&'%^!`I44#Y+/2K&;N>P +MI7S89K/@'F@T)FSYBQ-*!Y?26V&V$.,Y_\%A`^60B"@3C&95@I(>+@QDT:UJ +MJU6-J`!:VZUL"+(J_J^?P&OSGTCV*(K-/F,)H\%G(`&_25!IC4;`')0)2GD"@P*QHTA:8P*@ +M50@"4M28J-6"BU#!Y8!T9_*Y8J$$GQ-CAJ!6EH2G4B9@0M%&Y+-%'""O,)$' +MOMR&:T'`:[%''4!%`JH%2T&2`H*%/PR`8.'"SK\902!HDQ*MD6:0$2JY-CPR +M3"8&$*E`066J,08CQ[:62LT,AI$)G!`3)?A>=QX3-BI43"87#(,2C*9,!O%# +MC69L012GU@I"`+ZV@7$'(84$$I*,@`O:8!.VJHRM!=HP[J?!G,1VKR2QK"#^ +M*J-1)9=KZ5$06Y4`R#V;A:!:1Y)<"1*2I%*9F5:=@\$7,KDX1H&K,U&UBD=D +M6/$G"$S!0,-:_O):`BXU]>!"-BVX$CTT$ER%#"X.`,N$K\F":X,ZPQX^P)"/BD7*D64P(3`58@(>'V!'6270E&BJI$-"HCJHQ7\KE,+IX/ +MD0R6D`'Z.H/%9!A1\!XI609\P)ZMB4/D-KH6>^X%YC!M(!S8W`M'A`T"!W,! +MQ`J[.+9C%W,$9%`<2(E(L=6H1E$YH@9.)%'(#JT!4:GM:K5#C;%1*10"8J,D +MZ$`O8T!_\8'+D#*9K!"CT<'@\I4*;-D%J$T;]OT*A16;Q;,YV'PIC-6R!N0T +M!3'!(A&^0H*U>!/V#(H&VR.*00DVP8-$83X`A##:$U!U%(D.V*U=JU79038` +M9D]E"F%"@MID3K`:4>Y?3LMD,D+,7"'#;&8(&49LWR;BL&+DWH1EF)X#BIS*X0AZ,8G-]V'0?-Q)_%H8AY!M98I[#`1(#\`T,0C2H!EL: +M`YS#!,BU!A`H$9G,U,01"#PBH&QT;$BP.7@;'7]("N@",H!6K%(U"/9T%0)( +MI5&NHB=J@.[4(N;P,`8@V@G@_@"YYG(97`=!A:)*D/FJ$/S9*)3%-,,2+H,1 +M*10ZE!H5YH,&RX>_=TH'O,4"1"G);@D@:*@B;->X#891K)-R\`A@"<.AHW]7 +M+338(UJ((=$*DH$%F(@.4:KL0.V2Q08,1HE6"9\+4L^J!(5#X`-8PNTK(! +MI[`Z035_URA`-`(PL0H^FA`?`/(K/A9`Q-^'5H(4!(80!)_)4!H=9I.98<:? +M2W*8K585'VC_2"&7)PY1$?YU:O2_/^B0UF:#K4P>A*E^#M;2L.OCX3#]=0*@ +M6?R_^WE1)+99A@5RCVF,YPO-2@:,S\LQP"@XE#RBD`M\D#`=*A4^W?-O''1L +M:8H#."80>@#HR8"*@31$;?A2$2@CH,.P)@P(I_S?_#P8BDC8CJ+6$(>5P5,E +M1!*-.A83YP\LAI#+4#E`-&`&%V`$`9N+1^D"2"K`6S:*)1X.1\`''L`OC#P" +M1RA$&-/BV#2)(AZ;)['A;\*F*,16F$HAD20PC6FU8GFE!Y+"P@15!?+>;$+! +MV/-9*FN44(7B6,W"T$K"!#T#E`6#R\`V'!'!B&,/RA$!T4$Q`(3Q_38$;(^N +M@"$B0:"O"HA2&.LJ6'O%;A][:`W'"W`/9)@K@2B4*(N)1H.QG8YRC=G.C0;W +M`+*`P<#V3CA`6C*XD7]S,A;F\AE<+DVIM#)@AT3HP-0]AR,0B2!L=@-[>A`( +M(#J6]-@ZP]`,``M46BDLD4$0=(06-'8[BZPD<*\&(;2/AS"0DB#S(,`6.1@&`M@"[`602!('O&BRD:FBO\\+8JME*."'@/G# +M(@$<2X#M5JL9`5*>!%NXL-6L!\F@H\$D@%@,'6JU&E5*!]?!4"MU">:_SV_B +MNUL`;@$?U')\APE,!!<%HH$"XBZ@2$TX#&OPY4BQ"9N2P>8B8`H%PV><7N#+ +MZ$0144JA2K&][V:8!7.M!BA8R!)R68B>R>6R:5R*&=LO04!#K#H%P2$4PM:$ +M>!2/!4%GQ?81J%"U4H$2-$846[NE@%LE`GE/!$)3@!,%K'<`71UIPD8(`RH1 +MEBLV]._>%9.(#`)FHY.(,#:#J;;PHR1<&HO*$D;`,--&)/(M%J&,2R!(`M1& +M?J)*HU.B#C[#JD3P.5*54LD70&B4>',5RV2468;\C?S5W80Y8HQGY-@(+$LQ5V&IG"%_+XL%!HL4H@B$^S +M6R'L@3*1$80]!$W0H2A!:891-:YQM%8EBNTLB6`8K0RCVJHC:"`1MLV30Z*" +M,?_;`Q"_(9Q7""#DE!ZR`HHOC!$(!\A!85Q318A<0HBDP2836P:30^N`>F$66* +M&7RNE8`24(<0?RY)A\8:)5PN,41#`!BN-A(0`8=,%>"R&PLS!P:I@#4OX`KH +MG'03MO]2*L`\LF%$!H\":@.(`F,3)2`EHZ@4&=>J-UMAEL4*"Z.XF-:QF/1< +M.!3<@X./6"619B83D%J%D8OW;E1)-V,[2[AFP+5!GA!,(AM$X>"J%QMF("0` +ME9,"+\#((`235$0"6&W#Z?1?YH1E*-Z^P(C10>H3@RE13(6!9N%;3$`B@P+% +MJH/F,%F`UH2M`)4!F6/P48U2J67A7,ZJ1LU&-PD`H!F&.[!$O#`3I`BGGKP+`N$P>%@,8D2@%)J!(\%`$8DA.LPL\1,NIG+ +MQ';(2^DV$@>H".`$_I0[G4,%12+@H'3@HE0@%6&:`E0KOOM'@\E2;+"`JP`F +M"0H266)2(G8:UK5@?A0W!"A8V$J3`$9C!Z2=Q6=RP3A(Q&*&5:-1XCU+A2D> +MD*:@H1KE``$0$IDD0&%0G2(.MIR$4U@JR`<8Q$>`/;F&T5=,`N&P@7%\K#:Q +MNA!@Y`'T=*M&8=>9K'8[^`/3HOG\:#`<9*[5;C5C:,V,9#*`W.6R^$#RH'^? +M$;,9M2@?M&\)K,,V1Y(`/S"!U)."MDT7@5C#@$"202BPA@VZ&AYV'+%QZ+!A +M?(X."S"B@P(?#$2B'E%;$#M0@Q:UW2J,BH"($I*$:*7!H:9X@H/`!V7(%4M8 +M<`@?:`SO'BF3>OQ__2LV_W7\KQ[_\>\_)_P&O$H/_F][\@*)#Z7[__]9]Q_#N__^6)QYPV&\3Z'[\!YAWH&4CQ#*3B +M/][E[>D<[\E#$_%?%0IPQGYD*)@6$HIOP/+#3$I0<"`=-Z=C)CF,&D;'ES8) +MN$FGTD,8F.F#F\%46@@-,WUQDTREAN"?'8F;$)44@O].TEC,)#&H$`U_HF8* +M;H90PF@X,?+'32HEE(8_$S@)-TD4&@U?8I^*FX$4*@V?(1V'F4&A%/($?$%E +M%&[2*-`$_'FA,;A))8?]_04F+\R$PD@4*OY9?/NE'WYO^!WA]X%[C_N,>XK[ +MAWN%^X)[@%\7OQI^#?R;O?^_;I[_X_6O2OR+`/\Y]4\,_*_Z_\\X_L/Z9_Z/ +MUW\(!3O_M?[_^6MF>/W_\Z?/\/H/9F#GO]9_<`AV_FO]__,'V?#Z_^>/N>'U +M_\]??L/KGQJ&G?]:_U0Z=OYK_?_SY^GP^O_G;]GA]?_/'[[#ZY]*Q,Y_K7]* +M*';^:_W_\S<#_S>M_[_5GX!:$_]G$>!_H?[)).B_ZO\_X_@/ZY__7_W_?^_^ +M'Q>;F"C_?RP`_Q?T'Y5(^2_]]Y]Q_`_%'WO57XLJ4?]XK3PV2:F--1H#](G* +M_\%K_,?X3R&3(?)_@_]!),I_X?]_RK&3#@TTLFI0U_P[Y#N +M7<'_F5N$P4Y.GD[,4%J4+?=-GMWD(C_Y?OZM&:(V<:.7EW/G[IH!/@,Z>W4O +M&M.C9&%FS_0>F3UFYKE7SO2!G6@=BQ9/ +M#_5\XYRZ\VOKJP-GINTKFZB;;E"<^93W:=A68]))X:Q9[WY.?G=TVK6?E':G +M:>?ZON_T;__UI]N%/Z^=VX_J&_W'J[W\+][Y:5T3*7QS/_CKB`LO!WT]>[#W +MGL/;!^.77O +MFOSK$4K,M_HK\Y&`W7/G1?=NNM,Y]:XA)\Z[YN',JLKQS]MK]'FF[XOOM5%7 +M5`\1;ENR;NRSE3^_S7_P\?#?E(77KYHJ] +MY)&$BYG&8PVU.?Z3OK>75_W9>OGN^/F3PE_/%MG#'-03S,*9QS=?VSCMR^F6 +M[P=FEWPY^4AUUOZ8US7JY<7EH<[[8?>$?2-V[3PUC3%K:(E6X?%K39^O +MYBS&3,HG]Y:B3]-[CD@I6E-J'/3\:C-UU:D"[LD2MZ4U%0OVA70\0SRP*,PG +MAW1F<\4=>=#6_M<6KQSU_759C?1;J_K&TOCD%.2ANR'%')-WN\SJWF>CWZK* +M44\,WG4^B1G9TZ&VO.`.I)\[QNV_?V7VH.3S"_TW!_]H:P_*O+_[G>GM_"UG +MEF1]_`UN8FW4P&3W.KLXT+G2MGO(ZR4,C?3]^:0^R6<.E0\^5+N_OO;`W@N^ +M&A=7O\H?W^H]TIEGVSC7,D.;.7,_]HY+>K7>EL$3[ +M/.@,Y0?ACM[O855V^WRWR>1WKVK4GR:`_-?MMLKXI@^U1VGR_8N +M$AYK6L=0.[[D[SOU>(;SVGK"64U_>9;KB2K#O9;6!XT7OAPH*TU^ +M8M=.?M/RO:_XM0D]D?;VO"_3Y&\(W*F_ZVRZ3?DYM&+KC>T(_Z#)A<$03*NSPK::F[Z>7%S*.[ST1$THW+OCY +M\-O-<[X]9;E9SBD!;OL/.M6P7/==+KM1/F/9'2\O:]9+GY9UL3X>[\X]Z'8_ +M^D7K!_U7W0ZF3]:#P*L'_6=_>>'N?%;1&'-`<^C"9(^MB3S>QF5/7%_.CF3= +M6I!T>9P;_?"USIWV]0BT[R_]-7Y$\J@S,65=*OPB&XZNN!%R:.%^W^;^QY;" +MI-K;E6'JRS6&WL8;]SZ/>MM\I]7U8Z^K']OL(4/8NU<&^HN#+MZ`L[K(TEJ' +M]Y7[5IC&O@Y=6)Y^/V[DWI&'E]WN0\H,79N[[.(FONG9G97CUBT[R4W>BS +ME?,[/TS^.>7MMCG/'@Z:=ME]^XH+W?MUWBKVTW[I64M7RIB9ATI\^@C,L'ZS*'):_=_?Q04T:G +M\%[Y\D%-KP2=2@T/S@6=1'8OWIGC.793L*M(U7N4:6&W](R9PUIU4]V?7O\P +M$,D:0ZV6>I2%%X3+`M/I/JY<#_&^7T-;MY[-'3\D<\X19OO+VIK1^F7#"A]3 +MN^PIFJT3OWZZU##KZ8OM+^[&27\73/GZ9T=>T[<.. +M/VW[OM3,37QR>_>@?BMO+*S@Q;>L\5;>>7U(>_RYE-]BVO3S6HSEM>8M1 +M9AX/,.>KX_>UEN00N=PYJ*H/!BK?GMSJ]2&G5'U!JIA\9(%^XFQG1=6;6[.P +M.@F8=/;:U^$#3=&\^8[^?XQW1"Y^189?!>[SFP_\.2V$=V;=N_#CUZG2N'*5 +MZOMUW<")[R]3M_X!WY>:/.;@8-G5DE +MLM"M=6Y3BMO4X*LEU`$K=P2__7/R5.T%T;U]S:/@'Z*4WAW73-Z5TK9G8;M- +MV^8^Y=:XP@9KUI+YCZ[4'QU_M6S>Z\^//E5J^EHVH=VN-;?G='!*?C8IVYIR +MKE1^)=L@>WB\T'SIS)8UJXMZ4Y^ZG;%6)2_I<#IC08SR=_N0?LLKF?NS?US7(-#Z5X'&U)RE0]G5BHCKG5^#+-73X<8?P;T/?O]V?%3 +MOVYW&@98``@%S#Z\^,G@R%F5]2=FW8Z=6C/U$8?8>NZ1:5V_Z[OWC?#7S7/Z +M0MKBN3WL2#I$Z-9VR[\KT1SG/^1/T:8$[R7UOA_/3;E#/)7Q]=BW>6=^:RY$ +M>SQA9J5OWO>Q8R>)TVS^LT/FUR]C;BS/CN_6T2']\+IZQXJ6U/J3%:.V4,8U +MEI^8=1X,^NYAGQ*.;CW0.YRF(>QQO;&K<*`OPS*QVKNH(.@,XUA1POW^,3&G +MLJCSS5,2&0H0#4[1DM^^P[<%?49PY>].5=(C;_T2MTX>N>K.FZ*5_ILM +MFL5=);_J>SS-GG9F5][-*_;T3J:I6^W573B;I;H'9SZ^X>[=*UFC$CL];E6ZQ;O*MVQ)&1/4>BJ5&C/WN6 +M]FV<^^W3YYI-O]J]70Y=F,\]G:H?=ZY3Q-GS3\Z.Z+)M;5R%?_9JQIIC+A7; +M7P:.^\CLUT._<]RF4QV'RSI.7^N:F^\>U7W-A=P>UV\,Z.J9>UOU@JCZ<3JR +MP_-UJ]8U+.ZG\>A_%@"JV7K67[ +M#'W#E5-?J\6_*;.O"2[E+QOW*F2H2!@J6I\PKJ+JW=M=W)5U1Z5/L^I^E;S( +M6FAZ=V/][<.7[\X^=26\[Z,0D*;L>=0IZ)6OKRQ%W]8>#PWZKI61FOMUN?`\ +MH4]+Z**)^]W'%%WN1UV0.[=="_KN^I=QYP[6%0]NY'!UI:A.I/'\GQ +MM6_/$X)&.A'1ZCY39Q5M.=SOPG96\,Q2_?FXXZLY/@M_5=YM.E8Q^&C#B%VG +M+E1@V'&<2>GOA'#JM_._^ZT(%P14U&:]R899/COEO7/ +M?.+'C,MRW_W81U[O>K]E_ZK^-T)<2MY>R4Y9*7`I4;V9,//KW8X/?USM?>IS +MO<;6M/@X)T^J>=KUN7],3=97CQ7O)G*8AZ./2,T_?`R%UP->1>S +MA#-4JGC<#JC(S3[[Y]BXLQ6U-MGWQ[BJ'3OC%9.']Q8PZQLV.$_) +M]4CM')_DMG_)SDWG\J.9Z<[=G;O2BQ7'XCTW5&:&/1TWMK+A9U&/_5-`$#N> +MR!LUO-1Y`;ELU:B< +M1?IICI[\]7KG>1\KQ[[ZK9^[A5I\-O#/2B]L\-2QZ0 +M8ETJ&`&_6W8Q2+H)Z?6O*W;='6.:T6OFF9[M+P=_4/B=V;-UU'SSA+[C8C37 +MVT!O^=[6N[E7\D;MI+C4^<9!A8\/?/WR9%U6B9U:G;**D>&N^Y)$&[!TXOXU*W^04L^EL#C5&UB>I +MOSRF&T7B4:&JB*W_T*,JWOZN0_L!P;J.VDKU419Q9Z,]M_M@U:?';E +M_,J?WQ*^JW5UQ0-3XX],/A1?/?#$D7GE'7[/Y>4M-&ZH?>LU=-4:CH]*TS_X +MAILB@:ND_-PLRQ),;B`J?Z5U6C'TX=>R5%^3]_/[D7/^3 +M&TI>B*,O%OJ%>U=#L]_]3K\F26$,"I]$E78I].R^](BT[&5?2=#%6S[MM9[I +MM]*GK=M6,+N_\-`A!D5Y:KVI^X)MKR[X=HU@[REPNWOB7?>M\V^=:^JT9O+^ +M7MX'%G9OV_PU\$SQB('=-@AFFMSCYW^`"/LO[]G[JNIVIY^RDWN&+TA,7]S] +MI-RZ;!'M[IO\401!Y[>=]^/^$1NK +MY]Z?Y6\?3+..`4)A)OE4M!6]58SF=S@'R'B0\8+=OOTAP*FMB:HYY]X?#,TL +M?AZHL&R7UUU9QM(=A5\Q%O)&_3%P_H?H5,KT +M@`O>+R_?CSN^+5CGTSSRPH?!M:DC1I3:[M(WK1;55:VB%Q&KY2V]8Z=S9_\N +M*[Q8,O[UK`>!+;-BMAAV]8?>JC]^X/URY&8-654X9V#]L,%W1O1Y]G#4YZ_# +M)W!'J^K?F3L:ADS;/"'7,+!;Y)"51_=75]'GSV"M::@TGCV5LV#\E7,LZK6` +MZ(I=.[H*#\)O'LY/OS6[-3:^/#!MY>!S=^\9&TY][IEYO"N`AIRTY5X9'L]+ +MUMY7;*UZ6G?K0=N5N/)[OY-K1XVS/RF>^;!\A%,=\]"66<%-&7$#FT?S)M#+ +MA_)"2B:$4Q=TS%.*QS54EBSO=*2&XL)\\B3V5KO]I?(4:6Z/^E:;^&?XC[2# +MIUNM]PH*9JH"7IO!]U$LK8E-W\^FA`CVYH9;O89=JAO$SZ6T>RUP69MF?EXP +M::1`_.))V\GQLC/SNO5A?@TH;VK>G4=?RI3T+A&6?9=0(V=JG]\X3[9[3'G< +MT^A34):R]99.^36S4YK5J_O2#WDW9DT[-BOXZ6_I,'\DFNJR.\#S-S_W1JW; +M/.A3])01AL*5NV.25VG"MEZK:&D+N7TCM,O`43/*3\G.K@Z.7^[NLT<%1>`3AA^PGVK#(!9Z:^3/0?SZS>6;95=&:'@Q?VHSU@M +MWS-F?,O#Y2V?OKY=FDTZ%='-(Z+LM?W`G_>LM+ZWRG,`?6]<>2"Y)*F3O&)X +MVKJ-@A/:M;03A:O['FBM6"DU/.HVW9"04WZC0_)"EZ;!.W>L+/$7=QSC?$(;,O"T +M]$W1]BCT['?HY,;+)5/Z;)EW8DM*M\T8<)\ZG-`S:%2?.'"1J3-+.\P?EU8Q +MTE"WK8?#_/%CY:EGP:$=*IHNQK'7IB]YWR6RNWK(0L3CQ(0PS^QS.HGI=O_3 +MHX>/;[*MP(;9?HU[Q1;7P3C?W$DR[7./=)]806A,SI0E]HP[4'-.W87M.Y8> +MCSAQ3+]H-%DNWYEO`*P).4(JNG/^TK[(A]FSJXZ,3.&6?QC\F[]H\Z@MUT!> +MR:1GMVK4;;']]Y>&Y[H1X=X9L>]:R6<:CL[9/2[[?5? +M-@?+#4A$6>B,K-V_=RZ-`="8T)C6M6O?%Q4`E+*E0GOTN\]E2J[>J``SFULUL' +M+-GZ8&)FU>Q9E3OJ1^G?;GU8&7N!/[Q&TAKWA-%BV12_U#&S9CFW[\^^-7U_ +M50T3OHC.?YJRX<:V1`WAC#Z+MEZN?7AJT,8&FO=ZGUMN(]UTSQ->N$1R"%MZ +M;1]YTO/^YGZZ+@`9>I19GHR:=F;H`N5#657;H"@]74>>MW:Y_]Q,_:5#3_3W +M7LA>/+U!2RF=Q^E=OO_RX>BKV""7[Y_;O*[0-KE/6)^7]-A1*W]PJ^`"$LF8 +ML_8,4>Z;]V*]RE/S)?S[]P=]]]ZW=5+6->_1R@L=QZ]5 +M^Y6^')/WF+?_(B$H0%&);GVZ<=J6I.B"N[\KEO8MF[1^:M2-`Z/(C9,$"4?Y +M=;>5HP_60_O.@N0.NS?O6Y<3*0\\'C1_?@M90 +M0L8N9RSJN#E40ZQ\OP]*SQUP=(OLXM,UCH_W=8,^;-J&FM$^R2F;YD15!&R& +M=_L^J:-?#!G%_'$ON'^FU_;\L/*+PHZ,K*Z4492C2WIV'73$UBCIM?=5;<:[ +M`S3RJ&PHV>GLW,^K.'E)8W[5G.(,G[#@==5-?9]?W7#.*+_\WNM7\/NV +MV!MC%II83C2?X5-"/0>'9'19UKE]9WS@$^?U)1M"UDVY5-Q9G+%X3:>?]4=1 +MY\1="_2A7B\#6Y/;87BW-X/XYD^_M$,L-ZM]:L%Z8E_?DTPG#G:2S&WFY\ +M&*QK"H[O^B5._RBR=9XB$/SSPM@9AON,BPGI60%Y+R+?/*TYU"=V(Q=D2NJR +MOF2/BSV:.K+AJ-#&GL.;?^^^%JIX8J31^;;YB=> +MZZ,^'TQYZ_G[9XP=UW=X,PYF4CH,1>&8HAD]N359?.G#"H3 +M7O2]W[NBJ>^2_OD'5K,\5X?PJD-]NKG-R#&Q'F>JRN\>NU/U5M+[V-3S=OOP2<6'WA#/UG<],^3L)L+GEU.6DC6OCL>6+W4J31*7 +M=S@]\/.^)H>;!.[F-&OQ\8N1TO91[QN&]EM9S[RWI*#W2/<[`_,VWOH"N+`4 +M%/K/@LRG)ZO<'A-I$]=>``S;W#;'5=YUH[7I5:!K6E7@5PGU<%Q5X(83;ZCC +M+FSJ61M>[/+Q[NRIY\8$=UA?4+EX^OP8:=&2S56YY>RCNP?;&AMKR<=K*`&# +M;R\=.7O($&IRGO&=UOD2R=;C`W&DR-<_W9;J`L=T4EY]&N9FVA\C?@&1CDN* +MBHS6GI]^V_ZV8^>).:=GMJ7/G,_@ +M"NU[0Y6?XS)\DG +MCS_[15!VO/[\N.KNORG)"]AP[)I%J3H/2WK0;,N`_B;+D9X4;=;B9FZ5#'IW +M[4+MUFLWNM[\3-ZR:Y6[\1ZT]N.?9KR5#>OD=<,Y;&!9Y9+27Z$1. +MCJ*RT\FVS(GGFKHR(_;<^3+FZ0?)QC5NYH31TQ_]OAZZ]ZJHTQ +MW[O<]]@L.Z$;?WKL2>+K=,&;QK*M)W^\C9*/#99%/"XRM+R_V4Z>#+V&%)./ +MG)-.VS^Z^>O6"P$;GZR?2*F^A3X,?[0/.KCB]ON7/Z9,Y,5Z;MF;].W>>S;4 +M(_Q\8UY'+]Y^17Q=5=G>`\,6S2K^4/]Z?-RM3'K[BPO])Y^QD4^L-6W/NBU7T>]UWB'-J.9`\X^:3S +MU9?GXHQK5FP>'"UCJ9AC1DZXO-:X\0EQH6?.>Y8XS20<+/X9=.;AS\LJ>VG\ +M]_QA*X;*_*17W9I.]#U=C<[^OOIR5N1O4XO\RLDXE]?%;W<=FQN8,^;./&W_ +M/B_69K[.:"6M?V7O."-'/SGL4/KP!W_:PV<*[V>X1XS;=G36A1VV,:M/F3;. +M:E??8SBZSO^R"\CMQM@F]4^7(L.U_K??U*Q?L[3WV^IW\^T$P/D3QMVQW=Z_ +M=E"9MGGO=XU4>DCYZ0_1..#3AC?$5N8^YX-#A?&IW?ILWME"[3QHRY6[HX)* +M;XY;V_/>O3JHG?QFU..>0YIE#/?2`RN/N,9LF6OS$A]EO+C)[#]4L#Z\ +M("8W_.S*I;^T#Y,V#61.,7$JN\"W[ +M(&TN\2_U.2Y>.(Q96\\,6VMMT_SV +MZ?5*Z'VJ[=7N!]3MT[[RAEXN>15PY93#)Z;ZS'S_ZO=L/T%ZSQ+- +M1SY(,J>R.>7YRVR^?FEX0V^/@CA!Q^K.9Z:GBZ^FS;A)KY"SJ1V)1=;^6U'DW*"HO>]= +MA%&%[Z\8WVF4Y4%W&C_F?ZF@N4*N8\KF[)B_"B)57_DT?UZWI=S\Z=?MS.Y( +MOU7;*N(J'QQN6*ET[6YP]'USK;;1W\4/FIN3DM8A]_L.0>XD[6UWUVZYYS]] +M&SG.87;>;#F-$.-EVS-TLS?VFU8R_EW_6F34(DK0\SE^AEU!VT8]RC*,`M'^ +MVO7!Q"V[GQ^J)L[/B;HO.'F/,=:OC-C2L.J[MG'LL4T#K.J7X_%[ +MEWX=^<+@*=ZWX>Z7VM)[[1G[M+H;^GQ4WVO-NRIFU_?[N2Q<,4NQSJ73O+." +M@#('YV"R8X\_BVY<\*G6+Y;^RWE<,6F+R8/&;%KUBK.RQTA11>MM^I"*Y[2@ +MTB-W;P1?'WWYF/"/.B>1F]9K[+0A61WUS5?[:K9XK]EZ318:0OZP-'OMX67B +MY")7S<@.EGW^%]YD[["=F#>>NG+*TK(M,W>./^S=P>/`4G+`Z?E1#SNN&OI0 +M@KPC4W[NN*E[P-L\+:SOUJT'GSWK7#R\[H`BNO+`M_?A\MSI_*!.8QZX^:63 +M^R0DQ8P<)>ESYX[IN2MA(FGNRK/Z$N++C]V.M\PNR6L<17YU.W'[K4,#ZDQA +M4P_MZS8$,++\7;UC@]@_-KVE71ORHC1(6+`C^''/H%W%X^=Z>&13[)W/OIO* +MG53_,&?5[#*)[6WV",WJ_0E<@+>#_OR<U3-G +M3TIMG164_J?GB\]?4L9]UR^AF+[-V>+X&O0@:ZUAA^;N23/UYS&?ZI+E8FWW +M%QKYA@0Z/&NY#V!__3(7[YF+`H\45[H<&%W193)1XYTQK?'BTXRNG[XM[ +MEER=.(4<'FCI$$T>$B!K?K9KR(N8B95$>)G'N]/%;R9];< +MS=KMC@ZEKCX[>?=<#QY[Z+0)=ZC^Z2;O[4N=W/UN[%H:-^[Y^>=NA7$>NQ.4 +M_%V7VN[$M.5M^($M`A5PW3,C9^KO7>L6Y?KQRT#JQQ<9[&]M!YH;;CTM]WT1 +M?:PP?-"&`%FEW[L#CW])_O2\[I[$_#6\XY%^&_ON/1>GN>%_^FGHV<^EG +MC[O?'/S2LBMV1)_)+YT>^^3V$8ZV*BHRXU?L;XU+%2HWT[9^0:D??G33&'IX +MZWS@? +M>'<."IOBMS-F:4:Q?G6KHN?4N@SJ\"K_>\L0U51IT195_:C(PDLA?:#CKS-KY9\E:5=]N7Y4A61SD<5'VRIE=M_GU,&D.-$P43]IWN;&P +M<4W])EXU+_O)T[P3)_(LIX:@\Z1SS3%Y7]Z<^GH\^^N9;>03PQ_O;7$KRF_] +M5/]PQ/+*[\9&Q;SO]>S#-93?17-\NT1W#@T"DO$)^/B1A(=;EVB7-O=D%^L/ +MERZY/;"_^-UDUJ/?C<:^:^6'??OY..\>[;ZB]\E1ZUWW%#P7.FGOE4Y#`X[O +MB'@4]8FKK_'PFK[L56-^XJK%(\F9C./Y2SY#C_R#*H\4_O9+=\U>?-7_Y)-^ +M5R=#\1WO\+[_.C'US]L3P_MY%"?N*"A(?SU^6.7-#YWV'GQ!*S]/+V',FM[H +M;=]R+GO.[,6UQV0C:RZ4=OHT-Y$R+S!\,'F;'P9L<8P"Z9K2N:^",W/?&WE+ +M'NK&[NQD2QVP^,C1SZX^SI$'0-NTG+]X1)$W6S&+#*$K3HKY@[9LWKP[PFMH_9WMTS.V[545<(>?+^J]4'GGR-:L+ +MZO8U]!LP(.?/NL`13K0-YV%BY%WY$-V1SDMNC^;-T<37J*K^ +MC,P]_K'[O@#ONN#?G"?/.`=>T*YJI8?&2;6J&XN6'OCY.;&V\%FNO>U2?>LO +MZ<>7EK>W)/-JL'F&YS>9DW_>7.5NK'"I'3'KZI8IO4]]3>0M#,TW;,DM6W=\ +M4N:'2RN.I_"VC:S*/:E^&;;@UG^'IEA]N\$KY86Z: +M8^Q9,>OD@,RJPSU'7LD:R!A3H3LR;_]TW8."EFD88BY>^?UM^R/7\GD?FT;J +MVFIW>,JN/YTI>IW'V/_^1%C_W'YB\KX?9D6R;AJX\$W^T)C`JS_,0\Z:9R2[ +M46ZAV_/O?#"*497HJ?)#Q;JJF%RP^43?SR>H7'==<3>^9&+N)> +MS&Y5/6XRE_2J@"=WK!N]P9:[NJ#)+?;A$+\.C=+.1,-G6T]"6._G\+CS)Y]M +MCLBX8SYQ:D_>LN)7)?*/PX1IHHZ'/S:WF=9T#@EQV>WIN;.3#SU\Y3N+]?7R +M>;OGA!RMA.]I@[LLW'E5<_293T7S&8L^^$^[?`J +MWB/_\,,]'7._G:9F[DJLZ?"F:"4_+;8HF'OV0P.:,L_M"QJ\O,K7HPRN\?%S +MG7)RX+F=]Z+BMM,OA!J/!0$I??=U@[7$R\R/U!#0/F1`>G32%*'\F'^;R +MK`H]V!'ZF0PY/S2FB6E1DEKFYMZH]Q+/F@E>-0O6K-ZP%HRS1=O8Y]R+0'JO +M>:5Q_`F_]NW_/G+RIP<_[]W6]=ZTLYUS>5]?<5.&\TQ^T\4=HU>,B*Y]=75V +M?G4/D)TK!X9#S5627$%_Y2K)I59YASVO;FY*&_=U$7?8V2J +M-%7,'23=[=DOW?=NJ>A1AO'.T^W:1ONF),:3'2?S/@^YN3D[**9UV_1YCI;2 +MSBFEKS:-])LYN6!:C:05NEVWM_IBE"ABW0552S-/F;0D?\GY]7+M7<=UVY:! +M@Z\??5_8=]/$N=?H?IZ#(PRG?'6+'MS/;WY#+YEQ0ODP8MT]( +M"C+=_9X[^>[=V-Q8^EP(_1"=6=R%N6?DF5KIU^]^Q8-_]CUXY@?T<.Y\_[E? +MWE0$W']Q9T+XSM?A?_K,NN +MY0UIZ3MAT$V7F`JY-'['V#F2]Q--&6]8/A^R35TMBE.[C[\VHZ_N4%<09DQP +M%S<.C%AS*<]Z1A_M5_2T_NV]VVE=F^=SQ9LFGTHG^-.>T%*2PR^&O%O8V.L0 +M@7VBUO*L\'2?ZY]$?G=>=$0VZJ2A?O&UXT<]_MK\^97AL+"?*=E_D=?U1>.: +MZW/TH[)2=W8&$+Z]TX][9]_S>(95A]Y6K5Z8]ZER:."QK+QNT;9?BX]?F7VD +MRP*U+J\1U*8^>`HUTB[H7-&)L6I.A2%V>S8O5_\=,[IQ]II8T_(XXH +MN"G#4W[FW1DA).D&[YVW_N2B"<=G5V@H@>HK6HN=Y>/!^#T9WZNM!C)X\VAQ1 +M7DS;T1K*T.'CR[YNC;NYX&!HEX%'6X>OH;9B&$"N\+G@L6U1T/-XTZ[6E]H9 +MQYF2UOPN-WVB9RZ)\BL:0UWZ9K^VXUH7RHJ%53WK\ +M9DK?0+C0/]6-O?;*FQQM7YTB8HMK?Y^\;0V1!YF?!/4S#MFN;$GR(LP==,3" +M-CX,>FA7'O]2F45.K??(N=UUK.GM]A-I=S[?FGWT=LN^UX?R?^2.C6VY?7JF +M6>`/M&*(U;"_1^G72B:F[C+<4B[&1YQI]"(Y?A[HUOE$89-AN>GK95/QW3VC +M/^A=SB^KZ7"*-SX]:.-9YYU9_4Z$D%BC-YQ+C#"V[P]KOWH`="WT8#3ZH.Q' +MAN[*E@FOCAU[,R,F-'A8Z)62._+TGESHT\6U:%/UL=6/DEN0VZW!"MLP7MV* +M<`.D^[CLZ)>)1>]O/TK:LI%.;"[>M.=%W;!#3[RWA<"LQRZ=2>BHQLC+4#2) +M)2"M'Y@PIVI#H].5]KH]IWZ1;I%;GJ^D[BR>I#GQYKSST`G;6XQQV>]]]INF +M5!-Y7E7S&AMC%NWU.;,S;91OOQN0X_P@J/#S_"LEE_G7KU9E1HI$ZZF)>VN8 +M_%ZO9_A>]]/((CIL^WHN$8B"P3&;SGHLG3G]0B=JQ-#+*U[^2;E]K%7 +M=R"G9)N^+TZ+RS7,&K%HWOS$`9&C`H;7;VT;TL=S>=S#H4Z%ZG5(U-6M):.S +M^@5YV13MZ\H9T(9)QVN]2K]/?7\Z:;AB=RK[#:\2Z40=ZI,9W2"W9V&],`;?P.'7MK +MBJQX^QJ0P.*;*3P9-267MGA_*O5Y,LPT>"WM,SR!T=A2*"U:Z6K>*OPJ^*4R +MCG4Z]*MM8&%V;SICUE#3R\:UQZ:%1E->MNY)N)5-W]!_':_DJMNL"96$"=:I +M!8^.JC[%3A^T;]Q1WO"@=3S?1^-"7]U:<*!;CF'3S,[DQJQK.="B!>-7N'6T +M1N_FBL[6]GHMN3CDT[3RY>ZK$G9?W+)M7GW#W&$RZ<>ZC`O5SV>6J/H?N+EN +M8]+=$049<>3"4VQ+O,%"=H%#UK453IDXI<_/"]\VSQCC9SIB,_`$K6BO][63 +M2H>FE@LSRWWZA9Q`G$:M6F(^3_MJ2@YHS+C2(YJX_J*\^#'GXOL*@O1)Z6J+ +MZ'1``N"DJ\2ZG>3")Y$N#X8O#6S=_^G5L91NUGZNYY@>HWXTC#,^3^Y^[EO& +MW#51`TNF]$G^W9W7OT>7QD\3[Z\]G:Q:Z;1H3:JY1\<]3!]!:'_>0MN/^D\) +M:P.NVSVC[YXYN!`F98[,+HV],$>L:U#ZA,ZW7&,L:#4/GBW@!C.#GD\^W3CG +MZH`I$2/FQ!^U5=&7+I8ZC,I9-P28>?NAE,O +M/_^4\KH]JOGDY+GEC;Z',)2]@VF9N=PG\>C!Z9UE86O?W.TRD$?SG-Z]3-L< +M@29SS@U2/,P:QLF&%G98_.[Z=+1TV+3M%SP'>#^8"M3WJ<_YM4YK*",`"D*) +M;[KX+"X5YB6>GEO$;SQTB)_"6Z]_6;$CE3U^Q+B9C@^CF[Y+:I/[-.=;7R_+ +M4W>*`<&^?C%'4Y^87F2K/\]TVBM>5+?@X/EG/C,H +M6BIKD]$M64&\L[>@WXA#/R=>.SY\2K''#:\+=2XA#]C.'7,2GB^<=FKQI+>> +MTYU62TI[4]O&TY] +M/1^=27K5%'?5\_316VO.^^5-'ORMFRJ13X]-KQM7-G3,_9L;A=!#3M22W +M"J9,.:3-S[J5W/O`FG[/A?.`(`B>.R#&;=3<_D5C1A7N7EPXIU-)9R2CHD%T +MMMMU=L$.S5*B.7?>&]J[+2GVYZM0%2&M1^ZYT.!7H]891J;U?EN=^2,%SE\F +M.;(VJGG;R,#]HTR^&W8]H[IT7S!GH$&^T_N9OHE?WC7B<\"+VKW%[Q[&;EER +M5#R\KB2@L$_@V:;=Z!_I_L$ZN+(NWQW:1N(W>:/ +MSI\U+67`^4TK!_:?7QGWLG-*ZTM&KN16IP5'RI/\KS?6E#TMM3P:Q!LN&_U@ +M\J11RQI/0P3U#^.Q,;!H9%3'U0_Z3*9,&EYV0&=(O3.EIY-)(Q:-:Y]:;'^SRMKT(IW$SKGR7XX7&X, +MC^`YA?9H))UM')5U^6C`VYU&+MB^)0H2<&9F45#SXU\+DFXU]*C4!VUJO'6SMH7[GZ] +M'9M,G];U=)^UGWJNRXY%,7;#YNZ5VK#1M@^;?@,D,<@O9]V:VG>WYV!#HEM13NN2*]NI!V+7%^@'CO*>E_)!5**I[)SS2Y#3 +MIWCPARTW#GYL^A(\F+CGT=?L>=VD)]H9L>6W%Z>-$MVLH%$KS@=R3)H30=1G +MINU24NZBY7-"9R/S@_,R:A@]?U)2G%\TGMC_BEK4/'U(@-#C1!5MZYEZ\H(> +MAS*.Y7@.KG<]+.3&;]1=28GY6KBHE4B].OQ*YK#PH.-?B3'5M$&,.0_N]AP\ +MH>C+UHG!BB]O=O>BRM;XU)9N&T$:$?@@YE`"?0`#I)"S((Q"(\[C#THPT=8\ +MZ!/MT>;SO+%^?(5\XQB_FS7?3EP9O(19U.]VX;&*"P`?M^WK-UOQ:V9(;06O +MA\/^8_,BQ5"G81-4H_TW.NE^+VM*`6A,L)\Y;>A+[]K;9^@U>SY+06_I.?]; +MYU',Q%S#U)I70TQG!G)'QPQ*]_MP>J;):6F%?/"U+RWSO*/Y0W^N/'RN=?6* +MLU_^=)*2IIVW*+>?].DY6]>PD^. +MJ[Y2X;O`UX7@OK)E91=^X5-II??]CP-N;9NK!0@M2;J^0R/)Z?AGT.15.Y_? +MZKO[^)+>L34*W2Y.X9VI'9Z[<%RB!Z8M^)Y_\]MK2\M>U%2^R7,\+TQ@;7N9RMQ5$!RY-\JTIECZ8TUJV +M.U.IH7C:PBOBXP.ZXM'9GM3HFZ]F-\3.G"&UF1.7&J&_MJ!]%KZP?F +M-)SIFH'L\-\P9,?:FGL+&YY9AF:+HIUB*A)M(][&@D$&6#^'U/F,4X+'[J+) +M`RZ$?-T2\^.RY38:O,`;,0DZWU`O&I*8]^GTBSN_1S&*MN]E'&L:,#U@SP71 +MT^T[-1,")-%_C*9=)1>[?O&>>?#8\'O2..F-4O+A912+[N<]_J60<8Q?EQMM +M4QS=WV8]\?E%=/#1@SE)"^>-JRP^U.M0N=/7_Z]3..L&=-^9/!Y>-V!WKW#EMZ?%312?V>%,S;7/Z>9":`D +M]WU_5^'>!7?V]G^_9&67#.7@'7O)9Z,_K5K@(=A4-F=)4]KM=:_=K@HBD7'\ +MV]Y^K2&=J(0.&PP'9G7L:M1D9:O6A@]>:2I/Z]N4:\SH7O6D\^(Q-]3+H%7W +MWT\LY`5%WJSE'NUV%+T?^V!XMR9ICZ4)!;M=XN]]WIQ-^77M#^D@@%<7MZNS +ME5?JO*/W[KU)IZ$C'\7WU[F,Z7-X$("!]NK<9ZQ]AE-9*P_UW4(\Z4-3?GLX +M?%:'A"5W_28,IAS;'>"BOK%MUY-;LWYZ5RQ\+AIAO9J3VH_]X=Z#"#@U,DK4SYNK'].A375ER9%#RH1$3TT.;+U$R:),\EZ[55GK?T\^5^S!H(,"S[KF6 +M7E\^D\^X`_6TH/WS9O6`O]_W&UK$^\1];?&Z:&J`JT*.#;OS::J$.[AFUM&1 +M@=L*QG>8O:GB4'+KS\>R8ET[72H(>>^V^,1=OF=`!NN(=S].^@]R0[KV +MQGQ"]9BERZJTP=>O^P0QLF(25ZF56YV_Q<36I!WH9KB;-6S:)2F2,6[Q/H\> +M/OOY]SH/#.C@X;'Y>_++0<>&K2(>*^@6P'W<9FU[=:FVT7_<[-(,ZO/YE?=\ +M7Y\?%.)']P$QM^L:ZQ/+,3IFDIJQ8_/%T3 +M;&AWJ7C[M2[A8P?+TG5^=D;2K%VR_?=B]CCM&%)\O77[F`V50V_YDGKLVUN4YJ\RL>->3CS,/2G5#TT`ZGW+SXQ)*8B\[Y??<.N.8-Z]NK2;*8&C*NXDF%QK!W#$C`'55;JO*ITQC+=NF9 +M?68.+VDJ_M.^=/*$S;,N[/#]-.,A=TR_J\&G$M\D>:57I3TY8K:]^V(Y'S6` +M7CPH?N/5[M$96UZ$2CR/+-@J9W]>V[IO_\DB\_U$D%'ECQ[L&W'T<'O0JXO/-DV=\V2H\JC1R==&K"Z[F[9_"#?EMXU^XM+.G=/=^LLNK@O[(CB +MR6W$X\V:M1>UWKMRAH4."2#SZ.4"RJ'J/$E_3I<)_8['FUNA@]F-CN]L=%[_ +MMM['W.F/GF<,;A7/?'47_;CJW,/&WH6-)SM$U"TI\1_IL%JN'YM=OL_6]-AY +MM=;F.T2GSDK5TI=7?B!TRHDI&]3SO0(1G(V;-+!@9O=M)WXK7#2'TH?G!@_? +M;N5VF;(OO5_>[9^R$O=>CO/O4O2_^(4_J/'O$Y(54PEW+U5YKO!<-]75?V5PTM&-2 +MBNON9"\>)>_"ANK>;QN/+]TW+\\P=VAPW&--HES>R)O94/XJ;DR_NNRI^WIR +M^O1POJQX6DPYMF?8`-HB9O\,+2&_V'O[X!"/S)#R-%U4KV&P_=J`V[??G?_: +M&OU#_*4YH=Z02?FY^ABI]ZBUHT>ZHJN\$P^^J,2285F'F!1Y[]F)\[;^)D_[ +M'6,Z6D.)R?LSIN7KY(V'-S`W548^/N*UG!=W9,%OEM^>82<2X?R!M-[;[=KN +M@=3?B-/^P=.7,9$L8=751Y5;KE&NOVUGJ34GC=\NQ7I07A3%91GS]UU2G&;, +M(IW8/-NKWP6>UZ*AWD.OKD.KE]S.FG)T^Y&4^F-/*9/W3OEI%4"V;[+ZIX7K +MP_E^TVM2_?J<7Q$64/]F@*>'Y,@D'UZ7^-*26S&I3VM]A_OG]XYC7FGUV3N] +M>'EE!?6K7&D<'4:9T'Q2G55KJ_E]9K-Q:=_SXRS!W=^.6)2W]8S/FVQ(9BQL +MJ%T?KSYL'_IY[+O+ORMW1$69GH4*-P=N1>[QB![4<46,3\V1KJM-[;SO(6^" +MKX>9(\8;9F\Z/'+PTNK,S7O^:&GG!CTO_VXN@9_4C,/H,+S/&4OW7:,G3VSI +MXKC5Y^=&QS"G\#/)=)NF,>_>K+5M4(DW,ZW?EY=UV<+L?-U?:)>`\B\\>?"C<.L*W($V_IB,ZB.25J6#UZ^WS>?"LXOR*S,>[>S%N +MSFIKWGUADV78=HVH/[G3?L]^SY_639DC'FW>>?=D:7\&)0B1]@V=W^]J\SFO +M5[\&-CQZ__W,M)^#EU=^?[]6MZ)D=V3?\/@QC9WXPHN7Q%F+5FQ-GM#G?.&( +MJM'1;5M?(!.9*;]X/G4=D#T+&$>;^OEH`S8-V25VZVSXU_T@`>VT3>1M)7+CWEQK\5*\RDA]\;TV+FE +M,_QXY-D?SPQC4JTC0HNWI-0V%ZY?6N%V<=:]50.K"-]JXDN"NI5+0X_3F7]V>B@_I]*.33._VJS?Z7NI8(E?\(T"P!CZ^5\S]_[6 +MZ=31CX3?O\YOON91?73A5?8=?<6.HQ-NVE:T/ILUVM]@>#,]Y\F-@T,UP6F, +M-4>641+2G>\=L'NQ28V+,A(K_]R7W&[NT>O<#$&H^5J`=L]]ED'EG'C^RAGQ +M-.?90YCS7?QCP]8,['5F3QI\=-6%C[6D$6C<_2^_AH;-J>G9]S?[=.:X4W]: +M9W"&3>L'/5QZM7G;S37Y_CZKHYI'#Q^R9TQD47;WBDLZ1^*8@K3IHG/KCCHV +MWSZPNV@^.?'\BNA(IS'3-KGRR,>S/K>X5&VJ'F0)YM&6[7HAOK?\A^M]P:V1 +MI%S;SN!YW)#BSML;GT^F:6C+2NM\1F7M,>S;NW['6][,>FK&2Z\=;WC]>D\_ +M],IXM_@7>ZSK(#BQM>1KX,A'7P?NN/KKYP(Z<>`RQO*E.\+N9KDF3%H"YU>F +MCEE[W:?QL.)9IX:T^\W;TH)GO#[;,3#39V+WU9Y#5ZY94>'' +M^@4.@*4TCN<>`R?NR9]CUN__IE?FVA1*MY=[<"55V[TWQDU>%8:.OWY.>?[(^Z.?K5YD#KVV_PWFXQ +M5&U(&7I7GGKZ=7Z>"[?D@GW/\M%7B[P.4/\V7.N^BM;=B&"QW[B(95^.^L]KNR:^K@'<;E_?>O(?/,27.KJP?3-Z_WV;.R:X=G +M);$7LYK*N9."H\PNW.7-UI$4FG9&^CVWE.'^A?//E'6(X*7 +M514SX]*Y#\JBYSOFS]\>&>[VVFW:F*@EO3?.FAG1M-YGXM52#X=N,)_$W0]<=*QAP1]0YSOW@4,:` +MM@VKJA8]/;(`J6A^L<+GY*7Q;R^Z/QIQK?7KG:.?*^;S)RI\C`?S*K>V!$QZ +M1LYX/::?_]V\I!E4_WZ^<,7JA\_?$;+A![='^[^E;3R8YMAS([7;8F*:9L722\O*^MK,>$F2F/A8>J +MU[SU>;*OZ6'-\`!_9G3QC?WYF_>^#@\QC.2X7[2&?8F_L([&V00MT\W8=T]; +M>+1@Q380T-&!78Z1?E_I\+!D7K>4;L77]K2C@ME'I;9/S^2DRLV'7=SZ==^[ +M;H-KUL>>N:Q_V0L@CC>-)^WT"_7KDS&"UNO)U[O1,^-9`T]&T]<^#ZS?E0<- +MO5NTE'!KZ1[=LAWJP"C_,!U]Z&Y?!J]@[*_53;N;/CFJQ[\-;3O#FO?[\8Y> +M9Y^R?CMJ>@7D?:\:G[Q%UOZLX99Q9[K"F +MZPG.Z*JZ8R7,Z3Z"\"KY\`1:U&%[<]3GFJK[$P8=F#B]L76L$Z7PX>WGLWZ> +MBLG-*T2BAPI,.[)*\K/XF<)#2ZX?"VZ+[KY^9%31\',^BPX2 +M;9'NMV:LX+3`QMRO0S)O&-]/5V>&1V1[SC9]2)DX/7/:*M?]&[WWC'GBN#QY +MF=AWR374]D1\P-;WD$_3V]R:--&[S5^O^_H]Z_2C_U6XSB#P\9U1O;;'LCWA +MX+_N73JE+NIPX7SW,?YI!;[+]S>0@VOW?-@Q>NPX[^T^LN-/ICR4_1),BIL9 +M?7MIYT43^LP9T&=64MTVCP'&J(S%G2,+VN#F)L7)KP$CMTQ6R9_>+%*_[3-D +M^-([A1T>K\VJI/5[F[9_F1MU\P,71O'3^(&$DN,[54\++Y=XS\[]U*LQ;?[6 +M]IAFI\'!)>L.;*9NSG#*OA[OSXV-F&;>O#*?-MY__EJ>:]BP3F6?*Z!G!_PL +M!D\7[PBW((<]Y^.3@%3#\_NB_N'C5LY,P[ESJMNK+CVY4Q3UU+&U*V?62OF5@D_52Y-'1M +MVN;)A?MLOLL_0LX9N8NW^>W)63!Z8O6:-]+0ZLF7`D\O/%:0U2M\F=_8E=N[ +MYG<&L?5R3>AS)+/G;D_#/>O89:E/EODN,1TJQ03F%?NP;Q*I[N#]^VD'1CEVGU`GS!.9N^NX1'+O?OO +M79[UI/4;VV_/PZ(ULW]_,/S(W'PI;^.6BC9JH_6RQES[)Y=)RL[?MI,ZX\OP +ML(V%P5W\:*;(HB.2'>(AM[KY90?+5Y3.+_O\3O60L-VG?^B:CP]3EJD-0P=3 +MCGKZ'Q3X#YC.CT]U'BC(8:HJ'S(]'[]_&AE9E['J3N(YK_O@L[T&5JZ"KO4: +M/"`B$R'LJM#;[NU;=I7B[C^`>'8&8]!R,?-8_XU-YDFNFZNJJ^QW=UR\,28I +MPJ]+KP_"00G]#I2D#IYX_-($=4_J!EWWN'Y+*_KFK]^I#N<+U_4:_^SYB`=7 +M"7Z4H/8LO](/#\N<;&8V>4I00_:B'&^7/D+^IO"7+W>97HH4O\\T!'BM]UBY +M='+2;V;$YP0^5MO-[]YM6YV_K=!OKJ;9Q8VU,[[WY[>B!=O\NE^\[CO(>('7?>\V+CJVNM=1L:8O@^_C]Z;..O2 +M6]WGSF>^&9\?SAVGGBKS'&>KX@]:F7"$N,MU<8=^IWG]UNXA-:W;1B;;C8O<>8=)\EY>$KE>FOQ[1W +M#PTZ$%GVO.S#A-['GVZ8-+_G@A.B[3L5!Y;O6+C#Y!<4.2+2??>"\%JOD:[] +MZH6I.9N7OQSSA#5XVB+#N?ZP*G`D;W!XVWE6VJJA824'UTQ2/NI[+G7_O`Z# +MCXLMP^\R4@ZL&;EF&6F`(&^_\U;TN_HN[NS]$X>G'V!<81SS[E<>X.LX;&8W"P +M?%S=R<63;=\38M]\+GOYEKRHH#.Y(B(QY^J1O#+G_6-=&Y-SQ4^WW[G4E#OI +M&30V;57XE:?7DS__V#WJ3$I,\JFGG2PC@D;/F[=W\5?JL'/O!ASYR:BON!6] +M$_6/IM8P!YQWW,BYW/0X(*NI^_GK@1?2S^\Z+L[?Z3E6MS,SCRPRN5,["#;L +MG3!8:TEY#1I:CKW3MI:N(W]GT5WK9AY8NL]>[JK_?#PIS +MKOB39QS11C9'C9@"RU0G*$^*KSVZD7>0''+U*HCQPM38G^G%K/G@"I>[M<6_ +M#EA,N-.Y$7;MU%^>/=#OU-9Q45=7D];^YJW;Z/XEK0!>L7K3XOOYFV\L/F$, +MT$S]0=VN:-:>2CGW^+.S;[4K=28CTGDM9T_PY%(D>L#^%]XY;OJDD,H#,V'X +M2J#OJH.GQ[[_EKO.-#[^_O/>*TH_CGK#'*)\\^TA.?G4Z:PN-8^VH:NFII;W +ME@9]'[L(Z;2+<6_9&,&32Z'U76FLN^>W[(V3W&U82J_U>DCKL#VB?`QSN%/B +M=MUN\\+!BQ!.3%+)RM'%N9Q5W1L63[]BHC/4JSSJEA$<3>-?77Q3H^C8M?^F +MKW>/^JSSF1]]>HWTSN1YYD?Q-E_GV=<20]6K\MGBR8VL#W+MB`.O2"YJ8Z7F8".BJX"]>$W05ND +MD,JMP"VTOP\5?NR6!ZH5\@V_ +M3+[S9]WY@:.$?''MFT^CWI?9:U[.>`&@\?N)G&N?:E8Z"%WD_J\W3W%J^)F6 +ML_EJQ)QV@T^O1/;/9;Q1/1(S,D6F-3?B7"RURON*';IR;M]3Y]Q;8BY^W1T1KZPT +M].M7^,#V]IDMF=A]8O+MD76N'3*Z8A_L>Z\YX^AM.Z`;4G_2>!+N^;MR+]6NTB +M-^=G+Y6M;HF.SV2/`?U/;A#KSU]+!-TC5>TW9L2T],UHLM.C;0]+DH>/[/NV +M1LA^V%)SX9[OG[BO1P:O7)19LSFB)3WFU/%6+FONE[`K0\T!=E\[^S.].BR=?P>!IC2=&-Q+1+N6LF?XQ>?GO4O)DA&2X>U_;TZ=2M+;!^<'Y>6?WQ +M_&GYXYJ+9V1;'_4."6%^_)IW*Y<\;_*@F,^=W`Y)F<$N.TIVAI=5MHQ*OR^[ +MN&[TR:>0J!N77>QN?7^QVN1'BKJ?FC7YV=W,<0/<1CCECQ/F"+(U0O^E,7=R +MKD2/$43T[+]_IF9/OR%];EVW/D`?;Y?$Y&_;T[-/1("7+XA.;)O;PIG+ +MV):UTR^\\H=V=5HZ:F/Z<'FOH="*H/&_Q[@V5S5_GENJ1B8<5?Y9/FG0H3C' +M'[>^;+'H\H!=G0<<42PL6)$';3_6%B4>$;CER/66Y_RH7ZL.1$=<'/.L^"8C +MGW3,8X;VV<9$[NB<9PE#0K(J'BZN;&)-:/_V8$#NZBDSCRNI*_OWGA\;L'&K +M9EW74^<^KU+FIRWK(?;R(V#/E;F_YDJ>%.OGU.>W%3>MY@_!,UO&/GX +MRO@GFQ*;GRV)>.Q'CBS(RQJV_T7(^_F.A4_'??2A1]]@3!)S=QC?;;D[.0!+ +MY]Q=(^:\C.EQ[MWN58HW.V>$ +M9$\>.9LW]PBE8/=AN-++E3$):("6UE_2MEJ/#0=F7E7M>A;:I>?4$QDM9W?K,TXV*7OIEN3<)_G%EIUO4HYVKR0MRK[@%M`P9VK# +MXJP;<>M<^MFG^[89*O\G?5AGX\W\X%;'A(] +M_5+GQ1V>.AH+HE,2_H1LI_#9HEFK8W;Y]IIJG/SP8/GW\AU]U\RX6YVL&)CD +MU27;Y?>;W!]]7M5,.4O5CFX,S[SPDGISQ:O%Z\?9OW1HJMT;=OSD[;8%1Z^Y +MBIIWKG>LU>>.3MD3W;/#BAZ[U^WMF!LGUI4?\80G^(CB.PU[[;FK]'C$A(S" +M0R='9N]M\GQ&S)=\MQQ?>$[+4/R9+OURV1+*"(#&KS!5J^[GQB/K.U#[B82/W52Q_L4@5^`X^ +M5IM^)W`O*"1RZ/45P;/K3D_J>_5[I^,+HT^E='UR;%>=RY+*DB^EI*QD.'LN_Q^XJZ6;Y_L+W=-(Z1;A#WT,TRY17=R!\T9'O<*-DW1N4PKK0B^**S-]B3M9Y[BK9DLVUFH +MG(8E_ZFS4V,?/AI[\MZ>S@T?V@/J)G<7HVN^_P'%0%F5\7)MU2>'O+L@T?WK +M\99[Q2N"75T&N?)G"9?6;Z@%T]?+.EPQAP1NN^-VD%'C +M(MKWXFGO=SNAZ +M_ONOSW6YDVKTS;H'P6-^CN&V1/$ZN/]\^^?>V^2$+;=V +M4PUSG,7C%G=.@C6DKIFQ_[.W!X +MSH?C[WR@M+;T]NNU*N-^8H7N!-2\Z-W122\(.R].<`D.@:OO'G]:G%8_AU-^ +M:]_.&)+_IN;:4\]O7!OZ]=-T+^ZIZI#8A;&?]O=.G1`I*5\S=DGE2;>MRA^I +MQS;(SI9(^?L[DN0#>I8]K\F=8'2KD1STS7$+=@F.8[DO0H+^I(S6IWHM'EOR +MK/;1D]5O1S9=&I`_K*8E^]/WQ].GC!BF5BV.GO%NI.M!WWV5R\D]@P]X(/YJ +M3O04GL_0N%^9$9PAX3+:<%[3TY6[]#V:7C:FESE-6M[#;=$EEPZQ,ZP7YRR8 +MO'=!U^/#_=UW-(P<"*?JJQ--QX?W](]3QHS?(8N@'LK@629UT,RXI:BJ5"[1 +MS4VL/ZIS>9B,$G;,Y2AJC]=?T51R?@1J)"G?MW1?<&=C^]IWF<.OK.;%)!3V +M&AJ8FR$?+RHJ7-*T$5"^+'`>3>"Q6=+TQ(?NE2M +M2YY8[=V6G7]2%EC"%"U_]L)G];)X?=FY#_TVMIB?H)^V*&][[]B?4S"Z754I +M>YM5]ZIX>,N+[9Z+V[.A/M)LDJKSZSNZ@LU4N=8F<.)2?5?:6!=5MY:1>TI7 +M>VI?U)5U$AP,:+UPX7O/J<8'0L;1UE'KF.']CB8^M:TNL'6X.VYH?<[A2VXH&MICQO*NC`?S>H_J$9X:]V1YOY6T +M[(4IW6Z<"!^A&/_G4NZU[/(?^KI;UN+2/VETLN[,4F&X<^=/=?X=)6>]?7BK:\BV7_JI;T7RQO-O0<$WOCE2%_WWG:F4GG+EW.G;QS4)^&S!K!O<3U$KCSH-I06$KPOHQ%'G4["IQ"AP?ND/& +M_?CB5OU@\Q?=[%O'[FT_HSCR_OV#C=RRI?3B(,4+I^1=I_OO3,ZABSN>_S_: +M>^\X*8HG;!S]*HB@(%D%1`9$!8>[S4?T,I=S!(3I#9=O+R<$%"0H44!4)`@J +M*"`**.D(2A0%421*DB`@423GMZJZ9\/=@:"^[^_WQ^U\]F!VI[NJJYYZJKHG +M[$.=!K`_%AG>3%SXVNAI2UK7?^RM7OD'+1.S?QWJN^AP?DCJ6][-I_?7)/?? +MS`Z^\XG]@]:+]V1;K_QY\.,Z/SS?H4/;26.'MW_P7,&-KO_QF?>FL_(.0]]HD;ZH]?$-PS,Z +MA?>KG5U^[GJ78;5F?9Y59W#;,;=]=BVU=CZXQ';FDP>DE6NB!G9_\=%];S2J +M\_.'/59L?2?5/"BURW=#CCUFV?-C%E1XD[:]L73TNX\?SUX_>^2DDF%3(\>= +M^JQ3<'_SX*NW)D^:EKAPBE_,#U]M+V@XVU;_ROH/_;K$!>[-VS3!<+W)M6:] +M^CXT,6S%H;?'OW@B-WKMX='7^VP[\.N"*39]4.R7/VW,KGM\;/^UIN#F2T=U +M]QKA9_!H?7A_BY\6CKCZ88U](9WEB]T^[//,P4\^>>:OGR<53CXP2VL.Z:P< +MB/GAF3.K3K7_?=-%_8@AGVSI>.RWZ<.O;NT\)3X@1GE@EO7!V3\5;$U_ZRO] +MJE'/9^5]_]7#NBG-^T7\V*S7MUO#]GQ:I_W:#T9^$C'[UYTO%EKFEVVLY3=^ +M??.&P>,@O&_6O+@Z(3ZXR_:5QZ.[O//SZ9>N?JRU-O:-?WW?671U_[X7/#^=T7E2]VF2S^2OTMM]_FNN +MH=BXH:#3N+'=1H^5VWS^:^VDAX=>^OS#)1^/M'9^_`G[@I_F/G>N:>&U;;D1 +M#[^^OOZ;D8W"HKZT-9OU2]3+H6=&;FE1(W#V[_4OG5K_1^]EB\LWG/FZWW!C +MFTU>E]J?]ID5GKTV6GI4/W6VU#RD08:AS:#]^\IG-+W8]_>5KWE-:[YQ_\S\ +M_1<3IJU[Z_.AVT#.;V-/#SVX;=K@7P8,GVEYVSNUY[-3OS0OW'DHM.S/Y%'9 +M-7\H:E9[Z"?O#XJ<_FO'+_<=F;CBXO/!>SZ>],:XAUYHNOC(VC=93M*OR6N^ +MK;]G'VO@OS/WNZ(FF?8_3B[+OIW[X\KC!Q__;*^^ZNRYLW/SHGS?Z>V>WW#RC\:P#]:+E\&'UYG3=>>1[0]#J +M9X\J7S]]>]:NK,D#RIY]Q=XR(;S91O.<;CJOPS'&R5N^F[_J6J>9.VH&7NK8 +M*#ZK4VI>Q]<&?-+[TXAC/RT-K/=07F[RUB53!F2.G@<<;PA,Z!+^T=6FWR2M +MZ=?W_)+G+RY+O!W4N&_]#==3PH_L+@WIW'SQT?$/K^[SRO4/1WUK/_)AWHE? +MO$9^>GQ(7-[;AT.4BX%_+JV38UW>,;QG][Q77^@0/>Z!%6_-+^TULL.EA64; +M!NC\G_TL?=,4SX,Q&[HV/E4[=9=VZ-:Y.]>QA3F39CTY[//F*>OWOQLY+E3N +M:/G^PTLG3NVO=[M#[#-[LP9TS/OU^?8O?MQMBN^J;JW#BM;,DQX9]J1^NK') +M[@W?L>[MC6=TQ\YOT_]2C'W^Q$U/DX)GK7HO9<<[T[='C;_ENDC;(OQ5/?_1#\N2?+8HOSSV +MX+@+K7I5?M1]8DC+XZH"&TY\/TI][?_>W7VSN$^R3=NY0(Z^L +M76UJ#6_RT`NAR1[KW0P;7_\DLT9N6_]=3=I,>+'OC;$M;YP?_[_8(>;GQ@?-?K.H:[]! +MZ;-2=FK_^BQU=)Q;>NDGZU3H/*>6:RM +MD[)[X\-O]7_QW'ME/W:]]L$7]FT_S'Q\P\Z-UNC]789-3U^^Z$;7(R.MB>%/ +M#=TR]]G/'[O0JJ7GYC/!:S[?L_BG#3OZ3DX:L?_@U9X_IAQ:LC)S_Y*0VZ<; +M?G%RVG-#7MUWYZ/HOW!2L[7VTT,&5R@^<-(UZP+ITRH,.`]FG?#H[Y*:A.RQ=?_/Y] +MJ*2+.UQ_K61][ROO)KT[T%:4\V6G[^9]/]AO_`M0=&OBRPK;KTW>U3AB^A,U +MVO;[W-PV +M_K?PM<='W/KTV*Z>#SXP8O+0UZ/&/C3VYA5+[>XU4U:4%80<6_[&N(^7+\__ +MH-_I/0O>?6R/8>N'J6TFV,;7#VI9JW';[,C&99?_^NWBT7-KHFZ6'O^Z..PS +M=O#T3LWY-Q[9[;]G]OQ'WS2,V_"K/F-4X=LWEXP/3-X6\O*"7<-G^2TO"QD^ +M9,;3:[,O_36FQ_,!R\>4]WSX?--5U]]/F>][*/?FY^#YH7'JSWHV&#V_PUM3!;0OW_MFNW2E(FU!?]&@^-N]-2UF: +MQ6LK!&-^2JC'"P67][?M572P..G*A3&[EDL?CIE4LL'XUO!M.SLT>:7_Z;,/ +MG6@8,&C"+T,WG.R;7_C8K'=L,Z[[/9!TJ>_Y1K]-*#P2>C0K^4^/>0,[OM*] +M5V"<*:!+L^<^2]>]\,3J@T/M([<]L+[+M`%GOC8\$&@M'>!3^^$^B\:.>;[O +MVW,3V_AFY0=_^/%'H2U^^2$V2.__;)-'&]2K^WY][[)%JR*AT%!V_U"^>_G)1T:=>VYU[F/3?)]K]J9GUE^[U\:]GQ_X +MF+;M>P#!Z.VF)K&?/;9M4M'\A1W+$E?='-/Q^,.O/%%^I%7@@OR`5=$UQJ4O +MV=R\ET](WM1)V0^&&3/]GUS]P+BML=>*?_;;Q^,`O^Y]= +M>;OD\3U/C'DS9=\GW6_]66\)N]30=/H)/\]1O1ML?/O4IDELPKQ^MGWMCEYL +M^5+#%1-ECQL;9_1=F3@L+#"J]9*??_)__6;YXL(K]1_?';[SU<6[QQP>4FK4 +MGIM;OC+JH2/CQQ3'Q/3)>FMG[SH:^?B\=1]^O?S+\`6I;UT.3NZ;.JWUH'%3 +M0FH5')N^@X:4O/JE`F-F_1]Z=2C +MRR3SW:&G+@^:(9]>WZ+KQX/ZW#RZ;LN*FE+` +M@=D).QZ^&':PTY]-/MBD/>F?M"SMF5>\U[*F/=H5+A_4XZ*WM--Z9F3MY>6K +M)DYYO\;WMP;_4'KNB\7CK,/[[9CWR;Q%DY:9AWTV[[./9LL]GI_^TZH.TVX_ +M>;O%LG/3[]?GLR:OV[FT_PKYJPO0U*0_\M'#/[]>6;QCX7;O7%P6<@A'/ +MDN=^^.)+&9:OCS7XY>FQ'0P=BCJ/6S?QV5M!'FO70GMD]3XV/Z*T=M>;K +MH2'7ZH7LB/[YHY&;.S\XK0R]-&O:RC?K/=[,^.7&EKVZK8G).S_A;/2)POE] +MKWMO^W[?IX^6!#W1=GSR*5W=(>%SAFYYH>_X-G,O];+L]O6;4%\W):Y\])18 +MGYY!:0_4ZUZR.^65RW$S\@[/67WME?C2M5OKHF-CDM\8UB=PZM,U$ +M_TZ?Y:__[='TPV&GZKX1ND_?,ORG;=MNC!K7:<&G5RVO_WDKL/.FL[O7-*_= +M[L]&1=*4S-TAN__7Y:N()T8-"D_Y8M.\V5*;[0]-+!A^<,?X8?']]P[;U5YJU]24HYEKUXV-//G^;M&_1%7 +M,WGDR(3'7CHV>V'@PIR+-4^L?K3EM/&-0\ZR0TG%?V`EVK3I2\>VZWLF7CXG +M'_KVR\_.O&KW*]X_)TVW;=BI5X+*-EU\X$K)^88=!MK;+SME?++?V>@U&0MR +MQBMCX[8."GKYU3,/MAE3;]ID^XV"IP-NSCTR?_&"96'GY]19/]5[R]9LJ,!M +MW?YL?O/ZD85%VV<^7KM'YT-1T3@E*]?O7&I +M?-O06,N(\&;MLW66W1ZI2_?]?J1QP;K3\H;#/VXXI#=]&1CS6.-V. +M..RA(V>&S$E<7M2P>$N?C9WWC!EWN-O7J8N_>/"'IJL"P_KKRU^L%[UBU<3( +MV$^>?6*ZY9N^3ZUY](^/1\]NUO'LIS,\P?QS3C8.:'+]_846?9#>6]/(=F[P +MJBL!NSN%KS7G]YD!:>JMR^-F!/UB:C3Z[3['VWW\Z=KM(]>^O2VM;OL)A44Q +M3]O9Z9\__&S+SLP]U^?P# +MK^Q+#:-CL7A_;][2+@M8__+<[E],+_C]Q+`]%]FBD-9C7LEZZ,7]\T_];]"D +MMQ+JAQVJ'6#(RBC<\N*QUW[=-#NLUM+?%GF9+)VW=!W8M<9GZ5,B6[VL>Z+O +M7[\U"%XQ=/$)8\@.SZ7+QSX];<#FO>T[WK[6(/R9%+^6Q7]XQ5R^,CFS>T'S +MD&5M-V;NN/(L@-*TI&CATGH/K#ES\,(OG^<\M,[_X9+>LYY>-#O^=YW/6]_7 +M"8G_("6ON'>+Q=,Z#T480F++N_S+#[F%&7'LH\:=NDP_-KKSX-[/OO-5BP5O +M&G?NU;X[?/;AMQ_:.V/8DAKA!3&SQUKK/?I$_7ZM:BQ8_53P\!HU'KV"UP*L +MJ_?^WC'FM-J-?HKKV&_VR25GOGUWR8"M-9JW[-RV][(_/VA[LN32^O,UEO1M +MTZ'GBL&VV[.,=6\MBSR_\<&#%ZVS3O;O5SA3\_X3'Y7_'O/SQB%%94_>_C4V +M;='P'L9/O,PY#_L/\>]U>5L#-KU56/`;ZW\R;MF1VWK0=N]7DI8/>F#6Y:,Y +MOS7;_FTCDV5]W18O+S]1H_S!V5Y;N@TI,LQ:T2ONU+'97B.&U_K?VH^:Q'7!)6G?/G)SQF<-=S>.KOW&C"5^G:?D[7OU[`7-Q'E=A_=LA%(' +MAO9IF;QPQ%+M'<^_\)+'FR__>FB-'-2E[**N^8(I/:?V#%]2 +M]DSXB#K?/C?VQU-GAW[\QLN#,LY,V7*CWSS/1]8MT!^=NC+SU>XS]WI\\.XS +M-]K6*"_J(HTL/_+DBC[^'6?6/5/OFVG=?_UVH7'JABDC$I[,_[;6;)_1J8>_ +M&7HUZ]+W8U)&'CYX+.&O?9XWKQY\_O#9@;>^&5]RI,NCEO;?U7S]X95 +MS.@'NC7:.FB:[K=&!8?29U[)+9PPJXELOG;E;/V-S38MO/+[R-S8N**][\]O +M<>Z[1;67##SJ]XU'WBU(<7N+?B^X=&H.*[:^-&Q,VT>F/]C@TT[A&TL29YUZ +M=O^)?O'M'IHR=D:#[07S)EWHO36YX=5NG:_'UGFS;$J*OW;4C2S;9Q?K=;XZ4EB7_5F[/RYEBEY%1\\NHQ +M,Y]*/[DT9E6@96.Z(>YI^80B7\>?W2:Y_K6Z/W+U$-O=/_]_6T$=?M +MI9=;-1D6]=4&J7;HLE>'/K&RVZ7RCQO4;K*B?,S*%9W.;_F^5?X74VRCGZ[7 +M+G+[<[/GG+C=_G)FT>V.MVX^]O*(/87?;QD0,69O^%K?L6-C7IZ[IF/W*R&M-[_T8N3%#8%7MH^1 +M-6<'OGJYJ-GV:5U[%G^8T>G3P*1SQUMN3WF] +M?GOCV=\//CW`[\/T=D_/2=_5(O+XOO!6^M_B'3TX]4K"W2WF+>3FU\>][C7_YY*:/TQ%.^ECG'H]9?./5;\#C?P#'O#6Q79^B>=M<;OIR= +MOOI,_@?ZFON[U?^MSY[+3S78/%RINZG#WDVUIFK]?ZRWO_>ZXRVUN2-F33QX +M.>[9Q!9'1D;Y-LL-J!U3\[+=]Y-V(Y_QSXUZH-[<7=\-G[X&"K`E-S^.=">]F%(_:-[CJW8N*9[UUK#,E-26JV] +MF=\'2^X%AW[NO"FCZ.S^6HN:3QJ?_=%CZWVG^V],GMIPHU7FC;=V'6PEY?2IK]V],A; +M_==[>.9GM6ET+'6-9^J))4^5+3PSZ\-=&VN5IU\-C&N\:EJWD;D?G,/E +MDR-U;V>V_[GAS]D-QTR^(JW8,/R5O0//U]MTYIBQZY4VJY:?2P]>\?AYZZ+1 +M?EWBVDQH4Z]#_S&]R^NNF3SOCS:QZ_;6Z+[T\I;)1]]9>O)80G^IWN[3E[O/ +MOGUMXLE-5W<.:6SKNG3LL"_*A\^[.G1`R;Z8D$=VQ']0Z]$PY>+Y>M&]\C;> +MKGWH@9R;]JD[!O;_I>W1R44U??9VOZUO>>7/&+X<\FF[M\L&#;` +M^Y6IE_.WG/OK9,N=`P?L&7*AH[9+/2J3KVGZ5EZ\=^.[CTU.B,!Q*7GVEU.[%\ZAY; +M>'9^S4ZK:]4Z47IDW>^)6Y\=KW3I=WES25Z'N0>B-T\X^YANFOW0VIX7UX6, +MFKM[Q$##NPDMIUCW'SM\^IT.O:ZTC.ARX7_GKTW]/>%D]Z6G?72>FS]_-_SA +MOOO?VOS=C.^'2,,6]9.]P[[.:/CS$PV"QW6>-G#*B66/#&K09OJ+'[9-ZG+L +M\5=ZE[\]>9EMWK)77RTOS&I7NBVA7>F56W\<';H4RO/EINLS#7[_&SEH7N@=MBZ>K=6[]V5T.U/R].#WIO2,^UL^UM; +MZC_^VIH/TC=F-8XJO3SY:H4_]X_/>BGV/CNMUOU?W'` +ME3ZCRG-/&_XZ\L?1RWU^[+_^R(W\=^<>N5E8OJGKQT.E"1,;_;7F,_.372^] +M>WO[DAJU%MWT&=#K_H-Q,.3('P%*H#)GM^\"E;;5V+9\U +M<S)[89<^BHV=FQXUY1)NRY"+.+M\) +M3#EW[E)PRZM[>H[\H_<@_^[[A^;4.'7@\O(O#QY6KC7,KSOCN4]?Z+9[^>XV +M>7U[-`^>^65$?_/DKH5/Y$UX:/."PB>.6?!%ITWS@M=HS6'?ZT[6;A#4 +M_F/S^OQVA6>6G$N'Q'?Q]J[OE]^^&32LWZ(6YW:M.ENJ7-JW]%K^P!5#9JQN +MG3VUVZ33U\=XO/KR^Z6;KVWN69JUN>C2]H>!B]MLM-WR"_%Y+FOIQ;.Q7;4K +M=TS,>?7V*<_G&J\XNJA6CE^GF;RK;<=1N9]OOM[[RQM]'CKQ +M^$5FYX*-WX]=:+=L6#7U])^[]Y?7E,6,_MJG>N9>[\,OWWZ +M<,?CO?N%W5@_=.;M=J%=C[7L?WME?_@^J?O997LZ3S:;)OXTK/^Q];?S\S-& +M71UX=5;+T6TOY'28WN?6B.N=)Z?X^B8^8SBZNF/!U)@M2S?LS6_X17F(/?61 +MQ4]?7GXR>V?@R)47Z_0Y\-FQO1_905:]#0VN]>G3YZ,#);>UL[Y:W/[DH++2 +MVT]>^R1A[_5/5EQ/Z-,_XL`J^[1N`\^57SO>?L#/!Z]-/I%R9EJ?G2.N3\L* +M6'>KW>0&<5[75_>\H`P.3UFS(ZSYYR.C$HK3U_F^=CN&7=_(SCS3Y^?K=>6U +M+^PN+3LXXM07X<]^FE:SL/NHH6-O7?WLLK%NQ]O]W]^_V-[1D/7XGT=NM#-- +MK*UOMF/-(WG7%ASUNCSFB^/^;5MW6S6M>&?\0N7DRN9=''?I%WG^O7^]2N7?,M%UY:N6[QE28'#O5\=83]G-O.[:=O/7/F +MKX!&GM9CC^&/:07YA_O-\^D[Z/_37_2ZO]<___VW>_\1T+O^_INGIT'O4?GW +MWXSZZM]_^W_QNL/O?Y*?,TM?0L^+'P"%(XO3+`6IK5*M:2FI!:VR"[/ZF.V9 +M]KQ\:I/?)\>:UR56+K\J*K7"'__4F71>"NTKN.]E-&LM_%V;37H3/]Z,^QI%I]/3;X?* +M%MPW&/5&\:N=5MIGBI[Q_FRX;[:8=6;ZS4\Y!?>-BDEKXL>GXK[6;-`9+;2? +MAOL*"%`8[:?S_@U6`_W`J)Q![9F71J$?*Y4SJ7\]\V#\^"S<-\'Q)OY]-NY; +M/*UZJYGV[=2_)].9N?PM\_%?::UF*Q<7A[7SZCEOUDJYPM]+/QW +ME^4"LH^'26?D[0M)OI>B9?1#K'(1R==:]!;ZO52YF/IG9NB2]DNX?+U>_.IQ +M*?7OX:6.OZP5_V%GG1??]^;V@7T^'A_J#P:@V&C?E_:-3,>XO_QPW\.FT6KY +M\?Y?HF-\O-%\WTO'N/UB2!^K42?TB25\V"PZ*_=?'/5O-AH,7%X\Z6LQ:(7_ +M$H0_]0JW3R*-7VO0\1^IE9/H>).7GM$O],K)U+_5K+=P^WA0>QO8E^OG2>,W +M*"K>-!0_GEJMGN-'2_T9`=$<#SHN'_KG^-$+O'D*?QO(?EX6#RO_WLC';_&P +M%O`/'P_%OP[HR,B_I_B'P>NX +M?R6*?\4$_$/VD>Q\_";&XU>B^+=J@!\(GQ+%OPD"U$QXD/*XOH`W/KY\$<^* +MA7_/X]^F6,Q<7XI_/0A4>/]%O#WP!1\_Q;]B\=*+[RG^#09`"->/Q[_)X,'C +M3:+X-VNL6BN71_&OT6GT!NXOBG_%2V'"7A3_BMG+H'#_^''Y1L7`V_L+?)N% +M/(I_+YW1RXOX0J+XMQA@_-S?/83^BHGK2_%O4A2SF>]3_&N-.H%GB>)?;P!Z +MX?8,5?F)<7^$B?&9C5Q>./<7B>+?I#-IC7R?XI_9+(J5]Q?'_>5E\>)XBQ=X5L=+\0]H,0K_)HIX +M5/&:)/!M-G/]DSD_&:P\WB0/SB_`W]R^GH+?+3Q_2AH^'K.%YP.)XE]G,5IX +M?$L4_Q:;URABO!3_7AHOIG`\F#A?&*TB'BG^%0]F +MMA`^%%G$@Y[SA8+QKQ8#"@6_I][3K"=G*!3\.K/6RIVK4/!K/?0:GKP5"GXM +M%`-&WAD%OR?3Z/0$7H6"'U*/SL"%4_!K`2L&_GTJ#UY@"QJ\DL;E&10>S`H% +MO]5HL5AI\$J&2#8Z(^^/@M\$52\?O)+%^P.R(&[U5R,\3P<%,7!X%O\:L8P9RGD+!#ZF*\>2F4/#K(!<9N+Y% +MG$P4`1Z%@M]3@1[X]R6<+``"@6_40?VYOT%BWU/GCP5"GXOJ\G,R4X)%?:T&/GQ86KP,6ZO<-X>N)Q_ +M'R'LK1'VCU3W!3ZB1/(V"?Q%J0]Y_`\:=GO+A5*/B9$?S'Y5'P6RU6BXW[BX(?J)'QXDSQX,,^Q^**?(7,PL\Z'GR +M9!9^/!0?O+U5D*]%(?T93_YFF]Y&_F`I@AQ%LF*I*KXX6;$TT=[L1?9@Z4)? +M0'#]WGF!]-X<>,4\GW(=/S[(C$8'<]4K%@,1L\K +M,V\$F.^(E,PX0P_H0_C +ME2>CX-=Z`1P(W"Q`'&_AF9$%"OD6,W=6#[%O%?H$"3"8O?CWP0(\9CY39"$B +M&%5[4O#K#7HK)QL6)LC.S(.=4?!KO#1FH4^$(#.+B<#,>/";S0K/E"Q*9#:- +MD!\MDHE(3HR"WP`O\3T%/U:6/-.S.$X&BL(K.<8K?^B/DP&CX(?*Q"#`SC._ +M'MIS>R:)8#1PLF')PGXZ83\/80\##S[FZ<`#[U\C["GLVO[BEK>NX9W +M/_Y^4'+_8ZX*(;S]O6W.(YT2*G_W]ZWO=W/5WSGF?]/CO/F_I]N] +MX>/^^G3VRA'B:NW_OV_N45:]_1U&_IF=G+TZ$?)_<0RA,+WV56QW.T:*DM-D +M_H:_4B)L_LQ\9^WOJ'$8[\&EEZB[:N!#UKKK+8*$'=[2XHXR60#(]%7B*]@V"EL*C25L5UD2M-5*!2Q#L;JWE;Q12S@R22J3RG@[ +MES9^2JZS!=@3;,?'@\>Z'PWRM!!S+OW?"2$5\)$BQ6.ODDZ*K4(#K>+EBCX5 +M>2I"'.-(!%^6,KN2BALS2EY2++HC5*29`.SJR,4X[2#5"^4BOAT>"((]-<(.08I`48`&CN/2J(L3QF56Q +M<]WD/-S@7W_F`_K$RKF*#/]ZR0K@+Y9%0L\*XH"Y;*I\:I>G_@\\)W.,8L^R +M08J2H+6K!>0\*5E*IE:ELC_T;)#*X&BWV)3]0986;)=9$1\0_W95+N\)^Y&" +MY%R0DU2!C>R`O$IR)2UH[L.E.F7"_PJA%P6BU3UN_'E+;A\X)D4)D',QAES9 +M#^5`CS9N;_A+=@5)3JG@5%,9CJ] +M>??Z5/)!=%,4`3:XE21$=IF2Q-01IW!/P6A=,.+&(0IHZ,FUPSZ@3W=NTIS:\_<_WRCW@EX,O(,]N:"CL`(" +M$UBP;&<>LH?(:X1%0%XR':%#1I0TSI'C9ZKEH7='/TPG>TB)S!L0'*`$P,B! +M\7E\0`^I%#]EKG(5#Q;,/)!Q2:H.JI84L*)+9%#\4>RA'UTD!3`/)H&^!LR+ +M8'>,$\)@I!+PE23D2D[UD+Y8A>Y+Z9*GNK$,EB&;0#.L)=!FQ)_Q8;_ +M2\5/@>-SN:^014"[%.;KAA`;YVZJA#Q0FIR(ND);3SF81\%FBE$^U<)Y; +M91;,-"@9CN;RHN1\E(IMY42%:FS@"@W6(XK@9XETECU8*NAKYKK*@>+??-X2 +M1AM$181KL2A)G(4]!+CT-R,FD!=CB/CS**1]!41 +M(OI+<8EH+XC*#!8!]DW'?L#KU*,<*)GPS6W)_0^>R*BXX6?H+;[A.+&R`(QH +M7=C%@R,0;!!8<5-M0A:/D#0BOC#V8EW&KG(M]A:`VH(TM0_$2""T#'#.R\#Z +M6JJJ3(I%#H:^HRI+!JD:L%FPI.&Z2BF"12D3`C-%8$OU6"G*^9?:@DU`#S.A +M2JU)0IASU$F*&=H'LU!A3[1-A!*&+$_,[R^PXJE86`0AH',4QP_UG7`'#K'(A<`YGEB= +M0RT!M3WS1BNKFQ*E6@4V$UH#YHWYP+,!S)?A?-/7N<&L$(YQC6@63'P="Y&< +M@O,=/*.*..)^$C;.E\(`C6%J=))%0ID%F-I.,Q\O]RPC!3FJ',@V4HEJ3QIW +M*M:7&,O86F4AS#/(6@XTA="Q\8*[XKDF(#N*\H/P*^1>FVB;2MY-5>WK8+TH +M62O:FB4S(3D;-4*;0Y68`G6:#C)*"GA)`Z./XIJBEM";!_2N(5P8A>?CH#I% +MZYBYAEQ'%25@(3/IY0>9J11:F=U9Q"W#*)"5`"'$(%`'8X_"0EK17PC9N(AL +M[`6S363-^*HYA(7+GE*X`^])-`_WY*RA(!N9%?`AX22$^K52=)7![-P+4QST0TX`E1$F84L+"U$W.E[7$5QKB/P,?@"QOE5IQ%95,5DB2X)):8D5LJ'\86 +M)I6"]`20RM%*$0U,@-(QXV#_4&G#_",,\Q)9%ELF*"52*>B;@&W)?U;T'>'1 +M#_TG%8"?R$:X4B9P;*;>L5+Q(Q^AW6A]"/)@J.0BR:D=BR'+ +MQ\J>&-%.5G4BQ#''+98\^/AQSH*9D7`=C_VAA5DL[9<`HO%[.T>(XG$'#H$\ +MXUSC`O\!BT"UQ75*8&%*AI0%MC`#1D)XK]"O)XTGEJ\FN.1Y/Q5IUZ)EEA0"6Y;`-,4WS$`B45^H++FM[!-02.2T`)4JF0$0513E:!L1?!\6&N&'%=_62`4K`&L1D3N8IZ*P5< +M)TA%$OD2$!Q&O96@SJ![I;F,VYDW1>"#5H,`\X'(1Q`K&7(.^4[-,QJ!?;(C +MU72X1N3AR+X&1S6>@'49("0,X]&!(HT#B07<6FAOI1"D,#E'"E$M#AE+1Y[5 +M0':(=<<'8<21XR%.D\2(HR"3)E$K;%<*+;.)%0V26JTB0\82XVBYGW%T*%7A +M419`E40)8#D'+*UQ8@1X(!+RGAK9@"TYA]IF`<+CN>\P(J$Z-+I4U6!WL(<& +MF80A%OPI@\;(`1AC7$^2I5:+B)!@0*,9)4&_I83$+,`(Q3U&`+((Q@=X*L!] +MUNO"("F88R!V;#S6D3,Q$C$:`"/QA+]B6JWRYC:&V/%V9:2JS\M`3QXH&V)` +M`UQ!\2V7<$M`_Y2[T`K<9@"O`%5&>($,0JV$0F*WJ(VBV) +M>Y5%`6.#IZ1@E`2C"".$!)!WP<]2?&5\D!UB1568Q"LZL"BP,*XP<>U@?A7/ +M8FA<"0XT&7"&"GF28@KDDI]57$(/OJ@=U`]!W,LP_Q/UCA1$W(Z6+2+/A6`[ +M]!Y'M.Q+QT&%@/G%S:J>,$?@TI.H@HF!(U!S/Y@#`HH!'RE@)765-0AFA4'` +M(B$L%KU*,D(XLT+5$,72Z:@2\#Q$I:Q3O>J"E5#0-`G06((HI':84XI4M"&B +MJ?=8FDL1/L"+CM5\SD?.\S)N&(EW5(!!:$5$"/*PPH#]>:1$D8^A"I(\Y`AF +M98`JY@\S?_A>8E#AIH"T/&9Q>"06YR2(*60;.4FLO-EI_4?&UCR:47=D$;0% +MRI%#E'2*%AU$8%*5""F![SR0FV$K081`?&FHI@7.Q+5_C@Y7AH2*"6(+:I@" +M5[G((117B)``JD/XJAAOFP-<;`#-2Z"^\&3IO"6R/_<=6IPR0#QAE<=/14PG +M<2P#?P7BS!4\HR$O>X"]'/P(&$N"?8@CJ`W\U+CG!-8"D#F(PU(D?WIDE[-VM*43[V03DP5`&Z-@>T_PH86DA/!\JT8S +MS0\@FC'BA3;F*B2%,6^T`U9B8DX>0_6")R$QQ6V%C7(SKE'!AM][B!D)<0&/ +M48JK(I3JJ+=#15OP&M;DT#=YCOPD,$T9H`CUEN(I!0EW9T_G&?_G=>^.8[P10VI2B`,.Z), +M14@\Y@L:FY_K.KA2(D>Q0AA_+AP5[S9O2<$L"RT8KCMA&U'I$@LZHQDSNYNO +MZ%R`HJX25$((U`0I0`T:0C-&9A2NS%)>2J(5KDJY"8Z&"ASX%&('++>(,%+J[BN9ZAL^QX*Y +MM\[=#I(9VN<1A]BE1%KG3$6.1UY!24RI8#?<,O@Y/5P9P=D/RA79651O%*%V +MKK/KF2R,1A6KP)*0P\'3%F(1C$J*;8G7D(F\&G&MG:#"1:T862<&J@28.8/O +M(&)DNQ+FIJ%C99]9P(?@125(C7ST+3`!^K9(\N[4(:UE-1 +MP!]6&9"E!&,/P$,6)1BS%7Q>1+D/M`#]HBHR2%77J8K1Z+'6HYRIY54[U9"B +M'@.+6@%Q@!"YT'GVB,[#%\`G?-Z`]:./["OJ%:K/,%H0'VI42D895U8-#.L6 +M'8]F/C_@,4FQ0GF&KW=#-JHPFX$JJQ#M@-$(O!W#4N5D_#_ED4)7!G')HO'\ +M*@;0$7!.'E!Y'#,T\3&\`]0U,YA3"%P"\^%G232+\"#`!8]>A9T44VT6$8O6-]4T/]"K?E&!D*_@4O(NS +M+(@'8!&P<9*Z`H_U%C"Y-_8.?7@0X_A#G5JD!!,Z""%R*&%,AQA"SSBUJ'P5 +M8N4K"NB*'"]""*]O>JCS?NXWSB'@V5A)[S*J`LBGWJR$KHCA,9`@%\%?G9C1 +M%-*JD$;-2Y*"HQ@W(VC0[*.*9DGR%^# +M;T)A]JBG=3AO8NX")X-46"A^#W*C.E +MRXB+`I"%6EE$I>?!5Q-@9J[.CGSC +M"`>$$"<^>`_T:0)F1#C63T7(G:YU=Z]$8'0Z1G-SSL)2#[YZ2!4P5G*.:W/D +M,M$BGVM%D:&CZBA2BI?H*BLY6LJ7`562&=ZE;EDBGZ_70Z8IP6J5K*[E]3;5 +M4CR^S0YVMTDY#B;PASJF0"E`!H$^8I0@>"?1NC<8V38:4< +M"W(I%C%C($9@I/%\GW`9)>;JZ<(J!9PC91&7B"N*2`M:'>L#^I1GIQ*RH1W; +M@DZ2`C45\6N1K&?%9-L2F!,6./.T"X9Q33T,/&_#;`);%I>CQK^#`?S!MC:Z +M:C(160#K'LA@OG1E@8XP!IK",80R;(>MJ8\DRN)+) +M:'V4LG0(QC5%=BFO;W">`AI!#$HY+(36=Y&[$\%^:%>\IHJJUHISS4J;PGSI +MJHI(R*4%R/@X%@=W]\`\@RQ"FI2@3R6->F8&HD:'48C^D`,1'\#B:6:MACK"?"R#GC`F^3I>%S*H5@A +MB-P>#^B*%?%*]0%>2TU5-E;E$N1#GO/U4'?&0@\V&*\?]&VN"B'`KOP,8((: +M_ZX9`F11;0$>ACS!48QS14"*OUP&;%XH[)*,^%`\Y00E1L["=HXM"^I?3VB? +M0+.O1*@;8BOGF+O4(7BN3R"$,B[Y3$4(CVH^'Q:9FBH"R/U@$3@^71'GD>%O +M3I7(<&8*O-H&(Q^CV8S28+-@58#>CF7^(` +M]+`<+2,VY72QTB8W;TX%G& +M+:I+1829G?,^JA]-,(=))`[52K0FX$!/E78CK&J.@*HAVS>^`D"*. +M&6YQ&'D:?^9!U;?R^`LZG +MXG_^%,]V=;[F>K6M^^;XG%\!G`0\%\6*>71"%&/=+>HIVJ@BX[,0I@`_*TQ' +M?(%M,P&5082S=.@C6(J3*M2H%>LLS&_$RJ(-VEKQA)R-\3;'BLH8/Z`4&4<(H4OPQ+J$^P;HA"OQM +M<]8@[A%18<[K+^(N&1`2+:+1@AA1HQ-&RE?J<+[+O8R5:[J(W3#N.8B?`K!/ +M#(]M9V2C/F#[9''-*NV!S$R0@AJ"[G262'+'LIH#F2_-5&T4Y[Z@BS=90?T; +M(F4`9@@ABA:.""4+ZEBRPT9)("=#\E6TT-I;'!W!-\0'8"Q#]F:XSH;(Q1EE +M\=\CQ&4N`P@&'`J$B"HN''D4/0;1@,R'^E`$2G@.R@/MC#,/B,10F(=BCD=$ +MAU"54-9#":/_QP-[5N`Z)T*`]?&:'D`(>AGF/EKW38H#K(3` +MYDE[ON3C(.#@9))JA4\\^7>X@8;%B"N9`0]QG.0!RJ!7B">,3ZB([H]#)+UD +ME.A:%IZ1P5^4:0$CD&DY2Q9+P>@:PH)E15"(>84NF+%0L9RK%=V*02BRB +MYW->[D61L4-XQ@;[>7+O`P\F@:0P?BX-\@-X&3<>NPZ/A2DA&*.(+MC(J]`Z +M$[P%8\)8`G\72Z"I$DE7>Q6#3\+`OE97K[C-=HVXH@"HS`#_A^*;R2[X"&79 +M\+<8?.XM"?3(F5"E!DE6D)K)$2+YHAY\P^-9MNQ-&($-_@W!SV0;7:^0R/)< +MKTZ]ESI$+I,TE#\\:4YDH=J16)^R`/E0>,>Y)8B,D$#>2Z;9@.^=.<0%(T9: +M6TJ2D]&>:NY4*S+T!VUXE@ESD>,J&SF:):H,`B@Q*X5RJCN#5,:ER]DG3_0! +M]DG>(QG$Q3$DTYMB4XL8@;Y#<4/=I`!D;[!.#_Y&_]'F"5:/P>B$?T7T@I=S +MP`ZEX+$D.9,E`OXR629Z1$F4-:XK(>ZY%[[)D/ELRY-[6?81:,:1!N&^[(,> +M1VZ`?WWX)K`230P2@CD)OT<,,9DVQ$B!7``Z%L#G<;!/")&L+%>*OB\.R8>J +MC.H>P;ZQHAK#&!'5C[-:%Y6T#G@W`2R;P!(1(>#M:%>$W,U7"M[SAEDM74(^ +MR!`2+!PAHJ9"_Y6BM\!/:'4S^"P#_!4`/([S:QT@,K_B.DCEEPM"(G'5E/), +M)N890D0(S]>8*U3?L!X@#9D[B20"/IS7-B"O."/:&9_$X#XJ>C":J>]$0'@F +MR/-E22S%>>ZWTHJ>3?$&KZ%NZ&?4P?T>+#WZ'/J/H]R!OB8$P''TAOHB#K1) +M=VFAX4=`"T;X*``=H95LD_"^M#BYD%FJ\M2=.43*EK6<0YSQC)RO>HO71."E +M)'B;N?[P5X<8D0(@UR(NDU2$5*X'*F!$D?#.1@W+I/Y"*YG3C?6T2' +M1B)_PC&9L(?^"D`NEX,PPTB%SNLDJI99H0*B^[095JN9G#'0XMS/JF_XFS"` +M?L8,$^"Z&D08\>41[<0(1C:/=&=\8VNJLS.AYD]UQW)%#I$C!8>0_\75:4F. +M6@S\JG*"%('U"!R#C)`&L\Q$R$=A\'F.*Z:@131'B!0A%TBI@D,`(7C]G%PB +M>3G.ZMQC'2(;6)@K0GBMSF?1,$]+XC6>:B>(:;ZZ`!B!^5@D?5.@9-R-0RJP +M"-T=#F]WQ#,-1PA6N8`[ +M\K.HYX@).(.K..$H`"S96294A38IR3'J1#R.VA90VP+T`.=Q'M\8V5(Q>`GO +M=DF4S7*I\[QO)7PH@)!4*8;."WC3ABO5OG3%CE7,Y@+(OVG((BA-BD"DP%Z: +MP(&>5F1]H1YVWAN*NHI'I53,ZRVU6N-1*0<`?P0H3#9):5*^J]7OC!&'5#U=DX^U8R!D$`1B) +MEB6`049%+#NL'X7WP2NE9-DJ=(^$G%#U2*(NY,H5K?!AD@20H$FT?3W;\^=Z\)7*H"DR0Q+;`1UN*!'`TNG)]'MJ:Z +M"[_CS`U8)0:!6981I:ESZSLS2$6I>`\.1B3R-F5P4<3$N#&P/."$YW$E +MD;,&U%AX144^S:OTT%YVY7!UXSBA'."#;4G74L;(,A6P[&)]'\!/LA1,+.`M +M&65O6JVW*U&.:R.3Y"*8#W./Q[$T\+@?O&-`SS1D"O"<+[7!57]^M8*!^>*Q +M)AZAN%;9GUB? +M&$3.D=)DJSMOWQTC#JEF<;=G``L$:\5!KVF8V]V]#'X6_,U\*4]$*]G`6#ET +M'W(,L$\TMB6$Q+D@Q(_>%-GH2_`1>L,;=76MERIJ)419(WJ5KQ(R +M!E8N(VU+(%_Y2CZ$!R-H2PAA:71T&K\R'W0R*W0',+-(1N"0:,HR1CH6-GZT +M9*`K>/22Q"SW@Q"8RY1)B1PAZ"LU-T-D\?BU$4OHP2N4O5@":.W/](`+K-M@ +M;##;]P"$)%6VPYWC6?&#V$D"_O(&#K$20F25KF;HCJ.(E+&>A]T#%:2 +M"8U5GGNJ6J9+C2R)Z\'TO):KS`0\WB"'8,3BL8%@T31`LXEB.EM.AVR>H]8% +MA"X_QQ;#T>5H&PW5-.IJK>@/IU9P;!F@*`*L&$A>I*N^)1,Q3RA>&:"D*3U` +M9C3U'*(!%JW5)ZR@ZA"O,3]&4$M,*Q&X*8PQJF&0I#SC!Y>Z<>Z@* +M;'(N/>DH'J2E<\['69N;MRC?:9$7'&F9PIP +M(_D2,!KC]#*7B!P"EL<:)!O&AO>DXNIX)/.1B^44O/Z%,[SPEW.+`+_@-]06 +ML"7:5H40H5&!5`8CPNL]#)Q#2,-"0@C.37-9G%(`7LX!78W((IAGY!1$`+(5 +M,0[@`Y$H]V!QHH*Q\;Y`USC`M!\='\?K$/25ZHX`O4"EUP +M",YG4R39<>5H+J#>7YP12)(S6`I%2I7,=<=XEJ#',N0[&$4!4Y`GJ%JO@!#' +M_%^AZD>/^'"N3_X=@U3"B)6S"'!"#'!N&C&!D6HY)P^H>4(+N)1P;)*,=X'` +M7"&-GD!D4'K(11PA/$K!`^GH!V=D0QZ3F$394`;VJ2+'.!`2#WU:T9I2/.4% +M(V&+6Q3O`K8"-^1"?,;)Q9QC6!I@)(+^#PPBX]T$A10UOOPZ!Q$#="37#-H2 +M0J`'K%2M3H3<,X?XT]U^,%M1$:+.HB'G)`*'!'+D.>J;"'Y'-]:M^"0S'$75 +M5RU5Y2U'M0IS7KPC!7)B`L6C#^=\%V^ELC25M:'^2"%[Q4%-<,\U2"6$2%*X +M>+H2Y@L?!Q-P_DCG?$R?^M#9;HA-BF::5\.LE9ZIA3'-G_;',SW'!\1Y#*\- +MJFI[IS//$)\^+(Z>@819P2A3K*)-"2'^D.$B`=6Q2H+",QC/'D;.)PI_"@R/ +M&IS;(7_P9ZVDT7%^2@_`J83+.($/ +MBE^()86J9(P^=18MGI*!=V*R%&B-=[UY.F7>W5=N+`(S&GB;(-/ZN.59/]<: +M''205+N!--N]UB!5C5;Q<5QQQLB&<53]^2$;DX\C^"P`YM()%&\@T<&=6+'1 +M7=N*%T6HT25..8=P_^7+)97:2N[X<+DZ!S@$JP>6J\32O2B8[^/4RI_A\]7@ +M)?O+D20M3N07_+\!9SQ$4CX48.E")8&HY*"03M4G!/H7,8K(QJE;_A +M$/QBHG%^=Z8@Y-_H%,5@89NY">/V=S7@TJ[HE)<:SB^;O:X5YGGTH^ +MSF@`(V50R1C!/B!-10BW.(P1/E/P^N8B.!+X`^(XYUYE52E5H3D)^CF<,;"< +M';.UT\MR"K(XVA*LK-I>S6D*SO3Q+C_0!MHR`QQK("_TX%R.;0%YMBK:5KHV +M065PR-Z<]^G)2%!+:%T1(J5#])9Q&T'_3-9BCF%6EDMW?"=A:["*4:RX`$-( +MN<0A<"38+5TIA0TP@O>]\7O$Y>R_YY`*D>Q%'()7LJ0`JT6(.;2(81BQ@MQ$ +MS^1PN8,%YTW(<*"WY'IMV=]YK,+<(HBSB!0.U4P:C#I-LHMX!F\IL>@#^$MW +MP0I\_`,&J;RVRME8\@!\:$%J+G@GG6=LW(-(CI;"X0A92'2.VB31_8/`)87` +M%M26QREL4:`IW7^(=Q%1-BRLJDJM@)`BJE:0C9D41D][0B_Z4\W)CXBAFKY, +M5F"^DL;O7P7O1_&J@EM%'&O!:&N,G*:T3%Y4X!@:P"O)H3:K@25WS<7U5`9_&0 +M0Z%BEX'#`!'`M6I]A19G>.]]#CX-AV*R\)\P")?JD&EE_#EI-EE1BL!N`B'( +M`PK>MYPKF6#>),E&PD>>\ZFCL.DY0D`;?^`1/7A+R^(AUP<2AVCI23D!$/,X +M/P&KNCZQM&H+@)]AWH)/*9-,3`/:T#E2>F*I&N>^P%P81V6`FB+T-'^J%UBE +MC*K<4FA/]PK*40IBVDJC,X'UH@"WA!#$+S[92%UC<9]75'YJM]NST3R9G5", +MX\Y#EE<]Q!D7.!C/]M`L73;(P:X8J;C=.^<[VH"/!(OD`@KR`(]6$=$<'U;) +MSOCL0XW)^YK%5.T5?O\8,@'-)$,(EU&$CQ38R^42.2)=S_Y0VQ3$"/<7*P3T +M`O,J45(8:*R5$..%5;6M6(.X,!H^%R8-LXP<`=B,$NLN=I1K#"L +M0N@Y43(]H],A)YXCA$<[W6V,XT#L.A&22_>?^E=5%S@1XHX.K#F5.,0P#UP5.OY!52`I:3BC018%`Q2!C:V`RA1D +M;"Y=PNO>C7`$()F8`$ +MP;3<1I!M9)CY:)@>,F4.5;!IJ*-:'TJ)/-H5?)Z8G7I+AWEB";S3)=*5^3J> +M^N/R5'75EI40DB.9):TL$8;QV6B%R"&8]]699@RGHDD#2NIR"38 +MY_WYRZT6\:+G=I>!M\I`@PSD#>0/&"/@@^Z(L!-G2_^<02K6/VJU"IDDE\O$ +M7`,R`2WB:9+(WL@'%>\75Z1L_N1RV0B502&UL).V5GRVJ*HMLU>E;44&9QGT +MS+8TK`*A6L=GDX;P^2J_9MS)M/RY[X"02(A9IO![33$+%CK7EZ5D]":MG162 +M+K'`(8B04O@WEM"<3]45?VIL@:L'JWAJ-]:U_HA@WB?L%>"&E2+F5RM=?V/@?OA#M92+S=-$+0(T*=O!6WF$C#3ZE\D!X$6)+)']3VL0 +MIW<V5:ZE +MNO%'E)*E^I3.WS%@\&2.3S!($)UAR^%(HN?)Y^),18J4TCE3D552N8YR,$@G +M/J**H(`C1`KC'`+>U.(G$K_3!!A!EIC->7:<8]@5(5(F]!\#/$@,0FLLN8@/ +MJ$/LO&JCNBT6YX(@S>W:GJ)DK0L"_ +ML3"+0OR2'H"[`M#/B#'$U_+AC3._/*4`QEY8^=G@SKLP_PE"*E3+)GJ>-"+$ +M'R,:(JE`Q"36Z]F8:Y6L?U.#5);*_/BBB;SK] +M!HE@/=Z6/")1Q:FVK;26ZM)+/%@T#B.4GHN-*US`'AQECN>HQ4IY8M:%L9@/ +MO6)5BQ&3`[:RD57\!5/ADY)XQ9!+JZ89A%NHORD?],`Z%?5$BZI]*P$R]I7D +MCA#'*/&^(%0X<%LRH@%CEVJ<%'RC%.(08"TG1J0\*5M*@7'Q6.*$D&2QNY!:78_Y-#5(50K#BI%^=42`NP[E,>$=(T?B; +M,!B=2I;[]:ZJ;<41XY7W'"&TW@)9A><8 +M8A&36*\IPU]T`*;'*XDD%@Y]9M/S6NR$*:RB\>YV1`BNKFEX;[0B%H$Z<1:! +MNB86YL:Y5*?F036<1Y626,&0DUR]Z%:'\&=DQE$48>%.?(G;M`H,BKF#F +MI)=-4CR>/:;5&>2IX'_#(17]!9DU`Y_#"1J!B7"$H(])G*N&B)13_UT-4H5, +M!21F0RY(H9QO%#*-+!*M#SZ.J\@"[C,P&<\!X"_DE#%<&4=MXZF>J*)M%=*Q +M[HNCK(!SJA2F!QX-(:25P/],_+R.8];![UZ.0-Y#[^+<'Z2D`J]R!K'2*IB? +MS*\TRY+QN?M,;'8^Q^(U./2A`9\6J7->O)+D#@AQ_AI.FI0/S?-`+XH%7G7Q +M-\^+T&L0W?<6#9 X^SE6QZ-J;C:;[_VEL8T:G`$^ISE.-AC.F`1WQN+>%# +MN8=K4N]7IFR&/!LC>="\)@?LAIX))\]DPS>I[G?95M!7CVTA;G*IFO%!A./O +M&V!;\%"J^]4)3MFN]G?\0DT6^#.=O$H;^E"*Y]<#*46*\^E&.>(II5A+@(;` +M*7:91ZE5O3X5^,-?CI5](;:#!.(<&^Q#WV!;?/(JKHMDTS.27,[0N&49+WPZ +MFNQX#J)`2SYN,&>F-VQZY$U@F3+.-Z2#1!Q:0-=&_BL.J7#EJH:9G',FJ-4+ +M:85&$A;W_2\8Q%TF\':HDNQR'6HQRH0\A^OM4P)^2RXCS\3?AX&\V_F*'@D]&TRIQ^#08Q^CI*1QT7W$$2E$_ +M9R&`[C#@H7"W2A&OSRIRV6+Q]QC$F@4Q'?7AXD6W2M4?^M/1&1Z]^@1NUSEM +M%74I9"7HE;"+/0,>*UTY=?_>;(4?BVIC"?[,M +MNZ+MH9+44B1FT?V)*EOGDR1Q9PS406)%3?+FSYQ1\#G8X!3]Z0$V+ +M#.2%9R_EJ*H1`GW24QJI`K0+QL-?U^);.%:.@,@"&K7`!=^XQ^#HDO_"9V[^ +MT@C.M8GK_6)4:16?'?QO,.+&7#F"%V/(!EYBG%XT0N^JO.S*0.(>E2S.(<)" +MH4P/\XH[7&/M'*TDGAC)5[XH4K7,`E;WX-;F8X=,9\(KQYS9CFL,V#!)B9++ +M$UR965Q='J'R!YTSQR<DZAGDW0>\97O:M<**V;Y5`<6\^>& +MXK-WH'=L26^P4I;Z/XJH4+YQI#+F?`;=O^5\%W_15902Y]PPE`GO-%=\_%L& +M426Z6('?D<*?#)&-8Q5CM%8]O@KZVLA_J&\AMQ'=PMZYV!O=H5-QS2X'GZ@#U42%9XGR7^]0TAQ,;(<>T8->ZIOW+/2DLS]N +M3YFK:M4=KV"":D..=+]CZRZ9)AHJH"3W-?=_&]/NYP&8KVISE1-=GPSW[_E# +ME>DR@C"JM)AK_F;1=Y99X;P%6L[+I9;IH;@]4:VJN\U=6D=#9-H=<5_1VCJE +MS/6\^=]O+!WJQP)`0!6K5Q7Z3E2*E0JS0]?GNE?J&^:S2@8+4>[\NI-._P'G +M5UB)]J>G3O50O*%62G!'^7^%CTKGMWV@CHN2@F6-K,$/[B:S4EM_F,G$H_V4 +M$O>XKDK?JNPOI[%XP%69B[6MSCSUC[81OC/VM[9-O_,_JJ-'#.-+.?YTG_G3U=-7:\@^ONF'5J +M]]]ZK.H1_-?\X2JS:LLZ1_AW^E9L[;31WTFNVOIWLK:SI=JZ<@UJ?E?$ +MG-I+Y;LA_NGV7V+C7C7Z[^7]6XG_3M?[L_??]_;//.K>2^M'^W=^M$;UJ_I5 +M_:I^5;^J7]6OZE?UJ_I5_:I^5;^J7]6OZE?UJ_I5_:I^5;^J7]6OZE?UJ_I5 +G_:I^5;^J7]6OZE?UJ_I5_:I^5;^J7]6OZM?_N]?_`=2H5XH`P`,` +` +end --- fvwm-2.5.27.ds.orig/debian/changelog +++ fvwm-2.5.27.ds/debian/changelog @@ -0,0 +1,1850 @@ +fvwm (1:2.5.27.ds-11) unstable; urgency=low + + * A bug fixing release. + * [17df12b]: [master]: Fix up a bad conflict resolution decision When + merging from stolen-from-cvs, a bad conflict resolution decision was + made. This reverts the forms used to be closer to what upstream CVS + is using. + Bug fix: "fvwm-menu-directory variable naming conventions conflicts + between 2.5.27.ds-3 and 2.5.27.ds-10", thanks to Jan Lapka + (Closes: #537594). + + -- Manoj Srivastava Sun, 16 Aug 2009 10:31:23 -0500 + +fvwm (1:2.5.27.ds-10) unstable; urgency=low + + * [17c3b2b]: [fvwm]: Move the example system.fvwm2rc into the + documentation dir A second copy of a system.fvwm2rc was shipped with + the package in order to facilitate reverting to package defaults in + case the configuration file in /etc/X11/fvwm was damaged. + Unfortunately, it ended up shadowing the configuration file, and is + now moved into the /usr/share/doc/fvwm/sample.fvwmrc directory, and + compressed, as is normal for the doc dir. + Bug fix: "wrong system-wide config file", thanks to Alex Romosan + (Closes: #536607). + + -- Manoj Srivastava Sun, 12 Jul 2009 11:01:20 -0500 + +fvwm (1:2.5.27.ds-9) unstable; urgency=low + + * A new bug fixing release + * [6c5f152]: fix _NET_WM_ICON_NAME retention on WM_ICON_NAME change + * [dfac5f6]: retain utf-8 window names on WM_NAME changes also when they + match the previous WM_NAME after charset conversion, and the utf-8 + name was set after the window was first mapped. + Bug fix: "fvwm displays the title provided by WM_NAME instead of + _NET_WM_NAME", thanks to Vincent Lefevre (Closes: #339586). + + -- Manoj Srivastava Fri, 10 Jul 2009 02:28:10 -0500 + +fvwm (1:2.5.27.ds-8) unstable; urgency=low + + * More changes to the Debian menu handling in the configuration file. + * [0e04470]: [fvwm]: Add a menuentry to refresh the Debian menu + If a user installs new packages, the system menudefs.hook file + defining the Debian menu changes. So far, there was no easy way to + refresh the menus for a running fvwm instance. This patch adds a + couple of entries into the Root menu to re-read the system + menudefs.hook file, or to (re)create and re-read a users local + menudefs.hook file using the Debian command updatge-menus. This allows + the menu definitions to be refreshed, providing the functionality of + the old fvwm-update-menus script, but using Fvwm commands. + Bug fix: "provide some version of fvwm-update-menus", thanks to Julian + Gilbey (Closes: #246902). + * [d933307]: [fvwm]: Add comments to deobfuscate the fvwm-menu-method script + * [eca9e68]: [topic--debian-menu]: Add menu options to refresh Debian menu + Add menu option lines to the example meny scripts, such that on Debian + systems (and only Debian systems), the user may refresh the Debian + menus system for a running fvwm after installing or removing packages + from the system. The user may re-read the system menu file, or + re-create and re-read a personal copy created by update-menus. + + -- Manoj Srivastava Thu, 09 Jul 2009 22:28:27 -0500 + +fvwm (1:2.5.27.ds-7) unstable; urgency=low + + * cherry picked changes from upstream + * [801b5cf]: Fix segmentation fault in FvwmEvent when RPlayHost + option is an undefined environment variable. Also wrap rplay functions + similar to other libraries to avoid ifdefs + * [0534288]: * Fix FvwmEvent handling of MX_REPLY (debian bug #438132) + Bug fix: "FvwmEvent segfault every time", thanks to Anders Boström + (Closes: #438132). + * [63d4f07]: fix fvwmstyle X-resource usage + * [4eb46df]: Fix mapping of QT deferred maped windows (e.g. + skype profile windows) + * [cd99dea]: add support for event type MX_REPLY in perllib, and + request_query method + * [6b72394]: [topic--debian-menu]: No unconditionally load of Debian menu + Also, we used to expand the ImagePath unconditionally as well. Now + the sample configuration files read the menu definitions and expand + the imagepath only when there is a menu definition file to read, and + users can opt out of that behaviour. + * [fd4e000]: [topic--debian-menu]: Add Debian menu to all sample files + Debian technical policy states that all window manager should provide + access to the Debian menus. We have been patching the window manager + to read the menus and set the iamge path willy-nilly, but this + prevented users from optiong out of loading the menus, and from + expanding the Image paths. Also, upstream were unhappy about the code + divergence. So, this is the first part of removing the divergence and + instead using configuration files to ensure that the Debian menu + heirarchy is available. + * [58b579f]: [debiandir:fvwm]: Add a system.fvwm2rc file back + After 5 years, Debian reintroduces the default system configuration + file for fvwm, system.fvwm2rc, back to the distribution. But instead + of the old, ugly, mostly low usability default configuratgion, this + configuration file is derived from a flattened theme from fvwm- + themes, and uses most of the modern conventions of new fvwm + (colorsets, etc). The new system.fvwm2rc file also suports teh Debian + menusystem, and can serve as a decent starting point for modification + -- and should easily be converted into a fvwm theme again. + + -- Manoj Srivastava Thu, 09 Jul 2009 00:41:42 -0500 + +fvwm (1:2.5.27.ds-6) unstable; urgency=low + + * Bug fix: "fvwm fails to find certain icon files, ImagePath directive + seems broken.", thanks to Andreas Hartmann. The actual issue was more + complex than that. The problem was, that in order to satisfy the + policy directive that the Debian menu was available, fvwm always reads + the menu defs -- too early for any ImagePath directives in the config + file. There was no loss in functionality, since when the config file + was read, the ImagePath was set,and then when the menu definitions + were read the second time, the menu was setup correctly -- though the + first reading emitted the scary warnings. The solution was to set a + default ImagePath that caters to the paths used in Debian packages, + thus doing away with scary warnings. (Closes: #449248). + + -- Manoj Srivastava Wed, 01 Jul 2009 01:27:10 -0500 + +fvwm (1:2.5.27.ds-5) unstable; urgency=low + + * 82b6b36]: Revert the iconman feature + The patch for this feature is buggy; and will be addressed in a future + release. + Bug fix: "FvwmIconMan is broken", thanks to Christian Ohm + (Closes: #534725). + * [50c2b29]: [fvwm]: Fix an issue with compressing dir with symlinks + Some build daemons were reporting problems with gzip unable to + compress a dir with a symbolic link in it. Fix another issue where + the symlink could be possibly be dangling. + + -- Manoj Srivastava Sat, 27 Jun 2009 23:54:00 -0500 + +fvwm (1:2.5.27.ds-4) unstable; urgency=low + + * [1cb2067]: [fvwm]: Add back readline5 dependency for FvwmConsole + With this, FvwmConsole has access to old commands which can be + accessed using the up/down arrow keys. Thanks to Thomas Adam. + Bug fix: "missing libreadline5 dependency", thanks to Jaimos F + Skriletz (Closes: #527912). + * [83e9944]: [topic--iconman-enhancements]: + Currently only the focused and plain buttons can have different styles + and colors when selected, an iconified window's button always looks + like a plain window's button. I prefer to use different style and + colors for iconified windows even if they are selected. The commit + adds the 'IconAndSelectColorset' and 'IconAndSelectButton' + configuration options. Bug fix: "support for IconAndSelectColorset + and IconAndSelectButton", thanks to Norbert Buchmuller + (Closes: #529036). + * [ca176d6]: [fvwm]: dehiss the conflics line fvwmtabss -> fvwmtabs + Bug fix: "typo in "Replaces:" line ("fvwmtabss")", + thanks to Justin B Rye (Closes: #529208). + * [2d9c27b]: [topic--doc-typo-fix]: Fix generated HTML pages + [59851df]: [fvwm]: Ensure all the HTML documentation is generated + and copied. + Bug fix: "Files under /usr/share/doc/fvwm are missing.", thanks to + tevaughan@gmail.com; (Closes: #521294, #521295). + + -- Manoj Srivastava Wed, 24 Jun 2009 00:23:11 -0500 + +fvwm (1:2.5.27.ds-3) unstable; urgency=low + + * [49dd627]: [debiandir] Remvoe autogenerated files during clean + * [fa8d133]: [debiandir] use autoreconf instead of individual commands + * [8ed132d]: [autotools-cleanup] remove autogenerated files from git. + + -- Manoj Srivastava Tue, 28 Apr 2009 18:36:50 -0500 + +fvwm (1:2.5.27.ds-2) unstable; urgency=low + + * [debiandir:38e3f5b]: Honour nocheck in DEB_BUILD_OPTIONS + Bring into compliance with the latest policy version. + * [debiandirb8a6619]: Rearrange dependencies + There is nothing in fvwm that needs ncurses directly, so that + dependency can go. However, libx11-protocol-perl and perl-tk are + needed for FvwmTabs to work -- this is a module shipped with FVWM. + * [97b77ad]: Merge branch 'topic--debian' + * [9386fab]: Add missing "%" characters after menu icons + This caused the icons not to appear in the menus. + * [b79d425]: /etc/X11/fvwm/DebianMenu has been renamed + Update Script95 to match the renamed name of the autogenerated file. + * [f3d3578]: Fix a typo; StayOnTop -> StaysOnTop + With this change, and the two recent one, we have handled the major + issues with Script95 Closes: Bug#501358 + + -- Manoj Srivastava Sun, 15 Mar 2009 13:07:52 -0500 + +fvwm (1:2.5.27.ds-1) unstable; urgency=low + + * New upstream release + - New extended variable + $[w.visiblename] + - Style matching now honours the window's visible name which + means it can be matched before the real name, hence: + Style $[w.visiblename] Colorset 5 + is now honoured. Useful with IndexedWindowName as a style + option. + - New style InitialMapCommand allows to execute any command + when a window is mapped first. + - New option to PrintInfo, "bindings" which prints out all of + the Key, PointerKey, Mouse and Stroke bindings which fvwm + knows about. + - Fixed compilation without XRender support. + - Fixed handling of _NET_MOVERESIZE_WINDOWS requests. + - Fixed a bug in automatic detection mode of the style + MoveByProgramMethod. + - Fixed png detection when cross compiling. + - Fixed keeping fullscreen window mode over a restart. + - The style PositionPlacement now honours StartsOnPage. + - Reset signal handlers for executed modules and programs. + - Try to handle a bug an old version of the EWMH spec by + honouring both, the _NET_WM_STATE_MAXIMIZED_HORIZ hint and + the _NET_WM_STATE_MAXIMIZED_HORZ hitn. + - Fix the GNOME location prefix to application .desktop files. + - 'PositionPlacement UnderMouse' now forces the window + on-screen, just like the old UnderMousePlacement style option + used to. + * [ba7521b]: Merge branch 'topic--emulator' + [acfff93]: Merge branch 'topic--debian' + [5944880]: Merge branch 'upstream' into topic--debian + [29a3be6]: Merge branch 'upstream' into topic--emulator + [ad3be09]: Delete upstream debian directory. + [822ca74]: Merge branch 'upstream' into topic--debian + [172c11e]: Merge branch 'upstream' into topic--emulator + [e820738]: Imported fvwm_2.5.27.orig.tar.gz + + -- Manoj Srivastava Wed, 25 Feb 2009 02:05:13 -0600 + +fvwm (1:2.5.26-2) unstable; urgency=low + + * [debiandir:250b152]: Update the standards version, as well as the VCS + browser field + * [debiandir:e2d7ea6]: Remove the gtk build dependencies, and do not + look for gtk The menus used in Fvwm can either be native, or, using + FvwmGTK, be GTK-based alternatives. FvwmGtk only has options to define + the content of the menus and dialogs. The builtin menus offer many + features which the GTK menus currently don’t have. None of the + features of the builtin window-list have been implemented. FvwmGtk + module requires GTK+ and optionally GDK-Imlib and GNOME libraries. + GDK-Imlib library that is a part of Imlib version 1 is used to have + images. Most of thee libraries are not obsolete, and development of + FvwmGtk module does not seem to be keeping up. Note, fvwm itself has + an ability to support GNOME Window Manager hints (which is enabled by + default), this has nothing to do with GNOME library support compiled + into FvwmGtk (which is autoprobed and used if passed). In this commit, + we disable autoprobing of GTK+, Imlib and GNOME libraries. This is a + imperceptible change in functionality. + + -- Manoj Srivastava Sun, 21 Dec 2008 11:38:00 -0600 + +fvwm (1:2.5.26-1) unstable; urgency=low + + * New upstream release. + New features: + - New MenuStyle option VerticalMargins. + New module features: + - FvwmButtons: New button alignment option: top. + Bug fixes: + - Fixed crash in ARGB visual detection code. + - Fixed compilation without XRender support. + - Fixed drawing of background pictures in menu items and titles. + - Fixed hadling of shaped windows. + - Fixed a 64-bit bug in the EWMH code. + * Moved to the new streamlined build mechanism + * Removed the fvwm-gnome package + * Record the fact that this package has moved to a git repository. + + -- Manoj Srivastava Thu, 29 May 2008 12:05:28 -0500 + +fvwm (1:2.5.25-1) unstable; urgency=low + + * New upstream release. Closes: #438132 + - Handle the STATE_ADD command of the EWMH _NET_WM_STATE + message from version 1.3 of the EWMH spec. + - Support transparency in ARGB windows + * Bug fixes: + - Fixed problem with windows disappearing when created + unless the style Unmanaged was used. Closes: #443573 + - Edge move delay was used as resistance for the top edge. Closes: #465454 + - Fixed a parsing problem of the screen argument of the + SnapAttraction style. + - Some html documentation files were not installed. + - Fixed a memory leak in internationalized font handling. + - Fixed a bug in MinOverlap placement. Closes: #458163 + - Fixed the StickyAcrossPages style in the FvwmPager. + - Fixed the determination of the X charset on UTF-8 systems. + - Fixed a crash when certain EWMH messages were sent to + unmanaged windows. + - Fixed a memory leak in multibyte codepage code. + - Ignore the EWMH staysontop and staysonbottom hints if the + EWMHIgnoreStackingOrderHints style is used. + - Fixed a sporadic crash when the root background set by gnome, + fvwm-root, esetroot etc. changes and a root transparent + colour set is used. + - Fixed spradic crash in modules with root transparent + background from colour sets. + - Fixed a possible crash if the last active module fails. + * Bug fix: "fvwm: should not conflict against fvwm-gnome", thanks to + Philipp Kern. Yes, there should have been a versioned conflicts, I + think. Closes: #470149 + * Bug fix: "Transition from fvwm-gnome does not work smoothly", thanks + to Heikki Kantola. This is the same bug as the one above. Closes: #468464 + + + -- Manoj Srivastava Tue, 18 Mar 2008 23:29:12 -0500 + +fvwm (1:2.5.24-1) unstable; urgency=low + + * New upstream release + - Disabled paging during interactive resize operations by + default (see 2.5.20) as it is annoying to many people. + - New style command options: + EdgeMoveResistance + EdgeMoveDelay + EdgeResizeDelay + SnapGrid + SnapAttraction + that replace the now obsolete commands EdgeResistance, + SnapGrid and SnapAttraction. The EdgeResistance command has + a new syntax with only one argument. + - New command MenuCloseAndExec for menu bindinngs that can be + used to trigger certain commands from a menu without an + associated item. For example, with + Key F1 MTI[]-_ A MenuCloseAndExec Menu RootMenu + the RootMenu can be opened from any other menu by pressing + F1. + * Bug fixes: + - Sometimes a window jumped by half the screen's size when + moving with the mouse and hitting the border of the desktop. + - Fixed the "screen w" argument of the Move and other commands. + - Clicking on a menu title did not close the menu by default. + - Temporary files in FvwmPerl overwrote each other. + * The segmentation fault in ewmh_events has been fixed in this + version. Closes: Bug#463384 + * Change the dependency to gnome1 libraries; Closes: Bug#460761 + This also means that there was no point in having a separate fvwm + package where FvwmGtk was a gnome entity; since it was never ported to + gnome2. So, fvwm-gnome is now a dummy package; and is meant to + transition to plain old fvwm. + * Removed the debconf question; since the upgrade would be directly from + a system installed in 2003 for the question to be valid. + * Move _all the html files into the documentation directory, thanks to + Christer Andersson. Closes: Bug#455473 + + -- Manoj Srivastava Thu, 07 Feb 2008 09:57:14 -0600 + +fvwm (1:2.5.23-2) unstable; urgency=low + + * + * Bug fix: "fvwm: postinst fails", thanks to Mario 'BitKoenig' + Holbe. Added a Section field to doc-base file. Funny thing is, this + did not fail to install for me -- I wonder why. (Closes: #443511). + * Bug fix: "fvwm: unnecessary ~/.fvwm/ creation", thanks to Neil W. Van + Dyke. Turns out that this latest version does not create a .fvwm/ + directory. (Closes: #193761). + + -- Manoj Srivastava Fri, 21 Sep 2007 20:37:58 -0500 + +fvwm (1:2.5.23-1) unstable; urgency=low + + * New upstream release. Bug fix: "fvwm: Please update to current + upstream version!", thanks to Sven Geggus (Closes: #441789). + * New features: + - New Style command options: + StartShaded + UnderMousePlacementHonorsStartsOnPage + UnderMousePlacementIgnoresStartsOnPage + !MinOverlapPlacementPenalties + !MinOverlapPercentPlacementPenalties + MinWindowSize + - SVG (scalable vector graphics) image loading support. + - New extended variables + $[w.iconfile.svgopts] + $[w.miniiconfile.svgopts]. + - Added suffix 'w' to the arguments of the Move command and + similar. It is now possible to add multiple shifts to a + window position, e.g. "50-50w 50-50w" for the center of the + screen. + - Removed UnderMousePlacement and CenterPlacement. Use + "PositionPlacement Center" and "PositionPlacement UnderMouse" + instead. + - Documentation in HTML format. + - Replaced "UseListSkip" with "UseSkipList" & "OnlyListSkip" with + "OnlySkipList" in WindowList command. (Old options deprecated.) + - New subject ImageCache for PrintInfo command. + - The new commad EchoFuncDefinition prints a function's + definition to the console for debugging purposes. + - The CursorStyle command can now load PNG and SVG images as + mouse cursors. New x and y arguments to specify the + hot spot. Also, it is now possible to load non-monochrome + cursors and cursors with partial transparency. + * New module features: + - FvwmScript: New instructions: ChangeWindowTitle and + ChangeWindowTitleFromArg. + * Bug Fixes: + - Fixed FvwmButton's button placement algorithm broken in + 2.5.22. + - Windows with aspect ratio no longer maximize past the screen + edges. + - Fixed CenterPlacement with Xinerama screens. + - Fixed CascadePlacement with title direction west and east + - Windows no longer unstick when going to fullscreen mode. + - Fixed crash when raising/lowering a destroyed window. + - Fixed expansion of $[n-] and $[*], broken in 2.5.20. + - Fixes for resizing shaded windows and windows with a gravity + other than northwest. + - Fixed CursorStyle POSITION, broken since 2.3.24. + - The hi, sh and fgsh colors in colorsets are no longer replaced + by computed values if not explicit set on the same line as the + bg, or for fgsh fg, changes. (bug #3359) + - FvwmButtons now redraws stretched button backgrounds correctly + on partial expose. + - Windows with circular transient for hints may no longer crash + fvwm with StackTransientParent style. + - FvwmPager now displays windows that are StickyAcrossPages + correctly. + - Fixed a possible crash with modules closing down. + - Fixed broken demo script fvwm_make_browse_menu.sh. + - The conditon following a comma separator without whitespace + padding was previously ignored if the presiding condition was + multi-worded. + - Various FvwmButtons drawing problems. + - Window movement or resizing triggered by an EWMH message now + honours the FixedSize and FixedPosition window styles. + - Properly generate leave_window and enter_window events for + the root window in FvwmEvent. + - Fixed crash in UTF8 code. + - Fixed parsing of the PropertyChange command. + - Fixed windowlist crash when combining CurrentAtEnd with + IconifiedAtEnd and all windows are iconified. + * Bug fix: "fvwm: debia/copyright: update download URL location", thanks + to Jari Aalto. Also updated copyrights for this release. (Closes: #438439). + + -- Manoj Srivastava Thu, 20 Sep 2007 17:35:51 -0500 + +fvwm (1:2.5.21-1) unstable; urgency=low + + * New upstream release. + * New features: + - The command Scroll can now be used for interactive scrolling. + - New Style options: StippledIconTitle, !StickyStippledTitle, + and !StickyStippledIconTitle. + - Full support for menu context (M) key and mouse bindings. See + the section Menu Bindings in the man page for details. + - Hilighted menu backgrounds now use pixmaps gradients and + transparency from their related colorset. + - New window conditions: StickyIcon, StickyAcrossPagesIcon and + StickyAcrossDesksIcon. + * Changed features: + - "Mouse n M N" is no longer used to disable or remap the + builtin tear off menu button. See the section Tear Off Menus + for details on replacement commands. + * Bug Fixes: + - Fixed Tile...Placement styles (SmartPlacement) that were + broken in 2.5.20. + - FvwmWinList: fix problem with window name/button mixups during + Init/Restart of fvwm. (bug #1393) + - It is now possible to switch the viewport while resizing + windows if "EdgeScroll 0 0" is set. + - Fixed disappearing windows when aborting interactive resizing + of maximized windows when unmaximizing them later. + - Fixed disappearing windows when moving maximized windows and + unmaximizing them later. + - Fixed calculation of final location with MoveToPage and + MoveToScreen with windows to the left or top of the viewport. + - 64-bit architecture fix in FvwmProxy. + - FvwmForm now work with balanced quoted command for Timeout. + - FvwmPager correctly updates on window desk change. + - FvwmIconBox: fixed problem with IconColorset's background + color change not being applied immediately. + - Allow FvwmConsole to run a terminal via rxvtc or urxvtc. + FvwmConsole dies if no client connects within one minute. + - Expansion of variables in FvwmTaskBar launch button commands + fixed. + - Fixed a race condition with applications raising their own + transient windows in certain ways. (Apple Shake, kphotoalbum) + - FvwmIdent reports the correct geometry if the window has its + title at the left or right side. + - Fixed an infinite loop when deiconifying windows in a group + via a different window than the initially iconified. + - FvwmCommand now reports "end windowlist" and "end configinfo". + - FvwmCommand now prints config info split on lines. + - FvwmTaskBar no longer gets lost with trailing whitespace after + geometry specification. + - Fixed a window size problem if the aspect ratio is set (e.g. + mplayer). + - Decorations now update when unmanaged windows take focus, and + not FlickeringQtDialogsWorkaround is enabled. + - FvwmPager again allows movement of windows added before a + page change. + - fvwm no longer crashes on 1 and 4 bit displays. (#1677) + - EWMH desktops now correctly handles FPClickToFocus. (#1492) + - Security fix in fvwm-menu-directory. (CVE-2006-5969) + * Bug fix: "fvwm crashes on 1-bpp and 4-bpp displays", thanks to Andre + Majorel. Fixed upstream. (Closes: #287588). + * Bug fix: "When starting fvwm, FvwmWinList contains random windows", + thanks to Vincent Lefevre. Fixed upstream. (Closes: #263945). + * Bug fix: "moving with middle mouse button in fvwm pager does not + work", thanks to Sebastian Miele. I can no longer reproduce this with + the new upstream, so I think this has been fixed. (Closes: #402525). + * Bug fix: "fvwm: does not display fr_FR.UTF-8 properly and other", + thanks to Bill Allombert. This too seems to work -- I added an menu + entry called "More Gämes", and with UTF-8 titles, and that works. The + font used is critical -- I use ``MenuStyle * Font + "Shadow=2:xft:Sans:Bold:size=11:antialias=True"'' which shows up + fine. (Closes: #392812). + * Bug fix: "fvwm: causes spurious events to be generated", thanks to + Paul Vojta. This might have been fixed in this new release -- I can't + reproduce it, and neither can upstream, with this versions of fvwm. + (Closes: #356000). + * Bug fix: "/etc/menu-methods/fvwm should respect l10n menu entries", + thanks to Michelle Konzack. Don't add hotkeys to internationalized + menu entries. (Closes: #405047, #406171). + * Bug fix: "gaim 1.4.0 steals focus when popping up the dialog window", + thanks to Vincent Bernat. This seems to have been fixed in the new + version. (Closes: #318766). + * Added XS-VCS-Arch and XS-VCS-Browse entries to the control file. + + -- Manoj Srivastava Tue, 17 Apr 2007 13:36:46 -0500 + +fvwm (1:2.5.18-3) unstable; urgency=high + + * Bug fix: "[INTL:ta] debconf PO translations for the package fvwm", + thanks to Tirumurti Vasudevan (Closes: #412819, #412821). + * Bug fix: "[INTL:ml] Malayalam translation update", thanks to Praveen A + (Closes: #412699). + * Bug fix: "fvwm: [INTL:ru] Russian debconf templates translation", + thanks to Yuri Kozlov (Closes: #412550). + * Bug fix: "fvwm : [INTL:pt] Portuguese translation for debconf + messages", thanks to Traduz ML (Closes: #412425). + * Bug fix: "[INTL:gl] Galician debconf templates translation for fvwm", + thanks to Jacobo Tarrio (Closes: #412364). + * Bug fix: "fvwm: [INTL:es] Spanish po-debconf translation", thanks to + Javier Fernández-Sanguino Peña (Closes: #403423). + * Bug fix: "suggests a package that doesn't exist: fvwm-themes", thanks + to Gonéri Le Bouder (Closes: #408312). + * Bug fix: "tighten build dependencies on libfribidi", thanks to + Michelle Konzack (Closes: #407174). + + -- Manoj Srivastava Fri, 2 Mar 2007 01:48:03 -0600 + +fvwm (1:2.5.18-2) unstable; urgency=high + + * Apply better escapes for dir names in the menu dir scanner. + + -- Manoj Srivastava Fri, 10 Nov 2006 23:45:55 -0600 + +fvwm (1:2.5.18-1) unstable; urgency=low + + * New upstream release. + - If a window started fullscreen, leaving fullscreen state now + properly unmaximizes and resizes the window. + - Fixed the ForeColor/HilightFore styles that were broken in + 2.5.17. + - FvwmPager can now move icons with the !IconTitle style. + - Fixed drawing of icons that are moved to a different desk. + - FvwmPager no longer tries to move non-movable windows. + - FvwmPager now moves all windows as user requests. + - FvwmPager no longer displaces windows with title and border + sizes on moves. + - TestRc now correctly matches Break, and $[cond.rc] is + expanded for Break. + - Fixed several 64-bit architecture problems with + XGetWindowProperty(). Xine works much better on 64-bit + machines. + - Fixed handling of ClickToFocusPassesClick with the EWMH + desktop (e.g. using nautilus). + - Fixed handling of windows that are unmapped and mapped again + too fast (e.g. fpga_editor). + * Bug fix: "HilightFore Style option no longer works", thanks to Brendan + O'Dea (Closes: #383435). + * Bug fix: "fvwm: should suggest perl packages for FvwmTabs", thanks to + Sylvain Sauvage (Closes: #382338). + * Bug fix: "fvwm: some menu breakage", thanks to Paul Vojta + (Closes: #384695). + * Bug fix: "fvwm: MenuStyle <fontcolor> option ignored (Black used + instead)", thanks to Nicola Manini (Closes: #385952). + * Bug fix: "fvwm: segfaults at startup when Xlib does not like locale", + thanks to Henning Makholm (Closes: #384729). + * Bug fix: "update-menu should respect $FVWM_USERDIR if set", thanks to + Michelle Konzack (Closes: #382517). + + -- Manoj Srivastava Tue, 12 Sep 2006 01:19:54 -0500 + +fvwm (1:2.5.17-1) unstable; urgency=low + + * New upstream release + * Bug fix: "fvwm: EWMH acronymn is erroneous in the description field.", + thanks to Thomas Adam (Closes: #380025). + * New features: + - New MenuStyle options TitleFont, TitleColorset and + HilightTitleBack. + - New command PressButton in module FvwmButtons for being able + to emulate button press via other means than the mouse. + - New wrap options to EdgeScroll command for wrapping with pixel + distances. + - New Style option UnderMousePlacement. + - Unused arguments to Style options generate warnings. + - The name style names match against can be augmented by the + X-resource "fvwmstyle". + - New options, Reverse and UseStack, to All command. + - WindowShade can now reshade windows using the Last direction. + - Positional parameters to complex functions can now be expanded + using $[n], $[n-m], $[n-] and $[*] expressions. + - The width and height arguments of the Resize command now + accept the prefix 'w' to allow resizing relative to the + current window size. + - New command ModuleListenOnly. + - New "Periodic" option added to Schedule command. + * Bug Fixes: + - Fixed detection of running non-ICCCM2 wm (bug #3151). + - Fixed drawing of menus with the sidepic on the right. + - EdgeScroll no longer divides pixel distances >1000 by 1000. + (bug #3162) + - The configure script can now cope with four-part version + numbers when detecting some libraries. + - The WarpToWindow command followed by Move in a complex + function now uses the correct pointer position. + - The menu style TitleWarp does no longer warp the pointer for + root menus (as it is documented). + - Fixed detection of safe system version of mkstemp. + - Fixed the conditions Iconifiable, Fixed, FixedSize, + Maximizable and Closable. + - Fixed problem with window outline and placement position + running out of sync. + - FvwmConsole no longer conflicts with Cygwin stdio (bug #3772). + - FvwmGtk now configures correctly on Cygwin (bug #3772). + - Fixed tempfile vulnerabilities in FvwmCommand. + * Bug fix: "Default Charset is wrong", thanks to Jonny. See + http://www.fvwm.org/cgi-bin/fvwm-bug/incoming?id=1647 for details. + (Closes: #360418). + + -- Manoj Srivastava Tue, 8 Aug 2006 20:13:20 -0500 + +fvwm (1:2.5.16-2) unstable; urgency=low + + * Synchronized from CVS, since we have a few bugs that were addressed + here. + * Bug fix: "fvwm starts when other window manager is already active", + thanks to Bernhard R. Link (Closes: #328621). + * Bug fix: "fvwm: Window title buttons and viewport scrolling stop + working.", thanks to Per Bojsen (Closes: #296348). + * Bug fix: "fvwm clashes with fvwmtabs", thanks to Micha Feigin + (Closes: #350560). + + -- Manoj Srivastava Tue, 7 Feb 2006 18:20:33 -0600 + +fvwm (1:2.5.16-1) unstable; urgency=low + + * New upstream release. + * New features: + - If the pointer can not be grabbed in functions, a message is + printed to the console instead of beeping. + - Variables can be nested, like $[desk.name$[desk.n]]. + - Obsolete one-letter variables work, but generate warnings now. + - Windows can be placed by any button (now also >3). + - It is now possible to redefine the buttons usable to finish + window movement and manual placement. + - New window condition PlacedByButton. + - MenuStyle pairs can be negated by prefixing '!'. + - New generic tabbing module - FvwmTabs. + - New Style option: EWMHIgnoreWindowType. + - New MenuStyle options: MouseWheel, ScrollOffPage and + TrianglesUseFore. + - New option "screen" to Move and ResizeMove commands to allow + specifying the target Xinerama screen. + * Bug Fixes: + - Supported a new fribidi version 0.10.5 in addition to 0.10.4. + - Better look for windows with "BorderStyle TiledPixmap". + - Some EWMH-related 64-bit fixes. + - Fixed segmentation fault when replacing title of title only + menus (Bug #1121). + - Fixes for resizing of shaded windows and resizing/moving + windows with complex functions. + + -- Manoj Srivastava Sun, 22 Jan 2006 00:46:42 -0600 + +fvwm (1:2.5.14-6) unstable; urgency=low + + * Try and see if build depending on fontconfig makes adifference, since + the configure script does seem to look for it. + + -- Manoj Srivastava Tue, 20 Dec 2005 23:30:35 -0600 + +fvwm (1:2.5.14-5) unstable; urgency=low + + * Use modular X11 packages in build dependency. + + -- Manoj Srivastava Sat, 17 Dec 2005 00:22:37 -0600 + +fvwm (1:2.5.14-4) unstable; urgency=low + + * fvwm: debconf-updatepo has not been launched. Well, updatepo is always + called during build, so this is not as serious a bug as it appears. I + am also not in favour of modifying things on disk during clean -- + clean returns the directory to the state it was in before. So, this is + a new upload, with debconf-updatepo already run, (Closes: #336203). + * fvwm: French debconf templates translation update, thanks to Jean-Luc + Coulon. (Closes: #336300). + + -- Manoj Srivastava Sun, 30 Oct 2005 10:14:17 -0600 + +fvwm (1:2.5.14-3) unstable; urgency=low + + * Bug fix: "fvwm: should depend on gdk-imlib11 instead of gdk-imlib1", + thanks to Domenico Andreoli (Closes: #332409). + * Bug fix: "fvwm: [INTL:sv] Swedish debconf templates translation", + thanks to Daniel Nylander (Closes: #333794). + + -- Manoj Srivastava Thu, 20 Oct 2005 12:36:45 -0500 + +fvwm (1:2.5.14-2) unstable; urgency=low + + * Bug fix: "please rebuild with libreadline5-dev as build dependency", + thanks to Matthias Klose (Closes: #326359). + * Bug fix: "please rebuild with libreadline5-dev as build dependency", + thanks to Matthias Klose (Closes: #326360). + + -- Manoj Srivastava Thu, 22 Sep 2005 08:36:47 -0500 + +fvwm (1:2.5.14-1) unstable; urgency=low + + * New upstream release + * New features: + + - Fvwm now officially supports 64-bit architertures. + - New Test conditions EnvIsSet, EnvMatch, EdgeHasPointer and + EdgeIsActive. + - New window condition FixedPosition. + + * New module features: + + - FvwmPerl module supports window context when preprocessing. + - FvwmPerl module accepts new --export option that by default + defines two fvwm functions "Eval" and ".", to be used like: + + FvwmPerl -x + Eval $a = $[desk.n] - 2; cmd("GotoDesk 0 $a") if $a >= 0 + . Exec xmessage %{2 + cos(0)}% # embedded calculator + + - New FvwmProxy option ProxyIconified. + - New FvwmTaskBar option Pad to control the gap between + buttons. + + * Bug Fixes: + + - Fixed a Solaris compiler error introduced in 2.5.13. + - Fixed a hang with layers set by applications (e.g. AbiWord). + - GotoDesk with a relative page argument now wraps around at + the end of the given range as documented. (Bug #1396). + - PopupDelayed menu style option was not copied on + CopyMenuStyle. + - Transparent Animated menus with non-transparent popup were + not animated correctly. + - Supported euc-jp class of encodings. + - A window's default layer is no longer set to 0 durin a + restart. + - Fixed an annoying MouseFocus/SloppyFocus problem in + conjunction with EdgeResistance + EdgeScroll (sometimes a + window did noit get the focus as it should have). This + problem first occured in 2.5.11. + + -- Manoj Srivastava Fri, 26 Aug 2005 00:38:42 -0500 + +fvwm (1:2.5.13-0.CVS.2005.08.08.01-1) unstable; urgency=low + + * New upstream CVS version. + - Fvwm now officially supports 64-bit architertures. + * Fixed a Solaris compiler error introduced in 2.5.13 + * Fixed a hang with layers set by applications (e.g. AbiWord). + * Bug fix: "GotoDesk doesn't wrap around like docs say it should", + thanks to Chip Salzenberg. GotoDesk with a relative page argument now + wraps around at the end of the given range as documented. (Closes: #238737). + + -- Manoj Srivastava Mon, 8 Aug 2005 20:55:52 -0500 + +fvwm (2.5.130.CVS.2005.07.19.01-1) unstable; urgency=low + + * New upstream CVS version. + * Bug fix: "fvwm broken properties on 64-bit hosts [PATCH]", thanks to + Marc Lehmann (Closes: #318504). + + -- Manoj Srivastava Tue, 19 Jul 2005 21:58:26 -0500 + +fvwm (2.5.13-1) unstable; urgency=low + + * New upstream release + + -- Manoj Srivastava Tue, 19 Jul 2005 15:58:22 -0500 + +fvwm (2.5.12.0.CVS.2005.07.09.01-1) unstable; urgency=low + + * Bug fix: "FTBFS: configure is not executable", thanks to Christian + T. Steigies. The problem was that since the CVS upstream does not + contain ./configure, it was created by the diff.gz -- and that leaves + all the autoconf related scripts non-executable. Added logic to + ./debian/rules to ensure that the scripts are made executable before + use, iff they exist and are not already executable. (Closes: #317565). + + -- Manoj Srivastava Sat, 9 Jul 2005 15:06:06 -0500 + +fvwm (2.5.12.0.CVS.2005.07.08.01-1) unstable; urgency=low + + * New release snagged from CVS. + Fixes + - The MoveToPage command did not work without arguments in + 2.5.11 and 2.5.12. + - Mouse/Key command no args possible core dump. + - Direction with no args possible core dump. + - FvwmScript periodic tasks run too often. + - Perl modules did not work on 64 machines. + - FvwmDebug did not report any extended messages. + - fvwm-menu-desktop supports mandriva. + - fvwm-menu-desktop when verifying executable, allow full path. + Features + - FvwmIconMan: MaxButtonWidth and MaxButtonWidthByColumns options. + - FvwmIconMan: added tool tips with Tips, TipsDelays, TipsFont, + TipsColorset, TipsFormat, TipsBorderWidth, TipsPlacement, + TipsJustification and TipsOffsets options. + - FvwmButtons: PressColorset & ActiveColorset options for + _individual_ buttons. + * Bug fix: "fvwm segfaults when pressing Ctrl while waiting", thanks to + Hugo Haas. Fixed in this release. (Closes: #278443). + * Bug fix: "/usr/bin/fvwm2: Click into windows doesn't raise them / + FPClickRaisesFocused broken?", thanks to Thorsten Gunkel + (Closes: #291291). + * Bug fix: "fvwm: post installation script error", thanks to Adrian + Mariano. (Closes: #290601). + * Bug fix: "fvwm: 'Mouse 1 T A Move' does not work as expected", thanks + to Alexander Kotelnikov (Closes: #293368). + * Bug fix: "fvwm: Fullscreen should not require + EWMHUseStackingOrderHints style", thanks to Per von Zweigbergk + (Closes: #276434). + * Bug fix: "fvwm: SnapAttraction and SnapGrid do not work any more", + thanks to Samuel Thibault (Closes: #274908). + * Bug fix: "fvwm: Fvwm is ICCCM2 compliant now.", thanks to Thomas Adam + (Closes: #305080). + * Bug fix: "INTL:vi", thanks to Clytie Siddall (Closes: #311751). + * Bug fix: "fvwm: [INTL:de] German PO file corrections", thanks to Jens + Seidel (Closes: #313712). + * Bug fix: "please add "Style OpenOffice* NoFuncHint" to + default settings", thanks to Tim Froggatt (Closes: #306991). + + -- Manoj Srivastava Sat, 9 Jul 2005 09:10:31 -0500 + +fvwm (2.5.12-5) unstable; urgency=low + + * Bug fix: "fvwm: FvwmProxy man page formatting typo .IP", thanks to + Kevin Ryde (Closes: #285386). + * Bug fix: "fvwm: fvwm-menu-desktop man page formatting typo", thanks to + Kevin Ryde (Closes: #285387). + * only chmod menu methods if the file exists. (Closes: #296944). + + * Bug fix: "FTBFS (maybe): configure fails to detect gdk-imlib", thanks + to Chip Salzenberg. Based on a patch by Harald Dunkel + (Closes: #238725). + + -- Manoj Srivastava Thu, 17 Mar 2005 17:34:11 -0600 + +fvwm (2.5.12-4) unstable; urgency=low + + * Bug fix: "fvwm: [INTL:pt_BR] Please consider adding the attached + Brazilian Portuguese translation", thanks to Andre Luis Lopes + (Closes: #279412). + * Bug fix: "fvwm: Japanese po-debconf template translation (ja.po)", + thanks to Hideki Yamane (Closes: #281071). + + -- Manoj Srivastava Fri, 19 Nov 2004 11:01:44 -0600 + +fvwm (2.5.12-3) unstable; urgency=low + + * Well, libfribidi0 0.10.4-5 had a busted shlibs file, which meant that + the buildd's built fvwm which was un-installable. Added a build + conflict with that version, hoping that that shall fix things. + * Bug fix: "fvwm 2.5.12-2 depends on libfribidi0 (>= 0.10.5) on + powerpc", thanks to Vincent Bernat (Closes: #278825). + + -- Manoj Srivastava Fri, 29 Oct 2004 13:31:55 -0500 + +fvwm (2.5.12-2) unstable; urgency=low + + * Bug fix: "fvwm: setup95 does not find KDE", thanks to Yann Dirson + (Closes: #247594). + * Bug fix: "fvwm: OpenOffice Impress Slide Show fails to fill Full + Screen", thanks to Marten van Kerkwijk. This was actually fixed in the + last upload (see http://www.hpc.uh.edu/fvwm/archive/0406/msg00041.html), + But has only been tested recently. (Closes: #269533). + + -- Manoj Srivastava Tue, 26 Oct 2004 13:33:12 -0500 + +fvwm (2.5.12-1) unstable; urgency=low + + * New upstream release. + * New commands: - EdgeLeaveCommand + * New module features: - FvwmIconMan: ShowOnlyFocused option. + * fixed xemacs growing or shrinking when title height changed; + * use type XPointer for last argument of predicate procedures for + XCheckPeekIfEvent and XCheckIfEvent, not char *, fixed core dump + * removed useless and broken SETM_ macros + * fixed resetting user states + + -- Manoj Srivastava Wed, 6 Oct 2004 14:41:17 -0500 + +fvwm (2.5.11-1) unstable; urgency=low + + * New upstream release. Please see the NEWS file for details. + * Bug fix: "[l10n] Initial Czech translation of fvwm debconf messages", + thanks to Miroslav Kure (Closes: #273519). + + -- Manoj Srivastava Fri, 1 Oct 2004 02:13:40 -0500 + +fvwm (2.5.10-13) unstable; urgency=medium + + * priority medium, since it fixes the placement bug, and stops filling + up .xsession-errors with debug messages. + * Bug fix: "[INTL:nl] updated dutch po-debconf translation", thanks to + Luk Claes (Closes: #270788). + * Bug fix: "fvwm: Style Mozilla* StartsOnPage starts on the wrong page", + thanks to Jeroen Nijhof. The problem was diagnosed, and fixed, by Paul + Vojta, who also reported the problem and the fix upstream. + (Closes: #248231). + * Bug fix: "/usr/share/xsessions/fvwm.desktop", thanks to David + Schweikert (Closes: #266092). + * Bug fix: "fvwm: French program translation", thanks to Jean-Luc Coulon + (f5ibh) (Closes: #265931). + * Bug fix: ".fvwm2rc missing from + /usr/share/doc/fvwm/sample.fvwmrc/manoj", thanks to Christian Ohm + (Closes: #267849). + * Bug fix: "fvwm 2.5.10-9 filling up .xsession-errors", thanks to + Michelle Konzack (Closes: #271481). + + -- Manoj Srivastava Wed, 22 Sep 2004 19:43:40 -0500 + +fvwm (2.5.10-12) unstable; urgency=low + + * Bug fix: "Pixmaps, icons, etc. don't work in remote fvwm", thanks to + Norbert Buchmuller (Closes: #250521). + * Bug fix: "fvwm: FvwmTaskBar & FvwmButtons crash when managing + remote display", thanks to Norbert Buchmuller (Closes: #251539). + + -- Manoj Srivastava Fri, 13 Aug 2004 22:54:18 -0500 + +fvwm (2.5.10-11) unstable; urgency=low + + * Bug fix: "fvwm: menu-method fails when using dpkg-reconfigure", thanks + to Jaume, who also figured out the cause. (Closes: #261574). + * Bug fix: "fvwm: update-menus fails", thanks to Mykola A. Nickishov + (Closes: #264225). + * Added german translation. + * Bug fix: "fvwm-root scrambles XRoot with --retain-pixmap even if + pixmap does not exist", thanks to Niv ALTIVANIK. I backported the + changes made in to CVS instead. (Closes: #263533). + + -- Manoj Srivastava Wed, 11 Aug 2004 14:36:20 -0500 + +fvwm (2.5.10-10) unstable; urgency=low + + * NMU ACK: "fvwm: FTBFS: build target requires root privs", thanks to + Tollef Fog Heen (Closes: #258122). + * Bug fix: "fvwm: Updated German translation of the debconf templates", + thanks to Erik Schanze (Closes: #256620). + * No longer call the deprecated wm-menu-config script. + + -- Manoj Srivastava Wed, 21 Jul 2004 11:17:10 -0500 + +fvwm (2.5.10-9.1) unstable; urgency=low + + * NMU (at maintainer's request) + * Bug fix: Replace make_directory with mkdir -p in the config target. This + should make the package build again, without root privs. Thanks to Goswin + Brederlow for discovering the bug. (Closes: #258122). + + -- Tollef Fog Heen Mon, 12 Jul 2004 13:17:43 +0200 + +fvwm (2.5.10-9) unstable; urgency=low + + * Bug fix: "fvwm: depends on gnome", thanks to Mario 'BitKoenig' Holbe + and others. Since it seems that the added functionality provided by + compiling in GNOME libraries was not worth the bloat caused by the + requirement to install the large chunks of GNOME, a new package, + fvwm-gnome, has been created, and fvwm proper shall not depend on + gnome. (Closes: #256136). + * Bug fix: "fvwm: [INTL:fr] French debconf templates translation", + thanks to Christian Perrier (Closes: #256131). + + -- Manoj Srivastava Fri, 25 Jun 2004 13:26:15 -0500 + +fvwm (2.5.10-8) unstable; urgency=low + + * Bug fix: "fvwm: should depend on librplay3", thanks to Ludovico + Gardenghi. Fixed a complex bug related to invoking dpkg-shlibdeps + which did not find all executables. (Closes: #247953). + + -- Manoj Srivastava Wed, 23 Jun 2004 22:11:33 -0500 + +fvwm (2.5.10-7) unstable; urgency=low + + * Switched me and sacha around as maintainers; not having me as + maintainer made it harder for me to get the reports, and since sacha + is not active at this point, it should not matter. We can always + switch it back later. + * Bug fix: "NEWS doesn't mention upgrades", thanks to David B Harris + (Closes: #247938). + * Bug fix: "fvwm: Please add German translation of the debconf + templates", thanks to Erik Schanze and Helge Kreutzmann + (Closes: #252830, 252308). + * Bug fix: "[INTL:nl] new Dutch po-debconf translation", thanks to Luk + Claes (Closes: #251246). + * Bug fix: "fvwm: [INTL:fr] French debconf templates translation", + thanks to Christian Perrier (Closes: #249076). + * Bug fix: "Typos in debconf template", thanks to Jens Seidel + (Closes: #250560). + * Bug fix: "fvwm menu-methods should quote title() properly", thanks to + Bill Allombert (Closes: #251230). + + -- Manoj Srivastava Wed, 23 Jun 2004 13:37:12 -0500 + +fvwm (2.5.10-6) unstable; urgency=low + + * Bug fix: "fvwm: Could you add a Session file for gdm ?", thanks to + Antoine Sirinelli (Closes: #246923). + * debian/NEWS.Debian: Bug fix: "fvwm: lacks information about upgrading + configuration", thanks to Yann Dirson (Closes: #247591). + * Bug fix: "fvwm: new way of handling configuration should provide a + smooth upgrade path", thanks to Yann Dirson. Well, the upgrade path is + smooth enough, though not automated, since this radical a change can't + easily be automated, and the old configuration is horribly out of + date anyway. (Closes: #247599). + + -- Manoj Srivastava Fri, 7 May 2004 00:59:50 -0500 + +fvwm (2.5.10-5) unstable; urgency=low + + * Bug fix: "fvwm: postinst sets bogus alternative", thanks to Martin + Pitt (Closes: #245443). + + -- Manoj Srivastava Sat, 24 Apr 2004 15:26:35 -0500 + +fvwm (2.5.10-4) unstable; urgency=low + + * Bug fix: "FVWM fails to compile on mips/mipsel machines", thanks to + Manoj Srivastava (Closes: #244554). + * Bug fix: "still looking in the wrong location for system.fvwm2rc", + thanks to Sean Finney (Closes: #243926). + * Bug fix: "fvwm: strange files under /usr/share/doc/fvwm/", thanks to + Roland Stigge (Closes: #242859). + + -- Manoj Srivastava Mon, 19 Apr 2004 03:45:50 -0500 + +fvwm (2.5.10-3) unstable; urgency=low + + * Bug fix: "There should be a symlink /usr/lib/fvwm/current -> + VERSION", thanks to Karl Hegbloom. Since we no longer ship a .fvwmrc + file, we do not have to provide compatibility symlinks for dir changes + on upgrade. (Closes: #218527). + * Bug fix: "fvwm: unnecessary ~/.fvwm/ creation", thanks to Neil W. Van + Dyke. Now the .fvwm file is created only on explicit user command. + (Closes: #193761). + * Bug fix: "Latest unstable (2.5.10-2) can't find system.fvwm2rc", + thanks to Warren Overholt. Now ask a debconf question and abort + upgrade unless the user is ready for the new fvwm. (Closes: #242662). + + -- Manoj Srivastava Thu, 8 Apr 2004 12:32:39 -0500 + +fvwm (2.5.10-2) unstable; urgency=low + + * Change the menu location to be consistent with where Debian has + traditionally put it. + * Bug fix: "fvwm: patch for the fvwm-update-menu script", thanks to + Julian Gilbey. We no longer have a system default menu. + (Closes: #208501). + * Bug fix: "fvwm: Alt-Tab behaves wrong when NeverFocus window exists", + thanks to Alexandra N. Kossovsky. This is no longer applicable. + (Closes: #207499). + + -- Manoj Srivastava Wed, 7 Apr 2004 10:40:14 -0500 + +fvwm (2.5.10-1) unstable; urgency=medium + + * New upstream release. This upload includes a number of security fixes, + see http://securitytracker.com/alerts/2004/Jan/1008781.html. Security + fixes in fvwm-menu-directory (BugTraq id 9161), + fvwm_make_directory_menu.sh, fvwm_make_browse_menu.sh. + * Bug fix: "FTBFS: setgid control directory", thanks to Matt Kraai. The + build system has been totally redone for this release. + (Closes: #240379). + * We no longer include fvwm-setup-background, which used to invoke + xv. Instead, we use our own fvwm-root/xpmroot; which is a self + contained binary. (Closes: #227548). + * Bug fix: "fvwm: /usr/lib/menu/fvwm: restart command of fvwm2 is + incorrect", thanks to Jeff Sheinberg (Closes: #185758, 190584). + * Bug fix: "fvwm: seems to have a memory leak", thanks to + pmaydell@chiark.greenend.org.uk. Fvwm no longer appear to grow + infinitely in size, as observed over several weeks. This is a very + different code bas than what the bug was reported against. + (Closes: #186660). + * Bug fix: "fvwm: hangs on (re)start with xfstt (unix/:7101) in font + path", thanks to Jeff Sheinberg. (Closes: #197630). + * Bug fix: "fvwm: Doesn't install", thanks to Richard Braakman. The + maintainer scripts have been totally redone. (Closes: #202612). + * Bug fix: "fvwm: FvwmTaskBar does not start at all", thanks to + Christian Beier (Closes: #210902). + * Bug fix: "fvwm: Fvwm package has unneed dependency on libgtk", thanks + to Victor B.Wagner (Closes: #217968). + * Bug fix: "fvwmiconbox: dies when window title >280 chars", thanks + to Alexander Zangerl . Works fine with the example in the bugreport. + (Closes: #220155). + * Bug fix: "fvwm is missing dependency on libfribidi0", thanks to + Christoph Berg (Closes: #242017). + * Bug fix: "fvwm: /usr/share/man/man1/x-window-manager.1.gz is a + dangling symlink", thanks to Vincent Lefevre (Closes: #187084). + * Bug fix: "fvwm: A new version of fvwm is available", thanks to Manoj + Srivastava (Closes: #218571). + * Bug fix: "fvwm: please package fvwm 2.5.x", thanks to Marco d'Itri + (Closes: #189664). + + -- Manoj Srivastava Tue, 6 Apr 2004 15:03:58 -0500 + +fvwm (2.5.8-0.3) experimental; urgency=low + + * Redid the build system to meet my standards. + * Start with a minimal difference from the upstream changes. + + -- Manoj Srivastava Tue, 25 Nov 2003 16:52:40 -0600 + +fvwm (2.5.8-0.2) unstable; urgency=low + + * Removed extraneous configuration option --enable-multibyte, thanks to + comments from Mikhael Goikhman + * Updated build depends to also depend on gdk-imlib-dev, to get the + missing GNOME functionality. + + -- Manoj Srivastava Tue, 11 Nov 2003 15:09:07 -0600 + +fvwm (2.5.8-0.1) unstable; urgency=low + + * New upstream release, local modification + + -- Manoj Srivastava Mon, 10 Nov 2003 12:31:09 -0600 + +fvwm (2.4.16-2) unstable; urgency=low + + * In previous revision config.{sub,guess} changes, introduced in + 2.4.15-2, had been reverted by mistake. This release put them back. + + -- Alexander Kotelnikov Thu, 10 Jul 2003 15:10:36 +0000 + +fvwm (2.4.16-1) unstable; urgency=low + + * new upstream + * FvwmIcoMan fix (closes: #182711, #193703) + * NoWarp option added to Menu command (closes: #188274) + * The latter also applies to WindowList (closes: #188272) + + -- Alexander Kotelnikov Tue, 8 Jul 2003 15:40:59 +0400 + +fvwm (2.4.15-2) unstable; urgency=low + + * Fix for purging fvwm if menu package is not installed (closes: #182322) + * outdated config.{sub,guess} fix (closes: #185297) + + -- Alexander Kotelnikov Sat, 22 Mar 2003 23:22:58 +0000 + +fvwm (2.4.15-1) unstable; urgency=low + + * debian/rules changed heavily (debhelper dependency removed) + * new upstream (closes: #171810, #176561) + * system.fvwm2rc changed (closes: #133611, #157293, #163596) + * fvwm man page fixed (closes: #171089) + + -- Alexander Kotelnikov Mon, 27 Jan 2003 05:59:59 +0300 + +fvwm (2.4.10-2) unstable; urgency=low + + * Bugfix (closes: #161282) + + -- Alexander Kotelnikov Fri, 20 Sep 2002 00:23:30 +0400 + +fvwm (2.4.10-1) unstable; urgency=low + + * New upstream + + -- Alexander Kotelnikov Mon, 16 Sep 2002 02:34:53 +0400 + +fvwm (2.4.9-1) unstable; urgency=low + + * New upstream + + -- Alexander Kotelnikov Thu, 5 Sep 2002 23:10:11 +0400 + +fvwm (2.4.8-1) unstable; urgency=low + + * New upstream (closes: #150488) + + -- Alexander Kotelnikov Sun, 23 Jun 2002 08:18:38 +0400 + +fvwm (2.4.7-2) unstable; urgency=low + + * fixed menu file (closes: #145779) + * minor menu changes + + -- Alexander Kotelnikov Sat, 4 May 2002 17:08:07 +0400 + +fvwm (2.4.7-1) unstable; urgency=low + + * New upstream + + -- Alexander Kotelnikov Tue, 30 Apr 2002 03:11:30 +0400 + +fvwm (2.4.6-2woody1) stable; urgency=high + + * "No, restart Fvwm" command correction. Previous was to run + /usr/bin/X11/fvwm2, even fvwm is in /usr/bin since 2.4.5-2 + (closes: #153983) + + -- Alexander Kotelnikov Sat, 27 Jul 2002 22:16:35 +0000 + +fvwm (2.4.6-2) unstable; urgency=high + + * fix for old /usr/bin/X11/ alternatives (closes: #140806) + + -- Alexander Kotelnikov Mon, 8 Apr 2002 20:40:29 +0400 + +fvwm (2.4.6-1) unstable; urgency=low + + * New upstream version + * closes: #137239, thanks to Mikael Hedin + * really closes: #134775 + + -- Alexander Kotelnikov Mon, 11 Mar 2002 01:03:25 +0300 + +fvwm (2.4.5-3) unstable; urgency=low + + * more fixes to alternatives (closes: #134775) + + -- Alexander Kotelnikov Thu, 21 Feb 2002 00:21:49 +0300 + +fvwm (2.4.5-2) unstable; urgency=low + + * moving from /usr/X11R6 to /usr to satisfy Debian policy 12.8.7 + * prerm fixed to honour slave alternatives removal, + hope it closes: #133335 + * debian/conffiles removed (closes: #133620) + + -- Alexander Kotelnikov Fri, 15 Feb 2002 11:15:22 +0300 + +fvwm (2.4.5-1) unstable; urgency=low + + * New upstream version + * changes to fvwm-update-menus (closes: #129487) + + -- Alexander Kotelnikov Mon, 28 Jan 2002 11:08:44 +0300 + +fvwm (2.4.4-5) unstable; urgency=low + + * FvwmConsole changes (closes: #101221) + * preinst changed (closes: #129309) + + -- Alexander Kotelnikov Tue, 15 Jan 2002 03:01:58 +0300 + +fvwm (2.4.4-4) unstable; urgency=low + + * build with libstroke0 (closes: #35600) + * setup-background is back (closes: #111519) + * please note, setup-background call is removed from system.fvwm2rc + * fvwm-update-menu provides updating menus on the fly (closes: #91878) + * FvwmButtons fix (closes: #109686) + * CMD_Exec() change (closes: #49808) + + -- Alexander Kotelnikov Fri, 11 Jan 2002 01:17:08 +0300 + +fvwm (2.4.4-3) unstable; urgency=low + + * fix in fvwm/read.c (closes: #110909) + * fix in fvwm/style.c (closes: #110106) + * added some manual pages links (closes: #52493, #52495, #52496) + + -- Alexander Kotelnikov Tue, 8 Jan 2002 03:00:16 +0300 + +fvwm (2.4.4-2) unstable; urgency=low + + * fixed default system.fvwm2rc (closes: #67322, #68487, #111513) + * fixed menu-method (closes: #126191) + * some examples are back (closes: #111510) + * fix in README.sysrc (closes: #111509) + * ChangeLog is installed in /usr/share/doc/fvwm (closes: #116974) + + -- Alexander Kotelnikov Sat, 5 Jan 2002 17:16:03 +0300 + +fvwm (2.4.4-1) unstable; urgency=low + + * New upstream version (closes: bug#113181) + * all modifications of /etc/X11/fvwm/ are put away (closes: + #109821,#110024,#110908) + * fixed update-alternatives stuff (closes: #123603,#123650) + * menu-related fixes (closes: #88270,#88160,#108846) + + -- Alexander Kotelnikov Thu, 3 Jan 2002 19:36:19 +0300 + +fvwm (2.4.0-3) unstable; urgency=low + + * fixed bugs in system.fvwm2rc.{default,old} + * (irrelevant to previous line) + * closes #88270,#88160 + + -- Alexander Kotelnikov Fri, 24 Aug 2001 00:16:27 +0400 + +fvwm (2.4.0-2) unstable; urgency=low + + * debian/ bugfix + * closes: #108858,#109172,#109174,#109492,#109505,#108846 + + -- Alexander Kotelnikov Thu, 23 Aug 2001 04:05:06 +0400 + +fvwm (2.4.0-1) unstable; urgency=low + + * New upstream + * Needs to be cleaned a little, but needs to be released too + + -- Alexander Kotelnikov Sat, 4 Aug 2001 00:17:38 +0400 + +fvwm (2.2.5-1.1) unstable; urgency=low + + * NMU + * Fix Build-depends. Closes: #105060 + + -- LaMont Jones Thu, 19 Jul 2001 10:39:13 -0600 + +fvwm (2.2.5-1) unstable; urgency=low + + * new upstream version + + -- Alexander Kotelnikov Tue, 27 Feb 2001 01:10:36 +0300 + +fvwm (2.2.4-5) unstable; urgency=low + + * complied without rplay library + * debian/* bugfix (closes: #85317, #71144, #72301) + + -- Alexander Kotelnikov Fri, 9 Feb 2001 17:06:13 +0300 + +fvwm (2.2.4-4) unstable; urgency=low + + * menu-method correction from Yann Dirson applied (closes: #79162) + + -- Alexander Kotelnikov Sun, 24 Dec 2000 22:39:03 +0300 + +fvwm (2.2.4-3) unstable; urgency=low + + * fvwm got new maintainer + + -- Alexander Kotelnikov Fri, 1 Dec 2000 20:47:31 +0300 + +fvwm (2.2.4-2.1) unstable; urgency=low + + * Non-maintainer upload. + * debian/control: fix Build-Depends to refer to libxpm4-dev instead of + xpm4g-dev. + * debian/rules: + - fixed lame bug in dirpack rule (calling tar cf with no files to + archive, tut tut). + - don't ship keyboard.xpm, in anticipation of xlibs 4.0 having it + * Recompiled against modern xpm library to generate proper dependencies. + + -- Branden Robinson Wed, 6 Sep 2000 15:20:30 -0500 + +fvwm (2.2.4-2) frozen unstable; urgency=low + + * Correct fatal syntax errors in fvwmrc_convert (so uploading to frozen + as well as unstable) + * Correct Build-Depends for newest potato libraries (libncurses and + libreadline) and include auto{conf,make} (for some reason, the build + uses them) + + -- Julian Gilbey Wed, 19 Jan 2000 00:29:47 +0000 + +fvwm (2.2.4-1) unstable; urgency=low + + * New upstream source (very minor bug fixes) + * Remove shlibs.local now that libreadlineg2 has been fixed. + + -- Julian Gilbey Thu, 9 Dec 1999 01:48:41 +0000 + +fvwm (2.2.3-4) unstable; urgency=low + + * Provide x-window-manager (closes: #51830) + * Correct setup-background.1x manpage (closes: #46529) + * No longer use dh_installwm. (Prevents configure-time warnings) + + -- Julian Gilbey Tue, 7 Dec 1999 18:09:50 +0000 + +fvwm (2.2.3-3) unstable; urgency=low + + * Add build dependencies + * Remove install-stamp target from debian/rules + * Recompile to use new librplay3 library + + -- Julian Gilbey Mon, 6 Dec 1999 17:13:48 +0000 + +fvwm (2.2.3-2) unstable; urgency=low + + * Correct fvwm-common postinst bug (closes: #49445) + + -- Julian Gilbey Sun, 7 Nov 1999 18:05:51 +0000 + +fvwm (2.2.3-1) unstable; urgency=low + + * New upstream version + * Correct Depends and Suggests lines (closes: #49026) + + -- Julian Gilbey Tue, 2 Nov 1999 22:52:01 +0000 + +fvwm (2.2.2-5) unstable; urgency=low + + * Added appropriate IconPath and PixmapPath lines to system.fvwm2rc for + Debian's very messy situation + + -- Julian Gilbey Mon, 1 Nov 1999 09:23:59 +0000 + +fvwm (2.2.2-4) unstable; urgency=low + + * Corrected copying error: twm postinst -> fvwm postinst had fvwm2.1x by + mistake (closes: #48756) + * Correct update.warn syntax error (closes: #48841) + + -- Julian Gilbey Sun, 31 Oct 1999 23:23:48 +0000 + +fvwm (2.2.2-3) unstable; urgency=medium + + * Changed "Exec" to "Exec exec" in menu-method file (closes: #47291) + * Changed perl5 dependency to perl5 | perl. + * Corrected preinst so it doesn't fail if not already installed (closes: + #47021, #47531) + * Use x-windows-manager alternatives system (closes: #40733) + * Corrected repeated sentence in fvwm2.1 (closes: #42638) + * Corrected system.warnings reference to README.Debian_upgrading + (closes: #45731) + * Allow .fvwm2/.fvwm warnings to be disabled (closes: #48013) + * FHS compliance + + -- Julian Gilbey Wed, 27 Oct 1999 23:35:41 +0100 + +fvwm (2.2.2-2) unstable; urgency=low + + * Change Pre-Depends: perl to Depends: perl5. + + -- Julian Gilbey Thu, 1 Jul 1999 22:58:21 +0100 + +fvwm (2.2.2-1) unstable; urgency=low + + * Another new upstream bug-fix release + + -- Julian Gilbey Mon, 7 Jun 1999 16:25:34 +0100 + +fvwm (2.2.1-1) unstable; urgency=low + + * New upstream source (bug fixes) + * Never released (not checked for compilability etc) + + -- Julian Gilbey Fri, 14 May 1999 02:13:12 +0100 + +fvwm (2.2-6) unstable; urgency=low + + * Hopefully last release of 2.2 before moving to 2.2.1 (a bug-fix + release) + * Add a new hook to system.fvwm2rc called default-style.hook, so that + all of the icon settings and suchlike don't need to be reset + * Modified system.warnings to provide a restart option on the quit form + * Added example: default-style-hook.change-colours to show how to do so + * Added example: post-hook.change-buttons to reproduce the behaviour of + 2.2-3's title bar buttons + * Added example: post-hook.window-buttons-maximize + * Added example: post-hook.menu-form-exit to use QuitVerify + * Moved default xterm in system.fvwm2rc to top of menu (suggested by + Andrew Pimlott) + * Only have default xterm in main menu if the menu package is not + present (by destroying the menu and re-reading the hook files in the + menu-method) + * Correct icon commands in system.fvwm2rc to refer to programs by + resource class rather than title + * Setup-background has new config file location again and once more can + use sitewide config files (although in a new location); closes: #35634 + again! + * Have postinst for fvwm-common move setup-background's global config + files from /etc/X11/fvwm2 (or their rescued location) to their new + location + + -- Julian Gilbey Fri, 14 May 1999 00:35:29 +0100 + +fvwm (2.2-5) unstable; urgency=low + + * Undo the change to system.fvwm2rc introduced by the fix to #37082 in + 2.2-4. This turned out to make everything far, far too slow. The + code has been relegated to a post.hook example file for those who want + it and are prepared to pay the performance penalty. The problem can + also be `solved' by removing NumLock and ScrollLock's xmodmap + bindings. + + -- Julian Gilbey Tue, 4 May 1999 04:35:52 +0100 + +fvwm (2.2-4) unstable; urgency=low + + * Add MiniIcon style options to system.fvwm2rc for common programs; + closes: #11355, although these will probably need changing when wm- + icons is introduced + * Always have an xterm option on the Debian menu, even if the menu + package is not installed (so won't be stuck with nothing) + * Correction to fvwmrc_convert Sticky* problem + * Wrote setup-background manpage, further alleviating #35634; I think it + can probably be closed soon, once the READMEs are improved; #35706 can + be closed as well + * Correct menu-method (closes: #35829, #36500) + * system.fvwm2rc changes: + - Corrected syntax of Exec commands (to avoid extra shell processes) + - Returned to Exit fvwm menu instead of form (closes: #36232) + - Added MiniIcon options to the Style commands (closes: #11355) + - Adds Alt-Fn to the Window-Ops menu (closes: #32923). I don't really + like the order of options: they make little sense, but the principle + of least surprise requires me to maintain them. I hope to add an + example post.hook in the examples directory to handle this + - Reverted back to Lars' colour scheme (white/steelblue) to please + Branden ;-) (closes: #36231) + - Removed the excess window buttons as well (closes: #36234) + - Handle NumLock and/or ScrollLock being on (closes: #37082) + * Added some example hook files in /usr/doc/fvwm/examples + * Now only Suggests: menu rather than Recommends: (closes: #36335) + * Modify preinst so it only saves modified .hook files (as compared with + the Debian 2.1 (slink) version), saves the whole old /etc/X11/fvwm2 + directory structure too, and only asks the user to hit return to read + the message. This will hopefully be dealt with better at a later + stage. Also rewrote preinst in Perl for the purpose + * Revert to only Recommending fvwm-common rather than Depending + * Removed fvwm-common-beta conflict, as there won't exist such a + package + * Added support for readline and rplay + + -- Julian Gilbey Mon, 3 May 1999 23:50:04 +0100 + +fvwm (2.2-3) unstable; urgency=low + + * Made fvwm Depend on fvwm-common because of setup-background being + called from system.fvwm2rc. Currently an ugly hack, which will + hopefully be cured soon, with fvwm-common being split into wm-common + and wm-icons + * fvwm-common now suggests xloadimage (closes: #35707) + * setup-background is now windows manager independent. However, this + means that its config files have moved. This is documented in the + README file, and will be documented in the manpage to appear + (hopefully) in the next upload -- sort of exacerbates bug #35634 + * fixed debian/rules to handle broken fileutils 4.0 (closes: #35866) - + thanks James for spotting this one! + + -- Julian Gilbey Wed, 14 Apr 1999 22:29:40 +0100 + +fvwm (2.2-2) unstable; urgency=low + + * Corrected semantic error in preinst (closes: #34981) + + -- Julian Gilbey Wed, 24 Mar 1999 14:12:13 +0000 + +fvwm (2.2-1) unstable; urgency=low + + * New upstream (stable!!) source; this is the first stable release of + FVWM 2 + * New maintainer + * MAJOR USER-VISIBLE CHANGES have been made in this package as compared + to the fvwm2 beta-releases. These are mainly due to the fact that + fvwm is now the main package and fvwm1 is secondary: please see the + README.upgrade file for details + * Renamed this package as fvwm on Branden Robinson's advice, as it is + now *the* stable fvwm; FVWM 1.xx has been discontinued upstream (and + FVWM 1.xx is now found in the fvwm1 package) + * Massive changes to the Debian scripts which solve several of the + Debian-related bugs + * Lots of bugs are closed by fixes in the upstream source since the bugs + were filed + * This release closes: #5736, #10862, #11861, #16143, #18576, #20444, + #20831, #22286, #24135, #32796, #32939, #33109, #33755, #34149, + #18003, #21097, #32795, #8785, #8954, #14791, 21547, #25601, #11495, + #27276, although some of these are not really fixed, but the upstream + authors do not intend to do so in the near future. Also, the + following bugs are partially fixed: 11824 and 11886. + + -- Julian Gilbey Fri, 19 Mar 1999 00:18:21 +0000 + +fvwm2 (2.1.10-2) unstable; urgency=low + + * Get the --syscondir= option right (closes: #32775). + * Add setup-background (closes: #32777). + * Fixup postinst (closes: #32779). + + -- Vincent Renardias Wed, 3 Feb 1999 09:15:02 +0100 + +fvwm2 (2.1.10-1) unstable; urgency=low, closes=31800 30418 25943 31204 8665 16949 26671 21314 30216 10099 11899 25939 26316 30506 13008 12985 13146 14236 17667 24310 17668 22844 22982 25770 25941 25942 27851 31439 17972 26748 + + * New upstream release (Bugs #31800, #30418, #25943) + (Upstream version changed a _lot_ of code, so I had to + shoehorn the previous changes; Hope I got it right.) + * changes to debian/rules: + - adapt for GNU configure. + - Fvwm.tmpl doesn't exist anymore. + - strip executables (Pkg size: 2.4Mo -> 700k) + * Now includes FvwmCommand/FvwmCommandS (Bug #31204). + * extras/* modules included (Bugs #8665, #16949). + * Removed Recommends: from package fvwm-common on fvwm2|fvwm95: + It's not up to fvwm-common to recommend a WM, but to the WMs + which are using it to recommend fvwm-common. + Fix bug #26671. + * Move setup-background from fvwm2 to fvwm-common (Bug #21314). + * Patch setup-background so it works with other window managers + too (Bug #30216). + * The default config and the menu system are now decent enough + to consider #10099 fixed. + * #10862 has been fixed in upstream code. + * Don't autoconvert the users' .fvwmrc anymore + (Bugs #11899, #25939, #26316, #30506). + * Close #13008 & #12985: This was very likely due to a file + corruption that happened during download, or the file was already + corrupted/truncated on the mirror were it has been fetched. + * Close #13146: This is not a bug, but the expected behavior. + * Close #14236: The behavior has changed upstream. + * s/DestroyMenu/DestroyFunc/ in system.fvwm2rc + (Bugs #17667, #24310). + * Set 'Mouse 0 W M -' in system.fvwm2rc (Bug #17668). + * Fix #22844 (NMU Hack). Could not re-apply the patch since + the build system has moved to autoconf. + * s/README.sysrc/README.sysrc.gz/ in system.fvwm2rc + (Bug #22982). + * Close #25770, #25941, #25942 (the fvwm2-plus package isn't produced anymore). + * Set PagerGeometry to '-0-0' (Bug #27851). + * Now built with rplay support (Bug #31439). + * Don't Recommends: menu, just Suggests: it (Bug #17972). + * Add Y. Dirson's suggestion to system.fvwm2rc (Bug #26748). + * post{inst,rm} scripts now use the register-window-manager + script. + + -- Vincent Renardias Fri, 29 Jan 1999 22:11:01 +0100 + +fvwm2 (2.0.46-BETA-3.1) frozen unstable; urgency=low + + * Corrected Fvwm.tmpl to look for AlphaArchitecture && __linux__ + instead of just linux. This seems to work again. + + -- Michael Alan Dorman Sun, 10 May 1998 19:49:03 +0500 + +fvwm2 (2.0.46-BETA-3) frozen unstable; urgency=low + + * postinst: create /etc/X11/window-managers if it doesn't already exist + as temporary work-around for case when xbase hasn't been configured + by the time fvwm2 postinst runs. Fixes Bug#22022. + * copyright file now included in fvwm-common. Fixed Bug#19312. + * system.fvwm2rc now includes ScrollBar line in window-ops menu, + fixing Bug#21559. + * system.fvwm2rc has fixed M-TAB and friends. Single page only, + however, due to bug in page flipping. Fixes Bug#17666. + + -- Austin Donnelly Sat, 2 May 1998 19:49:03 +0100 + +fvwm2 (2.0.46-BETA-2) unstable; urgency=low + + * removed mini-gv.xpm from fvwm-common icons, since it was causing an + overlap with the gv package. Fixes Bug#16373. + + -- Austin Donnelly Sat, 24 Jan 1998 12:58:46 +0000 + +fvwm2 (2.0.46-BETA-1) unstable; urgency=low + + * moved to newest upstream version, 2.0.46 + * built against libc6 and newest X libraries. Fixes Bugs 11683, 12674, + 12970, 11682, 12676, 12921, 12967 and 13577. (Yes, really!) + * patch to FvwmPager fixes problems with geometry spec overriding. + Fixes Bugs 10330, 10535, 11051 and 11860. + * new upstream release fixes Bug#11489: NoTitle and MiniIcon bad interaction. + * FvwmIdent manpage fix: default background is white. Fixes Bug#11495. + * incorporated RJK's fixes to fvwmrc_convert (as reported in Bug#10138). + * fvwmrc_convert doesn't use gawk anymore. Fixes Bug#10140. + * postinst and postrm add and remove fvwm2 from /etc/X11/window-managers. + Fixes Bug#11484. + * FvwmCpp now uses /lib/cpp for its cpp. Fixes Bug#11051. + * explicitly set PixmapPath and IconPath in Fvwm.tmpl since the imake + defaults are no longer any good. + * README.sysrc includes "hints and tips" section, with info on + configuring your pager. + + -- Austin Donnelly Sun, 5 Oct 1997 13:55:32 +0100 + +fvwm2 (2.0.45-BETA-4) unstable; urgency=high + + * manpage fix: OpaqueMove -> OpaqueMoveSize (Fixes Bug#8775). + * manpage fix: say that fvwm2 reads /etc/X11/fvwm2/system.fvwm2rc + Fixes Bug#8767. + * move subdirectories of debian/ into a tar.gz.uue file. + Fixes Bug#8664 and Bug#9141. + * changelog.Debian (this file) now distributed. Fixes Bug#8637. + * move hook files aside in preinst so dpkg doesn't blow them away when + they leave the file list. Restore or default them in the postinst. + * /etc/menu-methods/fvwm2 now puts quotes around titles to xterms for + text-only menu entries. + * remove the "DeleteMenu" from /etc/menu-methods/fvwm2, and don't + generate main-menu.hook. + * main-menu-pre.hook now available again + * system.fvwm2rc modified to use main-menu-pre.hook + * sloppy arg checking in postinst made fvwm2 impossible to install from + scratch - this is why this is urgency HIGH. + * fvwm2-menu-method upgraded to menu-1.3 compatible one + * fvwm2-menudefs upgraded to menu-1.3 compatability + * fvwm2 now "recommends" menu(>=1.3). + * default main-menu-pre.hook is an xterm entry, just in case menu is + not being used. + * system.fvwm2rc now decor-friendly + * include sample fvwm2rc showing how to use M4 + * when purging, clear out /etc/X11/fvwm2/.fvwm too + + -- Austin Donnelly Thu, 8 May 1997 00:42:19 +0100 + +fvwm2 (2.0.45-BETA-3) unstable; urgency=low + + * Changed package description to be more up-to-date + * postinst now cleans up the no longer used main-menu-pre.hook, and + resets main-menu.hook (vestige of the old menu system). + Fixes Bug#8318. + + -- Austin Donnelly Sun, 6 Apr 1997 16:58:57 +0100 + +fvwm2 (2.0.45-BETA-2) unstable; urgency=low + + * Use Joost's menu package more correctly + * Add list of modules we support to Modules/ menu (Fixes Bug#8066). + * Spruce up the system.fvwm2rc a little: its now much more usable. Fixes + Bug#8044, and should go some way to fixing Bug#8174. + * README.sysrc updated to reflect new world view. + * Moved bitmaps out of /usr/include/X11/pixmaps. Fixes Bug#7625. + + -- Austin Donnelly Sun, 23 Mar 1997 19:22:07 +0000 + +fvwm2 (2.0.45-BETA-1) unstable; urgency=medium + + * Don't overwrite the default hooks. Fixes Bug#7364. + * Applied Andrew Veliath's patch to fix the "Style ... NoButton 0" + bugglet (bug in upstream 2.0.45). + * Added support for Joost's menu system + * Added upstream ChangeLog to /usr/doc/fvwm2. Fixes Bug#7305. + + -- Austin Donnelly Sat, 15 Feb 1997 16:42:23 +0000 + + +fvwm2 (2.0.45-BETA-0) unstable; urgency=low + + * New upstream source: fvwm v2.0.45 from + ftp://ftp.hpc.uh.edu/pub/fvwm/version-2/fvwm-2.0.45.tar.gz + * Fixed typo in FvwmWinList manpage (Fixes Bug#6408). + * New release fixes wrong gid problems (Bug#6469, Bug#6924, Bug#6925) + * Install a stripped xpmroot binary (Fixes Bug#5072) + * Tweak to system.fvwm2rc to solve problem with hooks being run + multiple times. (Fixes Bug#6597). + * Now includes some icons from fvwm95 - related to Bug#6401 in fvwm95 + * Include my own fvwm2rc to demo new features of fvwm2 + + -- Austin Donnelly Sun, 9 Feb 1997 17:45:42 +0000 + + +fvwm2 (2.0.44-BETA-0) unstable; urgency=low + + * New upstream source: fvwm v2.0.44 from + ftp://ftp.hpc.uh.edu/pub/fvwm/version-2/fvwm-2.0.44.tar.gz + * Re-packaged in new Debian source format + * NEVER RELEASED into the wild. + + -- Austin Donnelly Sat, 11 Jan 1997 19:06:24 +0000 + + + +Sun Aug 25 15:21:42 1996 Austin Donnelly + + * debian.rules: added GoodStuff manpage to fvwm-common package. + + * icons/xterm-linux.xpm: added from kernel source + + * manpages: are now installed compressed + + * Released version 2.0.43 + +Sat Aug 17 15:49:39 1996 Austin Donnelly + + * fvwm2.man: typo fixed. Bug#4099. + +Sun Jul 28 21:20:11 1996 Austin Donnelly + + * New upstream version, 2.0.43 + + * debian.rules: conforms to new packaging guidelines + + * added Lars Wirzenius' dynamic fvwm config stuff as default + + * split off common parts into new fvwm-common package. This source + tree now build both the fvwm2 and fvwm-common packages. Fixes + bugs #3437 and #3748. + + * renamed system configuration file to system.fvwm2rc. Tickles a + bug in dpkg. + + * Added complex example configuration file, to show off lots more + features. + + * debian.postinst: creates empty hook files to shut fvwm up + + * debian.postrm: remove empty hook files on purge + + +Sat Apr 20 21:06:03 1996 Austin Donnelly + + * Fvwm.tmpl: define FVWM_CPP to be /lib/cpp + + * added debian.* files + + * added utils/convert_users to be called from postinst + + * fvwm2.man: man page corrections + + * mini.emacs.xpm: emacs icon drawn and added + + * FvwmAuto.man: more corrections + + * FvwmCpp.c: security fix + + * FvwmCpp.man: corrections + + * FvwmM4.c: security fix + + * FvwmPager.man: correction + + * fvwmrc_convert: bugfixes: + o corrects order of IconBox translation + o if old .fvwmrc specified to use the built-in pager, then + configure FvwmPager to be as similar as possible + o fixes problem with old buttonstyle translation conde + o fixed problem where spurious ')' could appear at the start + of a line by itself + o handles MWMBorders + o handles Cursor + o handles SloppyFocus + o fixes a few problems with '$0' appearing in output rather than + being expanded. + o fixes problems translating menu defns with spaces in the title + + +Wed Apr 17 16:27:12 1996 Austin Donnelly + + * Got source from: + ftp://ftp.hpc.uh.edu/pub/fvwm/version-2/fvwm-2.0.42.tar.gz --- fvwm-2.5.27.ds.orig/debian/prerm +++ fvwm-2.5.27.ds/debian/prerm @@ -0,0 +1,126 @@ +#! /bin/sh +# -*- Mode: Sh -*- +# prerm --- +# Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +# Created On : Fri Nov 14 12:16:39 2003 +# Created On Node : glaurung.green-gryphon.com +# Last Modified By : Manoj Srivastava +# Last Modified On : Fri Sep 21 02:38:50 2007 +# Last Machine Used: anzu.internal.golden-gryphon.com +# Update Count : 11 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# arch-tag: a4c1a888-137d-4800-98f8-93d0365422d8 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# + +# Abort if any command returns an error value +set -e + +package_name=fvwm + +if [ -z "$package_name" ]; then + print >&2 "Internal Error. Please report a bug." + exit 1; +fi + + +# This script is called as the first step in removing the package from +# the system. This includes cases where the user explicitly asked for +# the package to be removed, upgrade, automatic removal due to conflicts, +# and deconfiguration due to temporary removal of a depended-on package. + +# Info files should be uninstalled from the dir file in any case. +##: install-info --quiet --remove /usr/info/${package_name}.info + +case "$1" in + remove) + # This package about to be removed. + ##: + + # Remove package-specific directories from /usr/local. Don't try + # to remove standard directories such as /usr/local/lib. + ##: if test -d /usr/local/lib/${package_name}; then + ##: rmdir /usr/local/lib/${package_name} || true + ##: fi + + # Deactivate menu-methods script. + ##: chmod a-x /etc/menu-methods/${package_name} + + # Withdraw our version of a program. + update-alternatives --remove fvwm /usr/bin/fvwm2 + update-alternatives --remove x-window-manager /usr/bin/fvwm2 + + + # Get rid of the byte compiled files + ##: if [ -x /usr/lib/emacsen-common/emacs-package-remove ]; then + ##: /usr/lib/emacsen-common/emacs-package-remove $package_name + ##: fi + + if [ -L /usr/doc/$package_name ]; then + rm -f /usr/doc/$package_name + fi + + # There are two sub-cases: + if test "${2+set}" = set; then + if test "$2" != in-favour; then + echo "$0: undocumented call to \`prerm $*'" 1>&2 + exit 0 + fi + # We are being removed because of a conflict with package $3 + # (version $4), which is now being installed. + : + + else + # The package is being removed in its own right. + : + + fi ;; + deconfigure) + if test "$2" != in-favour || test "$5" != removing; then + echo "$0: undocumented call to \`prerm $*'" 1>&2 + exit 0 + fi + # Package $6 (version $7) which we depend on is being removed due + # to a conflict with package $3 (version $4), and this package is + # being deconfigured until $6 can be reinstalled. + ##: + + ;; + upgrade) + # Prepare to upgrade FROM THIS VERSION of this package to version $2. + ##: + + if [ -L /usr/doc/$package_name ]; then + rm -f /usr/doc/$package_name + fi + + ;; + failed-upgrade) + # Prepare to upgrade from version $2 of this package TO THIS VERSION. + # This is only used if the old version's prerm couldn't handle it, + # and returned non-zero. (Fix old prerm bugs here.) + ##: + + ;; + *) echo "$0: didn't understand being called with \`$1'" 1>&2 + exit 0;; +esac + +exit 0 --- fvwm-2.5.27.ds.orig/debian/watch +++ fvwm-2.5.27.ds/debian/watch @@ -0,0 +1,7 @@ +# format version number, this line is compulsory! +version=3 +opts=pasv,dversionmangle=s/\.ds// http://www.fvwm.org/download/ \ + ftp://ftp.fvwm.org/pub/fvwm/version-2/fvwm-([\d\.]*)\.tar\.gz \ + debian debian/urepack + + --- fvwm-2.5.27.ds.orig/debian/conffiles +++ fvwm-2.5.27.ds/debian/conffiles @@ -0,0 +1,2 @@ +/etc/menu-methods/fvwm +/etc/X11/fvwm/system.fvwm2rc --- fvwm-2.5.27.ds.orig/debian/control +++ fvwm-2.5.27.ds/debian/control @@ -0,0 +1,39 @@ +Source: fvwm +VCS-Git: git://git.debian.org/~srivasta/debian/fvwm.git +VCS-Browser: http://git.debian.org/?p=users/srivasta/debian/fvwm.git +Section: x11 +Priority: optional +Maintainer: Manoj Srivastava +Uploaders: Alexander Kotelnikov +Build-Depends: autoconf, automake| automaken, cvs, +# depending on cvs sucks, but gettext needs it without depending on it, +# and autoreconf calls autopoint from gettext, which uses a CVS repo in +# a tar ball. See Bug#506022 and Bug#508230 + libncurses5-dev, libreadline5-dev | libreadline-dev,libpng12-dev | libpng-dev, + libstroke0-dev, fontconfig, libfribidi-dev (>= 0.10.7), libxft-dev, + libfreetype6-dev, librsvg2-dev (>= 2.13.92), libxcursor-dev, + libxinerama-dev, librplay3-dev, libxrandr-dev, libxrender-dev, + libsm-dev, libx11-dev, libxext-dev, libxpm-dev, libxt-dev, libxi-dev, + libfontconfig1-dev | libfontconfig-dev, file, xsltproc, po-debconf, + gettext, sharutils +Homepage: http://www.fvwm.org/ +Standards-Version: 3.8.3.0 + +Package: fvwm +Architecture: any +Depends: ${shlibs:Depends} +Recommends: fvwm-icons, perl-tk, libx11-protocol-perl +Suggests: fvwm-themes, m4, cpp, menu (>=1.5), wm-icons +Provides: x-window-manager, fvwm-gnome +Conflicts: fvwm-beta, fvwm-common, fvwmtabs, fvwm-gnome +Replaces: fvwm-beta, fvwm-common, fvwmtabs, fvwm-gnome +Description: F(?) Virtual Window Manager + FVWM is a powerful ICCCM2 compliant multiple virtual desktop window manager + for the X Window System. FVWM requires relatively little memory. + . + This 2.5 version includes new features like full support of the EWMH + (Extended Window Manager Hints) specification, internationalization, + improved window decoration code (no flickering anymore), + bi-directional asian text support, FreeType font support + (antialiasing), image rendering, Perl based module library, support + for PNG images, side titles and much more. --- fvwm-2.5.27.ds.orig/debian/urepack +++ fvwm-2.5.27.ds/debian/urepack @@ -0,0 +1,55 @@ +#!/bin/sh + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA + +# This is heavily based on work done by Bernd Zeimetz, and has been +# extended slightly. + +set -e + + +#command --upstream-version version filename +[ $# -eq 3 ] || exit 255 +version="$2" +filename="$3" + + +echo >&2 '' +echo >&2 " Starting to get ${filename} " + +# Unpack, and find the directory it unpacked into +tar xfz ${filename} +dir=`tar tfz ${filename} | head -1 | sed 's,/.*,,g'` + +# Package specific cleanups +DIRS_TO_REMOVE=${dir}/debian +FILES_TO_REMOVE=${filename} + +echo >&2 " Munging ${filename} ==> ${filename%%.orig.tar.gz}.ds.orig.tar.gz" +rm -f ${FILES_TO_REMOVE} +rm -rf ${DIRS_TO_REMOVE} + +# Any additional cleanup goes in here +: echo '' + + +# rename, repack, cleanup +mv ${dir} ${dir}.ds.orig +tar cf - ${dir}.ds.orig | gzip -9 > ${filename%%.orig.tar.gz}.ds.orig.tar.gz +rm -rf ${dir}.ds.orig + +echo >&2 " ${filename%%.orig.tar.gz}.ds.orig.tar.gz created." + --- fvwm-2.5.27.ds.orig/debian/docentry-fvwm +++ fvwm-2.5.27.ds/debian/docentry-fvwm @@ -0,0 +1,18 @@ +Document: fvwm +Title: Fvwm Manual +Author: Various +Abstract: F(?) Virtual Window Manager is a powerful ICCCM2 compliant + multiple virtual desktop window manager the X Window System. FVWM + requires relatively little memory. It includes full support of the + EWMH (Extended Window Manager Hints) specification, + internationalization, improved window decoration code (no flickering + anymore), bi-directional asian text support, FreeType font support + (antialiasing), image rendering, Perl based module library, support + for PNG images, side titles and much more. +Section: Help + +Format: HTML +Index: /usr/share/doc/fvwm/html/index.html +Files: /usr/share/doc/fvwm/html/groupedCommands.html + /usr/share/doc/fvwm/html/allCommands.html + /usr/share/doc/fvwm/html/modules.html --- fvwm-2.5.27.ds.orig/debian/preinst +++ fvwm-2.5.27.ds/debian/preinst @@ -0,0 +1,102 @@ +#! /bin/sh +# -*- Mode: Sh -*- +# preinst --- +# Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +# Created On : Fri Nov 14 12:12:04 2003 +# Created On Node : glaurung.green-gryphon.com +# Last Modified By : Manoj Srivastava +# Last Modified On : Thu Apr 8 13:42:31 2004 +# Last Machine Used: glaurung.internal.golden-gryphon.com +# Update Count : 10 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# arch-tag: d6a3672d-acb3-4f6c-9984-bad17d8ce0aa +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# + + +# Abort if any command returns an error value +set -e + +package_name=fvwm + +if [ -z "$package_name" ]; then + print >&2 "Internal Error. Please report a bug." + exit 1; +fi + + + +# This script is called before this version of this package is installed. +# When this script is called, the package's files have not been unpacked +# yet. + +# This package uses debconf to ask a question, so source the debconf +# confmodule as early as possible. However, it does not depend on debconf, +# so debconf may not be installed. +##: if [ -e /usr/share/debconf/confmodule ]; then +##: . /usr/share/debconf/confmodule +##: db_capb +##: fi + +case "$1" in + install) + # About to install this package. + ##: + + # Add a diversion. This is one of the few things which may be done + # before installing any files from the package. + ##: dpkg-divert --package foo --add --rename \ + ##: --divert /usr/bin/other.real /usr/bin/other + + # There are two sub-cases: + if test "${2+set}" = set; then + # The configuration files from version $2 of this package are + # still on the system. + : + + else + + # There is no existing configuration; install from scratch. + : + + fi ;; + upgrade) + # About to upgrade this package from version $2 TO THIS VERSION. + # "prerm upgrade" has already been called for the old version of + # this package. + ##: + if test $(echo $2 | sed -n 's/-.*//p') = "2.4.0"; then + if test -L /etc/X11/fvwm/system.fvwm2rc; then + rm -f /etc/X11/fvwm/system.fvwm2rc; + fi + fi + + ;; + abort-upgrade) + # Back out of an attempt to upgrade this package FROM THIS VERSION to + # version $2. Undo the effects of "postrm upgrade $2". + ##: + + ;; + *) echo "$0: didn't understand being called with \`$1'" 1>&2 + exit 0;; +esac + +exit 0 --- fvwm-2.5.27.ds.orig/debian/rules +++ fvwm-2.5.27.ds/debian/rules @@ -0,0 +1,66 @@ +#! /usr/bin/make -f +############################ -*- Mode: Makefile; coding: utf-8 -*- ########################### +## rules --- +## Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +## Created On : Fri Nov 14 12:33:34 2003 +## Created On Node : glaurung.green-gryphon.com +## Last Modified By : Manoj Srivastava +## Last Modified On : Thu Apr 8 12:23:11 2004 +## Last Machine Used: glaurung.internal.golden-gryphon.com +## Update Count : 71 +## Status : Unknown, Use with caution! +## HISTORY : +## Description : +## +## arch-tag: 9a5063f4-1e20-4fff-b22a-de94c1e3d954 +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +## +############################################################################### + +# Include dpkg-architecture generated variables +include debian/common/archvars.mk + +# Set variables with information extracted from control and changelog files +include debian/common/pkgvars.mk + +# variables useful for perl packages +include debian/common/perlvars.mk + +# we use debconf +include debian/common/debconf.mk + +# Install commands +include debian/common/install_cmds.mk + +include debian/local-vars.mk + +include debian/common/copt.mk + +include debian/common/automake.mk + + + +all: + @echo nothing to be done + +include debian/common/targets.mk + +include debian/local.mk + + +#Local variables: +#mode: makefile +#End: --- fvwm-2.5.27.ds.orig/debian/menu-method +++ fvwm-2.5.27.ds/debian/menu-method @@ -0,0 +1,91 @@ +#!/usr/bin/install-menu +#I need menu-1.4! +# arch-tag: 73ccd6e4-fcf8-4b3f-8672-f61ae101cab5 + +compat="menu-1" + +!include menu.h +!include lang.h + +outputencoding="LOCALE" + +# how to create menus +# So, if the title contains $[gt., +# we just print + title, or +# else +# we escape all the double-quotes in the title, +# and we replace the first ocurence of the hotkey with an & +# Finally, we print +# If there is an icon defined, print %icon file%, else leave it blank +# First argument +# command argument +function start($var,$com)=\ + "+ \"" ifelse(ifneq(replace(title(), "$[gt.", "#"), title(), "GETTEXT"), \ + title(), \ + escfirst(esc(title(),"\\\""),$hotkey,"&")) \ + cond_surr(icon(),"%","%") "\" " $var " " $com "\n" + +supported + fvwmmodule= start("Module", $command) + fvwmother= start("", $command) + wm= start("Restart",$command) + x11fvwm2= start("Exec exec", $command) + x11fvwm= start("Exec exec", $command) + x11= start("Exec exec", $command) + text= start("Exec exec", term()) +endsupported + +# Usage: +# Read /etc/X11/fvwm/menudefs.hook +# Popup /Debian + +# Ok, "startmenu" is a little wacky, and comes in 4 parts: +# 1. If this is running for a user, then we do a DestroyMenu to clear +# out the system one. Furthermore, if we're dealing with the +# top-level /Debian menu, then add a title for it (normally done in +# system.fvwm2rc). Of course, none of this happens if we're +# running as root to produce the system-wide menudef.hook file. +# 2. We spit out an "AddToMenu /Foo/Bar/Baz" to start this menu. +# 3. We add a trailing newline to the lot. + +# replace any spaces in the section with undescores, +# and put the title on top +startmenu= "DestroyMenu \"" replacewith($section," ","_") "\"\n" \ + "AddToMenu \"" replacewith($section," ","_") "\" \"" \ + title() "\" Title Top\n" +endmenu= "\n" + +# This is how to define a menu entry that pops up another entry +# Whoof. Write + ", replace the first hotkey in the title with an & +# If there is an icon, add % icon-file %, " +# add Popup , followed by the section replacing all spaces with underscores +submenutitle= "+ \"" escfirst(title(),$hotkey,"&") \ + cond_surr(icon(),"%","%") "\" Popup \"" \ + replacewith($section," ","_") "\"\n" + +# The menu file to generate +genmenu= "menudefs.hook" + +# the prefix every $section variable gets. +rootsection="/Debian" + +# The prefix to use when running as root +rootprefix="/etc/X11/fvwm/" + +#Technical note: For historical reason, userprefix treat path starting +#with 2 / as absolute and with 0 or one / as relative to $HOME. This +#is why I added a / before the $ +#userprefix="/.fvwm/" +userprefix=shell("echo -n /${FVWM_USERDIR-.fvwm}") + +# c : dump children of menu. +# m : dump this menu's $submenutitles +# ( : dump $startmenu +# ) : dump $endmenu +# M : dump all $submenutitles of this menu and this menu's children. +treewalk="c(m)" + +mainmenutitle = "Debian Menu" +# printed to the beginning of each output file +preoutput="#!/bin/bash\n# This file is autogenerated by fvwm update-menus method\n# Do not edit - any changes to this file will be lost\n"; +hotkeycase="insensitive" --- fvwm-2.5.27.ds.orig/debian/postinst +++ fvwm-2.5.27.ds/debian/postinst @@ -0,0 +1,272 @@ +#! /bin/sh +# -*- Mode: Sh -*- +# postinst --- +# Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +# Created On : Fri Nov 14 11:25:07 2003 +# Created On Node : glaurung.green-gryphon.com +# Last Modified By : Manoj Srivastava +# Last Modified On : Fri Sep 21 02:37:57 2007 +# Last Machine Used: anzu.internal.golden-gryphon.com +# Update Count : 32 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# arch-tag: 5401e9ef-39cc-4aee-96a4-61dfb8f32cf7 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# + +# Abort if any command returns an error value +set -e + +package_name=fvwm + +if [ -z "$package_name" ]; then + print >&2 "Internal Error. Please report a bug." + exit 1; +fi + +# This script is called as the last step of the installation of the +# package. All the package's files are in place, dpkg has already done +# its automatic conffile handling, and all the packages we depend of +# are already fully installed and configured. +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package +# +# quoting from the policy: +# Any necessary prompting should almost always be confined to the +# post-installation script, and should be protected with a conditional +# so that unnecessary prompting doesn't happen if a package's +# installation fails and the `postinst' is called with `abort-upgrade', +# `abort-remove' or `abort-deconfigure'. + +# The following idempotent stuff doesn't generally need protecting +# against being run in the abort-* cases. + +# Install info files into the dir file +##: install-info --quiet --section "section pattern" "Section Title" \ +##: --description="Name of the document" /usr/info/${package_name}.info + +# Create stub directories under /usr/local +##: if test ! -d /usr/local/lib/${package_name}; then +##: if test ! -d /usr/local/lib; then +##: if mkdir /usr/local/lib; then +##: chown root.staff /usr/local/lib || true +##: chmod 2775 /usr/local/lib || true +##: fi +##: fi +##: if mkdir /usr/local/lib/${package_name}; then +##: chown root.staff /usr/local/lib/${package_name} || true +##: chmod 2775 /usr/local/lib/${package_name} || true +##: fi +##: fi + +if [ -e /etc/menu-methods/fvwm ] && [ ! -x /etc/menu-methods/fvwm ]; then + chmod a+x /etc/menu-methods/fvwm +fi + +# Ensure the menu system is updated +[ ! -x /usr/bin/update-menus ] || update-menus + + +## Deprecated +##if test -x /usr/sbin/wm-menu-config; then wm-menu-config fvwm on; fi + + +# Arrange for a daemon to be started at system boot time +##: update-rc.d ${package_name} default >/dev/null + + + +# This package uses debconf to ask a question, so source the debconf +# confmodule as early as possible. However, it does not depend on debconf, +# so debconf may not be installed. +##: if [ -e /usr/share/debconf/confmodule ]; then +##: . /usr/share/debconf/confmodule +##: db_capb +##: fi + + +case "$1" in + configure) + # Configure this package. If the package must prompt the user for + # information, do it here. + # Install emacs lisp files + ##:if [ -x /usr/lib/emacsen-common/emacs-package-install ]; then + ##: /usr/lib/emacsen-common/emacs-package-install $package_name + ##:fi + + + # Activate menu-methods script + chmod a+x /etc/menu-methods/${package_name} + + # Update ld.so cache + ##: ldconfig + + # Make our version of a program available + update-alternatives \ + --install /usr/bin/fvwm fvwm /usr/bin/fvwm2 200 \ + --slave /usr/share/man/man1/fvwm.1.gz fvwm.1.gz \ + /usr/share/man/man1/fvwm2.1.gz + update-alternatives \ + --install /usr/bin/x-window-manager x-window-manager /usr/bin/fvwm2 50 \ + --slave /usr/share/man/man1/x-window-manager.1.gz \ + x-window-manager.1.gz /usr/share/man/man1/fvwm2.1.gz + + # Tell ucf that the file in /usr/share/foo is the latest + # maintainer version, and let it handle how to manage the real + # confuguration file in /etc. This is how a static configuration + # file can be handled: + ##:if which ucf >/dev/null 2>&1; then + ##: ucf /usr/share/${package_name}/configuration /etc/${package_name}.conf + ##:fi + + ### We could also do this on the fly. The following is from Tore + ### Anderson: + + #. /usr/share/debconf/confmodule + + ### find out what the user answered. + # db_get foo/run_on_boot + # run_on_boot=$RET + # db_stop + + ### safely create a temporary file to generate our suggested + ### configuration file. + # tempfile=`tempfile` + # cat << _eof > $tempfile + ### Configuration file for Foo. + + ### this was answered by you, the user in a debconf dialogue + # RUNONBOOT=$run_on_boot + + ### this was not, as it has a sane default value. + # COLOUROFSKY=blue + + #_eof + + ### Note that some versions of debconf do not release stdin, so + ### the following invocation of ucf may not work, since the stdin + ### is never coneected to ucfr. + + ### now, invoke ucf, which will take care of the rest, and ask + ### the user if he wants to update his file, if it is modified. + #ucf $tempfile /etc/foo.conf + + ### done! now we'll just clear up our cruft. + #rm -f $tempfile + + + + # There are three sub-cases: + if test "${2+set}" != set; then + # We're being installed by an ancient dpkg which doesn't remember + # which version was most recently configured, or even whether + # there is a most recently configured version. + for i in system.fvwm2rc init-restart.hook; do + if [ -f /etc/X11/fvwm/$i ]; then + if [ ! -L /etc/X11/fvwm/$i ]; then + mv -f /etc/X11/fvwm/$i /etc/X11/fvwm/${i}.dpkg-old + fi + fi + done + + elif test -z "$2" || test "$2" = ""; then + # The package has not ever been configured on this system, or was + # purged since it was last configured. + : + + else + # Version $2 is the most recently configured version of this + # package. + if dpkg --compare-versions "$2" lt "2.5.8" ; then + for i in system.fvwm2rc init-restart.hook; do + if [ -f /etc/X11/fvwm/$i ]; then + if [ ! -L /etc/X11/fvwm/$i ]; then + mv -f /etc/X11/fvwm/$i /etc/X11/fvwm/${i}.dpkg-old + fi + fi + done + fi + fi + ;; + abort-upgrade) + # Back out of an attempt to upgrade this package FROM THIS VERSION + # to version $2. Undo the effects of "prerm upgrade $2". + ##: + + ;; + abort-remove) + if test "$2" != in-favour; then + echo "$0: undocumented call to \`postinst $*'" 1>&2 + exit 0 + fi + # Back out of an attempt to remove this package, which was due to + # a conflict with package $3 (version $4). Undo the effects of + # "prerm remove in-favour $3 $4". + ##: + + ;; + abort-deconfigure) + if test "$2" != in-favour || test "$5" != removing; then + echo "$0: undocumented call to \`postinst $*'" 1>&2 + exit 0 + fi + # Back out of an attempt to deconfigure this package, which was + # due to package $6 (version $7) which we depend on being removed + # to make way for package $3 (version $4). Undo the effects of + # "prerm deconfigure in-favour $3 $4 removing $6 $7". + ##: + + ;; + *) echo "$0: didn't understand being called with \`$1'" 1>&2 + exit 0;; +esac + +if [ -L /etc/alternatives/fvwm ]; then + BROKEN_FVWM_ALTERNATIVE=`readlink /etc/alternatives/fvwm` + if [ x$BROKEN_FVWM_ALTERNATIVE = x/usr/X11R6/bin/fvwm2 ]; then + update-alternatives --remove fvwm /usr/X11R6/bin/fvwm2 + update-alternatives --auto fvwm + elif [ x$BROKEN_FVWM_ALTERNATIVE = x/usr/bin/X11/fvwm2 ]; then + update-alternatives --remove fvwm /usr/bin/X11/fvwm2 + update-alternatives --auto fvwm + fi +fi + +if [ -L /etc/alternatives/x-window-manager ]; then + BROKEN_X_WM_ALTERNATIVE=`readlink /etc/alternatives/x-window-manager` + if [ x$BROKEN_X_WM_ALTERNATIVE = x/usr/X11R6/bin/fvwm2 ]; then + update-alternatives --remove x-window-manager /usr/X11R6/bin/fvwm2 + update-alternatives --auto x-window-manager + elif [ x$BROKEN_X_WM_ALTERNATIVE = x/usr/bin/X11/fvwm2 ]; then + update-alternatives --remove x-window-manager /usr/bin/X11/fvwm2 + update-alternatives --auto x-window-manager + fi +fi + + + +exit 0 --- fvwm-2.5.27.ds.orig/debian/copyright +++ fvwm-2.5.27.ds/debian/copyright @@ -0,0 +1,115 @@ +This package was debianized by Alexander Kotelnikov on +Thu, 14 Dec 2000 14:30:25 +0300. + +It was downloaded from + +Upstream Authors: read AUTHORS file + +License: GPL version 2 (see /usr/share/common-licenses/GPL-2) and +additional copyrights of the fvwm main module: + + Portions of fvwm are: + Copyright (C) 1988 by Evans and Sutherland Computer Corporation, Salt + Lake City, Utah, + Copyright (C) 1989 by the Massachusetts Institute of Technology, + Cambridge, Massachusetts, All rights reserved. + Copyright (C) 1992 Alan Richardson (mppa3@uk.ac.sussex.syma) + Copyright (C) 1993, 1994 by Robert Nation. + Copyright (C) 1994 Mark Boyns + Copyright (C) 1994 Mark Scott + Copyright (C) 1994 Mike Finger + Copyright (C) 1994 Nobutaka Suzuki + Copyright (C) 1995 Bo Yang + Copyright (C) 1995 Carsten Paeth + Copyright (C) 1995 Pekka Pietik{inen (pp@netppl.fi) + Copyright (C) 1995 Thomas Zuwei Feng + Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004 + Free Software Foundation, Inc. + Copyright (C) 1996 Alfredo Kengi Kojima (kojima@inf.ufrgs.br) + Copyright (C) 1996 Alfredo Kojima + Copyright (C) 1996 Beat Christen. + Copyright (C) 1996 Caesar Crusius + Copyright (C) 1996 Frederic Cordier + Copyright (C) 1996 Jarl Totland + Copyright (C) 1996 Kaj Groner + Copyright (C) 1997 Frank Scheelen + Copyright (C) 1998 Albrecht Kadlec + Copyright (C) 1998 Dan Espen + Copyright (C) 1998 Toshi Isogai + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2002, 2003, 2004 Mikhael Goikhman + Copyright (C) 1999 Fabien Villard + Copyright (C) 1999 Matthias Clasen + Copyright (C) 1999 Sir Boris. sir_boris@bigfoot.com + Copyright (C) 1999, 2001, 2003 Dominik Vogt + Copyright (C) 1999, 2002 Joey Shutup. + Copyright (C) 2001 Dmitry Bolkhovityanov + Copyright (C) 2001, 2002, 2003, 2004 Olivier Chapuis + Copyright (C) 2002 Jason Weber + Copyright (C) 2002 Nadim Shaikli (arabeyes.org) + Copyright (C) 2002, 2003, 2004, 2005, 2006 Scott Smedley ss@aao.gov.au + Copyright (C) 2003 Marcus Lundblad + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Evans & Sutherland and +M.I.T. not be used in advertising in publicity pertaining to +distribution of the software without specific, written prior +permission. + +ROBERT NATION, CHARLES HINES, EVANS & SUTHERLAND, AND M.I.T. DISCLAIM +ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL EVANS & +SUTHERLAND OR M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +Portions of the DocBook documentation are: + Copyright 1992-2004 HaL Computer Systems, Inc., + O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software + Corporation, Norman Walsh, Sun Microsystems, Inc., and the + Organization for the Advancement of Structured Information + Standards (OASIS). + Permission to use, copy, modify and distribute the DocBook DTD + and its accompanying documentation for any purpose and without fee + is hereby granted in perpetuity, provided that the above copyright + notice and this paragraph appear in all copies. The copyright + holders make no representation about the suitability of the DTD for + any purpose. It is provided "as is" without expressed or implied + warranty. + + If you modify the DocBook DTD in any way, except for declaring and + referencing additional sets of general entities and declaring + additional notations, label your DTD as a variant of DocBook. See + the maintenance documentation for more information. + + Please direct all questions, bug reports, or suggestions for + changes to the docbook@lists.oasis-open.org mailing list. For more + information, see http://www.oasis-open.org/docbook/. + + + +For the Debian distribution, the upstream sources were repacked to +remove the ./debian directory provided by the upstream authors, since +it conflicts with the Debian packaging used for official Debian +packages. Apart from removing the ./debian directory no changes were +made to upstream sources. + +The Debian specific changes are © 2004, 2005, 2006, 2007 Manoj +Srivastava , and distributed under the terms of +the GNU General Public License, version 2, or any later version, at +your convenience. + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + + A copy of the GNU General Public License is also available at + . You may also obtain + it by writing to the Free Software Foundation, Inc., 51 Franklin + St, Fifth Floor, Boston, MA 02110-1301 USA + +Manoj Srivastava +arch-tag: d4250e44-a0e0-4ee0-adb9-2bd74f6eeb27 --- fvwm-2.5.27.ds.orig/debian/common/debconf.mk +++ fvwm-2.5.27.ds/debian/common/debconf.mk @@ -0,0 +1,101 @@ +############################ -*- Mode: Makefile -*- ########################### +## debconf.mk --- +## Author : Manoj Srivastava ( srivasta@glaurung.internal.golden-gryphon.com ) +## Created On : Fri Mar 12 11:11:31 2004 +## Created On Node : glaurung.internal.golden-gryphon.com +## Last Modified By : Manoj Srivastava +## Last Modified On : Mon Apr 11 13:19:10 2005 +## Last Machine Used: glaurung.internal.golden-gryphon.com +## Update Count : 20 +## Status : Unknown, Use with caution! +## HISTORY : +## Description : helps with using debconf +## +## arch-tag: 32b933a9-05ad-4c03-97a8-8644745b832a +## +############################################################################### + +# The idea behind this scheme is that the maintainer (or whoever's +# building the package for upload to unstable) has to build on a +# machine with po-debconf installed, but nobody else does. + +# When building with po-debconf, a format 1 (no encoding specifications, +# woody-compatible) debian/templates file is generated in the clean target +# and shipped in the source package, but a format 2 (UTF8-encoded, +# woody-incompatible) debian/templates file is generated in binary-arch +# for the binary package only. + +# When building without po-debconf, the binary package simply reuses the +# woody-compatible debian/templates file that was produced by the clean +# target of the maintainer's build. + +# Also, make sure that debian/control has ${debconf-depends} in the +# appropriate Depends: line., and use the following in the binary +# target: +# dpkg-gencontrol -V'debconf-depends=debconf (>= $(MINDEBCONFVER))' +# + +# WARNING!! You need to create the templates.master file before this all works. + +ifeq (,$(wildcard /usr/bin/po2debconf)) + PO2DEBCONF := no + MINDEBCONFVER := 0.5 +else + PO2DEBCONF := yes + MINDEBCONFVER := 1.2.0 +endif + + +# Hack for woody compatibility. This makes sure that the +# debian/templates file shipped in the source package doesn't specify +# encodings, which woody's debconf can't handle. If building on a +# system with po-debconf installed the binary-arch target will +# generate a better version for sarge. Only do this if there is a +# templates.master, or else the debian/templates file can get +# damamged. +ifeq ($(PO2DEBCONF),yes) + ifeq (,$(wildcard debian/templates.master)) +define CREATE_COMPATIBLE_TEMPLATE + echo Not modifying templates +endef + else +define CREATE_COMPATIBLE_TEMPLATE + echo 1 > debian/po/output + po2debconf debian/templates.master > debian/templates + rm -f debian/po/output +endef + endif +else +define CREATE_COMPATIBLE_TEMPLATE + echo Not modifying templates +endef +endif + + +ifeq ($(PO2DEBCONF),yes) + ifeq (,$(wildcard debian/templates.master)) +define INSTALL_TEMPLATE + echo using old template +endef + else +define INSTALL_TEMPLATE + po2debconf debian/templates.master > debian/templates +endef + endif +else +define INSTALL_TEMPLATE + echo using old template +endef +endif + +# the tool podebconf-report-po is also a great friend to have in such +# circumstances +define CHECKPO + @for i in debian/po/*.po; do \ + if [ -f $$i ]; then \ + echo \"Checking: $$i\"; \ + msgmerge -U $$i debian/po/templates.pot; \ + msgfmt -o /dev/null -c --statistics $$i; \ + fi; \ + done +endef --- fvwm-2.5.27.ds.orig/debian/common/install_cmds.mk +++ fvwm-2.5.27.ds/debian/common/install_cmds.mk @@ -0,0 +1,58 @@ +######################### -*- Mode: Makefile-Gmake -*- ######################## +## install_cmds.mk --- +## Author : Manoj Srivastava ( srivasta@glaurung.internal.golden-gryphon.com ) +## Created On : Fri Jun 16 14:40:20 2006 +## Created On Node : glaurung.internal.golden-gryphon.com +## Last Modified By : Manoj Srivastava +## Last Modified On : Wed Sep 6 11:43:05 2006 +## Last Machine Used: glaurung.internal.golden-gryphon.com +## Update Count : 9 +## Status : Unknown, Use with caution! +## HISTORY : +## Description : +## +## arch-tag: a38b6a93-2539-4034-9060-ae94d5c8a071 +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +## +############################################################################### + +# install commands +INSTALL = install +ifeq (,$(filter nostrip,$(DEB_BUILD_OPTIONS))) + INSTALL_PROGRAM += -s +endif +install_file = $(INSTALL) -p -o root -g root -m 644 +install_program = $(INSTALL) -p -o root -g root -m 755 +install_script = $(INSTALL) -p -o root -g root -m 755 +make_directory = $(INSTALL) -p -d -o root -g root -m 755 + +define create_md5sum + create_md5sums_fn () { \ + cd $$1 ; \ + find . -type f \ + ! -regex './DEBIAN/.*' \ + ! -regex './etc/.*' $(EXTRA_MD5SUM_EXCLUDE) \ + -printf '%P\0' | xargs -r0 md5sum > DEBIAN/md5sums ; \ + if [ -z "DEBIAN/md5sums" ] ; then \ + rm -f "DEBIAN/md5sums" ; \ + fi ; \ + } ; \ + create_md5sums_fn +endef + +#Local variables: +#mode: makefile +#End: --- fvwm-2.5.27.ds.orig/debian/common/pkgvars.mk +++ fvwm-2.5.27.ds/debian/common/pkgvars.mk @@ -0,0 +1,101 @@ +############################ -*- Mode: Makefile -*- ########################### +## pkgvars.mk --- +## Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +## Created On : Sat Nov 15 02:56:30 2003 +## Created On Node : glaurung.green-gryphon.com +## Last Modified By : Manoj Srivastava +## Last Modified On : Thu Jun 15 12:05:46 2006 +## Last Machine Used: glaurung.internal.golden-gryphon.com +## Update Count : 11 +## Status : Unknown, Use with caution! +## HISTORY : +## Description : This is what allows us toseparate out the top level +## targets, by determining which packages needto be built. +## +## arch-tag: 75fcc720-7389-4eaa-a7ac-c556d3eac331 +## +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +## +############################################################################### + +# The maintainer information. +maintainer := $(shell LC_ALL=C dpkg-parsechangelog | grep ^Maintainer: | \ + sed 's/^Maintainer: *//') +email := srivasta@debian.org + +# Priority of this version (or urgency, as dchanges would call it) +urgency := $(shell LC_ALL=C dpkg-parsechangelog | grep ^Urgency: | \ + sed 's/^Urgency: *//') + +# Common useful variables +DEB_SOURCE_PACKAGE := $(strip $(shell egrep '^Source: ' debian/control | \ + cut -f 2 -d ':')) +DEB_VERSION := $(strip $(shell LC_ALL=C dpkg-parsechangelog | \ + egrep '^Version:' | cut -f 2 -d ' ')) +DEB_ISNATIVE := $(strip $(shell LC_ALL=C dpkg-parsechangelog | \ + perl -ne 'print if (m/^Version:/g && ! m/^Version:.*\-/);')) +DEB_DISTRIBUTION := $(strip $(shell LC_ALL=C dpkg-parsechangelog | \ + egrep '^Distribution:' | cut -f 2 -d ' ')) + +DEB_PACKAGES := $(shell perl -e ' \ + $$/=""; \ + while(<>){ \ + $$p=$$1 if m/^Package:\s*(\S+)/; \ + die "duplicate package $$p" if $$seen{$$p}; \ + $$seen{$$p}++; print "$$p " if $$p; \ + }' debian/control ) + +DEB_INDEP_PACKAGES := $(shell perl -e ' \ + $$/=""; \ + while(<>){ \ + $$p=$$1 if m/^Package:\s*(\S+)/; \ + die "duplicate package $$p" if $$seen{$$p}; \ + $$seen{$$p}++; \ + $$a=$$1 if m/^Architecture:\s*(\S+)/m; \ + next unless ($$a eq "all"); \ + print "$$p " if $$p; \ + }' debian/control ) + +DEB_ARCH_PACKAGES := $(shell perl -e ' \ + $$/=""; \ + while(<>){ \ + $$p=$$1 if m/^Package:\s*(\S+)/; \ + die "duplicate package $$p" if $$seen{$$p}; \ + $$seen{$$p}++; \ + $$c=""; \ + if (/^Architecture:\s*(.*?)\s*$$/sm) { \ + @a = split /\s+/, $$1 }; \ + for my $$b (@a) { \ + next unless ($$b eq "$(DEB_HOST_ARCH)" || \ + $$b eq "any"); \ + $$c="$$p"; \ + } \ + print "$$c " if $$c; \ + }' debian/control ) + +# This package is what we get after removing the psuedo dirs we use in rules +package = $(notdir $@) + +ifeq (,$(filter parallel=%,$(FAILS_PARALLEL_BUILD))) + ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) + NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) + MAKEFLAGS += -j$(NUMJOBS) + endif +endif + +#Local variables: +#mode: makefile +#End: --- fvwm-2.5.27.ds.orig/debian/common/README +++ fvwm-2.5.27.ds/debian/common/README @@ -0,0 +1,78 @@ +# This file provides a quick overview of this build system. The idea is +# to convert ./debian/rules into a framework, which abstracts most of +# the work required to create a Debian package into this common set of +# make snippets. + +# The rules file would look like this: + +## Include dpkg-architecture generated variables +# This make snippet uses dpkg-architecture to set the various +# DEB_BUILD* and DEB_HOST* variables. It also adds a couple of DEBUG +# macros for use in the rules file. +include debian/common/archvars.mk + +## variables useful for perl packages +# This sets things like the installed location of the private lib, +# arch dependent lib, and vendor library directories. +include debian/common/perlvars.mk + +## Install commands +# This sets the convenience macros install_{file,script,program} and +# a make directory macro, all run as root, for the install and binary +# targets. It also includes a macro to create the md5sum for +# installed files. +include debian/common/install_cmds.mk + +## Per package variable settings. +# This file sets the Make variables on a per package basis. Things +# like include files, C, C++, and LD flags are set here, as well as +# installation paths or, really, anything else that would be needed +# during packaging operations +include debian/local-vars.mk + +## Setting C compiler flags. +# This file takes care of setting C compiler flags, setting the +# compiler if a cross compilation effort is detected, and either +# arranges for binaries to be stripped or not based on +# DEB_BUILD_OPTIONS. +include debian/common/copt.mk + +## Set automake configuration flags +# This file sets confflags variable with the proper --host and +# --build options if it detects a cross compilation effort underway. +include debian/common/automake.mk + +# Set up the default target. +all: + @echo nothing to be done + +## Include the common targets +# This file sets up the flow of control during a Debian package build +# process, taking into account policy requirements (mandatory +# targets, ordering targets). It sets up rules for each package found +# in ./debian/control file in the package, and arranges package build +# to follow the order of configuration, building, installation, and +# binary package creation (and of course, clean). + +# The details of the targets can be seen visually by running dot on +# the accompanying targets.dot file. In the figure, the legend is: +# Nodes attributes: +# filled == Work target (most work is done in dependencies added +# to these targets). These are the targets referred to +# in the local.mk file +# Octagon == Phony target +# Oval == Real target based on a time stamp +# Double lines denote a mandatory target +# +# Edge attributes: A Red line indicates the target is called using +# $(MAKE) -f ./debian/rules . So the targets connected by the +# red lines are run after all the dependencies have been updated, but +# before anything else is done. + +include debian/common/targets.mk + +## The bulk of packaging +# This file adds dependencies to the double-colon rules set up in +# targets.mk above, and perform the bulk of the packaging. +include debian/local.mk + --- fvwm-2.5.27.ds.orig/debian/common/automake.mk +++ fvwm-2.5.27.ds/debian/common/automake.mk @@ -0,0 +1,37 @@ +############################ -*- Mode: Makefile -*- ########################### +## automake.mk --- +## Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +## Created On : Sat Nov 15 02:47:23 2003 +## Created On Node : glaurung.green-gryphon.com +## Last Modified By : Manoj Srivastava +## Last Modified On : Sat Nov 15 02:47:53 2003 +## Last Machine Used: glaurung.green-gryphon.com +## Update Count : 1 +## Status : Unknown, Use with caution! +## HISTORY : +## Description : +## +## arch-tag: 1fabe69b-7cc8-4ecc-9411-bc5906b19857 +## +############################################################################### + +AUTOCONF_VERSION:=$(shell if [ -e configure ]; then \ + grep "Generated automatically using autoconf" \ + configure | sed -e 's/^.*autoconf version //g'; \ + fi) +HAVE_NEW_AUTOMAKE:=$(shell if [ "X$(AUTOCONF_VERSION)" != "X2.13" ]; then \ + echo 'YES' ; fi) + +ifneq ($(strip $(HAVE_NEW_AUTOMAKE)),) + ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE)) + confflags += --build $(DEB_BUILD_GNU_TYPE) + else + confflags += --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE) + endif +else + ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE)) + confflags += $(DEB_HOST_GNU_TYPE) + else + confflags += --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE) + endif +endif --- fvwm-2.5.27.ds.orig/debian/common/perlvars.mk +++ fvwm-2.5.27.ds/debian/common/perlvars.mk @@ -0,0 +1,27 @@ +############################ -*- Mode: Makefile -*- ########################### +## perlvars.mk --- +## Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +## Created On : Sat Nov 15 02:55:47 2003 +## Created On Node : glaurung.green-gryphon.com +## Last Modified By : Manoj Srivastava +## Last Modified On : Sat Dec 13 13:50:58 2003 +## Last Machine Used: glaurung.green-gryphon.com +## Update Count : 3 +## Status : Unknown, Use with caution! +## HISTORY : +## Description : +## +## arch-tag: a97a01ba-d08d-404d-aa81-572717c03e6c +## +############################################################################### + +# Perl variables +PERL = /usr/bin/perl + +INSTALLPRIVLIB = $(TMPTOP)/$(shell \ + perl -e 'use Config; print "$$Config{'installprivlib'}\n";') +INSTALLARCHLIB = $(TMPTOP)/$(shell \ + perl -e 'use Config; print "$$Config{'installarchlib'}\n";') +INSTALLVENDORLIB =$(TMPTOP)/$(shell \ + perl -e 'use Config; print "$$Config{'vendorlibexp'}\n";') +CONFIG = INSTALLDIRS=vendor --- fvwm-2.5.27.ds.orig/debian/common/targets.dot +++ fvwm-2.5.27.ds/debian/common/targets.dot @@ -0,0 +1,293 @@ +strict digraph Targets { + //ranksep=0.750; + //nodesep=0.500; + + // Nodes attributes: filled == Double-colon targt (most work is done here) + // Oval == Target based on a time stamp + // Octagon == Phony target + // Double lines denote a mandatory target (periperies=2) + + // Edge attributes: Dotted line indicates the target is called using $(MAKE) + + "debian/stamp/dummy-config-common" [ style="bold", color="#DEE3FF", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/pre-config-common" [ style="filled", color="#DEE3FF", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-pre-config-common" [ style="bold", color="#DEE3FF", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/pre-config-arch" [ style="filled", color="#DEE3FF", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-pre-config-arch" [ style="bold", color="#DEE3FF", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/pre-config-indep" [ style="filled", color="#DEE3FF", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-pre-config-indep" [ style="bold", color="#DEE3FF", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/CONFIG/foo-arch" [ style="filled", color="#DEE3FF", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/CONFIG/bar-indep" [ style="filled", color="#DEE3FF", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/dep-configure-arch" [ style="bold", color="#DEE3FF", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/dep-configure-indep" [ style="bold", color="#DEE3FF", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-configure-arch" [ style="bold", color="#DEE3FF", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-configure-indep" [ style="bold", color="#DEE3FF", fontcolor="NavyBlue", fontsize=10] + "configure-arch" [ style="bold", color="#DEE3FF", fontcolor="NavyBlue", fontsize=10, shape="octagon"] + "configure-indep" [ style="bold", color="#DEE3FF", fontcolor="NavyBlue", fontsize=10, shape="octagon"] + "configure" [ style="bold", color="#DEE3FF", fontcolor="NavyBlue", fontsize=10, shape="octagon"] + + "debian/stamp/pre-build-common" [ style="filled", color="#74A5ED", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/pre-build-arch" [ style="filled", color="#74A5ED", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-pre-build-arch" [ style="bold", color="#74A5ED", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/pre-build-indep" [ style="filled", color="#74A5ED", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-pre-build-indep" [ style="bold", color="#74A5ED", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/BUILD/foo-arch" [ style="filled", color="#74A5ED", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/BUILD/bar-indep" [ style="filled", color="#74A5ED", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/dep-build-arch" [ style="bold", color="#74A5ED", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/dep-build-indep" [ style="bold", color="#74A5ED", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-build-arch" [ style="bold", color="#74A5ED", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-build-indep" [ style="bold", color="#74A5ED", fontcolor="NavyBlue", fontsize=10] + "build-arch" [ style="bold", color="#74A5ED", fontcolor="NavyBlue", fontsize=10, shape="octagon", peripheries=2] + "build-indep" [ style="bold", color="#74A5ED", fontcolor="NavyBlue", fontsize=10, shape="octagon", peripheries=2] + "build" [ style="bold", color="#74A5ED", fontcolor="NavyBlue", fontsize=10, shape="octagon", peripheries=2] + "debian/stamp/post-build-arch" [ style="filled", color="#74A5ED", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/post-build-indep" [ style="filled", color="#74A5ED", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-post-build-arch" [ style="bold", color="#74A5ED", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-post-build-indep" [ style="bold", color="#74A5ED", fontcolor="NavyBlue", fontsize=10] + + "debian/stamp/pre-inst-common" [ style="filled", color="#F8DFDB", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/pre-inst-arch" [ style="filled", color="#F8DFDB", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-pre-inst-arch" [ style="bold", color="#F8DFDB", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/pre-inst-indep" [ style="filled", color="#F8DFDB", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-pre-inst-indep" [ style="bold", color="#F8DFDB", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/INST/foo-arch" [ style="filled", color="#F8DFDB", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/INST/bar-indep" [ style="filled", color="#F8DFDB", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/dep-install-arch" [ style="bold", color="#F8DFDB", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/dep-install-indep" [ style="bold", color="#F8DFDB", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-install-arch" [ style="bold", color="#F8DFDB", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-install-indep" [ style="bold", color="#F8DFDB", fontcolor="NavyBlue", fontsize=10] + "install-arch" [ style="bold", color="#F8DFDB", fontcolor="NavyBlue", fontsize=10, shape="octagon"] + "install-indep" [ style="bold", color="#F8DFDB", fontcolor="NavyBlue", fontsize=10, shape="octagon"] + "install" [ style="bold", color="#F8DFDB", fontcolor="NavyBlue", fontsize=10, shape="octagon"] + + "debian/stamp/pre-bin-common" [ style="filled", color="#CEFFC0", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/pre-bin-arch" [ style="filled", color="#CEFFC0", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-pre-bin-arch" [ style="bold", color="#CEFFC0", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/pre-bin-indep" [ style="filled", color="#CEFFC0", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-pre-bin-indep" [ style="bold", color="#CEFFC0", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/BIN/foo-arch" [ style="filled", color="#CEFFC0", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/BIN/bar-indep" [ style="filled", color="#CEFFC0", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/dep-binary-arch" [ style="bold", color="#CEFFC0", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/dep-binary-indep" [ style="bold", color="#CEFFC0", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-binary-arch" [ style="bold", color="#CEFFC0", fontcolor="NavyBlue", fontsize=10] + "debian/stamp/do-binary-indep" [ style="bold", color="#CEFFC0", fontcolor="NavyBlue", fontsize=10] + "binary-arch" [ style="bold", color="#CEFFC0", fontcolor="NavyBlue", fontsize=10, shape="octagon", peripheries=2] + "binary-indep" [ style="bold", color="#CEFFC0", fontcolor="NavyBlue", fontsize=10, shape="octagon", peripheries=2] + "binary" [ style="bold", color="#CEFFC0", fontcolor="NavyBlue", fontsize=10, shape="octagon", peripheries=2] + + + "CLN-common" [ style="filled" , color="#E2E8C3", fontcolor="NavyBlue", fontsize=10, shape="octagon"] + "CLN-arch" [ style="filled" , color="#E2E8C3", fontcolor="NavyBlue", fontsize=10, shape="octagon"] + "CLN-indep" [ style="filled" , color="#E2E8C3", fontcolor="NavyBlue", fontsize=10, shape="octagon"] + "CLEAN/foo-arch" [ style="filled" , color="#E2E8C3", fontcolor="NavyBlue", fontsize=10, shape="octagon"] + "CLEAN/bar-indep" [ style="filled" , color="#E2E8C3", fontcolor="NavyBlue", fontsize=10, shape="octagon"] + "clean-arch" [ style="bold", color="#E2E8C3", fontcolor="NavyBlue", fontsize=10, shape="octagon"] + "clean-indep" [ style="bold", color="#E2E8C3", fontcolor="NavyBlue", fontsize=10, shape="octagon"] + "clean" [ style="bold", color="#E2E8C3", fontcolor="NavyBlue", fontsize=10, shape="octagon", peripheries=2] + + + "CLN-common" -> "CLN-arch" [dir=back] + "CLN-common" -> "CLN-indep" [dir=back] + "CLN-arch" -> "CLEAN/foo-arch" [dir=back] + "CLN-indep" -> "CLEAN/bar-indep" [dir=back] + "CLN-arch" -> "clean-arch" [dir=back] + "CLEAN/foo-arch" -> "clean-arch" [dir=back] + "CLN-indep" -> "clean-indep" [dir=back] + "CLEAN/bar-indep" -> "clean-indep" [dir=back] + "clean-indep" -> "clean" [dir=back] + "clean-arch" -> "clean" [dir=back] + +// "debian/stamp/dummy-config-common" -> "debian/stamp/pre-config-common" [dir=back] + "debian/stamp/dummy-config-common" -> "debian/stamp/do-pre-config-common" [dir=back] + "debian/stamp/pre-config-common" -> "debian/stamp/do-pre-config-common" [dir=back color="Red"] +// "CUSTOM-1" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-1" -> "debian/stamp/pre-config-common" [dir=back] +// "debian/stamp/do-pre-config-common" -> "debian/stamp/pre-config-arch" [dir=back] + "debian/stamp/do-pre-config-common" -> "debian/stamp/do-pre-config-arch" [dir=back] + "debian/stamp/pre-config-arch" -> "debian/stamp/do-pre-config-arch" [dir=back color="Red"] +// "CUSTOM-2" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-2" -> "debian/stamp/pre-config-arch" [dir=back] +// "debian/stamp/do-pre-config-common" -> "debian/stamp/pre-config-indep" [dir=back] + "debian/stamp/do-pre-config-common" -> "debian/stamp/do-pre-config-indep" [dir=back] + "debian/stamp/pre-config-indep" -> "debian/stamp/do-pre-config-indep" [dir=back color="Red"] +// "CUSTOM-3" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-3" -> "debian/stamp/pre-config-indep" [dir=back] +// "debian/stamp/do-pre-config-arch" -> "debian/stamp/CONFIG/foo-arch" [dir=back] +// "debian/stamp/do-pre-config-indep" -> "debian/stamp/CONFIG/bar-indep" [dir=back] +// "debian/stamp/do-pre-config-arch" -> "debian/stamp/dep-configure-arch" [dir=back] + "debian/stamp/CONFIG/foo-arch" -> "debian/stamp/dep-configure-arch" [dir=back] +// "debian/stamp/do-pre-config-indep" -> "debian/stamp/dep-configure-indep" [dir=back] + "debian/stamp/CONFIG/bar-indep" -> "debian/stamp/dep-configure-indep" [dir=back] + + "debian/stamp/do-pre-config-arch" -> "debian/stamp/do-configure-arch" [dir=back] + "debian/stamp/dep-configure-arch" -> "debian/stamp/do-configure-arch" [dir=back color="Red"] +// "CUSTOM-4" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-4" -> "debian/stamp/CONFIG/foo-arch" [dir=back] + "debian/stamp/do-pre-config-indep" -> "debian/stamp/do-configure-indep" [dir=back] + "debian/stamp/dep-configure-indep" -> "debian/stamp/do-configure-indep" [dir=back color="Red"] +// "CUSTOM-5" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-5" -> "debian/stamp/CONFIG/bar-indep" [dir=back] + "debian/stamp/do-configure-arch" -> "configure-arch" [dir=back] + "debian/stamp/do-configure-indep" -> "configure-indep" [dir=back] + "debian/stamp/do-configure-arch" -> "configure" [dir=back] + "debian/stamp/do-configure-indep" -> "configure" [dir=back] + +// "debian/stamp/do-configure-arch" -> "debian/stamp/pre-build-arch" [dir=back] + "debian/stamp/do-configure-arch" -> "debian/stamp/do-pre-build-arch" [dir=back] + "debian/stamp/pre-build-common" -> "debian/stamp/do-pre-build-arch" [dir=back color="Red"] +// "CUSTOM-6" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-6" -> "debian/stamp/pre-build-common" [dir=back] + "debian/stamp/pre-build-arch" -> "debian/stamp/do-pre-build-arch" [dir=back color="Red"] +// "CUSTOM-7" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-7" -> "debian/stamp/pre-build-arch" [dir=back] + "debian/stamp/pre-build-common" -> "debian/stamp/do-pre-build-indep" [dir=back color="Red"] + "debian/stamp/do-configure-indep" -> "debian/stamp/do-pre-build-indep" [dir=back] +// "debian/stamp/do-configure-indep" -> "debian/stamp/pre-build-indep" [dir=back] + "debian/stamp/pre-build-indep" -> "debian/stamp/do-pre-build-indep" [dir=back color="Red"] +// "CUSTOM-8" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-8" -> "debian/stamp/pre-build-indep" [dir=back] +// "debian/stamp/do-pre-build-arch" -> "debian/stamp/BUILD/foo-arch" [dir=back] +// "debian/stamp/do-pre-build-indep" -> "debian/stamp/BUILD/bar-indep" [dir=back] +// "debian/stamp/do-pre-build-arch" -> "debian/stamp/dep-build-arch" [dir=back] + "debian/stamp/BUILD/foo-arch" -> "debian/stamp/dep-build-arch" [dir=back] +// "debian/stamp/do-pre-build-indep" -> "debian/stamp/dep-build-indep" [dir=back] + "debian/stamp/BUILD/bar-indep" -> "debian/stamp/dep-build-indep" [dir=back] + "debian/stamp/do-pre-build-arch" -> "debian/stamp/do-build-arch" [dir=back] + "debian/stamp/dep-build-arch" -> "debian/stamp/do-build-arch" [dir=back color="Red"] +// "CUSTOM-9" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-9" -> "debian/stamp/BUILD/foo-arch" [dir=back] + "debian/stamp/do-pre-build-indep" -> "debian/stamp/do-build-indep" [dir=back] + "debian/stamp/dep-build-indep" -> "debian/stamp/do-build-indep" [dir=back color="Red"] +// "CUSTOM-10" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-10" -> "debian/stamp/BUILD/bar-indep" [dir=back] + "debian/stamp/do-build-arch" -> "build-arch" [dir=back] + "debian/stamp/do-build-indep" -> "build-indep" [dir=back] + "debian/stamp/do-build-arch" -> "build" [dir=back] + "debian/stamp/do-build-indep" -> "build" [dir=back] +// "debian/stamp/do-build-arch" -> "debian/stamp/post-build-arch" [dir=back] + "debian/stamp/do-build-arch" -> "debian/stamp/do-post-build-arch" [dir=back] + "debian/stamp/do-build-indep" -> "debian/stamp/do-post-build-indep" [dir=back] + "debian/stamp/post-build-arch" -> "debian/stamp/do-post-build-arch" [dir=back color="Red"] +// "CUSTOM-11" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-11" -> "debian/stamp/post-build-arch" [dir=back] + "debian/stamp/post-build-indep" -> "debian/stamp/do-post-build-indep" [dir=back color="Red"] +// "CUSTOM-12" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-12" -> "debian/stamp/post-build-indep" [dir=back] +// "debian/stamp/do-post-build-arch" -> "debian/stamp/pre-inst-arch" [dir=back] + "debian/stamp/pre-inst-common" -> "debian/stamp/do-pre-inst-arch" [dir=back color="Red"] +// "CUSTOM-13" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-13" -> "debian/stamp/pre-inst-common" [dir=back] + "debian/stamp/do-post-build-arch" -> "debian/stamp/do-pre-inst-arch" [dir=back] + "debian/stamp/pre-inst-arch" -> "debian/stamp/do-pre-inst-arch" [dir=back color="Red"] +// "CUSTOM-14" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-14" -> "debian/stamp/pre-inst-arch" [dir=back] +// "debian/stamp/do-post-build-indep" -> "debian/stamp/pre-inst-indep" [dir=back] + "debian/stamp/pre-inst-common" -> "debian/stamp/do-pre-inst-indep" [dir=back color="Red"] + "debian/stamp/do-post-build-indep" -> "debian/stamp/do-pre-inst-indep" [dir=back] + "debian/stamp/pre-inst-indep" -> "debian/stamp/do-pre-inst-indep" [dir=back color="Red"] +// "CUSTOM-15" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-15" -> "debian/stamp/pre-inst-indep" [dir=back] +// "debian/stamp/do-pre-inst-arch" -> "debian/stamp/INST/foo-arch" [dir=back] +// "debian/stamp/do-pre-inst-indep" -> "debian/stamp/INST/bar-indep" [dir=back] +// "debian/stamp/do-pre-inst-arch" -> "debian/stamp/dep-install-arch" [dir=back] + "debian/stamp/INST/foo-arch" -> "debian/stamp/dep-install-arch" [dir=back] +// "debian/stamp/do-pre-inst-indep" -> "debian/stamp/dep-install-indep" [dir=back] + "debian/stamp/INST/bar-indep" -> "debian/stamp/dep-install-indep" [dir=back] + "debian/stamp/do-pre-inst-arch" -> "debian/stamp/do-install-arch" [dir=back] + "debian/stamp/dep-install-arch" -> "debian/stamp/do-install-arch" [dir=back color="Red"] +// "CUSTOM-16" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-16" -> "debian/stamp/INST/foo-arch" [dir=back] + "debian/stamp/do-pre-inst-indep" -> "debian/stamp/do-install-indep" [dir=back] + "debian/stamp/dep-install-indep" -> "debian/stamp/do-install-indep" [dir=back color="Red"] +// "CUSTOM-17" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-17" -> "debian/stamp/INST/bar-indep" [dir=back] + "debian/stamp/do-install-arch" -> "install-arch" [dir=back] + "debian/stamp/do-install-indep" -> "install-indep" [dir=back] + "debian/stamp/do-install-arch" -> "install" [dir=back] + "debian/stamp/do-install-indep" -> "install" [dir=back] +// "debian/stamp/do-install-arch" -> "debian/stamp/pre-bin-arch" [dir=back] + "debian/stamp/do-install-arch" -> "debian/stamp/do-pre-bin-arch" [dir=back] + "debian/stamp/pre-bin-common" -> "debian/stamp/do-pre-bin-arch" [dir=back color="Red"] +// "CUSTOM-18" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-18" -> "debian/stamp/pre-bin-common" [dir=back] + "debian/stamp/pre-bin-arch" -> "debian/stamp/do-pre-bin-arch" [dir=back color="Red"] +// "CUSTOM-19" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-19" -> "debian/stamp/pre-bin-arch" [dir=back] +// "debian/stamp/do-install-indep" -> "debian/stamp/pre-bin-indep" [dir=back] + "debian/stamp/pre-bin-common" -> "debian/stamp/do-pre-bin-indep" [dir=back color="Red"] + "debian/stamp/do-install-indep" -> "debian/stamp/do-pre-bin-indep" [dir=back] + "debian/stamp/pre-bin-indep" -> "debian/stamp/do-pre-bin-indep" [dir=back color="Red"] +// "CUSTOM-20" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-20" -> "debian/stamp/pre-bin-indep" [dir=back] +// "debian/stamp/do-pre-bin-arch" -> "debian/stamp/BIN/foo-arch" [dir=back] +// "debian/stamp/do-pre-bin-indep" -> "debian/stamp/BIN/bar-indep" [dir=back] +// "debian/stamp/pre-bin-arch" -> "debian/stamp/dep-binary-arch" [dir=back] + "debian/stamp/BIN/foo-arch" -> "debian/stamp/dep-binary-arch" [dir=back] +// "debian/stamp/do-pre-bin-indep" -> "debian/stamp/dep-binary-indep" [dir=back] + "debian/stamp/BIN/bar-indep" -> "debian/stamp/dep-binary-indep" [dir=back] + "debian/stamp/do-pre-bin-arch" -> "debian/stamp/do-binary-arch" [dir=back] + "debian/stamp/dep-binary-arch" -> "debian/stamp/do-binary-arch" [dir=back color="Red"] +// "CUSTOM-21" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-21" -> "debian/stamp/BIN/foo-arch" [dir=back] + "debian/stamp/do-pre-bin-indep" -> "debian/stamp/do-binary-indep" [dir=back] + "debian/stamp/dep-binary-indep" -> "debian/stamp/do-binary-indep" [dir=back color="Red"] +// "CUSTOM-22" [ style="filled", color="#FFE4B5", fontcolor="NavyBlue", fontsize=10, shape="diamond"] +// "CUSTOM-22" -> "debian/stamp/BIN/bar-indep" [dir=back] + "debian/stamp/do-binary-arch" -> "binary-arch" [dir=back] + "debian/stamp/do-binary-indep" -> "binary-indep" [dir=back] + "debian/stamp/do-binary-arch" -> "binary" [dir=back] + "debian/stamp/do-binary-indep" -> "binary" [dir=back] + + + "debian/stamp/dummy-config-common" -> "debian/stamp/pre-config-common" [style="invis"] + "debian/stamp/do-pre-config-common" -> "debian/stamp/pre-config-arch" [style="invis"] + "debian/stamp/do-pre-config-common" -> "debian/stamp/pre-config-indep" [style="invis"] + "debian/stamp/do-pre-config-arch" -> "debian/stamp/CONFIG/foo-arch" [style="invis"] + "debian/stamp/do-pre-config-indep" -> "debian/stamp/CONFIG/bar-indep" [style="invis"] + + "debian/stamp/dep-configure-arch" -> "configure" [style="invis"] + "debian/stamp/dep-configure-indep" -> "configure" [style="invis"] + "debian/stamp/dep-configure-arch" -> "configure-arch" [style="invis"] + "debian/stamp/dep-configure-indep" -> "configure-arch" [style="invis"] + "debian/stamp/dep-configure-arch" -> "configure-indep" [style="invis"] + "debian/stamp/dep-configure-indep" -> "configure-indep" [style="invis"] + "configure-arch" -> "configure" [style="invis"] + "configure-indep" -> "configure" [style="invis"] + "configure" -> "debian/stamp/pre-build-common" [style="invis"] + + + "debian/stamp/pre-build-common" -> "debian/stamp/pre-build-indep" [style="invis"] + "debian/stamp/pre-build-common" -> "debian/stamp/pre-build-arch" [style="invis"] + + "debian/stamp/do-pre-build-arch" -> "debian/stamp/BUILD/foo-arch" [style="invis"] + "debian/stamp/do-pre-build-indep" -> "debian/stamp/BUILD/bar-indep" [style="invis"] + "debian/stamp/do-build-arch" -> "debian/stamp/post-build-arch" [style="invis"] + "debian/stamp/do-build-indep" -> "debian/stamp/post-build-indep" [style="invis"] + "debian/stamp/do-post-build-arch" -> "build-arch" [style="invis"] + "debian/stamp/do-post-build-arch" -> "build" [style="invis"] + "debian/stamp/do-post-build-indep" -> "build-indep" [style="invis"] + "debian/stamp/do-post-build-indep" -> "build" [style="invis"] + "build-arch" -> "build" [style="invis"] + "build-indep" -> "build" [style="invis"] + + "build" -> "debian/stamp/pre-inst-common" [style="invis"] + + "debian/stamp/pre-inst-common" -> "debian/stamp/pre-inst-indep" [style="invis"] + "debian/stamp/pre-inst-common" -> "debian/stamp/pre-inst-arch" [style="invis"] + "debian/stamp/do-pre-inst-arch" -> "debian/stamp/INST/foo-arch" [style="invis"] + "debian/stamp/do-pre-inst-indep" -> "debian/stamp/INST/bar-indep" [style="invis"] + + "install-arch" -> "install" [style="invis"] + "install-indep" -> "install" [style="invis"] + + "debian/stamp/pre-bin-common" -> "debian/stamp/pre-bin-indep" [style="invis"] + "debian/stamp/pre-bin-common" -> "debian/stamp/pre-bin-arch" [style="invis"] + + "install" -> "debian/stamp/pre-bin-common" [style="invis"] + "debian/stamp/do-pre-bin-arch" -> "debian/stamp/BIN/foo-arch" [style="invis"] + "debian/stamp/do-pre-bin-indep" -> "debian/stamp/BIN/bar-indep" [style="invis"] + + "binary-arch" -> "binary" [style="invis"] + "binary-indep" -> "binary" [style="invis"] + +} --- fvwm-2.5.27.ds.orig/debian/common/checklibs +++ fvwm-2.5.27.ds/debian/common/checklibs @@ -0,0 +1,74 @@ +#! /bin/sh +# -*- Mode: Sh -*- +# checklibs.sh --- +# Author : Manoj Srivastava ( srivasta@glaurung.internal.golden-gryphon.com ) +# Created On : Fri Sep 29 15:36:22 2006 +# Created On Node : glaurung.internal.golden-gryphon.com +# Last Modified By : Manoj Srivastava +# Last Modified On : Fri Sep 29 22:53:27 2006 +# Last Machine Used: glaurung.internal.golden-gryphon.com +# Update Count : 43 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# arch-tag: 8ba11489-77fa-45a0-92c4-9c5b162ee119 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +# Make sure we abort on error +set -e +progname="$(basename \"$0\")" + +trap 'rm -f search_patterns.txt;' ALRM HUP INT PIPE TERM ABRT FPE BUS QUIT SEGV ILL EXIT + +# Find all undefined symbols in all ELF objects in this tree +readelf -s -D -W $(find . -type f -print0 | xargs -0r file | grep " ELF" | \ + awk '{print $1}' | sed -e 's/:$//') | grep UND | grep -v LOCAL | + perl -ple 's/.*\s(\S+)\s*$/\^$1\$/g' | sort -u > search_patterns.txt; + +# Find all the libraries needed in this tree +objdump -T --private-headers $(find . -type f -print0 | xargs -0r file | grep " ELF" | \ + awk '{print $1}' | sed -e 's/:$//') | grep NEEDED | sort -u | awk '{print $2}' | + while read lib; do + # For each library, see where it lives o the file system + LIB= + for library_dir in "/lib" "/usr/lib" $EXTRA_LIBRARY_PATHS; do + if [ -e "$library_dir/$lib" ]; then + LIB="$library_dir/$lib"; + break + fi + done + if [ -z "$LIB" ]; then + echo >&2 "Can't find $lib" + continue + fi + # If we fond the library, find what symbols it defines, and if these symbols + # are some that we need + if readelf -s -D -W $LIB | grep -v UND | perl -ple 's/.*\s(\S+)\s*$/$1/g' | \ + sort -u | grep -q -f search_patterns.txt ; then + # Library provides at least some symbols we need + if [ -n "$DEBUG" ]; then echo "Found $LIB"; fi + else + # Library does not provide any symbols we need + echo "$LIB" ; + fi +done + +# Get rid of the intermediate file +rm -f search_patterns.txt; +exit 0 + --- fvwm-2.5.27.ds.orig/debian/common/copt.mk +++ fvwm-2.5.27.ds/debian/common/copt.mk @@ -0,0 +1,44 @@ +############################ -*- Mode: Makefile -*- ########################### +## copt.mk --- +## Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +## Created On : Sat Nov 15 02:48:40 2003 +## Created On Node : glaurung.green-gryphon.com +## Last Modified By : Manoj Srivastava +## Last Modified On : Sat Nov 15 02:49:07 2003 +## Last Machine Used: glaurung.green-gryphon.com +## Update Count : 1 +## Status : Unknown, Use with caution! +## HISTORY : +## Description : +## +## arch-tag: a0045c20-f1b3-4852-9a4b-1a33ebd7c1b8 +## +############################################################################### + +PREFIX := /usr +# set CC to $(DEB_HOST_GNU_TYPE)-gcc only if a cross-build is detected +ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE)) + CC=$(DEB_HOST_GNU_TYPE)-gcc +else + CC = cc +endif + +# Policy 10.1 says to make this the default +CFLAGS = -Wall -g + +ifneq (,$(filter noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +## ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS))) +## endif + +ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) + STRIP += -s + LDFLAGS += -s + INT_INSTALL_TARGET = install +else + INT_INSTALL_TARGET = install +endif --- fvwm-2.5.27.ds.orig/debian/common/archvars.mk +++ fvwm-2.5.27.ds/debian/common/archvars.mk @@ -0,0 +1,118 @@ +############################ -*- Mode: Makefile -*- ########################### +## archvars.mk --- +## Author : Manoj Srivastava ( srivasta@golden-gryphon.com ) +## Created On : Sat Nov 15 02:40:56 2003 +## Created On Node : glaurung.green-gryphon.com +## Last Modified By : Manoj Srivastava +## Last Modified On : Tue Nov 16 23:36:15 2004 +## Last Machine Used: glaurung.internal.golden-gryphon.com +## Update Count : 5 +## Status : Unknown, Use with caution! +## HISTORY : +## Description : calls dpkg-architecture and sets up various arch +## related variables +## +## arch-tag: e16dd848-0fd6-4c0e-ae66-bef20d1f7c63 +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +## +############################################################################### + + +DPKG_ARCH := dpkg-architecture + +ifeq ($(strip $(KPKG_ARCH)),um) + MAKING_VIRTUAL_IMAGE:=YES +endif +ifeq ($(strip $(KPKG_ARCH)),xen) + MAKING_VIRTUAL_IMAGE:=YES +endif + +ifneq ($(strip $(CONFIG_UM)),) + MAKING_VIRTUAL_IMAGE:=YES + KPKG_ARCH=um +endif + +ifneq ($(strip $(CONFIG_XEN)),) + MAKING_VIRTUAL_IMAGE:=YES + ifneq ($(strip $(CONFIG_X86_XEN)$(CONFIG_X86_64_XEN)),) + KPKG_SUBARCH=xen + else + KPKG_ARCH=xen + ifeq ($(strip $(CONFIG_XEN_PRIVILEGED_GUEST)),) + KPKG_SUBARCH=xenu + else + KPKG_SUBARCH=xen0 + endif + endif +endif + +ifdef KPKG_ARCH + ifeq ($(strip $(MAKING_VIRTUAL_IMAGE)),) + ifneq ($(CROSS_COMPILE),-) + ha:=-a$(KPKG_ARCH) + endif + endif +endif + +# set the dpkg-architecture vars +export DEB_BUILD_ARCH := $(shell $(DPKG_ARCH) -qDEB_BUILD_ARCH) +export DEB_BUILD_GNU_CPU := $(shell $(DPKG_ARCH) -qDEB_BUILD_GNU_CPU) +export DEB_BUILD_GNU_SYSTEM:= $(shell $(DPKG_ARCH) -qDEB_BUILD_GNU_SYSTEM) +export DEB_BUILD_GNU_TYPE := $(shell $(DPKG_ARCH) -qDEB_BUILD_GNU_TYPE) +export DEB_HOST_ARCH := $(shell $(DPKG_ARCH) $(ha) -qDEB_HOST_ARCH) +export DEB_HOST_ARCH_OS := $(shell $(DPKG_ARCH) $(ha) -qDEB_HOST_ARCH_OS \ + 2>/dev/null|| true) +export DEB_HOST_ARCH_CPU := $(shell $(DPKG_ARCH) $(ha) -qDEB_HOST_ARCH_CPU \ + 2>/dev/null|| true) +export DEB_HOST_GNU_CPU := $(shell $(DPKG_ARCH) $(ha) -qDEB_HOST_GNU_CPU) +export DEB_HOST_GNU_SYSTEM := $(shell $(DPKG_ARCH) $(ha) -qDEB_HOST_GNU_SYSTEM) +export DEB_HOST_GNU_TYPE := $(shell $(DPKG_ARCH) $(ha) -qDEB_HOST_GNU_TYPE) + +# arrgh. future proofing +ifeq ($(DEB_HOST_GNU_SYSTEM), linux) + DEB_HOST_GNU_SYSTEM=linux-gnu +endif +ifeq ($(DEB_HOST_ARCH_OS),) + ifeq ($(DEB_HOST_GNU_SYSTEM), linux-gnu) + DEB_HOST_ARCH_OS := linux + endif + ifeq ($(DEB_HOST_GNU_SYSTEM), kfreebsd-gnu) + DEB_HOST_ARCH_OS := kfreebsd + endif +endif + +REASON = @if [ -f $@ ]; then \ + echo "====== making $(notdir $@) because of $(notdir $?) ======";\ + else \ + echo "====== making target $@ [new prereqs: $(notdir $?)]======"; \ + fi + +OLDREASON = @if [ -f $@ ]; then \ + echo "====== making $(notdir $@) because of $(notdir $?) ======";\ + else \ + echo "====== making (creating) $(notdir $@) ======"; \ + fi + +LIBREASON = @echo "====== making $(notdir $@)($(notdir $%))because of $(notdir $?)======" + + +# macro outputing $(1) if DEBUG_DEBIAN_RULES is set, and resolving it +# in all cases usage $(call doit,some shell command) +doit = $(if $(DEBUG_DEBIAN_RULES),$(warning DEBUG: $(1)))$(shell $(1)) + +#Local variables: +#mode: makefile +#End: --- fvwm-2.5.27.ds.orig/debian/common/ChangeLog +++ fvwm-2.5.27.ds/debian/common/ChangeLog @@ -0,0 +1,59 @@ +2008-02-06 Manoj Srivastava + + * copt.mk: + srivasta@debian.org--lenny/skeleton-make-rules--main--0.1--patch-4 + The cross building support in Debian has been rewritten + to stop overriding the CC variable to $(MAKE) in order + to correctly support those packages that build internal + tools with the native compiler during the build. This + means that other packages that assume that CC will be + overridden by the cross-compiling build scripts now fail + to build. The patch is simply to set CC to + $(DEB_HOST_GNU_TYPE)-gcc only if a cross-build is + detected. + +2007-10-09 Manoj Srivastava + + * targets.mk: + srivasta@debian.org--lenny/skeleton-make-rules--main--0.1--patch-1 + fix dependency tree for targets, allow parralel + compilatoin. Many changes, thanks to dot. + +2007-09-20 Manoj Srivastava + + * targets.mk (stamp-clean): + srivasta@debian.org--lenny/skeleton-make-rules--main--0.1--base-0 + make clean not remove zero sized files. removed the part + that cleaned out zero sized files; since there are uses + for zero sized files (like, to nuke out files in + upstream sources and not inflate the diff. Any zero + sized files can still be nuked in the local.mk file. + +2006-10-02 Manoj Srivastava + + * checklibs: + srivasta@debian.org--etch/skeleton-make-rules--main--0.1--patch-15 + New file, to detect if there are unneeded library + dependencies + +2006-10-01 Manoj Srivastava + + * archvars.mk (doit): + srivasta@debian.org--etch/skeleton-make-rules--main--0.1--patch-14 + Add a macro to execute $(shell ...) macos verbosely to + help debugging. + +2006-09-15 Manoj Srivastava + + * targets.mk (stamp-clean): + srivasta@debian.org--etch/skeleton-make-rules--main--0.1--patch-13 + Exclude version control directories from the generic + clean command. + + +2006-08-23 Manoj Srivastava + + * pkgvars.mk (DEB_DISTRIBUTION): + srivasta@debian.org--etch/skeleton-make-rules--main--0.1--patch-6 + Add variable that contains the distribution information + --- fvwm-2.5.27.ds.orig/debian/common/targets.mk +++ fvwm-2.5.27.ds/debian/common/targets.mk @@ -0,0 +1,525 @@ +############################ -*- Mode: Makefile -*- ########################### +## targets.mk --- +## Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +## Created On : Sat Nov 15 01:10:05 2003 +## Created On Node : glaurung.green-gryphon.com +## Last Modified By : Manoj Srivastava +## Last Modified On : Sat Apr 26 22:33:09 2008 +## Last Machine Used: anzu.internal.golden-gryphon.com +## Update Count : 131 +## Status : Unknown, Use with caution! +## HISTORY : +## Description : The top level targets mandated by policy, as well as +## their dependencies. +## +## arch-tag: a81086a7-00f7-4355-ac56-8f38396935f4 +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +## +############################################################################### + +####################################################################### +####################################################################### +############### Miscellaneous ############### +####################################################################### +####################################################################### +source diff: + @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false + +define TESTROOT + @test $$(id -u) = 0 || (echo need root priviledges; exit 1) +endef + +testroot: + $(TESTROOT) + +checkpo: + $(CHECKPO) + +# arch-buildpackage likes to call this +prebuild: + +# OK. We have two sets of rules here, one for arch dependent packages, +# and one for arch independent packages. We have already calculated a +# list of each of these packages. + +# In each set, we may need to do things in five steps: configure, +# build, install, package, and clean. Now, there can be a common +# actions to be taken for all the packages, all arch dependent +# packages, all all independent packages, and each package +# individually at each stage. + +########################################################################### +# The current code does a number of things: It ensures that the highest # +# dependency at any stage (usually the -Common target) depends on the # +# stamp-STAGE of the previous stage; so no work on a succeeding stage can # +# start before the previous stage is all done. # +########################################################################### + +################################################################################# +# In the following, the do_* targets make sure all the real non-generic work is # +# done, but are not in the direct line of dependencies. This makes sure # +# that previous step in the order is all up to date before any of the per # +# package target dependencies are run. # +################################################################################# + + +####################################################################### +####################################################################### +############### Configuration ############### +####################################################################### +####################################################################### +# Just a dummy target to make sure that the stamp directory exists +debian/stamp/dummy-config-common: + $(REASON) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ + +# Configuration tasks common to arch and arch indep packages go here +debian/stamp/pre-config-common: debian/stamp/dummy-config-common + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ +# Do not add dependencies to this rule +debian/stamp/do-pre-config-common: debian/stamp/dummy-config-common + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + $(MAKE) -f debian/rules debian/stamp/pre-config-common + @echo done > $@ + +# Arch specific and arch independent tasks go here +debian/stamp/pre-config-arch: debian/stamp/do-pre-config-common + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ +# Do not add dependencies to this rule +debian/stamp/do-pre-config-arch: debian/stamp/do-pre-config-common + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + $(MAKE) -f debian/rules debian/stamp/pre-config-arch + @echo done > $@ + + +debian/stamp/pre-config-indep: debian/stamp/do-pre-config-common + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ +# Do not add dependencies to this rule +debian/stamp/do-pre-config-indep: debian/stamp/do-pre-config-common + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + $(MAKE) -f debian/rules debian/stamp/pre-config-indep + @echo done > $@ + +# Per package work happens as an added dependency of this rule. +$(patsubst %,debian/stamp/CONFIG/%,$(DEB_ARCH_PACKAGES)) : debian/stamp/CONFIG/% : debian/stamp/do-pre-config-arch + $(REASON) + $(checkdir) + @test -d debian/stamp/CONFIG || mkdir -p debian/stamp/CONFIG + @echo done > $@ +$(patsubst %,debian/stamp/CONFIG/%,$(DEB_INDEP_PACKAGES)) : debian/stamp/CONFIG/% : debian/stamp/do-pre-config-indep + $(REASON) + $(checkdir) + @test -d debian/stamp/CONFIG || mkdir -p debian/stamp/CONFIG + @echo done > $@ + +# Do not add dependencies to this rule +debian/stamp/dep-configure-arch: debian/stamp/do-pre-config-arch $(patsubst %,debian/stamp/CONFIG/%,$(DEB_ARCH_PACKAGES)) + $(REASON) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ + +# Do not add dependencies to this rule +debian/stamp/dep-configure-indep: debian/stamp/do-pre-config-indep $(patsubst %,debian/stamp/CONFIG/%,$(DEB_INDEP_PACKAGES)) + $(REASON) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ + +debian/stamp/do-configure-arch: debian/stamp/do-pre-config-arch + $(REASON) + @test -d debian/stamp/CONFIG || mkdir -p debian/stamp/CONFIG + $(MAKE) -f debian/rules debian/stamp/dep-configure-arch + @echo done > $@ +debian/stamp/do-configure-indep: debian/stamp/do-pre-config-indep + $(REASON) + @test -d debian/stamp/CONFIG || mkdir -p debian/stamp/CONFIG + $(MAKE) -f debian/rules debian/stamp/dep-configure-indep + @echo done > $@ + +# These three targets are required by policy +configure-arch: debian/stamp/do-configure-arch + $(REASON) +configure-indep: debian/stamp/do-configure-indep + $(REASON) +configure: debian/stamp/do-configure-arch debian/stamp/do-configure-indep + $(REASON) + +####################################################################### +####################################################################### +############### Build ############### +####################################################################### +####################################################################### +# tasks common to arch and arch indep packages go here +debian/stamp/pre-build-common: + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ + +# Arch specific and arch independent tasks go here +debian/stamp/pre-build-arch: debian/stamp/do-configure-arch + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ +debian/stamp/do-pre-build-arch: debian/stamp/do-configure-arch + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @test -e debian/stamp/pre-build-common || $(MAKE) -f debian/rules debian/stamp/pre-build-common + $(MAKE) -f debian/rules debian/stamp/pre-build-arch + @echo done > $@ + +debian/stamp/pre-build-indep: debian/stamp/do-configure-indep + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ +debian/stamp/do-pre-build-indep: debian/stamp/do-configure-indep + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @test -e debian/stamp/pre-build-common || $(MAKE) -f debian/rules debian/stamp/pre-build-common + $(MAKE) -f debian/rules debian/stamp/pre-build-indep + @echo done > $@ + +# Per package work happens as an added dependency of this rule. +$(patsubst %,debian/stamp/BUILD/%,$(DEB_ARCH_PACKAGES)) : debian/stamp/BUILD/% : debian/stamp/do-pre-build-arch + $(REASON) + $(checkdir) + @test -d debian/stamp/BUILD || mkdir -p debian/stamp/BUILD + @echo done > $@ + +$(patsubst %,debian/stamp/BUILD/%,$(DEB_INDEP_PACKAGES)) : debian/stamp/BUILD/% : debian/stamp/do-pre-build-indep + $(REASON) + $(checkdir) + @test -d debian/stamp/BUILD || mkdir -p debian/stamp/BUILD + @echo done > $@ + +# These do targeta make sure all the per package configuration is +# done, but is not in the direct line of dependencies. This makes sure +# that pre-config targets are all up to date before any of the per +# package target dependencies are run. +debian/stamp/dep-build-arch: debian/stamp/do-pre-build-arch $(patsubst %,debian/stamp/BUILD/%,$(DEB_ARCH_PACKAGES)) + $(REASON) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ + +debian/stamp/dep-build-indep: debian/stamp/do-pre-build-indep $(patsubst %,debian/stamp/BUILD/%,$(DEB_INDEP_PACKAGES)) + $(REASON) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ + +debian/stamp/do-build-arch: debian/stamp/do-pre-build-arch + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + $(MAKE) -f debian/rules debian/stamp/dep-build-arch + @echo done > $@ +debian/stamp/do-build-indep: debian/stamp/do-pre-build-indep + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + $(MAKE) -f debian/rules debian/stamp/dep-build-indep + @echo done > $@ + +# required +build-arch: debian/stamp/do-build-arch + $(REASON) +build-indep: debian/stamp/do-build-indep + $(REASON) +build: debian/stamp/do-build-arch debian/stamp/do-build-indep + $(REASON) + +# Work here +debian/stamp/post-build-arch: debian/stamp/do-build-arch + $(REASON) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ +debian/stamp/do-post-build-arch: debian/stamp/do-build-arch + $(REASON) + @test -d debian/stamp || mkdir -p debian/stamp + $(MAKE) -f debian/rules debian/stamp/post-build-arch + @echo done > $@ + +debian/stamp/post-build-indep: debian/stamp/do-build-indep + $(REASON) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ +debian/stamp/do-post-build-indep: debian/stamp/do-build-indep + $(REASON) + @test -d debian/stamp || mkdir -p debian/stamp + $(MAKE) -f debian/rules debian/stamp/post-build-indep + @echo done > $@ + +####################################################################### +####################################################################### +############### Install ############### +####################################################################### +####################################################################### +# tasks common to arch and arch indep packages go here +debian/stamp/pre-inst-common: + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ + +# Arch specific and arch independent tasks go here +debian/stamp/pre-inst-arch: debian/stamp/do-post-build-arch + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ +debian/stamp/do-pre-inst-arch: debian/stamp/do-post-build-arch + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @test -e debian/stamp/INST-common || $(MAKE) -f debian/rules debian/stamp/pre-inst-common + $(MAKE) -f debian/rules debian/stamp/pre-inst-arch + @echo done > $@ + +debian/stamp/pre-inst-indep: debian/stamp/do-post-build-indep + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ +debian/stamp/do-pre-inst-indep: debian/stamp/do-post-build-indep + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @test -e debian/stamp/INST-common || $(MAKE) -f debian/rules debian/stamp/pre-inst-common + $(MAKE) -f debian/rules debian/stamp/pre-inst-indep + @echo done > $@ + + +# Per package work happens as an added dependency of this rule +$(patsubst %,debian/stamp/INST/%,$(DEB_ARCH_PACKAGES)) : debian/stamp/INST/% : debian/stamp/do-pre-inst-arch + $(REASON) + $(checkdir) + @test -d debian/stamp/INST || mkdir -p debian/stamp/INST + @echo done > $@ +$(patsubst %,debian/stamp/INST/%,$(DEB_INDEP_PACKAGES)) : debian/stamp/INST/% : debian/stamp/do-pre-inst-indep + $(REASON) + $(checkdir) + @test -d debian/stamp/INST || mkdir -p debian/stamp/INST + @echo done > $@ + +# These do targeta make sure all the per package configuration is +# done, but is not in the direct line of dependencies. This makes sure +# that pre-config targets are all up to date before any of the per +# package target dependencies are run. +debian/stamp/dep-install-arch: debian/stamp/do-pre-inst-arch $(patsubst %,debian/stamp/INST/%,$(DEB_ARCH_PACKAGES)) + $(REASON) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ + +debian/stamp/dep-install-indep: debian/stamp/do-pre-inst-indep $(patsubst %,debian/stamp/INST/%,$(DEB_INDEP_PACKAGES)) + $(REASON) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ + + +debian/stamp/do-install-arch: debian/stamp/do-pre-inst-arch + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + $(MAKE) -f debian/rules debian/stamp/dep-install-arch + @echo done > $@ +debian/stamp/do-install-indep: debian/stamp/do-pre-inst-indep + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + $(MAKE) -f debian/rules debian/stamp/dep-install-indep + @echo done > $@ + +#required +install-arch: debian/stamp/do-install-arch + $(REASON) + $(TESTROOT) +install-indep: debian/stamp/do-install-indep + $(REASON) + $(TESTROOT) +install: debian/stamp/do-install-arch debian/stamp/do-install-indep + $(REASON) + $(TESTROOT) + +####################################################################### +####################################################################### +############### Package ############### +####################################################################### +####################################################################### +# tasks common to arch and arch indep packages go here +debian/stamp/pre-bin-common: + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ + +# Arch specific and arch independent tasks go here +debian/stamp/pre-bin-arch: debian/stamp/do-install-arch + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ +debian/stamp/do-pre-bin-arch: debian/stamp/do-install-arch + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @test -e debian/stamp/BIN-common || $(MAKE) -f debian/rules debian/stamp/pre-bin-common + $(MAKE) -f debian/rules debian/stamp/pre-bin-arch + @echo done > $@ + +debian/stamp/pre-bin-indep: debian/stamp/do-install-indep + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ +debian/stamp/do-pre-bin-indep: debian/stamp/do-install-indep + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + @test -e debian/stamp/BIN-common || $(MAKE) -f debian/rules debian/stamp/pre-bin-common + $(MAKE) -f debian/rules debian/stamp/pre-bin-indep + @echo done > $@ + +# Per package work happens as an added dependency of this rule +$(patsubst %,debian/stamp/BIN/%,$(DEB_ARCH_PACKAGES)) : debian/stamp/BIN/% : debian/stamp/do-pre-bin-arch + $(REASON) + $(checkdir) + @test -d debian/stamp/BIN || mkdir -p debian/stamp/BIN + @echo done > $@ + +$(patsubst %,debian/stamp/BIN/%,$(DEB_INDEP_PACKAGES)) : debian/stamp/BIN/% : debian/stamp/do-pre-bin-indep + $(REASON) + $(checkdir) + @test -d debian/stamp/BIN || mkdir -p debian/stamp/BIN + @echo done > $@ + +# These do targeta make sure all the per package work is done, but is +# not in the direct line of dependencies. This makes sure that +# pre-config targets are all up to date before any of the per package +# target dependencies are run. +debian/stamp/dep-binary-arch: debian/stamp/pre-bin-arch $(patsubst %,debian/stamp/BIN/%,$(DEB_ARCH_PACKAGES)) + $(REASON) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ + +debian/stamp/dep-binary-indep: debian/stamp/pre-bin-indep $(patsubst %,debian/stamp/BIN/%,$(DEB_INDEP_PACKAGES)) + $(REASON) + @test -d debian/stamp || mkdir -p debian/stamp + @echo done > $@ + +debian/stamp/do-binary-arch: debian/stamp/do-pre-bin-arch + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + $(MAKE) -f debian/rules debian/stamp/dep-binary-arch + @echo done > $@ +debian/stamp/do-binary-indep: debian/stamp/do-pre-bin-indep + $(REASON) + $(checkdir) + @test -d debian/stamp || mkdir -p debian/stamp + $(MAKE) -f debian/rules debian/stamp/dep-binary-indep + @echo done > $@ +# required +binary-arch: debian/stamp/do-binary-arch + $(REASON) + $(TESTROOT) +binary-indep: debian/stamp/do-binary-indep + $(REASON) + $(TESTROOT) +binary: debian/stamp/do-binary-arch debian/stamp/do-binary-indep + $(REASON) + $(TESTROOT) + @echo arch package = $(DEB_ARCH_PACKAGES) + @echo indep packages = $(DEB_INDEP_PACKAGES) + +####################################################################### +####################################################################### +############### Clean ############### +####################################################################### +####################################################################### +# Work here +CLN-common:: + $(REASON) + $(checkdir) + +# sync Work here +CLN-arch:: CLN-common + $(REASON) + $(checkdir) +CLN-indep:: CLN-common + $(REASON) + $(checkdir) +# Work here +$(patsubst %,CLEAN/%,$(DEB_ARCH_PACKAGES)) :: CLEAN/% : CLN-arch + $(REASON) + $(checkdir) +$(patsubst %,CLEAN/%,$(DEB_INDEP_PACKAGES)) :: CLEAN/% : CLN-indep + $(REASON) + $(checkdir) + +clean-arch: CLN-arch $(patsubst %,CLEAN/%,$(DEB_ARCH_PACKAGES)) + $(REASON) +clean-indep: CLN-indep $(patsubst %,CLEAN/%,$(DEB_INDEP_PACKAGES)) + $(REASON) +clean: clean-indep clean-arch + $(REASON) + -test -f Makefile && $(MAKE) distclean + -rm -f $(FILES_TO_CLEAN) $(STAMPS_TO_CLEAN) + -rm -rf $(DIRS_TO_CLEAN) debian/stamp + -rm -f core TAGS \ + `find . ! -regex '.*/\.git/.*' ! -regex '.*/\{arch\}/.*' \ + ! -regex '.*/CVS/.*' ! -regex '.*/\.arch-ids/.*' \ + ! -regex '.*/\.svn/.*' \ + \( -name '*.orig' -o -name '*.rej' -o -name '*~' -o \ + -name '*.bak' -o -name '#*#' -o -name '.*.orig' -o \ + -name '.*.rej' -o -name '.SUMS' \) \ + -print` + + +####################################################################### +####################################################################### +############### ############### +####################################################################### +####################################################################### +.PHONY: configure-arch configure-indep configure \ + build-arch build-indep build \ + install-arch install-indep install \ + binary-arch binary-indep binary \ + CLN-common CLN-indep CLN-arch clean-arch clean-indep clean \ + $(patsubst %,CLEAN/%, $(DEB_INDEP_PACKAGES)) $(patsubst %,CLEAN/%, $(DEB_ARCH_PACKAGES)) \ + implode explode prebuild checkpo + + +#Local variables: +#mode: makefile +#End: --- fvwm-2.5.27.ds.orig/debian/manoj/icons +++ fvwm-2.5.27.ds/debian/manoj/icons @@ -0,0 +1,510 @@ +### +# Known applications +### + +# Setting window style icons; style is defined by window name/resource/class. +# Note, todo can be replaced by unknown or empty, but since it is beta yet, +# todo is a notice to do something about an icon for this application. + +Style "Kazaa*" IconOverride, Icon norm/file-manager.xpm +Style "wine" IconOverride, Icon norm/file-manager.xpm +Style "*" Icon norm/unknown.xpm,MiniIcon mini/unknown.xpm +Style "NoResource" Icon norm/unknown.xpm,MiniIcon mini/unknown.xpm + +# Terminals +Style "Eterm*" Icon norm/terminal.xpm,MiniIcon mini/terminal.xpm +Style "rxvt" Icon norm/terminal.xpm,MiniIcon mini/terminal.xpm +Style "XTerm" Icon norm/terminal.xpm,MiniIcon mini/terminal.xpm + +# These are not all mine, most of globs must be removed. +Style "DDD*" Icon norm/developement.xpm,MiniIcon mini/developement.xpm +Style "GRASP*" Icon norm/file-manager.xpm,MiniIcon mini/file-manager.xpm +Style "HyTeX*" Icon norm/viewer.xpm,MiniIcon mini/viewer.xpm +Style "ImageMagic*" Icon norm/image-processor.xpm,MiniIcon mini/image-processor.xpm +Style "KDisk*" Icon norm/disk.xpm,MiniIcon mini/disk.xpm +Style "LyX" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "MathSpad*" Icon norm/science.xpm,MiniIcon mini/science.xpm +Style "MuPAD*" Icon norm/science.xpm,MiniIcon mini/science.xpm +Style "StarOffice*" Icon norm/word-processor.xpm,MiniIcon mini/word-processor.xpm +Style "SystemInfo*" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "Tk man" Icon norm/help.xpm,MiniIcon mini/help.xpm +Style "Visual Tcl" Icon norm/todo.xpm,MiniIcon mini/todo.xpm +Style "Information" Icon norm/information.xpm,MiniIcon mini/information.xpm + +Style "amaya*" Icon norm/www.xpm,MiniIcon mini/www.xpm +Style "AcroRead" Icon norm/viewer.xpm,MiniIcon mini/viewer.xpm +Style "Appointment" Icon norm/clock.xpm,MiniIcon mini/clock.xpm +Style "asWedit*" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "bitmap*" Icon norm/image-processor.xpm,MiniIcon mini/image-processor.xpm +Style "?calc" Icon norm/calculator.xpm,MiniIcon mini/calculator.xpm +Style "?clock" Icon norm/clock.xpm,MiniIcon mini/clock.xpm +Style "cooledit" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "control*" Icon norm/home.xpm,MiniIcon mini/home.xpm +Style "Dayview" Icon norm/clock.xpm,MiniIcon mini/clock.xpm +Style "Dialogue" Icon norm/www.xpm,MiniIcon mini/www.xpm +Style "Display" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm +Style "dosemu*" Icon norm/todo.xpm,MiniIcon mini/todo.xpm +Style "Image Viewer*" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm +Style "emacs" Icon norm/gnu.xpm,MiniIcon mini/gnu.xpm +Style "Explorer" Icon norm/file-manager.xpm,MiniIcon mini/file-manager.xpm +Style "Fractine" Icon norm/science.xpm,MiniIcon mini/science.xpm +Style "fr" Icon norm/file-manager.xpm,MiniIcon mini/file-manager.xpm +Style "freeamp" Icon norm/music.xpm,MiniIcon mini/music.xpm +Style "File Viewer*" Icon norm/viewer.xpm,MiniIcon mini/viewer.xpm +Style "Fvwm*" Icon norm/utility.xpm,MiniIcon mini/utility.xpm +Style "ghostview" Icon norm/ghostview.xpm,MiniIcon mini/ghostview.xpm +Style "ghostscript" Icon norm/ghostview.xpm,MiniIcon mini/ghostview.xpm +Style "gifview" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm +Style "GNUplot" Icon norm/science.xpm,MiniIcon mini/science.xpm +Style "GV" Icon norm/ghostview.xpm,MiniIcon mini/ghostview.xpm +Style "Help_popup" Icon norm/help.xpm,MiniIcon mini/help.xpm +Style "ixset" Icon norm/todo.xpm,MiniIcon mini/todo.xpm +Style "Lynx" Icon norm/www.xpm,MiniIcon mini/www.xpm +Style "Manual Page*" Icon norm/help.xpm,MiniIcon mini/help.xpm +Style "matlab" Icon norm/science.xpm,MiniIcon mini/science.xpm +# too general +Style "Midnight-Commander" Icon norm/file-manager.xpm,MiniIcon mini/file-manager.xpm +Style "mgv*" Icon norm/ghostview.xpm,MiniIcon mini/ghostview.xpm +Style "moxfm*" Icon norm/file-manager.xpm,MiniIcon mini/file-manager.xpm +Style "mtools*" Icon norm/disk.xpm,MiniIcon mini/disk.xpm +Style "mxaudio" Icon norm/music.xpm,MiniIcon mini/music.xpm +Style "NEdit*" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "nedit*" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "Netscape" Icon norm/netscape.xpm,MiniIcon mini/netscape.xpm +Style "Mozilla-bin" Icon norm/netscape.xpm,MiniIcon mini/netscape.xpm +Style "Download" Icon norm/folder.xpm,MiniIcon mini/folder.xpm +Style "Mail" Icon norm/mail.xpm,MiniIcon mini/mail.xpm +Style "Composition" Icon norm/mail.xpm,MiniIcon mini/mail.xpm +Style "NcFtp" Icon norm/network.xpm,MiniIcon mini/network.xpm +Style "nscal*" Icon norm/clock.xpm,MiniIcon mini/clock.xpm +Style "News" Icon norm/news.xpm,MiniIcon mini/news.xpm +Style "panel" Icon norm/home.xpm,MiniIcon mini/home.xpm +Style "pine" Icon norm/mail.xpm,MiniIcon mini/mail.xpm +Style "pixmap*" Icon norm/image-processor.xpm,MiniIcon mini/image-processor.xpm +Style "qps*" Icon norm/mail.xpm,MiniIcon mini/mail.xpm +Style "sxpm" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm +Style "Tail File*" Icon norm/viewer.xpm,MiniIcon mini/viewer.xpm +Style "textedit" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "thot*" Icon norm/www.xpm,MiniIcon mini/www.xpm +Style "THX-1138" Icon norm/calculator.xpm,MiniIcon mini/calculator.xpm +Style "timidity" Icon norm/music.xpm,MiniIcon mini/music.xpm +Style "Top" Icon norm/monitoring.xpm,MiniIcon mini/monitoring.xpm +Style "usernet" Icon norm/network.xpm,MiniIcon mini/network.xpm +Style "VIM" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "VI" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "vppp*" Icon norm/network.xpm,MiniIcon mini/network.xpm +Style "conx" Icon norm/network.xpm,MiniIcon mini/network.xpm +Style "vmware" Icon norm/utility.xpm,MiniIcon mini/utility.xpm +Style "wmCalClock" Icon norm/clock.xpm,MiniIcon mini/clock.xpm +Style "workman" Icon norm/cd-player.xpm,MiniIcon mini/cd-player.xpm +Style "X11Amp" Icon norm/music.xpm,MiniIcon mini/music.xpm +Style "X3270xad" Icon norm/terminal.xpm,MiniIcon mini/terminal.xpm +Style "xanim" Icon norm/multimedia.xpm,MiniIcon mini/multimedia.xpm +Style "xapm" Icon norm/monitoring.xpm,MiniIcon mini/monitoring.xpm +Style "xbiff" Icon norm/mail.xpm,MiniIcon mini/mail.xpm +Style "xbm*" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm +Style "XbmBrowser" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm +Style "xclipboard" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "xcolorsel" Icon norm/colors.xpm,MiniIcon mini/colors.xpm +Style "xconsole" Icon norm/terminal.xpm,MiniIcon mini/terminal.xpm +Style "xdaliclock" Icon norm/clock.xpm,MiniIcon mini/clock.xpm +Style "xdiskinfo*" Icon norm/disk.xpm,MiniIcon mini/disk.xpm +Style "xditview" Icon norm/viewer.xpm,MiniIcon mini/viewer.xpm +Style "XDos*" Icon norm/todo.xpm,MiniIcon mini/todo.xpm +Style "xedit" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "xephem*" Icon norm/science.xpm,MiniIcon mini/science.xpm +Style "xfig*" Icon norm/image-processor.xpm,MiniIcon mini/image-processor.xpm +Style "xfontsel" Icon norm/font.xpm,MiniIcon mini/font.xpm +Style "xgraph" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm +Style "xkey*" Icon norm/keyboard.xpm,MiniIcon mini/keyboard.xpm +Style "xli" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm +Style "xload" Icon norm/monitoring.xpm,MiniIcon mini/monitoring.xpm +# -- [ xman resources -- +Style "Xman" Icon norm/help.xpm,MiniIcon mini/help.xpm +Style "topBox" Icon norm/folder.xpm,MiniIcon mini/folder.xpm +Style "manualBrowser" Icon norm/help.xpm,MiniIcon mini/help.xpm +Style "help" Icon norm/information.xpm,MiniIcon mini/information.xpm +# -- xman resources ] -- +Style "xmag" Icon norm/viewer.xpm,MiniIcon mini/viewer.xpm +Style "Xmessage" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "xosview" Icon norm/monitoring.xpm,MiniIcon mini/monitoring.xpm +# -- [ xpaint resources -- +Style "XPaint" Icon norm/image-processor.xpm,MiniIcon mini/image-processor.xpm +Style "Canvas" Icon norm/todo.xpm,MiniIcon mini/todo.xpm +Style "fatbits" Icon norm/todo.xpm,MiniIcon mini/todo.xpm +Style "filebrowser" Icon norm/file-manager.xpm,MiniIcon mini/file-manager.xpm +# -- xpaint resources ] -- +Style "xmh" Icon norm/mail.xpm,MiniIcon mini/mail.xpm +Style "xmixer" Icon norm/sound.xpm,MiniIcon mini/sound.xpm +Style "xmms" Icon norm/music.xpm,MiniIcon mini/music.xpm +Style "xpdf" Icon norm/viewer.xpm,MiniIcon mini/viewer.xpm +Style "xplaycd" Icon norm/cd-player.xpm,MiniIcon mini/cd-player.xpm +Style "xscreensaver" Icon norm/lock.xpm,MiniIcon mini/lock.xpm +Style "xsysinfo*" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "xtar*" Icon norm/file.xpm,MiniIcon mini/file.xpm +Style "XTel" Icon norm/terminal-special.xpm,MiniIcon mini/terminal-special.xpm +Style "XTide" Icon norm/science.xpm,MiniIcon mini/science.xpm +Style "xv" Icon norm/xv.xpm,MiniIcon mini/xv.xpm +Style "xvgr" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm +Style "xvmount" Icon norm/disk.xpm,MiniIcon mini/disk.xpm +Style "xwp" Icon norm/word-processor.xpm,MiniIcon mini/word-processor.xpm +Style "xwpe" Icon norm/developement.xpm,MiniIcon mini/developement.xpm +Style "xxgdb" Icon norm/developement.xpm,MiniIcon mini/developement.xpm + +# Open File dialog +Style "Browse * Select a File" Icon norm/folder.xpm,MiniIcon mini/folder.xpm +Style "File Directory" Icon norm/folder.xpm,MiniIcon mini/folder.xpm +Style "fileSelector*" Icon norm/folder.xpm,MiniIcon mini/folder.xpm +Style "fileSelection_popup" Icon norm/folder.xpm,MiniIcon mini/folder.xpm +Style "Open document" Icon norm/folder.xpm,MiniIcon mini/folder.xpm +Style "Save as" Icon norm/folder.xpm,MiniIcon mini/folder.xpm +Style "Select a file to open" Icon norm/folder.xpm,MiniIcon mini/folder.xpm +Style "Select a file to load" Icon norm/folder.xpm,MiniIcon mini/folder.xpm +Style "selFile" Icon norm/folder.xpm,MiniIcon mini/folder.xpm +Style "Open File..." Icon norm/folder.xpm,MiniIcon mini/folder.xpm +Style "xgetfile" Icon norm/folder.xpm,MiniIcon mini/folder.xpm + +# Too general +Style "*_applet" Icon norm/utility.xpm,MiniIcon mini/utility.xpm +Style "help*" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "*icq" Icon norm/chat.xpm,MiniIcon mini/chat.xpm +Style "*irc" Icon norm/chat.xpm,MiniIcon mini/chat.xpm +Style "*info" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "info*" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "Information" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "_o_*" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "About" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "about_popup" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "about" Icon norm/information.xpm,MiniIcon mini/information.xpm + +# FVWM / FVWM Themes +Style "Fvwm*" Icon norm/utility.xpm,MiniIcon mini/utility.xpm +Style "FvwmConsole" Icon norm/terminal-special.xpm,MiniIcon mini/terminal-special.xpm +Style "FVWM Themes*" Icon norm/themes.xpm,MiniIcon mini/themes.xpm +Style "FVWM Themes Config*" Icon norm/configuration.xpm,MiniIcon mini/configuration.xpm +Style "FVWM Themes Doc*" Icon norm/help.xpm,MiniIcon mini/help.xpm +Style "FVWM Themes Menu*" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "Color Selector" Icon norm/colors.xpm,MiniIcon mini/colors.xpm +Style "Font Selector" Icon norm/font.xpm,MiniIcon mini/font.xpm +Style "Icon Browser" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm +Style "Image Browser" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm +Style "FvwmForm-ThemeSettings" Icon norm/configuration.xpm,MiniIcon mini/configuration.xpm +Style "FvwmForm-Restart" Icon norm/restart.xpm,MiniIcon mini/restart.xpm +Style "FormFvwmAnimate" Icon norm/window-iconify.xpm,MiniIcon mini/window-iconify.xpm +Style "FvwmForm-Form" Icon norm/configuration.xpm,MiniIcon mini/configuration.xpm +Style "FvwmForm-RootCursor" Icon norm/display.xpm,MiniIcon mini/display.xpm +Style "FvwmScript-BellSetup" Icon norm/sound.xpm,MiniIcon mini/sound.xpm +Style "FvwmScript-Keyboard" Icon norm/keyboard.xpm,MiniIcon mini/keyboard.xpm +Style "FvwmScript-ScreenSetup" Icon norm/display.xpm,MiniIcon mini/display.xpm +Style "FvwmScript-PointerSetup" Icon norm/mouse.xpm,MiniIcon mini/mouse.xpm + +# GNOME/Gtk Apps +Style "AbiWord*" Icon norm/word-processor.xpm,MiniIcon mini/word-processor.xpm +Style "bug-buddy" Icon norm/developement.xpm,MiniIcon mini/developement.xpm +Style "Dia" Icon norm/science.xpm,MiniIcon mini/science.xpm +Style "eog" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm +Style "Galeon-bin" Icon norm/www.xpm,MiniIcon mini/www.xpm +Style "galeon*" Icon norm/www.xpm,MiniIcon mini/www.xpm +Style "gcharmap" Icon norm/keyboard.xpm,MiniIcon mini/keyboard.xpm +Style "gcolorsel" Icon norm/colors.xpm,MiniIcon mini/colors.xpm +Style "gdict" Icon norm/utility.xpm,MiniIcon mini/utility.xpm +Style "gdiskfree" Icon norm/monitoring.xpm,MiniIcon mini/monitoring.xpm +Style "gEdit" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "gedit" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "gfontsel" Icon norm/font.xpm,MiniIcon mini/font.xpm +Style "gfloppy" Icon norm/disk-floppy.xpm,MiniIcon mini/disk-floppy.xpm +Style "ghex" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "ghostview" Icon norm/ghostview.xpm,MiniIcon mini/ghostview.xpm +Style "Gimp" Icon norm/gimp.xpm,MiniIcon mini/gimp.xpm +Style "gaim*" Icon norm/chat.xpm +Style "eDonkey*" Icon norm/monitoring.xpm +Style "*GVIM" Icon norm/editor.xpm +Style "gless" Icon norm/viewer.xpm,MiniIcon mini/viewer.xpm +Style "gmix" Icon norm/sound.xpm,MiniIcon mini/sound.xpm +Style "gmailman" Icon norm/mail.xpm,MiniIcon mini/mail.xpm +Style "gmc" Icon norm/file-manager.xpm,MiniIcon mini/file-manager.xpm +Style "gmenu" Icon norm/configuration.xpm,MiniIcon mini/configuration.xpm +Style "gnome-help-browser" Icon norm/help.xpm,MiniIcon mini/help.xpm +Style "GnomeHelpBrowser" Icon norm/help.xpm,MiniIcon mini/help.xpm +Style "gnome-hint" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "gnome-ppp" Icon norm/network.xpm,MiniIcon mini/network.xpm +Style "gnome-run" Icon norm/utility.xpm,MiniIcon mini/utility.xpm +Style "gnome-sync" Icon norm/folder.xpm,MiniIcon mini/folder.xpm +Style "Gnome-linuxconf" Icon norm/configuration.xpm,MiniIcon mini/configuration.xpm +Style "gnomecal" Icon norm/clock.xpm,MiniIcon mini/clock.xpm +Style "GnomeCard" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "gnomecard" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "gnomecc" Icon norm/home.xpm,MiniIcon mini/home.xpm +Style "GnomeTerminal" Icon norm/terminal.xpm,MiniIcon mini/terminal.xpm +Style "gnumeric" Icon norm/calculator.xpm,MiniIcon mini/calculator.xpm +Style "gnp" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "gnp+" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "GQview" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm +Style "grecord" Icon norm/sound.xpm,MiniIcon mini/sound.xpm +Style "grip" Icon norm/cd-player.xpm,MiniIcon mini/cd-player.xpm +Style "gsearchtool" Icon norm/file.xpm,MiniIcon mini/file.xpm +Style "gtalk" Icon norm/chat.xpm,MiniIcon mini/chat.xpm +Style "gtcd" Icon norm/cd-player.xpm,MiniIcon mini/cd-player.xpm +Style "gtk-shell" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "gtkicq" Icon norm/chat.xpm,MiniIcon mini/chat.xpm +Style "gtop" Icon norm/monitoring.xpm,MiniIcon mini/monitoring.xpm +Style "gtt" Icon norm/clock.xpm,MiniIcon mini/clock.xpm +Style "guname" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "gw" Icon norm/monitoring.xpm,MiniIcon mini/monitoring.xpm +Style "gxedit" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "helix-update" Icon norm/network.xpm,MiniIcon mini/network.xpm +Style "idetool" Icon norm/disk.xpm,MiniIcon mini/disk.xpm +Style "logview" Icon norm/viewer.xpm,MiniIcon mini/viewer.xpm +Style "pan" Icon norm/news.xpm,MiniIcon mini/news.xpm +Style "vumeter" Icon norm/sound.xpm,MiniIcon mini/sound.xpm +Style "X-Chat" Icon norm/chat.xpm,MiniIcon mini/chat.xpm + +# XFCE Apps +Style "xfclock" Icon norm/clock.xpm,MiniIcon mini/clock.xpm +Style "xftree" Icon norm/file-manager.xpm,MiniIcon mini/file-manager.xpm + +# KDE Apps +# -- [ Abbrowser -- +Style "kcontrol" Icon norm/kde.xpm,MiniIcon mini/kde.xpm +Style "abbrowser" Icon norm/information.xpm,MiniIcon mini/information.xpm +# -- Abbrowser ] -- +Style "aktion" Icon norm/video.xpm,MiniIcon mini/video.xpm +Style "ark" Icon norm/file.xpm,MiniIcon mini/file.xpm +# -- [ kviewshell -- +Style "kviewshell" Icon norm/viewer.xpm,MiniIcon mini/viewer.xpm +Style "DVI Viewer" Icon norm/viewer.xpm,MiniIcon mini/viewer.xpm +Style "Fax Viewer" Icon norm/viewer.xpm,MiniIcon mini/viewer.xpm +# -- kviewshell ] -- +Style "kab" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "kaiman" Icon norm/sound.xpm,MiniIcon mini/sound.xpm +Style "karm" Icon norm/clock.xpm,MiniIcon mini/clock.xpm +Style "kcharselect" Icon norm/keyboard.xpm,MiniIcon mini/keyboard.xpm +Style "kchart" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "kcron" Icon norm/system.xpm,MiniIcon mini/system.xpm +Style "kdehelp" Icon norm/help.xpm,MiniIcon mini/help.xpm +Style "kdepasswd" Icon norm/terminal-special.xpm,MiniIcon mini/terminal-special.xpm +Style "kdevelop" Icon norm/developement.xpm,MiniIcon mini/developement.xpm +Style "kdesu" Icon norm/terminal-special.xpm,MiniIcon mini/terminal-special.xpm +Style "kdf" Icon norm/disk.xpm,MiniIcon mini/disk.xpm +Style "kdvi" Icon norm/viewer.xpm,MiniIcon mini/viewer.xpm +Style "kedit" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "keystone" Icon norm/terminal.xpm,MiniIcon mini/terminal.xpm +Style "kfind" Icon norm/file.xpm,MiniIcon mini/file.xpm +Style "kfloppy" Icon norm/disk-floppy.xpm,MiniIcon mini/disk-floppy.xpm +Style "kfm" Icon norm/file-manager.xpm,MiniIcon mini/file-manager.xpm +Style "kfract" Icon norm/viewer.xpm,MiniIcon mini/viewer.xpm +Style "khexedit" Icon norm/file.xpm,MiniIcon mini/file.xpm +Style "kiconedit" Icon norm/image-processor.xpm,MiniIcon mini/image-processor.xpm +Style "kit" Icon norm/chat.xpm,MiniIcon mini/chat.xpm +Style "killustrator" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm +Style "kjots" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "klpq" Icon norm/printing.xpm,MiniIcon mini/printing.xpm +Style "kljettool" Icon norm/printing.xpm,MiniIcon mini/printing.xpm +Style "knode" Icon norm/news.xpm,MiniIcon mini/news.xpm +Style "knews" Icon norm/news.xpm,MiniIcon mini/news.xpm +Style "kmail*" Icon norm/mail.xpm,MiniIcon mini/mail.xpm +Style "kmidi" Icon norm/music.xpm,MiniIcon mini/music.xpm +Style "kmid" Icon norm/music.xpm,MiniIcon mini/music.xpm +Style "kmix" Icon norm/sound.xpm,MiniIcon mini/sound.xpm +Style "artsbuilder" Icon norm/music.xpm,MiniIcon mini/music.xpm +Style "artscontrol" Icon norm/sound.xpm,MiniIcon mini/sound.xpm +Style "kmoon" Icon norm/science.xpm,MiniIcon mini/science.xpm +Style "kodo" Icon norm/mouse.xpm,MiniIcon mini/mouse.xpm +Style "kpackage" Icon norm/program.xpm,MiniIcon mini/program.xpm +Style "kppp" Icon norm/network.xpm,MiniIcon mini/network.xpm +Style "kppplogview" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "kghostview" Icon norm/viewer.xpm,MiniIcon mini/viewer.xpm +Style "konqueror" Icon norm/file-manager.xpm,MiniIcon mini/file-manager.xpm +Style "korganizer" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "konsole" Icon norm/terminal.xpm,MiniIcon mini/terminal.xpm +Style "koshell" Icon norm/home.xpm,MiniIcon mini/home.xpm +Style "kpixmap2bitmap" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm +Style "kpm" Icon norm/monitoring.xpm,MiniIcon mini/monitoring.xpm +Style "kpresenter" Icon norm/word-processor.xpm,MiniIcon mini/word-processor.xpm +Style "krule" Icon norm/utility.xpm,MiniIcon mini/utility.xpm +Style "kscd" Icon norm/cd-player.xpm,MiniIcon mini/cd-player.xpm +Style "ksnapshot" Icon norm/window.xpm,MiniIcon mini/window.xpm +Style "kspread" Icon norm/calculator.xpm,MiniIcon mini/calculator.xpm +Style "ksysguard" Icon norm/monitoring.xpm,MiniIcon mini/monitoring.xpm +Style "ksysv" Icon norm/system.xpm,MiniIcon mini/system.xpm +Style "kteatime" Icon norm/amusement.xpm,MiniIcon mini/amusement.xpm +Style "ktip" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "kuser" Icon norm/system.xpm,MiniIcon mini/system.xpm +Style "kview" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm +Style "kvt" Icon norm/terminal.xpm,MiniIcon mini/terminal.xpm +Style "kwikdisk" Icon norm/disk.xpm,MiniIcon mini/disk.xpm +Style "kword" Icon norm/word-processor.xpm,MiniIcon mini/word-processor.xpm +Style "kworldwatch" Icon norm/clock.xpm,MiniIcon mini/clock.xpm +Style "kwrite" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "kwuftpd" Icon norm/network.xpm,MiniIcon mini/network.xpm +Style "noatun" Icon norm/multimedia.xpm,MiniIcon mini/multimedia.xpm +Style "pixie" Icon norm/image-viewer.xpm,MiniIcon mini/image-viewer.xpm + +# CDE Apps +Style "Dterm" Icon norm/terminal.xpm,MiniIcon mini/terminal.xpm +Style "Dtfile" Icon norm/file-manager.xpm,MiniIcon mini/file-manager.xpm +Style "Dtpad" Icon norm/editor.xpm,MiniIcon mini/editor.xpm +Style "Dthelp*" Icon norm/help.xpm,MiniIcon mini/help.xpm +Style "Dtcm*" Icon norm/clock.xpm,MiniIcon mini/clock.xpm +Style "Dtcalc" Icon norm/calculator.xpm,MiniIcon mini/calculator.xpm +Style "Dticon*" Icon norm/image-processor.xpm,MiniIcon mini/image-processor.xpm +Style "Dtprint*" Icon norm/printing.xpm,MiniIcon mini/printing.xpm +Style "Dtstyle*" Icon norm/configuration.xpm,MiniIcon mini/configuration.xpm +Style "Applications Manager" Icon norm/program.xpm,MiniIcon mini/program.xpm +Style "Trash Can" Icon norm/file.xpm,MiniIcon mini/file.xpm + +# Games +Style "SDL_App" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "*angband" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "gcfclient" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "Maelstrom" Icon norm/game-action.xpm,MiniIcon mini/game-action.xpm +Style "MirrorMagic" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "PySol" Icon norm/game-cards.xpm,MiniIcon mini/game-cards.xpm +Style "Rocks'n'Diamonds" Icon norm/game-action.xpm,MiniIcon mini/game-action.xpm +Style "XGammon" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "XGammon-Buttons" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "xgoban" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "comment" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "xmahjongg" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "*tetris" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "xtrojka" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "xemeraldia" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "XGalaga" Icon norm/game-action.xpm,MiniIcon mini/game-action.xpm +Style "xeyes" Icon norm/amusement.xpm,MiniIcon mini/amusement.xpm + +# 11 xpuzzles +Style "xcubes" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "xdino" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "xhexagons" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "xmball" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "xmlink" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "xoct" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "xpanex" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "xpyraminx" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "xrubik" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "xskewb" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "xtriangles" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm + +Style "High score*" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "Statistics" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "xboard" Icon norm/game-board.xpm,MiniIcon mini/game-board.xpm +Style "xevil" Icon norm/game-action.xpm,MiniIcon mini/game-action.xpm +Style "xsok*" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "xbomb" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "*Scavenger" Icon norm/game-action.xpm,MiniIcon mini/game-action.xpm +Style "Freeciv*" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "XPat" Icon norm/game-cards.xpm,MiniIcon mini/game-cards.xpm +Style "dontspace" Icon norm/game-cards.xpm,MiniIcon mini/game-cards.xpm +Style "klondike" Icon norm/game-cards.xpm,MiniIcon mini/game-cards.xpm +Style "spider" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "X-Mame*" Icon norm/game-action.xpm,MiniIcon mini/game-action.xpm +Style "xlin-city*" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "xchomp" Icon norm/game-action.xpm,MiniIcon mini/game-action.xpm + +# GNOME Games +Style "freecell" Icon norm/game-cards.xpm,MiniIcon mini/game-cards.xpm +Style "gataxx" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "glines" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "gnibbles" Icon norm/game-action.xpm,MiniIcon mini/game-action.xpm +Style "gnobots" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "gnobots2" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "gnome-chess" Icon norm/game-board.xpm,MiniIcon mini/game-board.xpm +Style "gnome-stones" Icon norm/game-action.xpm,MiniIcon mini/game-action.xpm +Style "gnome-xbill" Icon norm/game-action.xpm,MiniIcon mini/game-action.xpm +Style "gnomine" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "gnotski" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "gtali" Icon norm/game-board.xpm,MiniIcon mini/game-board.xpm +Style "gnotravex" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "gturing" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "iagno" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "mahjongg" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "same-gnome" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "sol" Icon norm/game-cards.xpm,MiniIcon mini/game-cards.xpm + +Style "gtkballs" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "gfpoken" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm + +# KDE Games # these ones have own 16x16 & 32x32 xpm's included with kdebase +Style "Jezzball" Icon norm/game-action.xpm,MiniIcon mini/game-action.xpm +Style "lskat" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "kabalone" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "kasteroids" Icon norm/game-action.xpm,MiniIcon mini/game-action.xpm +Style "katomic" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "kbackgammon" Icon norm/game-board.xpm,MiniIcon mini/game-board.xpm +Style "kblackbox" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "kfouleggs" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "kjumpingcube" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "kmahjongg" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "kmines" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "konquest" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "kpat" Icon norm/game-cards.xpm,MiniIcon mini/game-cards.xpm +Style "kpoker" Icon norm/game-cards.xpm,MiniIcon mini/game-cards.xpm +Style "kreversi" Icon norm/game-board.xpm,MiniIcon mini/game-board.xpm +Style "ksame" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "kshisen" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "ksirtet" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "ksmiletris" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "ksnake" Icon norm/game-action.xpm,MiniIcon mini/game-action.xpm +Style "ksokoban" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm +Style "kspaceduel" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "ktron" Icon norm/game-action.xpm,MiniIcon mini/game-action.xpm +Style "ktetris" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "ktuberling" Icon norm/game.xpm,MiniIcon mini/game.xpm +Style "kwin4" Icon norm/game-logic.xpm,MiniIcon mini/game-logic.xpm + + +Style "FvwmButtons" Icon toolbox.xpm +Style "Mosaic" Icon norm/netscape.xpm,MiniIcon mini/netscape.xpm +Style "Root" Icon supermn1.xpm,MiniIcon mini/terminal.xpm +Style "root*" Icon supermn1.xpm,MiniIcon mini/terminal.xpm +Style "VM" Icon mail_edit.xpm,MiniIcon mini/mail.xpm +Style "Work2" Icon hpterm.xpm,MiniIcon mini/terminal.xpm +Style "work2" Icon hpterm.xpm,MiniIcon mini/terminal.xpm +Style "XArchie" Icon xarchie.xpm,MiniIcon mini/network.xpm +Style "XGopher" Icon xgopher.xpm,MiniIcon mini/network.xpm +Style "XGrab" Icon xgrab.xpm,MiniIcon mini/image-processor.xpm +Style "XRn" Icon xrn.xpm,MiniIcon mini/news.xpm +Style "postit" Icon postit.xpm,MiniIcon mini/information.xpm +Style "xcb" Icon clipboard.xpm,MiniIcon mini/information.xpm +Style "xcd" Icon cdrom1.xpm,MiniIcon mini/cd-player.xpm +Style "xman" Icon xman.xpm,MiniIcon mini/information.xpm +Style "xmanSearch" Icon ctwm/xman.xpm,MiniIcon mini/information.xpm +Style "xterm" Icon xterm.xpm,MiniIcon mini/terminal.xpm + +Style "xinfo" Icon cl-32/gnuinfo.xpm,MiniIcon mini/information.xpm +Style "XInfo" Icon cl-32/gnuinfo.xpm,MiniIcon mini/information.xpm + +Style "pgp-pixie" Icon hobbes-icons-xpm3/l/lock1.xpm,MiniIcon mini/lock.xpm +Style "xdvi" Icon /usr/local/share/graphics/texicons/xpm/dvi.xpm,MiniIcon mini/viewer.xpm +Style "xmoondial" Icon hobbes-icons-xpm3/m/moonb.xpm,MiniIcon mini/clock.xpm +Style "xmultibiff" Icon hobbes-icons-xpm3/m/mailbox.xpm,MiniIcon mini/mail.xpm +Style "Work1" Icon hobbes-icons-xpm3/t/terminl2.xpm,MiniIcon mini/terminal.xpm +Style "work1" Icon hobbes-icons-xpm3/t/terminl2.xpm,MiniIcon mini/terminal.xpm + +Style "XClock" Icon hobbes-icons-xpm3/s/sysclock.xpm,MiniIcon mini/clock.xpm +Style "XPbiff" Icon ctwm/mail0.xpm,MiniIcon mini/mail.xpm +Style "XRlogin" Icon cl-32/rlogin.xpm,MiniIcon mini/terminal.xpm +Style "xvtdl" Icon cl-32/check_list.xpm,MiniIcon mini/information.xpm +Style "Xvtdl" Icon cl-32/check_list.xpm,MiniIcon mini/information.xpm +Style "faces" Icon cl-32/face.xpm +Style "sunclock" Icon hobbes-icons-xpm3/s/sundial.xpm,MiniIcon mini/clock.xpm +Style "timex" Icon hobbes-icons-xpm3/t/timer2.xpm,MiniIcon mini/clock.xpm +Style "window info" Icon norm/information.xpm,MiniIcon mini/information.xpm +Style "*PostScript File" Icon desktop/document/postscript.xpm,MiniIcon mini/ghostview.xpm +Style "*belthil*" Icon hobbes-icons-xpm3/t/terminl2.xpm,MiniIcon mini/terminal.xpm +Style "*camelot*" Icon hobbes-icons-xpm3/t/terminl2.xpm,MiniIcon mini/terminal.xpm +Style "*dhaka*" Icon hobbes-icons-xpm3/t/terminl2.xpm,MiniIcon mini/terminal.xpm +Style "*diamond*" Icon hpterm.xpm,MiniIcon mini/terminal.xpm +Style "*ikenga*" Icon hobbes-icons-xpm3/t/terminl2.xpm,MiniIcon mini/terminal.xpm +Style "*jade*" Icon hpterm.xpm,MiniIcon mini/terminal.xpm +Style "*mashad*" Icon hobbes-icons-xpm3/t/terminl2.xpm,MiniIcon mini/terminal.xpm +Style "*onyx*" Icon hpterm.xpm,MiniIcon mini/terminal.xpm +Style "*pearl*" Icon hpterm.xpm,MiniIcon mini/terminal.xpm +Style "*plymouth*" Icon hobbes-icons-xpm3/t/terminl2.xpm,MiniIcon mini/terminal.xpm +Style "*rome*" Icon hobbes-icons-xpm3/t/terminl2.xpm,MiniIcon mini/terminal.xpm +Style "*seoul*" Icon hobbes-icons-xpm3/t/terminl2.xpm,MiniIcon mini/terminal.xpm +Style "*sylhet*" Icon hobbes-icons-xpm3/t/terminl2.xpm,MiniIcon mini/terminal.xpm +Style "*topaz*" Icon hpterm.xpm,MiniIcon mini/terminal.xpm +Style "*zircon*" Icon hpterm.xpm,MiniIcon mini/terminal.xpm + + --- fvwm-2.5.27.ds.orig/debian/manoj/post_menu.hook +++ fvwm-2.5.27.ds/debian/manoj/post_menu.hook @@ -0,0 +1,22 @@ +# This menu will fire up some very common utilities +DestroyMenu Utilities +AddToMenu "Utilities" "Utilities" Title +Read main-menu.hook + + +#======================================================== +# One more complex function - couldn't be defined earlier because it used +# pop-up menus +# +# This creates a motif-ish sticky menu for the title-bar window-ops +# pop-up +# Menu acts like normal twm menu if you just hold the button down, +# but if you click instead, the menu stays up, motif style +AddToFunc "window_ops_func" "C" PopUp Window-Ops2 ++ "M" PopUp Window-Ops2 + + +AddToFunc "general_ops_func" "M" PopUp General ++ "C" PopUp General ++ "D" PopUp General + --- fvwm-2.5.27.ds.orig/debian/manoj/main-menu.hook +++ fvwm-2.5.27.ds/debian/manoj/main-menu.hook @@ -0,0 +1,123 @@ +# Sub menu for Utilities +AddToMenu "System-Edits" "System Edits" Title ++ "Edit .fvwmrc" Exec emacs_once .fvwmrc & ++ "Edit .xsession" Exec emacs_once .xsession & ++ "Edit .Xresources" Exec emacs_once .Xresources & ++ "Source .Xresources" Exec xrdb -merge .Xresources & ++ "Restart fvwm2" Restart fvwm2 + +PipeRead 'fvwm-menu-desktop --desktop kde-sys' +#PipeRead 'fvwm-menu-xlock --name MenuSSaver --title "Screensaver" \ +# --icon-item mini-bball.xpm --special-first -- -nice 19 -nolock' +#PipeRead 'fvwm-menu-xlock --name MenuSLock --title "Lock Screen" \ +# --icon-item mini-rball.xpm --special-first -- -nice 19 -nolock' + + +AddToMenu "Utilities" +# This menu will fire up some very common utilities ++ "&Apps" Popup /Debian/Apps ++ "&Games" Popup /Debian/Games ++ "&Help" Popup /Debian/Help ++ "&Screen" Popup /Debian/Screen ++ "&WindowManagers" Popup /Debian/WindowManagers ++ "KDE System Menu" Popup kde-sys ++ "Misc" Popup MiscUtilities ++ "Headlines" Popup MenuFvwmHeadlines ++ "&XShells" Popup /Debian/XShells ++ "&Mozilla" Function Warp-or-Run-Browser ++ "Manpage: fvwm%32x32.help.xpm%" Exec exec xterm -g 68x45-0-5 -fn \ + 9x15 -fb 9x15bold -T "Manpage: fvwm2" -n "fvwm2" -e mcview \ + /usr/share/man/man1/fvwm2.1.gz ++ "" Nop ++ "Refresh Screen" Refresh ++ "System Edits" Popup System-Edits ++ "" Nop +#+ "Screensaver%mini-monitor.xpm%" Popup MenuSSaver +#+ "Screenlock%mini-lock.xpm%" Popup MenuSLock ++ "E&xit Fvwm%mini.exit.xpm%" Popup Quit-Verify + + +AddToMenu Misc-Ops "Misc Config Opts" Title ++ "Sloppy Focus" ChangeDefaultFocus SloppyFocus ++ "Click To Focus" ChangeDefaultFocus ClickToFocus ++ "Focus Follows Mouse" ChangeDefaultFocus FocusFollowsMouse ++ "" Nop ++ "Colormap Follows Mouse" ColormapFocus FollowsMouse ++ "Colormap Follows Focus" ColormapFocus FollowsFocus ++ "" Nop ++ "Full Paging ON" EdgeScroll 100 100 ++ "All Paging OFF" EdgeScroll 0 0 ++ "Horizontal Paging Only" EdgeScroll 100 0 ++ "Vertical Paging Only" EdgeScroll 0 100 ++ "Partial Paging" EdgeScroll 50 50 ++ "Full Paging && Edge Wrap" EdgeScroll 100000 100000 + + +DestroyMenu Window-Ops +AddToMenu "Window-Ops" "Windows" Title ++ "work&2%mini.xterm.xpm%" Exec exec uxterm -fg $[fg.cs30] -bg $[bg.cs30] -ut -T Work2 -e /bin/bash & ++ "work&3%mini.xterm.xpm%" Exec exec uxterm -fg $[fg.cs32] -bg $[bg.cs32] -ut -T Work3 -e /bin/bash & ++ "&Root%mini.xterm.xpm%" Exec exec uxterm -fg $[fg.cs33] -bg $[bg.cs33] -T Root -e /bin/su -c '/bin/bash -rcfile "~srivasta/.rootrc" -i' root& ++ "Hidden Console" Function StartHiddenConsole ++ "Window Operations" Title ++ "&Move%mini.move.xpm%" Function Move-or-Raise ++ "Re&size%mini.resize.xpm%" Function Resize-or-Raise ++ "Raise%mini.raise.xpm%" Raise ++ "Lower%mini.lower.xpm%" Lower ++ "(De)&Iconify%mini.iconify.xpm%" Iconify ++ "(Un)&Stick%mini.stick.xpm%" Stick ++ "(Un)Maximize%mini.resize.xpm%" Function max_vert_func ++ "" Nop ++ "Destroy%mini.destroy.xpm%" Destroy ++ "Close%mini.bomb.xpm%" Close ++ "" Nop ++ "ScrollBar" Module FvwmScroll 2 2 ++ "Re&fresh Screen" Refresh ++ "Refresh Window" RefreshWindow ++ "Print" PrintFunction ++ "Print Reverse" PrintReverseFunction + +# "work&2%mini.xterm.xpm%" Exec exec mlterm -f $[fg.cs30] -b $[bg.cs30] -t -T Work2 -e /bin/bash & +# "work&3%mini.xterm.xpm%" Exec exec mlterm -f $[fg.cs32] -b $[bg.cs32] -t -T Work3 -e /bin/bash & +# "&Root%mini.xterm.xpm%" Exec exec mlterm -f $[fg.cs33] -b $[bg.cs33] -t -T Root -e /bin/su -c '/bin/bash -rcfile "~srivasta/.rootrc" -i' root& + + +# A trimmed down version of "Window-Ops", good for binding to decorations +DestroyMenu Window-Ops2 +AddToMenu "Window-Ops2" "Window" Title ++ "&Move%mini.move.xpm%" Function Move-or-Raise ++ "&Resize%mini.resize.xpm%" Function Resize-or-Raise ++ "Raise%mini.raise.xpm%" Raise ++ "&Lower%mini.lower.xpm%" Lower ++ "&Iconify%mini.iconify.xpm" Iconify ++ "(Un)&Stick%mini.stick.xpm%" Stick ++ "Select" Function SelectWindow ++ "Iconify With Thumbnail" Function Thumbnail ++ "Send to &Page..." SendWindowTopage ++ "" Nop ++ "Destroy%mini.destroy.xpm%" Destroy ++ "Close%mini.bomb.xpm%" Close ++ "" Nop ++ "ScrollBar" Module FvwmScroll 2 2 + +DestroyMenu General +AddToMenu "General" "Generic Functions" Title ++ "&Stick" Stick ++ "&All windows" WindowList 0 ++ "&Local windows" WindowList 2 ++ "&Refresh" Refresh ++ "&Next Desk" Desk 1 ++ "Circulate&Up" CirculateUp ++ "Circulate&Down" CirculateDown ++ "Previous Focus" Prev (AcceptsFocus) Focus ++ "Next Focus" Next (AcceptsFocus) Focus ++ "" Nop ++ "m4-Settings" Popup m4-Settings ++ "Bell" Popup Bell ++ "Keyclick" Popup Keyclick ++ "Toggle Paging" Toggle-Page ++ "Paging Functions" Popup Paging ++ "Recapture screen" Recapture ++ "&Forms" Popup Forms ++ "Reset X defaults" Exec xrdb -load $HOME/.Xresources + --- fvwm-2.5.27.ds.orig/debian/manoj/functions.def +++ fvwm-2.5.27.ds/debian/manoj/functions.def @@ -0,0 +1,755 @@ +# +# Section: Menus +# +# This section defines a small menu structure. The main menu contains +# some typical entries, and uses a hook (main-menu.hook) to allow the +# user to add new entries. Most of the default entries are submenus, +# which are also defined here. +# + +#===================================================== 9. user functions +# 9. user functions +# Now define some handy complex functions +DestroyFunc page-and-warp +AddToFunc page-and-warp "I" GotoPage $0 $1 ++ "I" Next [!iconic CurrentScreen CurrentDesk] Focus + +DestroyFunc desk-and-warp +AddToFunc desk-and-warp "I" Desk $0 $1 ++ "I" Next [!iconic CurrentScreen CurrentDesk] Focus + +DestroyFunc Toggle-Page +AddToFunc Toggle-Page "I" EdgeScroll 0 0 ++ "I" EdgeScroll 100 100 + +# use as Key F25 A N Popupat Window-Ops +DestroyFunc Popupat +AddToFunc Popupat "I" CursorMove -1000 -1000 ++ "I" Popup Window-Ops + +#The 'None' line says only do this if no window matching $0 exists. +DestroyFunc MailFunction +AddToFunc MailFunction "I" Next [$0] Iconify -1 ++ "I" Next [$0] focus ++ "I" None [$0] Exec $0 $1 + +DestroyFunc warp-or-run +AddToFunc warp-or-run "I" Next [$0 CirculateHit] Iconify -1 ++ "I" Next [$0 CirculateHit] Focus ++ "I" None [$0] $1 +# Use as + + +# This one moves and then raises the window if you drag the mouse, +# only raises the window if you click, or does a RaiseLower if you double +# click +DestroyFunc "Move-or-Raise" +AddToFunc "Move-or-Raise" "M" Move ++ "M" Raise ++ "C" Raise ++ "D" RaiseLower + +AddToFunc Move-or-Raise2 M Raise ++ M Move ++ D Lower + +AddToFunc PrintFunction I Raise ++ I Exec xdpr -id $w + +# This one moves and then lowers the window if you drag the mouse, +# only lowers the window if you click, or does a RaiseLower if you double +# click +DestroyFunc "Move-or-Lower" +AddToFunc "Move-or-Lower" "M" Move ++ "M" Lower ++ "C" Lower ++ "D" RaiseLower + +# This one moves or (de)iconifies: +DestroyFunc "Move-or-Iconify" +AddToFunc "Move-or-Iconify" "M" Move ++ "D" Iconify ++ "C" Iconify + +# This one resizes and then raises the window if you drag the mouse, +# only raises the window if you click, or does a RaiseLower if you double +# click +DestroyFunc "Resize-or-Raise" +AddToFunc "Resize-or-Raise" "M" Resize ++ "M" Raise ++ "C" Raise ++ "D" RaiseLower + + +# This one maximizes vertically if you click (leaving room for the +# GoodStuff bar at the bottom, or does a full maximization if you +# double click, or a true full vertical maximization if you just +# hold the mouse button down. +DestroyFunc "max_vert_func" +AddToFunc "max_vert_func" "M" Maximize 0 100 ++ "C" Maximize 0 80 ++ "D" Maximize 100 100 + + +# This one maximizes horizontally if you click, or does a full +# maximization if you double click, or a true 80% horizontal +# maximization if you just hold the mouse button down. +DestroyFunc "max_hor_func" +AddToFunc "max_hor_func" "M" Maximize 80 0 ++ "C" Maximize 100 0 ++ "D" Maximize 100 100 + +# This one maximizes if you click, or does a full +# maximization if you double click, or a true 50% maximization if you +# just hold the mouse button down. +DestroyFunc "max_diag_func" +AddToFunc "max_diag_func" "M" Maximize 50 50 ++ "C" Maximize 80 80 ++ "D" Maximize 100 100 + + +# The Focus command no longer raises the window automatically. +# Here is a function that emulates the old Focus behavior. +DestroyFunc focus-and-raise +AddToFunc focus-and-raise "I" Focus ++ "I" Raise ++ "I" WarpToWindow 5p 5p + +DestroyFunc "Goto-Mail" +AddToFunc "Goto-Mail" "I" Desk 0 0 ++ "I" Warp "VM" VM + +# Simulate the Warp function from older fvwm +DestroyFunc Warp +AddToFunc Warp "I" Next $1 Iconify -1 ++ "I" Next $1 focus ++ "I" CursorMove 2 2 + +AddToFunc FocusAndWarp I Focus ++ I WarpToWindow 2p 2p + +AddToFunc DeiconifyFocusAndWarp I Iconify -1 ++ I FocusAndWarp + +AddToFunc ChangeDefaultFocus I Style * $0 ++ I Recapture + +#The "CursorMove" does the trick. I suppose larger values could be +#used to get you to wherever you wanted to be within the window. + +AddToFunc XPMBack "I" Exec xpmroot /usr/local/share/graphics/xpm/$0 +AddToFunc ImageBack "I" Exec xv -root -quit /u/ericding/Pictures/images/$0 + +# AddToFunc Rsh-Func "I" Exec rxterm $0 white:gray30 80x40 $DISPLAY "-cr +# white -title $0 -e ~rod/bin/tcsh -l" + +AddToFunc Iconify-Func "I" Iconify ++ "I" Raise + +DestroyFunc FocusRaise +AddToFunc FocusRaise I Raise ++ I Focus ++ I Iconify off + + +DestroyFunc RestoreWindowGeometry +AddToFunc RestoreWindowGeometry +Read saved-window-geometries Quiet + +DestroyModuleConfig FvwmEvent-NewWindow: * +*FvwmEvent-NewWindow: add_window RestoreWindowGeometry + +AddToFunc StartFunction ++ I Module FvwmEvent FvwmEvent-NewWindow +AddToFunc StartFunction I Module FvwmCommandS +AddToFunc StartFunction ++ I Module FvwmPerl + +DestroyFunc SaveWindowGeometry +AddToFunc SaveWindowGeometry ++ I AddToFunc RestoreWindowGeometry ++ I + I ThisWindow ('$0') ResizeMove $1 $2 $3 $4 ++ I Exec echo "+ I ThisWindow ('$0') ResizeMove $1 $2 $3 $4" >>$[FVWM_USERDIR]/saved-window-geometries + +Key F4 A CS Pick SaveWindowGeometry $[w.name] $[w.x] $[w.y] $[w.width] $[w.height] + +#The plan is this, define a named button in FvwmButtons using Id: +# *FvwmButtons: (Id deskname, Text zero) +#if you use MyGotoDesk instead of GotoDesk, the "zero" in FvwmButtons +#will be automatically replaced with the current desk name. + +AddToFunc MyGotoDesk ++ I GotoDesk $* ++ I PipeRead `echo "SendToModule FvwmButtons ChangeButton deskname Text \ + '\$[desk.name$d]'" + +# AddToFunc MyMove M Move +# Mouse 1 W 4 MyMove + +DestroyFunc Warp-or-Run-Browser +AddToFunc Warp-or-Run-Browser ++ "I" Next ("*Phoenix") Warp-and-Raise ++ "I" TestRc (Match) Break ++ "I" Next ("Galeon") Warp-and-Raise ++ "I" TestRc (Match) Break ++ "I" Next ("Mozilla") Warp-and-Raise ++ "I" TestRc (Match) Break ++ "I" Exec //usr/bin/mozilla + +##### +# Autohide console example: http://dev.gentoo.org/~taviso/screenshots/autohide_console.png +################## +DestroyFunc StartHiddenConsole +AddToFunc StartHiddenConsole ++ I Exec exec rxvt +sb -geometry 144x8+0+0 -name HiddenConsole ++ I Wait HiddenConsole ++ I Next (HiddenConsole) Resize $[vp.width]p 12 ++ I Autohide HiddenConsole 250 0 N + +# XXX: This doesnt change focus, should it? +# Win+H to drop the hidden console down. +DestroyFunc HiddenConsoleKeyBinding +AddToFunc HiddenConsoleKeyBinding ++ I ThisWindow (Shaded) FuncAutoEnter ++ I TestRc (NoMatch) NoWindow FuncAutoEnter + + +DestroyFunc SelectWindow +AddToFunc SelectWindow + + I Focus + + I Raise + + I WarpToWindow 50 50 + +DestroyFunc ScreenDump +AddToFunc ScreenDump ++ I schedule 0 0 exec xwd ++ I schedule 0 ... + +# switches to a window if it is not visible (or not on the current +# page) and which iconifies the window if it is on top on the current +# page (e.g. fully visible). +DestroyFunc FuncFvwmIconifyOrFocusAndRaise +AddToFunc FuncFvwmIconifyOrFocusAndRaise ++ I ThisWindow (Iconic) Iconify off ++ I TestRc (NoMatch) ThisWindow (Raised) Iconify on ++ I ThisWindow (!Iconic) Focus ++ I ThisWindow (!Iconic) Raise + +*FvwmIconMan: action Mouse 1 A sendcommand FuncFvwmIconifyOrFocusAndRaise + +DestroyFunc FullScreen +AddToFunc FullScreen ++ I ThisWindow (!Maximized) Style $n BorderWidth 0 ++ I ThisWindow ( Maximized, !"bluescreen") Style $n BorderWidth 1 ++ I ThisWindow Maximize ++ I ThisWindow (!Maximized) WarpToWindow -5p -5p + +AddToFunc MoveAndGotoPage ++ I Raise ++ I MoveToPage $0 $1 ++ I GotoPage $0 $1 + +#Key Right W CM4 MoveAndGotoPage +1p +0p + +AddToFunc Window-Menu-Func ++ I ThisWindow (HasHandles) Menu Window-Menu Interior 0 0 Close ++ I ThisWindow (!HasHandles) Menu Window-Menu-No-Handles Interior 0 0 Close + +AddToFunc move_to_center ++ I Piperead "echo move $(( ($[vp.width] - $[w.width]) / 2 ))p $(( ($[vp.height] - $[w.height]) / 2 ))p" + +AddToFunc MoveMozilla ++ I WindowID $0 ("*Mozilla*") PipeRead `echo MoveToPage 1 0` + +DestroyFunc SmartStart +AddToFunc SmartStart + + I Next ($0) Iconify off + + I Next ($0) Raise + + I Next (AcceptsFocus, $0) focus + + I None ($0) Exec exec $1 + + +# Auto hide stuff +AddToFunc autohide ++ I ThisWindow ($0) Deschedule $[w.id] ++ I TestRc (!Match) Deschedule -$[w.id] ++ I ThisWindow ($0) ThisWindow (shaded) autohide_show $1 $3 ++ I TestRc (!Match) All ($0, !shaded) autohide_hide $2 $3 + +AddToFunc autohide_show ++ I Schedule $0 -$[w.id] WindowShade $1 off ++ I Schedule $0 -$[w.id] Deschedule $[w.id] ++ I Schedule $0 -$[w.id] Deschedule -$[w.id] + +AddToFunc autohide_hide ++ I Schedule $0 $[w.id] WindowShade $1 on ++ I Schedule $0 $[w.id] Deschedule $[w.id] ++ I Schedule $0 $[w.id] Deschedule -$[w.id] + +AddToFunc StartFunction ++ I Module FvwmAuto FvwmAutohide -menter enter_handler + +#AddToFunc enter_handler +#+ I autohide FvwmButtons 250 500 N +# ^ ^ ^ ^ +# | | | |___ Shade direction (optional) +# | | |________ Hide delay +# | |___________ Show delay +# |_______________________ Unique window name/resource + + + + + + +AddToFunc winame_event ++ I ThisWindow (XTerm) ThisWindow ("*(root@*") Style $n Colorset 1, HilightColorset 7 ++ I ThisWindow (XTerm) ThisWindow ("*(srivasta@*") Style $n Colorset 3, HilightColorset 4 +#*FvwmEvent: window_name winame_event + +#And for the future 2.5.8+ use a more appropriate: +# AddToFunc winame_event +# + I ThisWindow (XTerm) ThisWindow ("*(root@*") WindowStyle Colorset ... +# + I ThisWindow (XTerm) ThisWindow ("*(srivasta@*") WindowStyle Colorset ... + + +AddToFunc SetShadabilityForCertainWindows + + I ThisWindow (Gaim) State 1 + + I ThisWindow (Miag) State 1 + +DestroyFunc StayOnTop-func +AddToFunc StayOnTop-func ++ I Style "$0" StaysOnTop ++ I All ("$0") RecaptureWindow + +DestroyFunc wheel-goes-up +AddToFunc Wheel-goes-up ++ D WindowShade True + +DestroyFunc Wheel-goes-down +AddToFunc Wheel-goes-down ++ D WindowShade False + +DestroyFunc Close-or-kill +AddToFunc Close-or-kill ++ I Raise ++ C Close ++ H Destroy ++ H Beep + +########################################################################## +# Function: Disable ALL buttons +# (This needs to be called when resetting between styles +# with different numbers of buttons) +#========================================================================# +DestroyFunc "RemoveAllButtons" +AddToFunc "RemoveAllButtons" ++ "I" Style "*" NoButton 0, NoButton 1, NoButton 2, NoButton 3, \ + NoButton 4, NoButton 5, NoButton 6, NoButton 7, \ + NoButton 8, NoButton 9 + +DestroyFunc ToggleWindowTitle +AddToFunc ToggleWindowTitle ++ I ThisWindow (State 11) WindowStyle Title ++ I TestRc (!Match) WindowStyle !Title ++ I State 11 toggle + +##### +# You can browse directories and files with the fvwm-menu-directory +# script included with Fvwm, its very configurable (as you might expect!), +# and very useful. +# +# http://www.mail-archive.com/fvwm%40hpc.uh.edu/msg05260.html +################# +DestroyFunc FuncFvwmMenuDirectory +AddToFunc FuncFvwmMenuDirectory ++ I PipeRead 'case "$0" in \ + "$[fvwm_rom_path]"*) myexec="$[fvwm_rom_exec]" \ + mypng=games_puzzles_dice.png;; \ + "$[fvwm_video_path]"*) myexec="$[fvwm_video_exec]" \ + mypng=menu/video.xpm;; \ + "$[fvwm_audio_path]"*) myexec="$[fvwm_audio_exec]" \ + mypng=menu/music.xpm;; \ + "$[fvwm_image_path]"*) myexec="$[fvwm_image_exec]" \ + mypng=menu/viewer.xpm;; \ + esac; \ + fvwm-menu-directory --icon-title menu/folder-open.xpm \ + --icon-app menu/utility.xpm \ + --icon-file ${mypng:-menu/item.xpm} \ + --icon-dir menu/folder.xpm \ + --dir "$0" --xterm exec --exec-file "${myexec:-gvim}"' + +##### +# `Pick` is very handy, if it's obvious which window you're talking about, +# The command is executed immediately within the context of that window. +# +# If it isnt obvious, for example, you select `Move` from the Root menu, the +# cursor becomes a crosshair, and you can select the window you you would like +# to apply the command to by clicking it. +# +# This saves a lot of work, you can use `Pick` with everything that might be +# Called without context and only write one function/menu instead of two. +# +# Note that the Center Window command subtracts (126/2) pixels to make way for my +# Panel. +################# +DestroyMenu FvwmMoveMethods +AddToMenu FvwmMoveMethods ++ "Move to Top" Pick AnimatedMove keep 0p ++ "Move to Left" Pick AnimatedMove 0p keep ++ "Move to Right" Pick PipeRead "echo AnimatedMove $$(($[vp.width] - $[w.width]))p keep" ++ "Move to Bottom" Pick PipeRead "echo AnimatedMove keep $$(($[vp.height] - $[w.height]))p" ++ "" Nop ++ %window.png%"Center Window" Pick PipeRead "echo AnimatedMove $$(((($[vp.width]-$[w.width])/2)-(126/2)))p \ + $$((($[vp.height]-$[w.height])/2))p" ++ "" Nop ++ %hardware_mouse.png%"Pack Up"%alt_sft_up.png% Pick PackWrapperUp ++ %hardware_mouse.png%"Pack Left"%alt_sft_left.png% Pick PackWrapperLeft ++ %hardware_mouse.png%"Pack right"%alt_sft_right.png% Pick PackWrapperRight ++ %hardware_mouse.png%"Pack down"%alt_sft_down.png% Pick PackWrapperDown ++ "" Nop ++ %numbers_counter.png%"Move To Page" Popup MenuPageList ++ "" Nop ++ %hardware_mouse.png%"Interactive Move" Pick Move + +DestroyMenu MenuPageList +AddToMenu MenuPageList ++ "1" Pick MoveToPage 0 0 ++ "2" Pick MoveToPage 1 0 ++ "3" Pick MoveToPage 2 0 ++ "4" Pick MoveToPage 0 1 ++ "5" Pick MoveToPage 1 1 ++ "6" Pick MoveToPage 2 1 ++ "7" Pick MoveToPage 0 2 ++ "8" Pick MoveToPage 1 2 ++ "9" Pick MoveToPage 2 2 + +##### +# Name: PackWindowUp +# Bound: Alt+Shift+Up When a window is active +# Purpose: Interrogate all windows on the current page, find the window with an edge +# closest to active window, and slide the Active window upto that edge, or +# the Page edge, if no window is in the way. +# +# The Wrappers are required to look after the Context while we're testing +# windows. Could also do it with a load of variables, but this is nicer. +# +# See PackWindowLeft for a description of the logic (i know it looks a little +# cryptic). +# +# Sometimes terminals seem to need WindowRefresh, but 99% of the time it just +# works, it creates a little flicker so I'll leave it out until it starts to bug +# me. +# +# Windows are also Raised, you can disable this. +# +################# +DestroyFunc PackWindowUp +AddToFunc PackWindowUp ++ I SetEnv low_w 0 ++ I WindowId $3 Raise ++ I All (CurrentPage !Iconic AcceptsFocus \ + !Shaded) PipeRead "test `expr $[w.y] + $[w.height]` -gt $[low_w] \ + -a `expr $[w.y] + $[w.height]` -lt $0 \ + -a \\( \\( $[w.x] -gt $1 -a $[w.x] -lt `expr $1 + $2` \\) \ + -o \\( $1 -gt $[w.x] -a $1 -lt `expr $[w.x] + $[w.width]` \\) \ + -o \\( $1 -le $[w.x] -a `expr $1 + $2` -ge `expr $[w.x] + $[w.width]` \\) \ + -o \\( $[w.x] -lt $1 -a `expr $[w.x] + $[w.width]` -gt `expr $1 + $2` \\) \ + \\) \ + && echo SetEnv low_w `expr $[w.y] + $[w.height]` \ + || echo Nop" ++ I WindowId $3 AnimatedMove keep $[low_w]p +#+ I WindowId $3 RefreshWindow + +AddToFunc PackWrapperUp I NoWindow PackWindowUp $[w.y] $[w.x] $[w.width] $[w.id] + +##### +# Name: PackWindowDown +# Bound: Alt+Shift+Down When a window is active. +# Purpose: See PackWindowUp. +# +################# +DestroyFunc PackWindowDown +AddToFunc PackWindowDown ++ I SetEnv high_w $[vp.height] ++ I WindowId $3 Raise ++ I All (CurrentPage !Iconic AcceptsFocus \ + !Shaded) PipeRead "test $[w.y] -lt $[high_w] \ + -a $[w.y] -gt `expr $0 + $4` \ + -a \\( \\( $[w.x] -gt $1 -a $[w.x] -lt `expr $1 + $2` \\) \ + -o \\( $1 -gt $[w.x] -a $1 -lt `expr $[w.x] + $[w.width]` \\) \ + -o \\( $1 -le $[w.x] -a `expr $1 + $2` -ge `expr $[w.x] + $[w.width]` \\) \ + -o \\( $[w.x] -lt $1 -a `expr $[w.x] + $[w.width]` -gt `expr $1 + $2` \\) \ + \\) \ + && echo SetEnv high_w $[w.y] \ + || echo Nop" ++ I PipeRead "echo WindowId $3 AnimatedMove keep `expr $[high_w] - $4`p" +#+ I WindowId $3 RefreshWindow + +AddToFunc PackWrapperDown I NoWindow PackWindowDown $[w.y] $[w.x] $[w.width] $[w.id] $[w.height] + +##### +# Name: PackWindowLeft +# Bound: Alt+Shift+Left When a window is active +# Purpose: See PackWindowUp. +# +# The Logic works likes this: +# 1. Set Destination to the Left Edge +# 2. For every window, Run these tests: +# + Is the Window's Right edge further _Right_ than furthest edge seen yet? +# And: + Is it's Right edge Further _Left_ than Target Windows Left edge? (ie, in the way) +# Yes: +# + Does the window start inside Target Window, and end below? +# Or + Does it start above, and end inside? +# Or + Is it the same vertical position/height/size, or start inside and end inside? +# Or + Does it start above, and end below? +# Yes: +# This is the new Destination. +# No: +# Nop +# No: +# Nop +# 3. Move to Destination. +# +################# +DestroyFunc PackWindowLeft +AddToFunc PackWindowLeft ++ I SetEnv left_w 0 ++ I WindowId $3 Raise ++ I All (CurrentPage !Iconic AcceptsFocus \ + !Shaded) PipeRead "test `expr $[w.x] + $[w.width]` -gt $[left_w] \ + -a `expr $[w.x] + $[w.width]` -lt $1 \ + -a \\( \\( $[w.y] -gt $0 -a $[w.y] -lt `expr $0 + $4` \\) \ + -o \\( $[w.y] -lt $0 -a `expr $[w.y] + $[w.height]` -gt $0 \\) \ + -o \\( $[w.y] -ge $0 -a `expr $[w.y] + $[w.height]` -le `expr $0 + $4` \\) \ + -o \\( $[w.y] -lt $0 -a `expr $[w.y] + $[w.height]` -gt `expr $0 + $4` \\) \ + \\) \ + && echo SetEnv left_w `expr $[w.x] + $[w.width]` \ + || echo Nop" ++ I WindowId $3 AnimatedMove $[left_w]p keep +#+ I WindowId $3 RefreshWindow + +AddToFunc PackWrapperLeft I NoWindow PackWindowLeft $[w.y] $[w.x] $[w.width] $[w.id] $[w.height] + +DestroyFunc PackWindowRight +AddToFunc PackWindowRight ++ I SetEnv right_w $[vp.width] ++ I WindowId $3 Raise ++ I All (CurrentPage !Iconic AcceptsFocus \ + !Shaded) PipeRead "test $[w.x] -lt $[right_w] \ + -a $[w.x] -gt `expr $1 + $2` \ + -a \\( \\( $[w.y] -gt $0 -a $[w.y] -lt `expr $0 + $4` \\) \ + -o \\( $[w.y] -lt $0 -a `expr $[w.y] + $[w.height]` -gt $0 \\) \ + -o \\( $[w.y] -ge $0 -a `expr $[w.y] + $[w.height]` -le `expr $0 + $4` \\) \ + -o \\( $[w.y] -lt $0 -a `expr $[w.y] + $[w.height]` -gt `expr $0 + $4` \\) \ + \\) \ + && echo SetEnv right_w $[w.x] \ + || echo Nop" ++ I PipeRead "echo WindowId $3 AnimatedMove `expr $[right_w] - $2`p keep" +#+ I WindowId $3 RefreshWindow + +AddToFunc PackWrapperRight I NoWindow PackWindowRight $[w.y] $[w.x] $[w.width] $[w.id] $[w.height] + +##### +# Name: WheelToggleShade +# Bound: Mouse Buttons 4 and 5 (wheel up and down) on Titlebars +# Purpose: Shade or unshade the window when the Mouse wheel is rolled up or +# down on the Titlebar. Rolling the Wheel up calls the Function with +# argument `True` and rolling it down uses `False`, so rolling the wheel +# down when the window isnt shaded has no effect, which I like :) +# +################# +DestroyFunc WheelToggleShade +AddToFunc WheelToggleShade D WindowShade $0 + +##### +# Name: DestroyOnHold +# Bound: Titlebar Button 2 (X) +# Purpose: When clicked, Raise the window Immediately. +# If the button is pressed and released, Close the Window. If it is pressed +# and held, Destroy it, and issue a Beep to confirm. +# +# There is a 100ms delay before issuing `Close` so I have a chance to see the +# animation when the button changes from ActiveDown to ActiveUp :). +# +################# +DestroyFunc DestroyOnHold +AddToFunc DestroyOnHold I Raise ++ C Schedule 100 Close ++ H Destroy ++ H Beep + + +##### +# Name: Thumbnail +# Purpose: Iconify a window with a reduced screenshot of the application +# Window, looks really cool. +# +# Uses FvwmEvent to remove the Icon when deiconified. +# +# Thumbnailing example: +# +# http://www.fvwm.org/screenshots/desktops/Tavis_Ormandy-desk-1152x864/screenshot.jpg +# +# If you have a slow machine, try changing -scale to -sample, the quality of the Icons +# won't be as good, but they are generated much faster. +# +################## +DestroyFunc Thumbnail +AddToFunc Thumbnail ++ I Raise ++ I SetEnv Icon-$[w.id] $[w.iconfile] ++ I ThisWindow (!Shaded Iconifiable !Iconic) PipeRead \ + "xwd -silent -id $[w.id] | convert -scale $[fvwm_icon_size] -frame 1x1 \ + -mattecolor black -quality 0 xwd:- png:$[HOME]/tmp/icon.tmp.$[w.id].png \ + && echo WindowStyle IconOverride, Icon $[HOME]/tmp/icon.tmp.$[w.id].png \ + || echo Nop" ++ I TestRc (Match) Test (f $[HOME]/icons/$[w.miniiconfile]) PipeRead "composite -geometry +2+4 \ + $[fvwm_image_path]/icons/$[w.miniiconfile] $[HOME]/tmp/icon.tmp.$[w.id].png \ + $[HOME]/tmp/icon.tmp.$[w.id].png && echo Nop \ + || echo Beep" ++ I Iconify + +# XXX: No need for NoIconOverride. +DestroyFunc DeThumbnail +AddToFunc DeThumbnail ++ I PipeRead "echo WindowStyle Icon \\$\\[Icon-$[w.id]\\]" ++ I UnsetEnv Icon-$[w.id] ++ I Exec exec rm -f $[HOME]/tmp/icon.tmp.$[w.id].png + +*FvwmEvent: deiconify DeThumbnail + +DestroyFunc IconifyWithScreenshot +AddToFunc IconifyWithScreenshot ++ I echo "Iconnify running" ++ I Raise ++ I PipeRead "import -geometry 64 -frame -resize 64 -silent -window $[w.id] $[HOME]/.fvwm/icon.tmp.$[w.id].png && echo WindowStyle IconOverride, Icon $[HOME]/.fvwm/icon.tmp.$[w.id].png || echo Nop" ++ I Iconify + +# FIXME: Make this more useful. +# XXX: This doesnt do much yet, you can play with it if you like. +# Example: http://dev.gentoo.org/~taviso/fvwm_expose.png +DestroyFunc FvwmExpose +AddToFunc FvwmExpose ++ I AddToMenu FvwmExposeMenu ".: e x p o s e :." Title ++ I All (!Iconic !Shaded CurrentPage AcceptsFocus)\ + PipeRead "echo Raise; \ + xwd -silent -id $[w.id] | convert -scale $[fvwm_icon_size] -quality 0 xwd:- \ + png:$[HOME]/tmp/icon.exp.$[w.id].png \ + && echo AddToMenu FvwmExposeMenu \ + %$[HOME]/tmp/icon.exp.$[w.id].png%\\\'\"$[w.name]\"\\\' WindowID $[w.id] WarpToWindow 50 50 \ + && echo AddToMenu FvwmExposeMenu \\\"\\\" Nop \ + || Nop" ++ I Popup FvwmExposeMenu ++ I DestroyMenu FvwmExposeMenu ++ I Exec exec rm -f $[HOME]/tmp/icon.exp.* + +# Fvwm uses this function when selecting windows from the WindwList command +# you can make this function do any thing you like, it is executed in the context +# of the selected window. +AddToFunc WindowListFunc I WarpToWindow 50 50 + +DestroyFunc FuncAutoEnter +AddToFunc FuncAutoEnter I Autohide HiddenConsole 250 500 N + +# Example: http://dev.gentoo.org/~taviso/screenshots/browsewall.png +# XXX: Slooooow at first run. +DestroyFunc WallpaperBrowser +AddToFunc WallpaperBrowser ++ I AddToMenu WallpaperBrowserMenu DynamicPopDownAction DestroyMenu WallpaperBrowserMenu ++ I PipeRead 'cd $[fvwm_wallpaper_dir]; \ + test ! -d "$[fvwm_wallpaper_dir]/.thumbs" && mkdir "$[fvwm_wallpaper_dir]/.thumbs"; echo >&2 "dir = $[fvwm_wallpaper_dir]/.thumbs"; \ + for i in "$[fvwm_wallpaper_dir]/"*; do \ + test -f "$[fvwm_wallpaper_dir]/.thumbs/${i##*/}" \ + -a "${i}" -ot "$[fvwm_wallpaper_dir]/.thumbs/${i##*/}" || { \ + convert -quality 0 -scale 32 "${i}" "png:$[fvwm_wallpaper_dir]/.thumbs/${i##*/}" 2>/dev/null \ + || continue; \ + }; \ + printf "+ %%\\"%s\\"%%\\"%s\\" Exec exec fvwm-root -r %s\\n" \ + "$[fvwm_wallpaper_dir]/.thumbs/${i##*/}" "${i##*/}" "${i}"; \ + done' + +#### +# These functions modified from the functions provided in the fvwm FAQ. +# http://www.fvwm.org/documentation/faq/#7.17 +################# +AddToFunc Autohide ++ I ThisWindow ($0) Deschedule $[w.id] ++ I TestRc (!Match) Deschedule -$[w.id] ++ I ThisWindow ($0) ThisWindow (shaded) AutohideShow $1 $3 ++ I TestRc (!Match) All ($0, !shaded) AutohideHide $2 $3 + +AddToFunc AutohideShow ++ I Schedule $0 -$[w.id] WindowShade $1 off ++ I Schedule $0 -$[w.id] Raise ++ I Schedule $0 -$[w.id] Deschedule $[w.id] ++ I Schedule $0 -$[w.id] Deschedule -$[w.id] + +AddToFunc AutohideHide ++ I Schedule $0 $[w.id] WindowShade $1 on ++ I Schedule $0 $[w.id] Deschedule $[w.id] ++ I Schedule $0 $[w.id] Deschedule -$[w.id] + +DestroyFunc . +AddToFunc . ++ I SendToModule FvwmPerl preprocess -c -- $* + +DestroyFunc SendWindowToPage +AddToFunc SendWindowToPage ++ I SetEnv LAST_WIN_ID $[w.id] ++ I . FvwmButtons -g 144x96+%{$[pointer.x]-$[page.nx]*36-34}%+%{$[pointer.y]-$[page.ny]*24-20}% -transient GridButtons + +DestroyFunc MoveLastWindowToPage +AddToFunc MoveLastWindowToPage ++ I WindowId $[LAST_WIN_ID] MoveToPage $0 $1 + +DestroyFunc CenterViewportOnWindow +AddToFunc CenterViewportOnWindow ++ I FlipFocus ++ I WarpToWindow 50 50 ++ I PipeRead "echo Scroll $$((((-$[vp.width]/2)+$[pointer.x])))p $$(((-($[vp.height]/2)+$[pointer.y])))p + +# To warp to the top left corner of a window without switching pages +# you can use + +AddToFunc my_warptowindow ++ I WindowId root 0 WarpToWindow $[w.x]p $[w.y]p + +DestroyFunc SnapshotAllWindows +AddToFunc SnapshotAllWindows ++ I GotoDesk 0 ++ I GotoPage 0 0 ++ I PipeRead `import -window root /tmp/desktop-000.png >/dev/null` ++ I GotoPage 0 1 ++ I PipeRead `import -window root /tmp/desktop-001.png >/dev/null` ++ I GotoPage 1 0 ++ I PipeRead `import -window root /tmp/desktop-010.png >/dev/null` ++ I GotoPage 1 1 ++ I PipeRead `import -window root /tmp/desktop-011.png >/dev/null` ++ I GotoDesk 1 ++ I GotoPage 0 0 ++ I PipeRead `import -window root /tmp/desktop-100.png >/dev/null` ++ I GotoPage 0 1 ++ I PipeRead `import -window root /tmp/desktop-101.png >/dev/null` ++ I GotoPage 1 0 ++ I PipeRead `import -window root /tmp/desktop-110.png >/dev/null` ++ I GotoPage 1 1 ++ I PipeRead `import -window root /tmp/desktop-111.png >/dev/null` + + + +DestroyFunc Screenshot +AddToFunc Screenshot ++ I PipeRead `for ((x=0; x < $[desk.pagesx]; x++)); do \ + for ((y=0; y < $[desk.pagesy]; y++)); \ + do \ + echo GotoPage ${x} ${y}; \ + xwd -root -silent -out $[FVWM_USERDIR]/page_${x}_${y}.xwd; \ + done; \ + done; \ + montage -geometry $[vp.width]x$[vp.height] -tile \ + $[desk.pagesx]x$[desk.pagesy] $[FVWM_USERDIR]/page_*_*.xwd \ + png:$[HOME]/screenshot.png; rm -f $[FVWM_USERDIR]/page_*_*.xwd ` + +Key F12 A S Screenshot + --- fvwm-2.5.27.ds.orig/debian/manoj/pre.hook +++ fvwm-2.5.27.ds/debian/manoj/pre.hook @@ -0,0 +1,209 @@ + +#===================================================== 2. Fonts +# 2. Fonts +# Now the fonts - one for menus, another for window titles, another +# for icons changing the title font automatically adjusts the title +# bar height. +# !Font -*-times-medium-i-*-*-*-120-*-*-*-*-*-* (new command=MenuStyle) +# WindowFont -adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-*-* +# !PagerFont -*-times-medium-r-*-*-*-80-*-*-*-*-*-* (use FvwmPager module) +IconFont fixed + + + +#===================================================== 3. paths +# 3. Module path and paths to the icons +# +# ModulePath is a colon-separated list, just like regular unix PATH +# Set the directories to look in for Image files. +ImagePath /usr/share/icons:/usr/share/pixmaps:/usr/share/icons/wm-icons +ImagePath +:/usr/X11R6/include/X11/pixmaps/:/usr/X11R6/include/X11/bitmaps/ +ImagePath +:/usr/include/X11/bitmaps/:/usr/local/include/pixmaps/ +ImagePath +:/usr/local/graphics/xpm/fvwm:/usr/local/graphics/xpm/ +ImagePath +:/usr/local/graphics/xpm/3d_pixmaps_1.0/3dpixmaps/ +ImagePath +:/usr/local/include/bitmaps/:/usr/local/graphics/images/xpm + + +##### +# You can set simple options like this, using variables. +# If you need something more complex, read the man pages for FvwmCPP, +# FvwmM4 or FvwmPerl. +################# +SetEnv fvwm_video_path $[HOME]/media/video +SetEnv fvwm_video_exec xine + +SetEnv fvwm_audio_path $[HOME]/media/audio +SetEnv fvwm_audio_exec "alsaplayer -l 90" + +SetEnv fvwm_image_path $[HOME]/media/images +SetEnv fvwm_image_exec display + +SetEnv fvwm_rom_path $[HOME]/lib/ +SetEnv fvwm_rom_exec + +SetEnv fvwm_wallpaper_dir $[fvwm_image_path]/wallpaper +SetEnv fvwm_wallpaper0 $[fvwm_wallpaper_dir]/gothic-angel.png +SetEnv fvwm_wallpaper1 $[fvwm_wallpaper_dir]/insodus.png + +##### +# If you use Thumbnails, how big would you like the Icons to be? +# Try one of these, from tiny to large: 32, 64, 96, 128 +################# +SetEnv fvwm_icon_size 64 + + + +# +# Section: Various global settings +# +# These settings are personal. If you need to modify them, do so in post.hook. +# +# +# DeskTopSize sets the size of the desktop in units of physical screen +# `pages'. I prefer to use separate desktops instead of pages, but +# many reasonable people do it the other way. My reason is that this +# makes it possible to have different backgrounds when changing the +# workspace. +# + +##### +# http://www.fvwm.org/documentation/faq/#5.5 +################# +IgnoreModifiers L25 + +#===================================================== 5. miscellaneous +# 5. miscellaneous +# EdgeScroll horizontal vertical +# Sets the percentage of a page to scroll when the cursor is on the edge +# of the screen. +# flip by whole pages on the edge of the screen. +EdgeScroll 100 100 + +##### +# You can automatically move the viewport into adjacent pages when the pointer +# hits the screen edge, + +# EdgeResistance scrolling moving +# Sets how hard it is to change the desktop viewport +# scrolling is in milliseconds +# moving is in pixels (how far a window's edge must move to move off-screen +# +# A modest delay before flipping pages seems to be nice... +# I thresh in a 50 pixel Move-resistance too, just so people +# can try it out. +EdgeResistance 250 50 + +# EdgeThickness controls edge scrolling and EdgeCommand. Set the +# thickness of the edge to 2 +EdgeThickness 2 + +# OpaqueMoveSize percentage +# OpaqueMoveSize allows you to stop Large windows from being moved opaquely +# This option tells fvwm the maximum size window that it should move +# with contents intact (ie, not 'rubber-banding') You should keep this +# low if you don't have good video hardware. +# if the window occupies less than N% of the screen, +# then opaque move is used. 0 <= N <= 100 +OpaqueMoveSize 50 + +# SnapAttraction lets nearby windows snap together, or snap to edges so that they +# are easier to align on your desktop, The default is off, if you set it too large +# it's annoying as hell, +# Make our windows snap-up against other windows and make icons snap +# up against other icons +SnapAttraction 20 SameType + + +##### +# Set up the virtual desktop and pager +# +# Desktop [Horizontal]x[vertical] Defines the virtual desktop size, +# 1x1 = one physical screen size (no virtual desktop +# Use 4 pages per desktop, arranged in a square, like this: +# +# +-----+-----+ +# | | | +# +-----+-----+ +# | | | +# +-----+-----+ +################# +DeskTopSize 2x2 +# for pager in bottom right +#! PagerBackColor SlateGrey (use FvwmPager module) +#! PagerForeColor SlateBlue4 (use FvwmPager module) + +## +# set XORvalue to something visible. This sets the coloration of the +# 'rubber-band' window-borders when moving and resizing windows. +XORvalue 16777215 # (It's the decimal equivalent of 0xffffff.) +#XORvalue 3772 # Rubberbands swap 3 lsbs +#TitleStyle raised + +###### +# Fvwm uses a default ClickTime of 150ms, which is way too short for me. +# A Click that lasts <= ClickTime is considered a `Click` in functions, +# > ClickTime is a `Hold`. +################# +# ClickTime 550 + +# +EwmhBaseStruts 0 100 0 0 + + +###### +# Use an arrow rather than the `X` cursor on the root window. +################# +# CursorStyle root top_left_arrow + +# Set up the cursors (Cursor command withdrawn) +# Cursor 0 # Position +#Cursor 1 132 # Title top_left_arrow +#Cursor 3 60 # buttons hand_2 +#Cursor 4 142 # move trek +#Cursor 5 150 # wait watch +#Cursor 6 110 # menu sb_left_arrow +#Cursor 7 38 # select dot +#Cursor 8 88 # destroy pirate + +######################## ICON STUFF ############################## +# Auto Place Icons is a nice feature.... +# Area of screen where icons are dumped (left top right bottom) +# First go along RHS... +# Style "*" IconBox -100 +140 -1 -40 +# ...next go along the bottom: +#! IconBox +10 -40 +828 -1 (multiple iconboxes no longer possible) + + + +# +# Section: Init and restart functions +# +#===================================================== 8. Special functions +# 8. Special functions +# Stuff to do at start-up + + +DestroyMenu StartFunction +AddToFunc StartFunction +Read init.hook +Read init-restart.hook +Read restart.hook + + +AddToFunc StartFunction ++ I Module FvwmEvent ++ I Module FvwmCommandS + +ModuleSynchronous FvwmM4 -lock screendiffs.hook + +DestroyFunc SessionInitFunction +AddToFunc SessionInitFunction ++ I Module FvwmBanner + +DestroyFunc SessionRestartFunction +AddToFunc SessionRestartFunction ++ I Nop + +DesktopName 0 Work +DesktopName 1 Personal + --- fvwm-2.5.27.ds.orig/debian/manoj/.fvwm2rc +++ fvwm-2.5.27.ds/debian/manoj/.fvwm2rc @@ -0,0 +1,52 @@ +#!/usr/bin/fvwm + +Read colorsets + +# Section: pre.hook +# +# Use pre.hook for things that need to be done before anything else. +# For example, a PixmapPath might be defined here. +# +Read pre.hook + +Read functions.def + +# +# Section: Menus +# +# This section defines a small menu structure. The main menu contains +# some typical entries, and uses a hook (main-menu.hook) to allow the +# user to add new entries. Most of the default entries are submenus, +# which are also defined here. + +# +# Read in system and user menu definitions. +# +Read "headlines" +Read /etc/X11/fvwm/menudefs.hook +Read menudefs.hook +FvwmM4 m4menus.hook +Read post_menu.hook + +Read buttons.hook +Read binding.hook + +#===================================================== E. modules +Read FvwmButtons.hook +Read FvwmModules.hook +#Read FvwmAnimate.hook +Read FvwmAuto.hook + +# +# Section: post.hook +# +# Use post.hook to force things that may have been changed earlier, for +# example, key bindinds. +# + +Read post.hook +Read style.hook + +#===================================================== 7. icons +# 7. icons +Read icons --- fvwm-2.5.27.ds.orig/debian/manoj/FvwmForm-QuitVerify +++ fvwm-2.5.27.ds/debian/manoj/FvwmForm-QuitVerify @@ -0,0 +1,13 @@ +DestroyModuleConfig FvwmForm-QuitVerify: * +*FvwmForm-QuitVerify: GrabServer +*FvwmForm-QuitVerify: WarpPointer +*FvwmForm-QuitVerify: Command Beep +*FvwmForm-QuitVerify: Line center +*FvwmForm-QuitVerify: Text "Do you really want to logout?" +*FvwmForm-QuitVerify: Line expand +*FvwmForm-QuitVerify: Button quit "Logout" ^M +*FvwmForm-QuitVerify: Command Quit +*FvwmForm-QuitVerify: Button restart "Restart" ^R +*FvwmForm-QuitVerify: Command Restart +*FvwmForm-QuitVerify: Button quit "Cancel" ^[ +*FvwmForm-QuitVerify: Command Nop --- fvwm-2.5.27.ds.orig/debian/manoj/buttons.hook +++ fvwm-2.5.27.ds/debian/manoj/buttons.hook @@ -0,0 +1,110 @@ + +#===================================================== B. titlebar buttons +# B. titlebar buttons +# When the Buttons are ActiveDown (Pressed), The shadow vector is not drawn. +# +# Note that some Title/Button Styles are destructive. +# +# Active Window TitleBar has a Vertical Gradient of White (at the top) to +# Black at the bottom where the buttons are, and a gradient of Blue to black over +# the title, using 16 shades (one for each pixel, so looks like a nice, smooth transition). +# +# Inactive uses a tinted transparent colorset, with white text and buttons. +# +# Vectors are basically just a set of co-ordinates, each button is a grid of 100x100 points +# (or you can use pixels..it's up to you), following each vector you must specify a line type: +# +# @0 Shadow (sh) +# @1 Hilight (hi) +# @2 Background (bg) +# @3 Foreground (fg) +# @4 Invisible (just move the pointer, dont draw anything) +# +# +# begin 644 title_back.png +# MB5!.1PT*&@H````-24A$4@````$````1"`8````3````"7!(67,```L3```+$P$`FIP8````!W1)344'U`,7##(;H1J% +# ME@```!UT15AT0V]M;65N=`!#3````"7!(67,```L3```+$P$`FIP8````!W1)344'U`,7##4`9#[: +# MO0```!UT15AT0V]M;65N=`!#(`(P#7O$CI!U5BA4`````245.1*Y"8((` +# ` +# end +# +# man uudecode if you're not sure what to do with these :) +# +# If you would like an example of a TitleBar gradient: +# TitleStyle Active ( VGradient 16 1 #5a8ade 50 #000000 -- Flat ) +# +# More complex styles can be achieved using the MultiPixmap feature, see the +# man page for details. +# +# ButtonStyle and TitleStyle are destructive, ie all other TitleStyles +# before them will get overridden. +# +# AddButtonStyle and AddTitleStyle are not destructive (mostly), so you can +# stack multiple styles (pixmaps, vectors, etc) on top of each other to make +# some nice effects. +# +# Title bar Buttons can also be MiniIcons, this can look nice, there +# is an example below commented out. + +# Change the Maximize and iconify buttons to up and down triangles. + +# double headed arrow (i use it to maximise window vertically) +ButtonStyle 3 11 30x30@1 50x10@1 70x30@0 55x30@0 55x70@0 70x70@1 50x90@0 30x70@0 45x70@1 45x30@1 30x30@0 + +# double headed arrow sideways +ButtonStyle 5 11 30x30@1 10x50@1 30x70@0 30x55@0 70x55@0 70x70@1 90x50@0 70x30@0 70x45@1 30x45@1 30x30@0 + +# double headed arrow diagonally +ButtonStyle 7 11 10x10@1 40x10@1 25x20@0 80x70@1 90x60@1 90x85@0 60x85@0 70x75@1 20x30@0 10x40@0 10x10@1 + +# resize +ButtonStyle 9 13 10x0@1 80x0@1 80x10@1 80x80@0 0x80@0 0x60@1 10x65@1 70x65@0 70x0@0 55x0@1 55x10@1 55x55@0 10x55@0 + + +# An X shaped button +#ButtonStyle 2 13 26x29@1 34x21@1 50x35@1 70x21@1 79x29@1 63x48@0 79x65@1 70x75@0 50x61@0 34x75@0 26x65@0 44x48@1 26x29@0 +# Another X shaped Button +ButtonStyle 2 16 20x20@1 30x20@1 50x40@1 70x20@1 80x20@1 80x30@0 60x50@0 80x70@0 80x80@0 70x80@0 50x60@0 30x80@0 20x80@0 20x70@0 40x50@1 20x30@1 + +# Iconify square (big box cross by an arrow to a little box in the +# opposite colour) +ButtonStyle 4 14 20x20@1 20x70@1 70x70@0 70x20@0 20x20@1 60x60@0 60x50@0 60x60@0 50x60@0 60x60@0 60x80@0 80x80@0 80x60@0 60x60@0 + +# Lower window +ButtonStyle 6 Vector 10 45x65@2 45x75@0 20x75@0 20x50@1 45x50@1 45x65@0 75x65@3 75x25@3 35x25@3 35x47@3 + +# Shade button +ButtonStyle 8 5 25x45@1 75x45@1 75x55@1 25x55@0 25x45@1 +#AddButtonStyle 8 Active Vector 9 40x40@2 45x35@2 55x35@2 60x40@2 60x45@2 50x50@2 50x55@2 50x65@4 50x65@2 -- Flat +#AddButtonStyle 8 InActive Vector 9 40x40@3 45x35@3 55x35@3 60x40@3 60x45@3 50x50@3 50x55@3 50x65@4 50x65@3 -- Flat +#AddButtonStyle 8 AllUp Vector 7 40x45@1 45x40@1 55x40@1 60x50@4 50x60@1 50x75@4 50x75@1 -- Flat +#AddButtonStyle All Active Vector 9 80x60@4 80x40@2 60x20@2 40x20@2 20x40@2 20x60@2 40x80@2 60x80@2 80x60@2 -- Flat +#AddButtonStyle All Inactive Vector 9 80x60@4 80x40@2 60x20@2 40x20@2 20x40@2 20x60@2 40x80@2 60x80@2 80x60@2 -- Flat + +# Stick button +ButtonStyle 0 12 10x23@0 90x23@0 90x28@0 10x28@1 10x47@1 90x47@0 90x52@0 10x52@1 10x70@2 90x70@0 90x76@0 10x76@1 + +# up triangles +# ButtonStyle 8 4 50x35@1 65x65@0 35x65@0 50x35@1 +# ButtonStyle 8 Vector 4 50x30@1 70x70@0 30x70@0 50x30@1 +# down triangle +# ButtonStyle 6 4 50x65@1 35x35@1 65x35@1 50x65@0 +# Raise window +# ButtonStyle 8 Vector 10 45x65@2 45x75@3 20x75@3 20x50@3 35x50@3 35x65@1 35x25@1 75x25@1 75x65@0 35x65@0 + +# These two vectors draw a circle around the vectors above, uncomment +# them and see what you think. +#+ AddButtonStyle All Active Vector 9 80x60@4 80x40@2 60x20@2 40x20@2 20x40@2 20x60@2 40x80@2 60x80@2 80x60@2 -- Flat +#+ AddButtonStyle All Inactive Vector 9 80x60@4 80x40@2 60x20@2 40x20@2 20x40@2 20x60@2 40x80@2 60x80@2 80x60@2 -- Flat + --- fvwm-2.5.27.ds.orig/debian/manoj/restart.hook +++ fvwm-2.5.27.ds/debian/manoj/restart.hook @@ -0,0 +1,2 @@ +# Stuff to be done when we re-start fvwm + --- fvwm-2.5.27.ds.orig/debian/manoj/FvwmButtons.hook +++ fvwm-2.5.27.ds/debian/manoj/FvwmButtons.hook @@ -0,0 +1,118 @@ + +#===================================================== E. modules +#_____________________________________________________ E.1 FvwmButtons +# E.1 FvwmButtons +KillModule FvwmButtons + +*FvwmButtonsBoxSize smart +*FvwmButtonsRows 5 + +*FvwmButtonsPadding 1 2 +*FvwmButtonsGeometry -1+1 + +# We could set a geomettry as well: +# *FvwmButtonsGeometry 1280x32+0-0 +# forbid resizing +# *FvwmButtonsBoxSize fixed + +# Define the buttons to use..... + +*FvwmButtons(Container(Rows 5, Frame 3, Padding 1 2)) + +# The leftmost 4 buttons (next,prev,lower,raise) +*FvwmButtons(4x4,Container(Colorset 23, \ + Rows 4,Frame 3, Padding 2 4)) +*FvwmButtons(1x2,Title Next, Icon arrow.xpm Action "Desk 1 0") +*FvwmButtons(1x2,Title Prev, Icon arrowb.xpm Action "Desk -1 0") +*FvwmButtons(1x2,Title Lower, Icon Down, Action Lower) +*FvwmButtons(1x2,Title Raise, Icon Up, Action Raise) +*FvwmButtons(End) + +# Add in the pager .... +*FvwmButtons(8x4,Container(Rows 4,Frame -3, Padding 2 4)) +*FvwmButtons(8x4, Swallow(UseOld) "FvwmPager" `FvwmPager 0 1` Frame -3) +*FvwmButtons(End) + +*FvwmButtons(18x4,Container(Colorset 23,Rows 4, Frame -4, Padding 2 4)) +*FvwmButtons(18x1,Frame -4, Swallow(UseOld,NoKill) "xticktalk" \ + `Exec nice -15 xticktalk -before -approximate -fg $[fg.cs13] -bg $[bg.cs13] \ + -fn '-adobe-times-bold-r-*-*-20-*-*-*-*-*-*-*' -geometry -1500-1500&`) + + +*FvwmButtons(6x3,Container(Colorset 23, \ + Rows 3,Frame 2, Padding 2 4)) +*FvwmButtons(3x3,Title Wth,Swallow(UseOld,NoKill) "wmWeather" \ + `Exec nice -15 wmWeather -s KBNA &`) +*FvwmButtons(3x3,Title Mon,Swallow(UseOld,NoKill) "wmmon" \ + `Exec nice -19 wmmon &`) +*FvwmButtons(End) + +*FvwmButtons(12x3,Container(Colorset 23,Rows 3)) +*FvwmButtons(12x1,Frame -4, Swallow(UseOld,NoKill) "xclock" \ + `Exec nice xclock -digital -padding 0 -bg $[bg.cs13] -update 5 \ + -fn '-adobe-times-bold-r-*-*-20-*-*-*-*-*-*-*' -geometry -1500-1500&`) + + +*FvwmButtons(6x2,Frame -4, Swallow(UseOld,NoKill) "xload" \ + `Exec nice -15 xload -label $HOSTDISPLAY -fg $[fg.cs13] \ + -bg $[bg.cs13] -geometry -1500-1500 -fn '-adobe-courier-*-r-normal--12-120-75-75-m-0-iso8859-1' &`) +*FvwmButtons(2x2,Frame -4, Swallow(UseOld,NoKill) "oclock" \ + `Exec nice oclock -jewel DarkBlue -minute $[fg.cs13] \ + -hour $[fg.cs13] -geometry -1500-1500 -bg $[bg.cs13] &`) + +*FvwmButtons(3x2,Swallow(UseOld,NoKill,Respawn) "wmifs" \ + `Exec nice wmifs -w `) +*FvwmButtons(2x2,Fore $[fg.cs13],Frame 3,Title Root, Icon supermn1.xpm, \ + Action `Exec "Root" exec uxterm -fg $[fg.cs31] -bg $[bg.cs31] \ + -T Root -e /bin/su -c '/bin/bash -rcfile \ + "~srivasta/.rootrc" -i' root&`) + +*FvwmButtons(End) + +*FvwmButtons(End) + +# Now come the bottom row buttons: +*FvwmButtons(30x1,Container(Colorset 23, Rows 1)) +*FvwmButtons(4x1, Title Utils, Action "Popup Utilities") +*FvwmButtons(4x1, Title Window, Action "Popup WinOps" ) +*FvwmButtons(4x1, Title Misc, Action "Function general_ops_func") +*FvwmButtons(18x1,Size 395 20,Swallow(UseOld,NoKill,Respawn) "xbuffy" \ + `Exec xbuffy -geometry 388x20 -bg $[bg.cs12] -fg $[fg.cs12] -fill -center -horiz -boxfile ~/etc/xbuffy -fn '-adobe-courier-*-r-normal--12-120-75-75-m-0-iso8859-1' &`) +*FvwmButtons(End) + + +*FvwmButtons(End) + +##########*FvwmButtons(2x3,Title CPU,Swallow(UseOld,NoKill) "wmMoonClock" \ +########## `Exec nice -19 wmMoonClock -lat 30.45 -lon 88.18 &`) +######## `Exec nice dctrl -iconic -control-window &`) +#####*FvwmButtons(16x1,Size 378 20,Swallow(UseOld,NoKill,Respawn) "xmultibiff" \ +##### `Exec xmultibiff -geometry 370x20 -bg Gray17 -fg CornSilk +##### -mail +##### ~/var/spool/mail/{important,admin,gcif,gcifcases,digital,debian.spool,consult,bcast} +##### &`) +######*FvwmButtons(2x2,Swallow(UseOld,NoKill,Respawn) "dctrlIcon" \ +###### `Exec ~/bin/getdctrl `) + + +########## PANEL +#*FvwmButtonsPanel WinOps +#*FvwmButtonsBack bisque2 +#*FvwmButtonsGeometry -3-3 +#*FvwmButtonsColumns 1 + +#*FvwmButtons(Title Resize ,Icon resize.xpm ,Action Resize) +#*FvwmButtons(Title Move ,Icon arrows2.xpm,Action Move ) +#*FvwmButtons(Title Lower ,Icon Down ,Action Lower ) +#*FvwmButtons(Title Raise ,Icon Up ,Action Raise ) +#*FvwmButtons(Title Iconify,Icon Iconify ,Action Iconify) +#*FvwmButtons(Title Stick ,Icon Stick ,Action Stick ) + +########## PANEL +#*FvwmButtonsPanel Tools +#*FvwmButtonsBack bisque2 +#*FvwmButtonsGeometry -1-1 +#*FvwmButtonsColumns 1 + +#*FvwmButtons(Title Kill ,Icon bomb.xpm ,Action Destroy) +#*FvwmButtons(Title Kill ,Icon bomb.xpm ,Action Destroy) --- fvwm-2.5.27.ds.orig/debian/manoj/m4menus.hook +++ fvwm-2.5.27.ds/debian/manoj/m4menus.hook @@ -0,0 +1,52 @@ +#===================================================== 1. M4 macros +# 1. M4 macros + +undefine('include') +changequote({[,]}) +define(stripquote, {[substr(substr($1,1), 0, index(substr($1,1),'))]}) +define(XSIZE, ifelse(CLIENTHOST, `calidity', 12, CLIENTHOST, `glaurung', 16, 16))dnl +define(YSIZE, ifelse(CLIENTHOST, `calidity', 9, CLIENTHOST, `glaurung', 12, 12))dnl + +define(XPIX, eval(stripquote(WIDTH) / XSIZE))dnl +define(YPIX, eval(stripquote(HEIGHT) / YSIZE))dnl + +define(xsize, {[eval((1000 * $1 / stripquote(WIDTH) + 5) / 10)]}) +AddToMenu "m4-Settings" "M4 Settings for fvwm FVWM_VERSION" Title ++ "{[TWM_TYPE=]}TWM_TYPE" Nop ++ "{[FVWM_VERSION=]}FVWM_VERSION" Nop ++ "{[FVWMDIR=]}FVWMDIR" Nop ++ "{[CMD_OPTIONS=]}CMD_OPTIONS" Nop ++ "{[FVWM_MODULEDIR=]}FVWM_MODULEDIR" Nop ++ "{[FVWM_USERDIR=]}FVWM_USERDIR" Nop ++ "Hosts Info" Title ++ "{[SERVERHOST=]}SERVERHOST" Nop ++ "{[CLIENTHOST=]}CLIENTHOST" Nop ++ "{[HOSTNAME=]}HOSTNAME" Nop ++ "{[OSTYPE=]}OSTYPE" Nop ++ "{[SESSION_MANAGER=]}SESSION_MANAGER" Nop ++ "User Info" Title ++ "{[USER=]}USER" Nop ++ "{[HOME=]}HOME" Nop ++ "Vendor Info" Title ++ "{[VENDOR=]}VENDOR" Nop ++ "{[VERSION=]}VERSION" Nop ++ "{[RELEASE=]}RELEASE" Nop ++ "{[REVISION=]}REVISION" Nop ++ "{[OPTIONS=]}OPTIONS" Nop ++ "Screen Size and resolution" Title ++ "{[WIDTH=]}WIDTH" Nop ++ "{[HEIGHT=]}HEIGHT" Nop ++ "{[X_RESOLUTION=]}X_RESOLUTION" Nop ++ "{[Y_RESOLUTION=]}Y_RESOLUTION" Nop ++ "{[XSIZE=]}XSIZE" Nop ++ "{[YSIZE=]}YSIZE" Nop ++ "{[XPIX=]}XPIX" Nop ++ "{[YPIX=]}YPIX" Nop ++ "Color and stuff" Title ++ "{[CLASS=]}CLASS" Nop ++ "{[COLOR=]}COLOR" Nop ++ "{[PLANES=]}PLANES" Nop ++ "{[BITS_PER_RGB=]}BITS_PER_RGB" Nop + + + --- fvwm-2.5.27.ds.orig/debian/manoj/README +++ fvwm-2.5.27.ds/debian/manoj/README @@ -0,0 +1,12 @@ +This is complete working setup that I use (it may not be as pretty as +some, but it demonstrates most of the common techniques used in fvwm, +and has a working themable colorset setup. + +The wall paper was taken from the GPL's enlightment theme found at +http://download.freshmeat.net/themes/darkalloy/, and the icons are +mostly from the package wm-icons. + +Manoj Srivastava + +Copyright (c) 2004 Manoj Srivastava, and distributed under the terms +of the GNU General Public License, version 2. --- fvwm-2.5.27.ds.orig/debian/manoj/FvwmAnimate.hook +++ fvwm-2.5.27.ds/debian/manoj/FvwmAnimate.hook @@ -0,0 +1 @@ +# This file created by FvwmAnimate --- fvwm-2.5.27.ds.orig/debian/manoj/FvwmForm-Form +++ fvwm-2.5.27.ds/debian/manoj/FvwmForm-Form @@ -0,0 +1,97 @@ +# -*- Mode: fvwm -*- +DestroyModuleConfig FvwmForm-Form: * +*FvwmForm-Form: WarpPointer +*FvwmForm-Form: Line center +*FvwmForm-Form: Text "FvwmForm Set Form Defaults:" +*FvwmForm-Form: Line left +*FvwmForm-Form: Text "" +*FvwmForm-Form: Line left +*FvwmForm-Form: Text "Font for text: " +*FvwmForm-Form: Line left +*FvwmForm-Form: Text "Font for input: " +*FvwmForm-Form: Line left +*FvwmForm-Form: Text "Font for button:" +*FvwmForm-Form: Line left +*FvwmForm-Form: Text "Color of text f/g: " +*FvwmForm-Form: Input Fore 15 "Wheat" +*FvwmForm-Form: Text "b/g:" +*FvwmForm-Form: Input Back 15 "Gray50" +*FvwmForm-Form: Text "colorset:" +*FvwmForm-Form: Input Colorset 5 "-1" +*FvwmForm-Form: Line left +*FvwmForm-Form: Text "Color of buttons f/g:" +*FvwmForm-Form: Input ItemFore 15 "Black" +*FvwmForm-Form: Text "b/g:" +*FvwmForm-Form: Input ItemBack 15 "Light Gray" +*FvwmForm-Form: Text "colorset:" +*FvwmForm-Form: Input ItemColorset 5 "-1" + +*FvwmForm-Form: Line left +*FvwmForm-Form: Text "Pointer over button: " +*FvwmForm-Form: Input ButtonPointer 20 "hand2" +*FvwmForm-Form: Text "f/g" +*FvwmForm-Form: Input ButtonPointerFore 20 "white" +*FvwmForm-Form: Text "b/g" +*FvwmForm-Form: Input ButtonPointerBack 20 "black" + +*FvwmForm-Form: Line left +*FvwmForm-Form: Text "Pointer while button in:" +*FvwmForm-Form: Input ButtonInPointer 20 "hand2" +*FvwmForm-Form: Text "f/g" +*FvwmForm-Form: Input ButtonInPointerFore 20 "black" +*FvwmForm-Form: Text "b/g" +*FvwmForm-Form: Input ButtonInPointerBack 20 "white" +*FvwmForm-Form: Line left +*FvwmForm-Form: Text "Pointer over input: " +*FvwmForm-Form: Input InputPointer 20 "xterm" +*FvwmForm-Form: Text "f/g" +*FvwmForm-Form: Input InputPointerFore 20 "white" +*FvwmForm-Form: Text "b/g" +*FvwmForm-Form: Input InputPointerBack 20 "black" + +*FvwmForm-Form: Line left +*FvwmForm-Form: Text "Activate buttons:" +*FvwmForm-Form: Selection ActivateOnPress single +*FvwmForm-Form: Choice OnRelease off off " on release (default)" +*FvwmForm-Form: Choice OnPress on on " on press" + +*FvwmForm-Form: Line left +*FvwmForm-Form: Message +*FvwmForm-Form: Line expand +*FvwmForm-Form: Button quit "F1 - Save & Restart This Form" F1 +*FvwmForm-Form: Command DestroyModuleConfig FvwmFormDefault: * +# Caution, this command is getting too long, if you add something, +# you might have some truncation occur: +*FvwmForm-Form: Command !(/bin/echo \ + "# This file last created by FvwmForm-Form on: `/bin/date`."; /bin/echo \ + '*FvwmFormDefault: Font $(Font)' ; /bin/echo \ + '*FvwmFormDefault: InputFont $(InputFont)' ; /bin/echo \ + '*FvwmFormDefault: ButtonFont $(ButtonFont)'; /bin/echo \ + '*FvwmFormDefault: Fore $(Fore)' ; /bin/echo \ + '*FvwmFormDefault: Back $(Back)' ; /bin/echo \ + '*FvwmFormDefault: Colorset $(Colorset)' ; /bin/echo \ + '*FvwmFormDefault: ItemFore $(ItemFore)' ; /bin/echo \ + '*FvwmFormDefault: ItemBack $(ItemBack)' ; /bin/echo \ + '*FvwmFormDefault: ItemColorset $(ItemColorset)' ; /bin/echo \ + '*FvwmFormDefault: ButtonPointer $(ButtonPointer)' ; /bin/echo \ + '*FvwmFormDefault: ButtonInPointer $(ButtonInPointer)' ; /bin/echo \ + '*FvwmFormDefault: InputPointer $(InputPointer)' ; /bin/echo \ + '*FvwmFormDefault: ActivateOnPress $(ActivateOnPress)'\ +) > ${FVWM_USERDIR}/.FvwmForm +# This would have surely hit a limit so its appended with >>: +*FvwmForm-Form: Command !(\ + /bin/echo '*FvwmFormDefault: ButtonPointerFore $(ButtonPointerFore)';\ + /bin/echo '*FvwmFormDefault: ButtonPointerBack $(ButtonPointerBack)';\ + /bin/echo '*FvwmFormDefault: ButtonInPointerFore $(ButtonInPointerFore)';\ + /bin/echo '*FvwmFormDefault: ButtonInPointerBack $(ButtonInPointerBack)';\ + /bin/echo '*FvwmFormDefault: InputPointerFore $(InputPointerFore)';\ + /bin/echo '*FvwmFormDefault: InputPointerBack $(InputPointerBack)';\ +) >> ${FVWM_USERDIR}/.FvwmForm + +*FvwmForm-Form: Command *FvwmFormDefault: Read n +*FvwmForm-Form: Command Module FvwmForm FvwmForm-Form +*FvwmForm-Form: Button restart "F3 - Reset" F3 +*FvwmForm-Form: Button quit "F4 - Dismiss" F4 +*FvwmForm-Form: Command Nop +# Tell FvwmForm to read and save vars from the .FvwmForm file. +*FvwmForm-Form: UseData .FvwmForm *FvwmFormDefault --- fvwm-2.5.27.ds.orig/debian/manoj/FvwmForm-Capture +++ fvwm-2.5.27.ds/debian/manoj/FvwmForm-Capture @@ -0,0 +1,29 @@ +# Capture Window - This example is a front-end to xwd, xwud, and xpr. +DestroyModuleConfig FvwmForm-Capture: * +*FvwmForm-Capture: Line center +*FvwmForm-Capture: Text "Capture Window" +*FvwmForm-Capture: Line left +*FvwmForm-Capture: Text "File: " +*FvwmForm-Capture: Input file 25 "/tmp/Capture" +*FvwmForm-Capture: Line left +*FvwmForm-Capture: Text "Printer: " +*FvwmForm-Capture: Input printer 20 "$PRINTER" +*FvwmForm-Capture: Line expand +*FvwmForm-Capture: Selection PtrType single +*FvwmForm-Capture: Choice PS ps on "PostScript" +*FvwmForm-Capture: Choice Ljet ljet off "HP LaserJet" +*FvwmForm-Capture: Line left +*FvwmForm-Capture: Text "xwd options:" +*FvwmForm-Capture: Line expand +*FvwmForm-Capture: Selection Options multiple +*FvwmForm-Capture: Choice Brd -nobdrs off "No border" +*FvwmForm-Capture: Choice Frm -frame on "With frame" +*FvwmForm-Capture: Choice XYZ -xy off "XY format" +*FvwmForm-Capture: Line expand +*FvwmForm-Capture: Button continue "Capture" ^M +*FvwmForm-Capture: Command Exec exec xwd -out $(file) $(Options) & +*FvwmForm-Capture: Button continue "Preview" +*FvwmForm-Capture: Command Exec exec xwud -in $(file) & +*FvwmForm-Capture: Button continue "Print" +*FvwmForm-Capture: Command Exec exec xpr -device $(PtrType) $(file) | lpr -P $(printer) & +*FvwmForm-Capture: Button quit "Quit" --- fvwm-2.5.27.ds.orig/debian/manoj/menudefs.hook +++ fvwm-2.5.27.ds/debian/manoj/menudefs.hook @@ -0,0 +1,195 @@ +#===================================================== A. menus +# A. menus - defer bindings until later +# Delete +# Fvwm checks to see if the window understands the "Delete" +# protocol. Not all windows do. If it understands "Delete", fvwm sends +# the delete message to the window. If the program operating the window +# is working well, it will remove itself sometime in the relatively +# near future. (May not be immediate, the application may pop-up a +# confirm box, may save its state, whatever). As far as fvwm is +# concerned, the "Delete" action is done when the message is sent, even +# if the window still exists. +# Close +# Similar to delete, but if the window doesn't understand "Delete", the +# window is destroyed. At this point, you have either sent two delete +# messages, or have beeped and destroyed the window. When destroying a +# window, Fvwm actually removes the window, and the program usually, +# but not always, crashes. +# Destroy +# This will make fvwm actually destroy the window. Chances are, this +# will happen before any of the "Delete" messages are handled by the +# application. +# +# The correct thing to put in your menu, is a simple "Close" this will +# correctly remove all windows, except those that understand "Delete" +# and are misbehaving (crashing, poorly written, whatever). To handle +# the case of a misbehaving window, have a separate item "Destroy" +# which you invoke only if the window doesn't respond to "Close" + +# This menu is invoked as a sub-menu - it allows you to quit, +# restart, or switch to another WM. +DestroyMenu Quit-Verify +AddToMenu "Quit-Verify" "Really Quit Fvwm?" Title ++ "&Yes, Really Quit%mini.exit.xpm%" Quit ++ "&Restart fvwm2%mini.calc.xpm%" Restart /usr/bin/X11/fvwm2 ++ "&No, Don't Quit%mini.checkmark.xpm%" Nop + + + +DestroyMenu Bell +AddToMenu Bell "Loud" Exec xset b 100 ++ "Quiet" Exec xset b 30 ++ "Off" Exec xset b 0 + +DestroyMenu Keyclick +AddToMenu Keyclick "Loud" Exec xset c 100 ++ "Quiet" Exec xset c 13 ++ "Off" Exec xset c 0 + +DestroyMenu Paging +AddToMenu "Paging" "Paging Functions" Title ++ "Paging OFF" EdgeScroll 0 0 ++ "Paging ON" EdgeScroll 100 100 ++ "Horizontal Paging Only" EdgeScroll 100 0 ++ "Vertical Paging Only" EdgeScroll 0 100 ++ "Partial Paging" EdgeScroll 50 50 + + +##+ "Neon Pager" Read .new_pager +##+ "Default Pager" Read .old_pager + + +# AddToFunc StartTin "I" Desk 0 0 +# + "I" GotoPage 0 1 +# + "I" Exec xterm -geometry 98x64+0+0 -ls -e /usr/bin/tin & +# This should move to desk 0, then to the second page down on the left, +# then start up an xterm running tin. Seems to work from any initial +# desk. or xterm -geometry +0+`expr $SCREENHEIGHT` + +# Build a menu of all .jpg files in $HOME/lib/public_html/images +#AddToMenu ImageMenu foo title +#+ DynamicPopupAction Function MakeImageMenu + +AddToFunc MakeImageMenu ++ I DestroyMenu recreate ImageMenu ++ I AddToMenu ImageMenu Pictures Title ++ I PipeRead 'for i in $HOME/public_html/images/*.jpg \ + $HOME/public_html/images/*.gif \ + $HOME/public_html/images/*.png; \ + do echo AddToMenu ImageMenu "`basename $i`" Exec display $i; done' + + +DestroyMenu Forms +AddToMenu Forms "&Q. QuitVerify" Module FvwmForm FvwmForm-QuitVerify +AddToMenu Forms "&C. Capture" Module FvwmForm FvwmForm-Capture +AddToMenu Forms "&R. Rlogin" Module FvwmForm FvwmForm-Rlogin +AddToMenu Forms "&T. Talk" Module FvwmForm FvwmForm-Talk +AddToMenu Forms "&F. FORM" Module FvwmForm FvwmForm-Form +AddToMenu Forms "&O. RootCursor" Module FvwmForm FvwmForm-RootCursor + +DestroyFunc RaiseOnTop +AddToFunc RaiseOnTop + + I Layer 0 4 + + I Raise +# cyclicly change a window layer 4 -> 10 -> 5 -> 9 -> 4 + +DestroyFunc ActuallyDoLayer +AddToFunc ActuallyDoLayer +ThisWindow (Layer 4) + Layer 10 +ThisWindow (Layer 5) + Layer 9 +ThisWindow (Layer 9) + Layer 4 +ThisWindow (Layer 10) + Layer 5 +ActuallyDoLayer + +# AddToFunc ChangeRootHourly +# + I Exec exec cgbg +# + I Schedule 3600000 ChangeRootHourly + +DestroyFunc ChangeRootHourly +AddToFunc ChangeRootHourly ++ I PipeRead `dump-2-config-lines-for-colorset-51-and-52` ++ I Schedule 3600000 ChangeRootHourly + +#AddToFunc StartFunction +#+ I ChangeRootHourly +#+ I FvwmBacker + +#*FvwmBacker: Command (Desk 0) Colorset 51 +#*FvwmBacker: Command (Desk 1) Colorset 52 + +#The script should dump 2 lines, something like: +# Colorset 51 Pixmap bg7.png +# Colorset 52 Pixmap bg4.png + + +#AddtoFunc move_noresist +# + I EdgeResistance 10000 100 +# + I Move +# + I EdgeResistance 10000 10000 + +DestroyFunc FuncFvwmMaximizeFullScreen +AddToFunc FuncFvwmMaximizeFullScreen + + I ThisWindow (Maximized) Style $n Title, BorderWidth 4, HandleWidth 4 + + I KeepRc TestRc (NoMatch) Style $n NoTitle, BorderWidth 16, HandleWidth 16 + + I KeepRc TestRc (NoMatch) Raise + + I KeepRc TestRc (NoMatch) UpdateStyles + + I Maximize + + +# +# Some Example Menus +# +# + +DestroyMenu "Remote-Popup" +AddToMenu "Remote-Popup" "somewhere" exec xterm -sl 1024 -cr white -fg white -bg \#114433 -T Oneway -e ssh -l me somewhere.com ++ "generic" FvwmForm Ssh + +DestroyMenu "Graphics-Popup" +AddToMenu "Graphics-Popup" "The GIMP" Exec xterm -fg \#30d030 -bg black -T gimpit -geometry 80x5+602+787 -e /usr/bin/gimp ++ "Tgif" Exec tgif ++ "Xpaint" Exec xpaint ++ "Xmag" Exec xmag ++ "XView" Exec xv ++ "Image Magick" Exec display + +DestroyMenu "Development-Popup" +AddToMenu "Development-Popup" "X-gdb" Exec xxgdb ++ "ddd" Exec ddd ++ "X-man" Exec xman + +DestroyMenu "Accessories-Popup" +AddToMenu "Accessories-Popup" "Calculator" Exec xcalc ++ "Seyon" Exec seyon -modems /dev/cuaa1 ++ "Nedit" Exec nedit ++ "Lock" Exec xlock -mode swarm + +DestroyMenu "Games-Popup" +AddToMenu "Games-Popup" "X-kobo" Exec xkobo ++ "X-boing" Exec xboing ++ "Mahjong" Exec xmj ++ "Minesweeper" Exec xmine ++ "X-Emeraldia" Exec xemeraldia -noscore ++ "Solitaire" Exec tksol + +DestroyMenu "Sound-Popup" +AddToMenu "Sound-Popup" "X-Mixer" Exec xmmix ++ "Xm-CD Player" Exec xmcd + + +DestroyMenu MiscUtilities +AddToMenu MiscUtilities ++ "Paging" Popup Paging ++ "Forms" Popup Forms ++ "Graphics-Popup" Popup "Graphics-Popup" ++ "Development-Popup" Popup "Development-Popup" ++ "Accessories-Popup" Popup "Accessories-Popup" ++ "Games-Popup" Popup "Games-Popup" ++ "Sound-Popup" Popup "Sound-Popup" ++ "Move Mehtods" Popup FvwmMoveMethods ++ DynamicPopupAction Function MakeImageMenu ++ "Images" Popup ImageMenu ++ DynamicPopupAction Function WallpaperBrowser ++ "WallPaper Browser" Popup WallpaperBrowserMenu ++ MissingSubmenuFunction FuncFvwmMenuDirectory ++ "WallPapers" Popup $[fvwm_image_path]/wallpaper/ --- fvwm-2.5.27.ds.orig/debian/manoj/binding.hook +++ fvwm-2.5.27.ds/debian/manoj/binding.hook @@ -0,0 +1,406 @@ +#===================================================== C. mouse bindings +# C. This defines the mouse bindings + +# First, for the mouse in the root window +# Button 1 gives the Utilities menu +# Button 2 gives the Window-Ops menu +# Button 3 gives the WindowList (like TwmWindows) +# I use the AnyModifier (A) option for the modifier field, so you can hold down +# any shift-control-whatever combination you want! + +# Button Context Modifi Function +Mouse 3 RD N Menu "Utilities" Nop +Mouse 2 RD N Menu "Window-Ops" Nop +Mouse 1 RD N Function "general_ops_func" +Mouse 3 FIST CM Menu "Utilities" Nop +Mouse 2 FIST CM Menu "Window-Ops" Nop +Mouse 1 FIST CM Function "general_ops_func" + +# To obtain the gnome menu with Alt-button1 on the root window +Mouse 1 RD M SendToModule FvwmGtk gnome-all + + +# +# Now the title bar buttons +# Any button in the left title-bar button gives the window ops menu +# Any button in the right title-bar button Iconifies the window +# Any button in the rightmost title-bar button maximizes +# Note the use of "Mouse 0" for AnyButton. +# The title bar buttons are numbered with odd numbered buttons on the +# left side of the title bar and even numbers on the right. Smaller- +# numbered buttons are displayed toward the outside of the window while +# larger-numbered buttons appear toward the middle of the window (0 is +# short for 10). In summary, the buttons are numbered: +# +# 1 3 5 7 9 0 8 6 4 2 + + + +#left side +# Button Context Modifi Function +Mouse 0 1 A Function "window_ops_func" +Mouse 0 3 A Function "max_vert_func" +Mouse 0 5 A Function "max_hor_func" +Mouse 0 7 A Function "max_diag_func" +Mouse 0 9 A Function FuncFvwmMaximizeFullScreen +#Mouse 0 9 A Resize + +#right side +# Button Context Modifi Function +Mouse 0 2 A Close +Mouse 0 4 A IconifyWithScreenshot +Mouse 0 6 A Function "Move-or-Lower" +Mouse 0 8 A Function "funky_cancel" +Mouse 0 0 A Stick + +# Now the rest of the frame +# Here I invoke my complex functions for Move-or-lower, Move-or-raise, +# and Resize-or-Raise. +# Button 1 in the side, or corner pieces, with any modifiers, gives +# resize or raise +Mouse 1 FS A Function "Resize-or-Raise" +# Button 1 in the title, w/ any modifiers, gives move or raise +Mouse 1 T A Function "Move-or-Raise" +#Mouse 1 T M Function move_noresist + +# Button 1 in an icons gives move for a drag, de-iconify for a +# double-click, nothing for a single click +# Button 2 in an icon, w/ any modifiers, gives de-iconify + +Mouse 1 I A Function "Move-or-Iconify" +Mouse 2 I A Iconify + +# Button 2 in the corners, sides, or title-bar gives the window ops +# menu +Mouse 2 F A Function "window_ops_func" +Mouse 2 TS A Function "Move-or-Iconify" +# Button 3 anywhere in the decoration (except the title-bar buttons) +# does a raise-lower +Mouse 3 IF A RaiseLower +Mouse 3 TS A Function "Move-or-Raise" + +# Button 3 in the window, with the Modifier-1 key (usually alt or +# diamond) gives Raise-Lower. Used to use control here, but that +# interferes with xterm +#Mouse 3 W M RaiseLower + +#===================================================== D. key bindings +# D. key bindings + +# Arrow Keys +# press arrow + control anywhere, and scroll by 1 page +Key Left FIRST C Scroll -100000 0 +Key Right FIRST C Scroll +100000 +0 +Key Up FIRST C Scroll +0 -100000 +Key Down FIRST C Scroll +0 +100000 +# Also for the Mouse wheel +#Mouse 4 RD A Scroll +0 -100000 +#Mouse 5 RD A Scroll +0 +100000 +# Alternately, use the mouse wheel to set volumes: +Mouse 4 RD A Exec aumix -v+5 -w+5 +Mouse 5 RD A Exec aumix -v-5 -w-5 +# With Control. move desks +Mouse 4 RD C GotoDesk -1 +Mouse 5 RD C GotoDesk +1 + + + +# press arrow + Alt anywhere +# Move window 5% to the left +Key Left FIST M Move w-5 0 Warp +# Move window 5% to the right +Key Right FIST M Move w+5 0 Warp +# Move window 5% to the top +Key Up FIST M Move 0 w-5 Warp +# Move window 5% to the bottom +Key Down FIST M Move 0 w+5 Warp + +# directing a window to move in a given direction (Up, Down, Left, +# Right) until it hits something; eg a screen edge or another window. +Key Down WTF SM PackWrapperDown +Key Up WTF SM PackWrapperUp + +Key 5 FIST M Move m+0 m+0 Warp +Key 1 FIST M Move 0 -0 Warp +Key 2 FIST M Move 50 -0 Warp +Key 3 FIST M Move -0 -0 Warp +Key 4 FIST M Move -0 50 Warp +Key 6 FIST M Move 0 50 Warp +Key 7 FIST M Move 0 -0 Warp +Key 8 FIST M Move 50 0 Warp +Key 9 FIST M Move -0 0 Warp + +# press arrow on root, and scroll by 1 page +Key Left RD AN Scroll -100000 0 +Key Right RD AN Scroll +100000 +0 +Key Up RD AN Scroll +0 -100000 +Key Down RD AN Scroll +0 +100000 + +# press arrow + meta key, and scroll by 1/10 of a page +Key Left FIRST S Scroll -10000 +0 +Key Right FIRST S Scroll +10000 +0 +Key Up FIRST S Scroll +0 -10000 +Key Down FIRST S Scroll +0 +10000 + +# press shift arrow + control anywhere, and move the pointer by 1% of a page +Key Left FIRST SC CursorMove -1 0 +Key Right FIRST SC CursorMove +1 +0 +Key Up FIRST SC CursorMove +0 -1 +Key Down FIRST SC CursorMove +0 +1 +Key Left FIRST MS CursorMove -5 0 +Key Right FIRST MS CursorMove +5 0 +Key Up FIRST MS CursorMove +0 -5 +Key Down FIRST MS CursorMove +0 +5 + +# Keyboard accelerators +Key F1 FIRST S Popup "Utilities" +Key F2 FIRST S Popup "Window-Ops" +Key F3 FIRST S Module FvwmWinList +Key F4 FIRST S Iconify +Key F5 FIRST S Move +Key F6 FIRST S Resize +Key F7 FIRST S CirculateUp +Key F8 FIRST S CirculateDown +# Alt+Fx takes us to various pages +Key F1 A M GotoDeskAndPage 0 0 0 +Key F2 A M GotoDeskAndPage 0 1 0 +Key F3 A M GotoDeskAndPage 0 2 0 +Key F4 A M GotoDeskAndPage 0 3 0 +Key F5 A M GotoDeskAndPage 1 0 0 +Key F6 A M GotoDeskAndPage 1 1 0 +Key F7 A M GotoDeskAndPage 1 2 0 +Key F8 A M GotoDeskAndPage 1 3 0 +Key F9 A M GotoDeskAndPage 2 0 0 +Key F10 A M GotoDeskAndPage 2 1 0 +Key F11 A M GotoDeskAndPage 2 2 0 +Key F12 A M GotoDeskAndPage 2 3 0 + +# move to page, Shift+Ctrl+KP_N +Key KP_1 A SC MoveToPage 0 2 +Key KP_2 A SC MoveToPage 1 2 +Key KP_3 A SC MoveToPage 2 2 +Key KP_4 A SC MoveToPage 0 1 +Key KP_5 A SC MoveToPage 1 1 +Key KP_6 A SC MoveToPage 2 1 +Key KP_7 A SC MoveToPage 0 0 +Key KP_8 A SC MoveToPage 1 0 +Key KP_9 A SC MoveToPage 2 0 +Key KP_0 A SC MoveToPage prev + +# move to desk, Shift+Ctrl+N +Key 1 A SC MoveToDesk 0 0 +Key 2 A SC MoveToDesk 0 1 +Key 3 A SC MoveToDesk 0 2 +Key 4 A SC MoveToDesk 0 3 +Key 0 A SC MoveToDesk prev + + + +#Page Up/Dapge Down keys are used to scroll by one desktop page +# in any context, press page up/down + control +# in root context, just pressing page up/down is OK +# +# I prefer the wrapping scroll. +Key Next RD N Scroll 100000 0 +Key Prior RD N Scroll -100000 0 + +# non-iconified windows on the current page of the current desk +Key Next RD S Next [!iconic CurrentScreen CurrentDesk] focus-and-raise +Key Prior RD S Prev [!iconic CurrentScreen CurrentDesk] focus-and-raise + +# non-iconified windows on the current desk +Key Next RD M Next [!iconic CurrentDesk] focus-and-raise +Key Prior RD M Prev [!iconic CurrentDesk] focus-and-raise + +# non-iconified windows +Key Next RD C Next [!iconic] focus-and-raise +Key Prior RD C Prev [!iconic] focus-and-raise + +# any window or icon on the current page of the current desk, +# including those otherwise skipped +Key Next RD MC Next [CurrentScreen CurrentDesk CirculateHit] focus-and-raise +Key Prior RD MC Prev [CurrentScreen CurrentDesk CirculateHit] focus-and-raise + +# any window or icon on the current desk including those otherwise +# skipped +Key Next RD MS Next [CurrentDesk CirculateHit] focus-and-raise +Key Prior RD MS Prev [CurrentDesk CirculateHit] focus-and-raise + +# any window or icon including those otherwise skipped +Key Next RD CS Next [CirculateHit *] focus-and-raise +Key Prior RD CS Prev [CirculateHit *] focus-and-raise + +Key q FIRST M Popup "Quit-Verify" +Key w FIRST M Popup "Window-Ops" +Key g FIRST M Popup "General" +Key m FIRST M Popup "Mod-Popup" +Key u FIRST M Popup "Utilities" + +Key e FIST M Popup "General" +Key r FIRST M Popup "Mod-Popup" +Key t FIRST M Popup "Utilities" + + +#### +# Mouse Gestures. +# +# Syntax reminder: +# +# 1 2 3 +# +# 4 5 6 +# +# 7 8 9 +# +# Stroke Sequence Button Context Modifiers Function +# +# I use mouse gestures in Opera and Mozilla, so I've duplicated some +# common ones here. +# +# To try these out, hold down the Left mouse button and trace the +# pattern on the Root Window, the sequence is a pattern on the grid +# above, so 14789 would be down then Right. +################# +#### +# First, define a StrokeFunc. +# +# Without this, you would have to execute all of your gestures +# entirely on the Root Window, This lets you change the Context and +# have a few other Neat Features, such as DrawMotion, which will draw +# a line as you make your Gesture (Neat!). +# +# There is also EchoSequence, Feedback and NotStayPressed. +# +# Note: EchoSequence prints sequences to STDERR. +################# +# mouse 3 with Control on the root window +Mouse 3 RD C StrokeFunc DrawMotion FeedBack StrokeWidth 2 +# mouse 3 with Alt on a window +Mouse 3 WD M StrokeFunc FeedBack DrawMotion StrokeWidth 2 + +Stroke 0 0 RD A Exec xmessage "Just click mouse 3 on the root" +# Down, Then Up. +Stroke 25852 0 RD A Refresh + +# Directions... +Stroke 456 0 RD A GotoPage +1p 0p +Stroke 654 0 RD A GotoPage -1p 0p +Stroke 852 0 RD A GotoPage 0p -1p +Stroke 258 0 RD A GotoPage 0p +1p + +# Diagonal... +Stroke 159 0 RD A GotoPage +1p +1p +Stroke 951 0 RD A GotoPage -1p -1p +Stroke 357 0 RD A GotoPage -1p +1p +Stroke 753 0 RD A GotoPage +1p -1p + +##### +# Quit +# +# Down, Then Right. +# +# Dont worry about running this gesture by accident, +# you will be asked to confirm +################# +Stroke 14789 0 RD A Module FvwmForm FvwmForm-QuitVerify + +#### +# Up, Then Down: Close a window. +# +# Note that you can also enter the sequence as it appears on your +# Numeric Keypad, by preceding the sequence with an `N`. +# +# The FVWM developers think of everything :) +################# +Stroke N25852 0 RD A Pick Close +# Left, then right opens an uxterm +Stroke 456654 0 RD A Exec exec uxterm -fg $[fg.cs30] -bg $[bg.cs30] + +# Start a Web Browser +Stroke N1478963 0 RD A Exec exec Warp-or-Run-Browser +Stroke 7415963 0 RD A Warp-or-Run-Browser +Stroke 74148963 0 RD A Warp-or-Run-Browser +Stroke 74158963 0 RD A Warp-or-Run-Browser +Stroke 7418963 0 RD A Warp-or-Run-Browser +Stroke 415963 0 RD A Warp-or-Run-Browser + +# Make a new Sticky Note +Stroke N1598753 0 RD A Exec exec xpad + + +# starts the "QuitVerify" form if you draw a box that begins in the +# top left corner. +Stroke N78963214 0 RD A FvwmForm FvwmForm-QuitVerify +Stroke N789632147 0 RD A FvwmForm FvwmForm-QuitVerify + + +# Hey, key strokes in the root window can now mean s'thing! +Key e RD N WindowId emacs 1 WarpToWindow 50 50 + +Key Tab A M WindowList Root c c NoDeskSort +# Key Tab A M WindowList Root c c CurrentDesk NoGeometry + + Key KP_Add A M Next (CurrentDesk !Iconic) Focus + Key KP_Subtract A M Prev (CurrentDesk !Iconic) Focus + +Key F9 RD A Exec "Netscape go" exec mozilla -remote "openURL "`xselection PRIMARY` & +Key F10 RD N FvwmForm FvwmForm-QuitVerify +Key F11 RD C Restart + + +Key Tab A 4 Prev ("CurrentPage" "!Iconic" !"Fvwm*") FocusRaise + + +Key s FIRST CM Exec sleep 15; import -window root /tmp/screenshot.png +Key Tab A M WindowList Root c c NoDeskSort +Key F2 A 4 Maximize grow grow + +# The following binds right shit to launch xterms +#Key Shift_R A A Exec xterm + +Key T A CM Pick ToggleWindowTitle # Ctrl-Alt-T to toggle title + +Key Super_L FISTRD S WindowList (CurrentPage) NoGeometry +Key Super_R FIRST S WindowList Root c c SelectOnRelease "", NoDeskSort +Key Menu FIRST S Menu MenuFvwmRoot +Key N FIRST SC Current Next ($[w.class]) MyFocusAndRaise +Key Tab FIRST M Next (AcceptsFocus, CurrentPage, !Iconic) Focus +Key Tab FIRST SM Prev (AcceptsFocus, CurrentPage, !Iconic) Focus + +# Then press Shift-Ctrl-Alt-1 / 2 / 3 / 4 to bookmark windows (up to 4) +# and Shift-Alt-1 / 2 / 3 / 4 to switch to the bookmarked windows. +Key 1 W SCM Key 1 A SM Silent WindowId $$w SelectWindow +Key 2 W SCM Key 2 A SM Silent WindowId $$w SelectWindow +Key 3 W SCM Key 3 A SM Silent WindowId $$w SelectWindow +Key 4 W SCM Key 4 A SM Silent WindowId $$w SelectWindow + +Key 7 A SCM Key 1 A SC WindowId $[w.id] WindowListFunc +Key 8 A SCM NoWindow Pick Key 1 A SC WindowId $$[w.id] WindowListFunc +Key 9 A SCM Key 9 A SC WindowId $[w.id] WindowListFunc + +# resize a window with the keyboard in small steps. (does not work for xterms) +# Ctrl-Alt-Home works, but not Ctrl-Alt-End. +Key Home A CM Pick PipeRead `echo Resize $(($[cw.width]-1))p $(($[cw.height]-1))p` +Key End A CM Pick PipeRead `echo Resize $(($[cw.width]+1))p $(($[cw.height]+1))p` + +# I use the following setup to not use the mouse. I identify the windows on there +# names. When I press CTRL ALT S fvwm looks for a window with the name MAINscreen. +# If there is on it will be raised and focused. If not the above command will be +# executed. +# Key Q A SC SmartStart GQ "gq" +# Key X A SC Exec exec xterm -T xterm -ls +# Key S A SC SmartStart MAINscreen "xterm -T MAINscreen -ls -e ssh -t $SCREENSERVER /usr/src/tg/screen-3.9.13/screen -x main" +# Key D A SC SmartStart DEVELscreen "xterm -T DEVELscreen -ls -e ssh -t $SCREENSERVER screen -x devel" +# Key L A SC SmartStart LOCALscreen "xterm -T LOCALscreen -ls -e screen -R" +# Key N A SC SmartStart "Netscape:*" $NETSCAPE +# Key O A SC SmartStart "Opera*" $OPERA +# Key B A SC SmartStart "bluescreen" "xterm -T bluescreen -bg \\#${OVERLAYCOLOR} -fg white -ls" +# Key M A SC SmartStart "*Mozilla" $MOZILLA +# Key W A SC SmartStart "faui47" $CITRIX +# Key G A SC SmartStart "*GVIM" $GVIM +# Key C A SC SmartStart CONSOLEscreen "xterm -T CONSOLEscreen -ls -e ssh -t $SCREENSERVER /local/console/bin/cscreen -x" +# Key A A SC SmartStart "*.pdf" +# Key P A SC SmartStart "MPlayer" +# Key U A SC SmartStart "UMLinux" +# Key R A SCM Restart $FVWM +# Key F4 A M Exec exec $XLOCK -mode blank -remote --- fvwm-2.5.27.ds.orig/debian/manoj/FvwmModules.hook +++ fvwm-2.5.27.ds/debian/manoj/FvwmModules.hook @@ -0,0 +1,395 @@ +#_____________________________________________________ E.2 No Clutter +# E.2 No Clutter +# I only wrote NoClutter as a simple test case, but maybe some big +# sites like universities really have usage problems (too many open +# windows).... Time delays are in seconds. +*FvwmNoClutter 3600 Iconify 1 +*FvwmNoClutter 86400 Delete +*FvwmNoCLutter 172800 Destroy +#_____________________________________________________ E.3 Window-Id +# Window-Identifier +# Just choose colors and a fonts + +#_____________________________________________________ E.4 Pager +# E.4 Pager + +# At some point, this shall give the pager transparency +#*FvwmPager: Colorset * 5 + +#*FvwmPager: Colorset 0 14 +#*FvwmPager: Colorset 1 10 +#*FvwmPager: HilightColorset 0 15 +#*FvwmPager: HilightColorset 1 11 +#*FvwmPager: BalloonColorset * 16 +#*FvwmPager: WindowColorsets 1 2 + + +*FvwmPager: Pixmap none + +# Tells FvwmPager to not show the windows that are using the WindowListSkip style. +*FvwmPager: UseSkipList + +*FvwmPager: Window3DBorders +*FvwmPager: Balloons +*FvwmPager: SloppyFocus + +*FvwmPagerGeometry x78-83-1 +*FvwmPager: MiniIcons + +#_____________________________________________________ E.5 FvwmWinList +# E.5 FvwmWinList +*FvwmWinList: FocusColorset 18 +*FvwmWinList: Colorset 17 +*FvwmWinList: IconColorset 19 + +*FvwmWinListAction Click1 Iconify -1,Focus +*FvwmWinListAction Click2 Iconify +*FvwmWinListAction Click3 Module "FvwmIdent" FvwmIdent +*FvwmWinListUseSkipList +*FvwmWinListGeometry +0-1 +*FvwmWinListUseIconNames +#_____________________________________________________ E.6 IconBox +# E.6 FvwmIconBox +# Make no icon to be shown in root window +# by spcifying in your .fvwmrc +# (1) "SuppressIcons" if PRUNE is defined in configure.h, or +# This gets rid of the icon's above the titles. +# If you uncomment this, and make sure that the WindowList is bound to +# something, it works pretty much like an icon manager. +##SuppressIcons +#Style "*" NoIcon + + +#*FvwmIconBox: Colorset 12 +#*FvwmIconBox: IconColorset 19 +#*FvwmIconBox: IconHiColorset 20 + + +*FvwmIconBoxGeometry 5x1+0+0 +*FvwmIconBoxMaxIconSize 64x38 +*FvwmIconBoxSortIcons +*FvwmIconBoxPadding 4 +*FvwmIconBoxLines 10 +*FvwmIconBoxPlacement Left Top +*FvwmIconBoxPixmap fvwm.xpm +#*FvwmIconBoxHideSC Horizontal +# +# mouse bindings +# +*FvwmIconBoxMouse 1 Click RaiseLower +*FvwmIconBoxMouse 1 DoubleClick Iconify +*FvwmIconBoxMouse 2 Click Iconify -1, Focus +*FvwmIconBoxMouse 3 Click Module "FvwmIdent" FvwmIdent +# +# Key bindings +# +*FvwmIconBoxKey r RaiseLower +*FvwmIconBoxKey space Iconify +*FvwmIconBoxKey d Close +# +# FvwmIconBox built-in functions +# +*FvwmIconBoxKey n Next +*FvwmIconBoxKey p Prev +*FvwmIconBoxKey h Left +*FvwmIconBoxKey j Down +*FvwmIconBoxKey k Up +*FvwmIconBoxKey l Right +# +# Icon file spcifications +# +*FvwmIconBox "*" unknown1.xpm +*FvwmIconBox "Fvwm*" - +*FvwmIconBox "FvwmFileMgr" folder2.xpm +*FvwmIconBox "rxvt" term.xpm +*FvwmIconBox "xterm" xterm.xpm +*FvwmIconBox "editres" editres.xpm +*FvwmIconBox "xman" xman.xpm +*FvwmIconBox "xbiff" mail1.xpm +*FvwmIconBox "xmh" mail1.xpm +*FvwmIconBox "xcalc" xcalc.xpm +*FvwmIconBox "FvwmButtons" toolbox.xpm + +#_____________________________________________________ E.7 Backer +# E.7 FvwmBacker -- Set Up Backgrounds for different desktops. +# FvwmBacker can change wallpaper as you change desks or pages, or execute commands. +DestroyModuleConfig FvwmBacker: * + +# *FvwmBacker: Command (Page 2 *) -solid steelblue +# *FvwmBacker: Command (Desk 0, Page 0 0) Exec xpmroot $[HOME]/bg2.xpm +# *FvwmBacker: Command (Desk 0, Page 0 1) -solid midnightblue +# *FvwmBacker: Command (Desk 0, Page 1 *) -solid yellow +# *FvwmBacker: Command (Desk 1, Page * 0) -solid navy +# *FvwmBacker: Command (Desk 1, Page * 1) Colorset 5 + +*FvwmBacker: Command (Desk 0) Exec fvwm-root -r $[fvwm_wallpaper0] +*FvwmBacker: Command (Desk 1) Exec fvwm-root -r $[fvwm_wallpaper1] + +#*FvwmBacker: Command (Desk 0) Exec xsetbg -fullscreen $[fvwm_wallpaper0] +#*FvwmBacker: Command (Desk 1) Exec xsetbg -fullscreen $[fvwm_wallpaper1] + +#*FvwmBacker: Command (Desk 0) -solid Black +#*FvwmBacker: Command (Desk 1) -solid midnightblue + +#maybe this works? +#*FvwmWinListDesk 0 -solid steelblue +#*FvwmWinListDesk 1 -solid midnightblue +#*FvwmWinListDesk 2 -solid navy +#*FvwmWinListDesk 3 -solid lightslateblue + +# One other quick comment/question. I got quite sick of using the backer +# because the colors of the desktop didn't show up in the pager. so i set up +# a bunch of symbolic links (FvwmButtons to PagerButtons and FvwmPager to +# IncPager*). then i set the background colors of each one to be the same as +# the FvwmBacker colors.... now i could simply swallow all the IncPagers +# into a FvwmButtons (PagerButtons under the symlink) and it looks just like +# FvwmPager, but has colors. Here is the relevant code: + +# *IncPager0Back #266294 +# *IncPager1Back #AA0000 +# *IncPager2Back #FFCC00 +# *IncPager3Back #888800 + +# *PagerButtons - whatever SwallowModule "IncPager0" IncPager0 0 0 +# *PagerButtons - whatever SwallowModule "IncPager1" IncPager1 1 1 +# *PagerButtons - whatever SwallowModule "IncPager2" IncPager2 2 2 +# *PagerButtons - whatever SwallowModule "IncPager3" IncPager3 3 3 + +#_____________________________________________________ E.8 Audio +# E.8 FvwmAudio -- Set Up Sounds. + +*FvwmAudioPlayCmd /usr/local/bin/AF/aplay +*FvwmAudioDir /usr/local/share/sound_files/fvwm + +*FvwmAudio startup hi.snd +*FvwmAudio shutdown Goodbye.au +*FvwmAudio new_page Oomph.au +*FvwmAudio res_class beep_metal.au +*FvwmAudio focus_change thrust.au +*FvwmAudio add_window drip.au +*FvwmAudio destroy_window flush.au +*FvwmAudio deiconify ploop.au +*FvwmAudio unknown doh.au +*FvwmAudio iconify beep_pure_saw.au +*FvwmAudio icon_name beep_robotic.au +*FvwmAudio window_name beep_fm.au +*FvwmAudio new_desk Teeswing.au +*FvwmAudio raise_window arrp.au +*FvwmAudio lower_window tap3.au +*FvwmAudio configure_window dadan.au +*FvwmAudio res_name Cork.au +*FvwmAudio end_windowlist hasta_la_vista.au +*FvwmAudio toggle_paging ST_laser.au + +#_____________________________________________________ E.9 new_pager +#E.9 .new_pager +#KillModule FvwmPager +#*FvwmPagerBack pink +#*FvwmPagerFore green +#*FvwmPagerHilight red +#FvwmPager 0 3 + +#_____________________________________________________ E.A old_pager +#E.A .old_pager +#KillModule FvwmPager +#*FvwmPagerBack #908090 +#*FvwmPagerFore #484048 +#*FvwmPagerHilight #cab3ca +#FvwmPager 0 3 + +#_____________________________________________________ E.B FvwmForm +# E.B FvwmForm +# The FvwmForm module already has the capability of calling it as +# FvwmForm, but telling it to use the settings for some other name, like +# so: +# +# + "Form - Rlogin" Module FvwmForm Rlogin +# + "Form - QuitVerify" Module FvwmForm QuitVerify + +# I didn't like having all of those symbolic links either... +# +# Section: post.hook +# +# Use post.hook to force things that may have been changed earlier, for +# example, key bindinds. +# + +*FvwmScript: DefaultColorset 35 + +*FvwmFormDefault: Colorset 35 + +*FvwmFormDefault: ItemColorset 36 + +*FvwmTaskBar: Colorset 17 +*FvwmTaskBar: FocusColorset 18 +*FvwmTaskBar: IconColorset 19 +*FvwmTaskBar: TipsColorset 16 + +*FvwmTaskBar: Geometry +0-0 + + +*FvwmTaskBar: Action Click1 DeiconifyRaiseAndFocus +*FvwmTaskBar: Action Click2 Iconify On +*FvwmTaskBar: Action Click3 Lower + +*FvwmTaskBar: UseSkipList +*FvwmTaskBar: UseIconNames +*FvwmTaskBar: AutoStick +*FvwmTaskBar: AutoHide +*FvwmTaskBar: ShowTips +*FvwmTaskBar: NoIconAction SendToModule FvwmAnimate animate +*FvwmTaskBar: WindowButtonsLeftMargin 8 + +# Animations are controlled by this module +# You could also use Frame, Lines, Flip, Turn, Twist, Random and None. +DestroyModuleConfig FvwmAnimate: * +*FvwmAnimate: Effect Flip +*FvwmAnimate: Delay 0 +*FvwmAnimate: Iterations 30 +#*FvwmAnimate: Twist 1 +*FvwmAnimate: Width 2 + +##### +# Hit Alt+Esc to toggle FvwmProxy, which allows you to see all windows on your +# desktop, even if they've been obscured..really cool. +################## +DestroyModuleConfig FvwmProxy: * +*FvwmProxy: ProxyMove true + +Key Escape A M SendToModule FvwmProxy ShowToggle + + + +# FvwmIconMan is a highly configurable module for managing running tasks. +# This one is configured to look like a TaskBar. +Style FvwmIconMan sticky, parentalrelativity, handlewidth 0, borderwidth +DestroyModuleConfig FvwmIconMan: * +*FvwmIconMan: ManagerGeometry 1x1 +*FvwmIconMan: ButtonGeometry 24x23 +*FvwmIconMan: FocusAndSelectButton down +*FvwmIconMan: FocusButton down +*FvwmIconMan: IconButton down +*FvwmIconMan: PlainButton down +*FvwmIconMan: SelectButton down +*FvwmIconMan: Action Mouse 2 N sendcommand Thumbnail +*FvwmIconMan: Action Mouse 1 N sendcommand RaiseLower, sendcommand FlipFocus +*FvwmIconMan: ReliefThickness 1 +*FvwmIconMan: Resolution Page +*FvwmIconMan: DrawIcons Always +*FvwmIconMan: FollowFocus True +*FvwmIconMan: UseWinList True +*FvwmIconMan: ShowOnlyIcons False +*FvwmIconMan: Format "%c: %i" +*FvwmIconMan: Title "" +*FvwmIconMan: Sort id + +# FvwmScroll swallows applications into smaller containers, sometimes handy. +DestroyModuleConfig FvwmScroll: * +*FvwmScroll: Back #f6f6f6 +*FvwmScroll: Fore #f6f6f6 + +# FvwmEvent can bind Commands to Events +DestroyModuleConfig FvwmEvent: * +*FvwmEvent: PassID +*FvwmEvent: Delay 5 +*FvwmEvent: StartDelay 10 + +# ============================================================================ +# IV. Start/Stop Functions: +# ============================================================================ + +# These functions are executed when you enter (Start) and when you leave +# (Stop) this component. For example, in colors@blackbox they are used to +# set/unset a good window "transparency" style ParentalRelativity/Opacity; +# in colors@cde and colors@luthien these functions are used for more things. + +# DestroyFunc FuncFvwmStartColors +# AddToFunc FuncFvwmStartColors + +# DestroyFunc FuncFvwmStopColors +# AddToFunc FuncFvwmStopColors + +# ============================================================================ +# V. Module Configurations (under modules/) +# ============================================================================ + +# The actual module configuration commands, including their colorset +# settings may be found in the theme directory modules/ in files named +# main:FvwmModule and main:FvwmModule-SubName. +# +# Examples: +# +# *FvwmPager-Single: Colorset * 14 +# *FvwmPager-Single: HilightColorset * 15 +# *FvwmPager-Single: WindowColorsets 1 2 +# *FvwmPager-Single: BalloonColorset * 16 +# +# *FvwmPager-Desker: Colorset * 14 +# *FvwmPager-Desker: HilightColorset * 15 +# *FvwmPager-Desker: WindowColorsets 1 2 +# *FvwmPager-Desker: BalloonColorset * 16 +# +# *FvwmIconMan: *colorset 12 +# *FvwmIconMan: *iconcolorset 19 +# *FvwmIconMan: *plaincolorset 17 +# *FvwmIconMan: *selectcolorset 20 +# *FvwmIconMan: *focuscolorset 18 +# *FvwmIconMan: *focusandselectcolorset 20 +# +# *FvwmButtons: Colorset 10 +# +# *FvwmTaskBar: Colorset 17 +# *FvwmTaskBar: FocusColorset 18 +# *FvwmTaskBar: IconColorset 19 +# *FvwmTaskBar: TipsColorset 16 +# +# *FvwmWinList: Colorset 17 +# *FvwmWinList: FocusColorset 18 +# *FvwmWinList: IconColorset 19 +# +# *FvwmIconBox: Colorset 12 +# *FvwmIconBox: IconColorset 17 +# *FvwmIconBox: IconHiColorset 18 + +# ============================================================================ +# VI. Miscellaneous Configurations +# ============================================================================ + +# Application colorsets are used in menus@default and menus-programs@default, +# functions@default, functions-appbind@default and other components. +# +# Examples: +# +# Module FvwmConsole -fg $[fg.cs22] -bg $[bg.cs22] +# Exec exec xterm -fg $[fg.cs30] -bg $[bg.cs30] +# Exec exec xterm -fg $[fg.cs31] -bg $[bg.cs31] -e su -l +# Exec exec xterm -fg $[fg.cs32] -bg $[bg.cs32] -T "Remote" -e rsh tiger +# Exec exec xterm -fg $[fg.cs33] -bg $[bg.cs33] -T "File Viewer" -e less "$0" +# FvwmScript FvwmScript-ThemesCenter --text-colorset 36 --viewer-colorset 33 +# FvwmScript FvwmScript-IconBrowser --text-colorset 36 --icon-colorset 10 + +# Module FvwmGtk +# *FvwmGtk: Destroy gnome-all +# *FvwmGtk: Menu gnome-all +# *FvwmGtk: Title "Gnome Menus" +# *FvwmGtk: Separator +# *FvwmGtk: Destroy gnome-sys +# *FvwmGtk: Submenu "System" gnome-sys +# *FvwmGtk: Destroy gnome-user +# *FvwmGtk: Submenu "User" gnome-user +# *FvwmGtk: Destroy gnome-redhat +# *FvwmGtk: Submenu "RedHat" gnome-redhat +# +# PipeRead 'fvwm-menu-desktop --type gtk --enable-mini-icons --icon-folder :re --icon-app :re --icon-title :re --icon-toptitle :re' +# PipeRead 'fvwm-menu-desktop --type gtk --desktop gnome-user --enable-mini-icons' +# PipeRead 'fvwm-menu-desktop --type gtk --desktop gnome-redhat --enable-mini-icons' + +DestroyModuleConfig GridButtons +#*GridButtons: geometry 144x96 +*GridButtons: columns 2 +*GridButtons: rows 2 +*GridButtons: (Title "0", Action "MoveLastWindowToPage 0 0") +*GridButtons: (Title "2", Action "MoveLastWindowToPage 1 0") +*GridButtons: (Title "1", Action "MoveLastWindowToPage 0 1") +*GridButtons: (Title "3", Action "MoveLastWindowToPage 1 1") + --- fvwm-2.5.27.ds.orig/debian/manoj/init-restart.hook +++ fvwm-2.5.27.ds/debian/manoj/init-restart.hook @@ -0,0 +1,30 @@ +# +# Section: Init and restart functions +# +# This section defines the functions InitFunction and RestartFunction. +# InitFunction is executed automatically when fvwm first starts. +# RestartFunction is executed automatically when fvwm restarts itself. +# They share a common hook, init-restart.hook, and two specific hooks, +# init.hook and restart.hook. +# +# init-restart.hook should be used for starting fvwm modules, such as the +# button bar. init-hook should be used to start other applications; they +# should not be started again, when fvwm is restarted, since they don't +# die like fvwm modules do. restart.hook exists mostly for completeness; +# tell me if you find any use for it. +# +# InitFunction runs the script setup-background, which looks in +# ~/.fvwm2 to see if the user wants some specific background color or +# image. +# +#===================================================== 8. Special functions +# 8. Special functions ++ I Module FvwmButtons ++ I Module FvwmBacker ++ I Module FvwmCommandS ++ I Module FvwmAnimate + +#+ "I" Exec nice xdaliclock -geometry 300x100-55-60 -cycle -shape \ +# -memory high -noseconds -visual TrueColor & +#+ "I" Exec nice xticktalk -before -approximate -geometry +1+1 \ +# -fn '-adobe-times-bold-r-*-*-24-*-*-*-*-*-*-*' & --- fvwm-2.5.27.ds.orig/debian/manoj/FvwmForm-Setup +++ fvwm-2.5.27.ds/debian/manoj/FvwmForm-Setup @@ -0,0 +1,67 @@ +# FvwmForm-Setup - Setup Text for fvwm +# Caution, during install, this file goes thru sed, a trailing newline +# is required. +DestroyModuleConfig FvwmForm-Setup: * +*FvwmForm-Setup: WarpPointer +# Layout +*FvwmForm-Setup: Line center +*FvwmForm-Setup: Text "fvwm - Create Configuration" +*FvwmForm-Setup: Line left +*FvwmForm-Setup: Text " " +*FvwmForm-Setup: Line left +*FvwmForm-Setup: PadVText 0 +*FvwmForm-Setup: Text "Use this form to create your fvwm2rc configuration file." +*FvwmForm-Setup: Line left +*FvwmForm-Setup: Text "The file created is ~/.fvwm/.fvwm2rc or $FVWM_USERDIR/.fvwm2rc." +*FvwmForm-Setup: Line left +*FvwmForm-Setup: Text "" +*FvwmForm-Setup: Line left +*FvwmForm-Setup: Text "After creation, the fvwm2rc file can then be changed with any" +*FvwmForm-Setup: Line left +*FvwmForm-Setup: Text "editor to suit your own needs." +*FvwmForm-Setup: Line left +*FvwmForm-Setup: Text "" +*FvwmForm-Setup: Line left +*FvwmForm-Setup: Selection meth multiple +*FvwmForm-Setup: Choice BASIC BASIC on "Create a starting .fvwm2rc file" +*FvwmForm-Setup: Line left +*FvwmForm-Setup: Text "" +*FvwmForm-Setup: Line left +*FvwmForm-Setup: Text "These files are optional. Select the modules you want to customize." +*FvwmForm-Setup: Line left +*FvwmForm-Setup: Text "You can always copy them later." +*FvwmForm-Setup: Line left +*FvwmForm-Setup: Text "" +*FvwmForm-Setup: Line left +*FvwmForm-Setup: Selection meth multiple +*FvwmForm-Setup: Choice BAK BAK off "FvwmBacker " +*FvwmForm-Setup: Choice BUT BUT off "FvwmButtons " +*FvwmForm-Setup: Choice BOX BOX off "FvwmIconBox " +*FvwmForm-Setup: Choice MAN MAN off "FvwmIconMan " +*FvwmForm-Setup: Line left +*FvwmForm-Setup: Selection meth multiple +*FvwmForm-Setup: Choice IDN IDN off "FvwmIdent " +*FvwmForm-Setup: Choice PAG PAG off "FvwmPager " +*FvwmForm-Setup: Choice SCR SCR off "FvwmScroll " +*FvwmForm-Setup: Choice TSK TSK off "FvwmTaskBar " +*FvwmForm-Setup: Line left +*FvwmForm-Setup: Selection meth multiple +*FvwmForm-Setup: Choice WIN WIN off "FvwmWinList " + +# Buttons +*FvwmForm-Setup: Line center +*FvwmForm-Setup: Button quit "Return - Dismiss" ^M +*FvwmForm-Setup: Command Nop +*FvwmForm-Setup: Button continue "F2 - Copy Config File(s)" F2 +*FvwmForm-Setup: Command $(BASIC?!/bin/cp /usr/share/fvwm/ConfigFvwmSetup ${FVWM_USERDIR}/.fvwm2rc) +*FvwmForm-Setup: Command $(BAK?!/bin/cp /usr/share/fvwm/ConfigFvwmBacker ${FVWM_USERDIR}) +*FvwmForm-Setup: Command $(BUT?!/bin/cp /usr/share/fvwm/ConfigFvwmButtons ${FVWM_USERDIR}) +*FvwmForm-Setup: Command $(BOX?!/bin/cp /usr/share/fvwm/ConfigFvwmIconBox ${FVWM_USERDIR}) +*FvwmForm-Setup: Command $(MAN?!/bin/cp /usr/share/fvwm/ConfigFvwmIconMan ${FVWM_USERDIR}) +*FvwmForm-Setup: Command $(IDN?!/bin/cp /usr/share/fvwm/ConfigFvwmIdent ${FVWM_USERDIR}) +*FvwmForm-Setup: Command $(PAG?!/bin/cp /usr/share/fvwm/ConfigFvwmPager ${FVWM_USERDIR}) +*FvwmForm-Setup: Command $(SCR?!/bin/cp /usr/share/fvwm/ConfigFvwmScroll ${FVWM_USERDIR}) +*FvwmForm-Setup: Command $(TSK?!/bin/cp /usr/share/fvwm/ConfigFvwmTaskBar ${FVWM_USERDIR}) +*FvwmForm-Setup: Command $(WIN?!/bin/cp /usr/share/fvwm/ConfigFvwmWinList ${FVWM_USERDIR}) +*FvwmForm-Setup: Button quit "F3 - Restart fvwm" +*FvwmForm-Setup: Command Restart --- fvwm-2.5.27.ds.orig/debian/manoj/init.hook +++ fvwm-2.5.27.ds/debian/manoj/init.hook @@ -0,0 +1,24 @@ +# +# Section: Init and restart functions +# This section defines the functions InitFunction and RestartFunction. +# InitFunction is executed automatically when fvwm first starts. +# RestartFunction is executed automatically when fvwm restarts itself. +# They share a common hook, init-restart.hook, and two specific hooks, +# init.hook and restart.hook. +# +# init-restart.hook should be used for starting fvwm modules, such as the +# button bar. init-hook should be used to start other applications; they +# should not be started again, when fvwm is restarted, since they don't +# die like fvwm modules do. restart.hook exists mostly for completeness; +# tell me if you find any use for it. +# +# InitFunction runs the script setup-background, which looks in +# ~/.fvwm2 to see if the user wants some specific background color or +# image. +# +#===================================================== 8. Special functions +# 8. Special functions +# Stuff to do at start-up +#+ "I" Exec setup-background +#+ "I" Exec xautolock & + --- fvwm-2.5.27.ds.orig/debian/manoj/screendiffs.hook +++ fvwm-2.5.27.ds/debian/manoj/screendiffs.hook @@ -0,0 +1,68 @@ + +undefine('include') +define(stripquote, {[substr(substr($1,1), 0, index(substr($1,1),'))]}) +# Start + +# This file is really created to disrtinguish between my laptop and +# the destop. For the desktop XPIX and YPIX are 24 and 32; for the +# laptop it is 32 and 43 respectively. Please note that by themselves, +# these are not enough; you need the physical sixe of the screen to +# make a call. +define(XSIZE, ifelse(CLIENTHOST, `calidity', 12, CLIENTHOST, `glaurung', 16, 16))dnl +define(YSIZE, ifelse(CLIENTHOST, `calidity', 9, CLIENTHOST, `glaurung', 12, 12))dnl + +define(XPIX, eval(WIDTH / XSIZE))dnl +define(YPIX, eval(HEIGHT / YSIZE))dnl + +ifelse(eval(XPIX < 100), 1, `', ` +DefaultFont "Shadow=1 NE:-adobe-helvetica-bold-r-*-*-18-*-*-*-*-*-*-*" +DefaultFont "Shadow=1 NE:-bitstream-bitstream vera sans mono-medium-r-normal--*-*-*-*-m-*-*-*" +')dnl + + +# Styles +ifelse(eval(XPIX < 100), 1, ` +Style "*" Font -adobe-helvetica-bold-r-*-*-13-*-*-*-*-*-*-* +Style * IconFont -adobe-helvetica-bold-r-*-*-13-*-*-*-*-*-*-* +MenuStyle * Font "Shadow=1 NE:StringEncoding=UTF-8:xft:Verdana:Medium:pixelsize=13:minspace=True;-adobe-courier-bold-r-normal--10-*" +Style "login" Font -adobe-helvetica-bold-r-*-*-13-*-*-*-*-*-*-* +*FvwmIdentFont -adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-* +*FvwmIconBoxFont -adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-* +*FvwmPagerFont -adobe-helvetica-bold-r-*-*-10-*-*-*-*-*-*-* +*FvwmWinListFont -adobe-helvetica-bold-r-*-*-10-*-*-*-*-*-*-* +*FvwmButtonsFont -adobe-helvetica-bold-r-*-*-11-*-*-*-*-*-*-* +*FvwmTaskBar: Font -adobe-helvetica-medium-r-*-*-14-*-*-*-*-*-*-* +*FvwmTaskBar: SelFont -adobe-helvetica-bold-r-*-*-14-*-*-*-*-*-*-* +*FvwmTaskBar: StatusFont fixed +*FvwmPagerSmallFont 5x8 +', ` +Style "*" Font "Shadow=1 NE:-bitstream-bitstream vera sans mono-medium-r-normal--*-*-*-*-m-*-*-*" +Style * IconFont -adobe-helvetica-bold-r-*-*-18-*-*-*-*-*-*-* +MenuStyle * Font "Shadow=1 NE:StringEncoding=UTF-8:xft:bitstream vera sans mono:Medium:pixelsize=14:minspace=True;-bitstream-bitstream vera sans mono-medium-r-normal--17-120-100-100-m-*-*-*" +Style "login" Font -adobe-helvetica-bold-r-*-*-18-*-*-*-*-*-*-* +Style "xterm" Font -adobe-helvetica-bold-r-*-*-13-*-*-*-*-*-*-* +*FvwmIdentFont -adobe-helvetica-medium-r-*-*-17-*-*-*-*-*-*-* +*FvwmIconBoxFont -adobe-helvetica-medium-r-*-*-17-*-*-*-*-*-*-* +*FvwmPagerFont -adobe-helvetica-bold-r-*-*-11-*-*-*-*-*-*-* +*FvwmWinListFont -adobe-helvetica-bold-r-*-*-18-*-*-*-*-*-*-* +*FvwmButtonsFont -adobe-helvetica-bold-r-*-*-18-*-*-*-*-*-*-* +*FvwmTaskBar: Font -adobe-helvetica-medium-r-*-*-17-*-*-*-*-*-*-* +*FvwmTaskBar: SelFont -adobe-helvetica-bold-r-*-*-17-*-*-*-*-*-*-* +*FvwmTaskBar: StatusFont fixed +*FvwmPagerSmallFont 5x8 +')dnl + +# FvwmForm differences +ifelse(eval(XPIX < 100), 1, ` +*FvwmForm-Form: Input Font 63 "8x13bold" +*FvwmForm-Form: Input InputFont 63 "8x13bold" +*FvwmForm-Form: Input ButtonFont 63 "8x13bold" +*FvwmForm-RootCursor: ButtonFont 6x13 +', ` +*FvwmForm-Form: Input Font 63 "8x16" +*FvwmForm-Form: Input InputFont 63 "8x16" +*FvwmForm-Form: Input ButtonFont 63 "8x16" +*FvwmForm-RootCursor: ButtonFont 9x15 +Style "xterm" Font -adobe-helvetica-bold-r-*-*-18-*-*-*-*-*-*-* +')dnl + --- fvwm-2.5.27.ds.orig/debian/manoj/FvwmForm-Rlogin +++ fvwm-2.5.27.ds/debian/manoj/FvwmForm-Rlogin @@ -0,0 +1,30 @@ +DestroyModuleConfig FvwmForm-Rlogin: * +*FvwmForm-Rlogin: WarpPointer +*FvwmForm-Rlogin: Line center +*FvwmForm-Rlogin: Text "Login to Remote Host" +*FvwmForm-Rlogin: Line center +*FvwmForm-Rlogin: Text "Host:" +*FvwmForm-Rlogin: Input HostName 20 "" +*FvwmForm-Rlogin: Line center +*FvwmForm-Rlogin: Selection UserSel single +*FvwmForm-Rlogin: Choice Default Default on "same user" +*FvwmForm-Rlogin: Choice Custom Custom off "user:" +*FvwmForm-Rlogin: Input UserName 10 "" +*FvwmForm-Rlogin: Line expand +*FvwmForm-Rlogin: Button quit "Login" ^M +*FvwmForm-Rlogin: Command Exec exec ssh $(Custom?-l $(UserName)) $(HostName) xterm -T $(UserName)@$(HostName) -display $HOSTDISPLAY & +# Before saving the data, remove any previously saved data: +*FvwmForm-Rlogin: Command DestroyModuleConfig FvwmForm-RloginDefault: * +# The "Login" button causes a login and a saving of the current data: +*FvwmForm-Rlogin: Command !( /bin/echo \ + "# This file last created by FvwmForm-Rlogin on: `/bin/date`."; /bin/echo \ + '*FvwmForm-RloginDefault: HostName $(HostName)' ; /bin/echo \ + '*FvwmForm-RloginDefault: UserName $(UserName)' ; /bin/echo \ + '*FvwmForm-RloginDefault: Default $(Default?on)' ; /bin/echo \ + '*FvwmForm-RloginDefault: Custom $(Custom?on)' \ +) > ${FVWM_USERDIR}/.FvwmForm-Rlogin +*FvwmForm-Rlogin: Button restart "Reset" +*FvwmForm-Rlogin: Button quit "Cancel" ^[ +*FvwmForm-Rlogin: Command Nop +# Tell FvwmForm to read vars from the .FvwmForm-RloginDefault file: +*FvwmForm-Rlogin: UseData .FvwmForm-Rlogin *FvwmForm-RloginDefault --- fvwm-2.5.27.ds.orig/debian/manoj/FvwmForm-TalkHelp +++ fvwm-2.5.27.ds/debian/manoj/FvwmForm-TalkHelp @@ -0,0 +1,27 @@ +# FvwmForm-TalkHelp - Help Text for FvwmForm-Talk +DestroyModuleConfig FvwmForm-TalkHelp: * +*FvwmForm-TalkHelp: WarpPointer +# Layout +*FvwmForm-TalkHelp: Line center +*FvwmForm-TalkHelp: Text "Talk to Fvwm - Help" +*FvwmForm-TalkHelp: Line left +*FvwmForm-TalkHelp: Text " " +*FvwmForm-TalkHelp: Line left +*FvwmForm-TalkHelp: PadVText 0 +*FvwmForm-TalkHelp: Text "Enter commands in the \"Command:\" input field." +*FvwmForm-TalkHelp: Line left +*FvwmForm-TalkHelp: Text "Commands beginning with \"!\" are executed by the" +*FvwmForm-TalkHelp: Line left +*FvwmForm-TalkHelp: Text "shell as a sub-process of the form." +*FvwmForm-TalkHelp: Line left +*FvwmForm-TalkHelp: Text "All other commands are sent to fvwm for execution." +*FvwmForm-TalkHelp: Line left +*FvwmForm-TalkHelp: Text "" +*FvwmForm-TalkHelp: Line left +*FvwmForm-TalkHelp: Text "Fvwm error messages are shown on the \"Msg:\" line." +*FvwmForm-TalkHelp: Line left +*FvwmForm-TalkHelp: Text "" +# Buttons +*FvwmForm-TalkHelp: Line center +*FvwmForm-TalkHelp: Button quit "Return - Dismiss" ^M +*FvwmForm-TalkHelp: Command Nop --- fvwm-2.5.27.ds.orig/debian/manoj/style.hook +++ fvwm-2.5.27.ds/debian/manoj/style.hook @@ -0,0 +1,379 @@ + +# +# Section: Styles, colors, fonts, and related things +# +# This section defines the looks, behavior, and other attributes of windows. +# These are also quite personal. Modify them in post.hook. +# +# +# The following sets window colors. This is highly personal, +# of course. +# + +#===================================================== 6. styles +# 6. Set the decoration styles and window options +# Order is important!!!! +# If compatible styles are set for a single window in multiple Style +# commands, then the styles are ORed together. If conflicting styles +# are set, the last one specified is used. + +# These commands should command before any menus or functions are +# defined, and before the internal pager is started. + +# I think I made a discovery - I asked a day ago about starting +# applications on another desk *without* having fvwm switch back and +# forth between desks when the application(s) are starting. + +# When browsing the source (style.c and placement.c) I noticed a style +# called SkipMapping. I added the SkipMapping style to the apps I +# didnt want to map when starting in my .fvwmrc and lo and behold - IT +# WORKED! + +# Is the SkipMapping an - OHH I LOVE THIS - and UNDOCUMENTED feature??? +# I couldnt find any ref to it in the man pages.. + + +######################## FOCUS STUFF ############################## +# Set windows to auto-raise after 750 milliseconds if you like it. +# Autoraise can sometimes obscure pop-up windows. Performance is now +# similar to olvwm's auto-raise feature. +#AutoRaise 750 + +# Normally, we'll be in focus-follows mouse mode, but uncomment this +# for mwm-style click-to-focus +#ClickToFocus + +# or, you might like SloppyFocus, which is like focus-follow (the default +# mode), but the focus won't be removed until you go into another window +Style "*" SloppyFocus + + +# BorderStyle +# +# This sets how the border of windows will be displayed. +# Format: BorderStyle [state] [style] [ -- [!flag] ... ] +# State is either Active or Inactive +# The commands below set the borders to solid colors +# NoInset HiddenHandles +#BorderStyle -- Flat, Noinset +BorderStyle Active -- Raised +BorderStyle Inactive -- Sunk + +# Style * TitleAtRight +# Style * RightTitleRotatedCCW # CCW = counter-clock-wise, default: CW +# Style * !UseTitleDecorRotation # don't rotate titlebar pixmaps/gradients + +# this is used for non-selected windows, menus, and the panner +##Style "*" IconBox -240 540 -1 675 +Style "*" IconBox -160 800 -1 1000 +Style "Emacs" IconBox -160 400 -1 795 +Style "XTerm" IconBox -160 180 -1 395 + +Style * IconTitleRelief 0 +Style * IconBackgroundRelief 0 +Style * IconBackgroundPadding 0 +Style * IndexedIconName + +Style "*" BorderWidth 5, HandleWidth 5 +Style "*" Icon unknown1.xpm +Style * ResizeOpaque + +######################## WINDOW PLACEMENT ####################### +# RandomPlacement prevents user interaction while placing windows: +# RandomPlacement + +# SmartPlacement makes new windows pop-up in blank regions of screen +# if possible, or falls back to random or interactive placement. +#Style "*" RandomPlacement, SmartPlacement, CleverPlacement +Style "*" MinOverlapPercentPlacement + + +Style * WindowShadeSteps 20, ResizeOpaque + +Style FvwmButtons ParentalRelativity +Style Fvwm* ParentalRelativity + +# With SmartPlacement, windows will normally place themselves over icons. +# Uncomment this to change that. +#! StubbornPlacement + +# NoPPosition instructs fvwm to ignore the PPosition field in window +# geometry hints. Emacs annoyingly sets PPosition to (0,0)! +Style "*" NoPPosition + +######################## DECORATIONS ####################### +# If you want decorated transient windows, uncomment this: +Style "*" DecorateTransient + + +######################## MWM EMULATION ####################### +# +# My feeling is that everyone should use MWMDecorHints and MWMFunctionHints, +# since some applications depend on having the window manager respect them + +# MWMFunction hints parses the function information in the MOTIF_WM_HINTS +# property, and prohibits use of these functions on the window. Appropriate +# portions of the window decorations are removed. +Style "*" MWMFunctions + +# MWM is kinda picky about what can be done to transients, and it was keeping +# me from iconifying some windows that I like to iconify, so here's an +# over-ride that will allow me to do the operation, even tough the menu +# item is shaded out. +Style "*" HintOverride + +# MWMDecor hints parses the decoration information in the MOTIF_WM_HINTS +# property, and removes these decoratons from the window. This does not affect +# the functions that can be performed via the menus. +Style "*" MWMDecor + +# These are affect minor aspects for the look-and-feel. +# Sub-menus placement mwm-style? +#MWMMenus +# mwm-style border reliefs (less deep than default fvwm) ? +Style "*" MWMBorder +# Maximize button does mwm-inversion thingy +Style "*" MWMButtons +###################################################################### + + +# Leave a band on the right alone? +#EwmhBaseStruts 0 0 0 25 +#EWMHPlacementUseWorkingArea ? + +# I want to lower the main window but leave the small status window visible +Style * !LowerTransient, RaiseTransient, !StackTransientParent + + +###### +# Menu Settings. +# +# * PopupOffset allows you to control where submenus will appear, and +# whether they should overlap or not. +# * This menu uses a translucent Colorset +# * The Menu will look flat, with a 2 pixel border. +# * I changed the default ItemFormat to be a little more spacious. +MenuStyle * MenuFace +MenuStyle * ActiveFore, HilightBack +MenuStyle "*" PopupDelayed, PopupDelay 100, PopdownDelayed, PopdownDelay 200 +MenuStyle * Hilight3DThin, PopupOffset 0 100 +MenuStyle * PopupActiveArea 100 +MenuStyle * BorderWidth 2, TitleUnderlines1, SeparatorsLong, TrianglesSolid, Animation +MenuStyle * ItemFormat "%.2|%.5i%.5l%.5i%2.3>%2|" +MenuStyle * AutomaticHotKeys + + +##### +# Application specific Style settings +# +# You might be interested in the IconOverride style, which will allow you to specify +# an Icon for an application even if it has set its own previously, This can be very +# useful for applications that insist on setting their own icons even if it doesnt +# fit in with your theme :) +# +# You can change most settings for specific applications, based on Name, +# Class or Resource. you can also use wildcards, eg Style "Fvwm*" NoTitle. +################# + +Style "Fvwm*" NoTitle,NoHandles,Sticky,CirculateSkip +Style "Fvwm*" BorderWidth 0, WindowListSkip +Style FvwmCo* Slippery +Style FvwmIdent* Layer 6, WindowListHit ,NoButton 1,NoButton 2, NoButton 4, Title + +#Style FvwmPager* Layer 6 , NoButton 1 , NoButton 2 , TitleAtRight +Style "FvwmPager" WindowListSkip, BorderWidth 0, HandleWidth 0, ParentalRelativity, TitleAtRight + +Style "FvwmBanner" StaysOnTop, FocusFollowsMouse, NoTitle, Sticky, WindowListSkip +Style "FvwmButtons" BorderWidth 5 +Style "FvwmButtons" WindowListSkip,MouseFocus,NoTitle,Sticky +Style "FvwmButtonsPanel" NoTitle, FocusFollowsMouse, NoTitle, Sticky, WindowListSkip +Style FvwmButton* NoButton 1 , NoButton 2 , TitleAtRight +Style FvwmTabs Title + +Style FvwmButtons NeverFocus +Style fvwm_menu ParentalRelativity + +Style FvwmShelf NoTitle, StaysOnBottom, Sticky, WindowListSkip, CirculateSkipIcon, CirculateSkip +Style FvwmShelf HandleWidth 2, NeverFocus +Style DeskControl NoTitle, NeverFocus, CirculateSkip, WindowListSkip, Sticky, StaysOnTop, Layer 7 +Style FvwmBar NoTitle, WindowListSkip, CirculateSkip, Sticky, BorderWidth 1, NoHandles, StaysOnBottom +Style FvwmBar NeverFocus + + +Style OpenOffice* GNOMEIgnoreHints +Style OpenOffice* EWMHIgnoreStackingOrderHints +Style OpenOffice* EWMHIgnoreStateHints +Style OpenOffice* EWMHIgnoreStrutHints +Style OpenOffice* NoPPosition +Style OpenOffice* NoUsposition +Style OpenOffice* FixedPPosition + +Style "Xwall" NoIcon +Style "*BBDB*" NoIcon +Style "*Calendar*" NoIcon +Style "*Compilation*" NoIcon +Style "*Fancy Diary*" NoIcon +Style "*Help*" NoIcon +Style "*Holidays*" NoIcon +Style "*PostScript File" NoTitle +Style "*TeX Shell*" NoIcon +Style "*compilation*" NoIcon +Style "*grep*" NoIcon +Style "*lock" CirculateSkip +Style "*lock" NoTitle, NoHandles, Sticky, WindowListSkip +Style "*x-face*" NoTitle,NoHandles,WindowListSkip +Style "*xfaces*" NoTitle,NoHandles,WindowListSkip +Style "*xbiff" CirculateSkip +Style "*xbiff" NoTitle,NoHandles,Sticky,WindowListSkip +Style "-(Tek)" NoIcon +Style "Appointment" NoButton 2, NoButton 4 +Style "Dali Clock" NoTitle,Sticky,WindowListSkip,NoIcon,CirculateSkip +Style "FRAMEPOP" NoTitle,Sticky,WindowListSkip,CirculateSkip + +Style "FvwmButtons" Sticky, NoTitle,NoHandles,CirculateSkip +Style "Garbage" Title, Handles +Style "Help On PostScript" NoTitle,NoIcon +Style "Information" NoTitle +Style "Load Averages" NoTitle,Sticky,WindowListSkip,CirculateSkip +Style "Message" NoTitle +Style "Work1" Sticky +Style "XClock" NoTitle +Style "XPbiff" NoTitle +Style "dctrl" NoIcon +Style "Dctrl" NoIcon +Style kcalc NoFuncHint, NoDecorHint +Style "pgp-pixie" NoTitle +Style "popup" NoTitle +Style "sunclock" NoTitle,Sticky,WindowListSkip +Style "window info" NoTitle +Style "wmbattery" NoTitle,Sticky,WindowListSkip,CirculateSkip +Style "work1" Sticky +Style "xcb" Sticky,WindowListSkip,CirculateSkip +Style "xcd" NoTitle +Style "xchat" Sticky +Style "xclock" NoTitle,Sticky,WindowListSkip +Style "xconsole" Sticky,WindowListSkip,CirculateSkip +Style "xload" NoTitle,Sticky,WindowListSkip,NoIcon +Style "xmoondial" NoTitle +Style "xmultibiff" CirculateSkip +Style "xmultibiff" NoTitle,Sticky,StaysOnTop,WindowListSkip +Style "xbuffy" CirculateSkip +Style "xbuffy" NoTitle,Sticky,StaysOnTop,WindowListSkip +Style "xticktalk" NoTitle,Sticky,WindowListSkip,CirculateSkip +Style "gkrellm" Sticky, WindowListSkip,CirculateSkip, StaysOnBottom, NeverFocus + +Style XMMS* BorderWidth 0,Icon,GNOMEIgnoreHints +Style XMMS* Sticky,NoTitle,StaysOnTop,NoHandles +Style xmms UseUSPosition, UsePPosition +Style XTerm MiniIcon computer_x11.png +Style Eterm MiniIcon computer_x11.png +Style Emacs TitleAtLeft, LeftTitleRotatedCCW +Style xcalc ClickToFocus +Style xman ClickToFocus, MiniIcon book_help_paper.png +Style xmag ClickToFocus, MiniIcon document_database_view.png +Style Gkrellm2 Sticky, WindowListSkip, StaysOnBottom, NeverFocus +Style opera EWMHMiniIconOverride, MiniIcon opera.png +Style XVroot GrabFocus +Style gmrun MiniIcon gears.png, NoFuncHint, NoDecorHint +Style FvwmIdent MiniIcon label_tag_version.png +Style Calculator MiniIcon calculator.png +Style gcalctool EWMHMiniIconOverride,MiniIcon calculator.png +Style beep-media-player MiniIcon audio_horn.png, UsePPosition +Style xmessage MiniIcon person_face_talking.png +Style xchat-2 !FPFocusByProgram, NoFuncHint, NoDecorHint +Style aterm WindowShadeShrinks +Style rxvt WindowShadeShrinks +Style Mulberry MiniIcon mail.png +Style Message MiniIcon person_face_talking.png +Style VMware MiniIcon hardware_computers.png +Style SDL_App EWMHMiniIconOverride, MiniIcon games_jesters-cap.png +Style XDosEmu EWMHMiniIconOverride, MiniIcon games_jesters-cap.png +Style FvwmScript-Quit MiniIcon plug.png +Style pan !FPFocusByProgram +Style nautilus EWMHMiniIconOverride, MiniIcon floppy_disk.png +Style abiword EWMHMiniIconOverride, MiniIcon document_letter_word-processor.png +Style grip EWMHMiniIconOverride, MiniIcon hardware_audio_cd.png +Style xv MiniIcon graphics_woman_panel.png +Style xwrits NoDecorHint, NoFuncHint +Style gvim EWMHMiniIconOverride, MiniIcon gvim.png +Style Firefox-bin EWMHMiniIconOVerride, MiniIcon firefox.png +Style HiddenConsole Sticky, WindowListSkip, Notitle, StaysOnTop, NoHandles +Style HiddenConsole WindowShadeSteps 100, ResizeHintOverride +Style gaim EWMHMiniIconOverride, MiniIcon instant-messenger.png +Style Ddd MiniIcon audio_waveform_view.png +Style Eboard MiniIcon games_chess.png +Style gimp EWMHMiniIconOverride, MiniIcon graphics_paint_edit.png +Style gimp-2.0 EWMHMiniIconOverride, MiniIcon graphics_paint_edit.png +Style findtextdialog NoFuncHint, NoDecorHint +Style fvwm_menu MiniIcon gears.png, NoButton 4 + + +Style "login" HilightFore White +Style "login" HilightBack #9a5a9187d9da + + +# FlickeringMoveWorkaround disables ConfigureNotify events that +# are usually sent to an application while it is moved. If some +# windows flicker annoyingly while being moved, this option may +# help you. Note that if this problem occurs it is not an fvwm +# bug, it is a problem of the application. + +BugOpts FlickeringMoveWorkaround True + + +# TitleStyle RightJustified + + +TitleStyle Inactive Colorset 51 -- flat +AddTitleStyle Inactive Colorset 52 50 # alpha == 60% here + +ButtonStyle All AllInactive Colorset 51 -- flat +AddButtonStyle All AllInactive Colorset 52 50 + + +ButtonStyle All AllInactive -- !UseTitleStyle flat +TitleStyle Active Colorset 52 -- raised + +ButtonStyle All AllActive -- UseTitleStyle raised + + +BorderStyle -- UseTitleStyle + + +AddToDecor login +#+ TitleStyle TiledPixmap purple-marble.xpm +#+ TitleStyle Inactive TiledPixmap teal.xpm +#+ BorderStyle Active TiledPixmap purple-marble.xpm +#+ BorderStyle Inactive TiledPixmap teal.xpm ++ ButtonStyle 1 5 25x75@0 75x75@0 75x25@0 25x25@1 25x75@1 ++ ButtonStyle 3 5 25x60@0 75x60@0 75x40@0 25x40@1 25x60@1 ++ ButtonStyle 4 5 50x20@1 20x45@1 50x80@1 80x45@0 50x20@0 ++ ButtonStyle 2 4 50x65@1 35x35@1 65x35@1 50x65@0 ++ AddButtonStyle All -- UseTitleStyle ++ TitleStyle RightJustified + +Style XTerm StickyIcon +Style "xterm" HilightFore Black +#Style "xterm" HilightFore #99ffaa +Style "xterm" HilightBack #9a5a9187d9da + +AddToDecor xterm +#+ TitleStyle TiledPixmap purple-marble.xpm +#+ TitleStyle Inactive TiledPixmap grey-marble.xpm.xpm +#+ BorderStyle Active TiledPixmap purple-marble.xpm +#+ BorderStyle Inactive TiledPixmap grey-marble.xpm.xpm ++ ButtonStyle 1 5 25x75@0 75x75@0 75x25@0 25x25@1 25x75@1 ++ ButtonStyle 3 5 25x60@0 75x60@0 75x40@0 25x40@1 25x60@1 ++ ButtonStyle 4 5 50x20@1 20x45@1 50x80@1 80x45@0 50x20@0 ++ ButtonStyle 2 4 50x65@1 35x35@1 65x35@1 50x65@0 ++ AddButtonStyle All -- UseTitleStyle ++ TitleStyle RightJustified + + +# Default +#TitleStyle ActiveUp TiledPixmap purple-marble.xpm +#TitleStyle ActiveDown TiledPixmap purple-marble.xpm +#BorderStyle Active TiledPixmap purple-marble.xpm +DestroyDecor recreate DecorBase +AddToDecor DecorBase ++ TitleStyle Centered --- fvwm-2.5.27.ds.orig/debian/manoj/FvwmAuto.hook +++ fvwm-2.5.27.ds/debian/manoj/FvwmAuto.hook @@ -0,0 +1,36 @@ + +DestroyFunc RestoreIconified +AddToFunc RestoreIconified ++ I Current (Iconic) Iconify false + + + +KillModule FvwmAuto +#Module FvwmAuto 5250 Raise Nop +Module FvwmAuto 3000 RestoreIconified Nop + +# Shade windows after a bit +#Module FvwmAuto 300 "ThisWindow (Shaded) WindowShade off" + +# Unachade shaded windows +#Module FvwmAuto 200 "Silent WindowShade off" "Silent WindowShade on" + +AddToFunc funky_cancel ++ I UnsetEnv funky_shade_w ++ I WindowShade + +# shade only windows that were previously unshaded when they received +# focus. +AddToFunc funky_shade ++ I WindowId $[funky_shade_w] (!shaded) WindowShade on + +AddToFunc funky_unshade ++ I funky_shade ++ I UnsetEnv funky_shade_w ++ I ThisWindow (shaded) SetEnv funky_shade_w $w ++ I WindowShade off + +AddToFunc StartFunction ++ I UnsetEnv funky_shade_w ++ I FvwmAuto 300 "Silent funky_unshade" "Silent funky_shade" + --- fvwm-2.5.27.ds.orig/debian/manoj/.FvwmAnimate +++ fvwm-2.5.27.ds/debian/manoj/.FvwmAnimate @@ -0,0 +1,7 @@ +# This file created by FvwmAnimate + +*FvwmAnimate: Effect Random +*FvwmAnimate: Iterations 12 +*FvwmAnimate: Width 4 +*FvwmAnimate: Twist 0.500000 +*FvwmAnimate: Delay 10 --- fvwm-2.5.27.ds.orig/debian/manoj/post.hook +++ fvwm-2.5.27.ds/debian/manoj/post.hook @@ -0,0 +1,2 @@ +# + --- fvwm-2.5.27.ds.orig/debian/manoj/headlines +++ fvwm-2.5.27.ds/debian/manoj/headlines @@ -0,0 +1,46 @@ +DestroyFunc FuncFvwmMenuHeadlines +AddToFunc FuncFvwmMenuHeadlines ++ I PipeRead "fvwm-menu-headlines --frontpage --wm-icons --site $0 --command='Exec mozilla -remote \"openURL(%u, new-tab)\"'" +DestroyMenu MenuFvwmHeadlines +AddToMenu MenuFvwmHeadlines "Headlines" Title ++ MissingSubmenuFunction FuncFvwmMenuHeadlines ++ "FreshMeat" Popup freshmeat ++ "LinuxToday" Popup linuxtoday ++ "Slashdot" Popup slashdot ++ "LinuxApps" Popup linuxapps ++ "DaemonNews" Popup daemonnews +#+ "GNOME News" Popup gnome-news +#+ "KDE News" Popup kde-news +#+ "RootPrompt" Popup rootprompt ++ "NewsForge" Popup newsforge ++ "Kuro5hin" Popup kuro5hin ++ "BBSpot" Popup bbspot +#+ "LinuxFr" Popup linuxfr ++ "ThinkGeek" Popup thinkgeek ++ "" Nop ++ "CNN" Popup cnn ++ "BBC-World" Popup bbc-world +#+ "BBC-SciTech" Popup bbc-scitech ++ "" Nop ++ "" Nop +#+ "Reset all" FuncFvwmResetHeadlines + +DestroyFunc FuncFvwmResetHeadlines +AddToFunc FuncFvwmResetHeadlines ++ I DestroyMenu freshmeat ++ I DestroyMenu linuxtoday ++ I DestroyMenu slashdot ++ I DestroyMenu linuxapps ++ I DestroyMenu daemonnews ++ I DestroyMenu gnome-news ++ I DestroyMenu kde-news ++ I DestroyMenu rootprompt ++ I DestroyMenu newsforge ++ I DestroyMenu kuro5hin ++ I DestroyMenu bbspot ++ I DestroyMenu linuxfr ++ I DestroyMenu thinkgeek ++ I DestroyMenu cnn ++ I DestroyMenu bbc-world ++ I DestroyMenu bbc-scitech + --- fvwm-2.5.27.ds.orig/debian/manoj/FvwmForm-RootCursor +++ fvwm-2.5.27.ds/debian/manoj/FvwmForm-RootCursor @@ -0,0 +1,154 @@ +# This form changes the root cursor font and color. + +DestroyModuleConfig FvwmForm-RootCursor: * +*FvwmForm-RootCursor: WarpPointer +*FvwmForm-RootCursor: Font fixed + +*FvwmForm-RootCursor: Text "Cursor font" +*FvwmForm-RootCursor: Selection cursor_font single + +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Choice cursor_font X_cursor off "X_cursor " +*FvwmForm-RootCursor: Choice cursor_font arrow off "arrow " +*FvwmForm-RootCursor: Choice cursor_font based_arrow_down off "based_arrow_down " +*FvwmForm-RootCursor: Choice cursor_font based_arrow_up off "based_arrow_up " +*FvwmForm-RootCursor: Choice cursor_font boat off "boat " +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Choice cursor_font bogosity off "bogosity " +*FvwmForm-RootCursor: Choice cursor_font bottom_left_corner off "bottom_left_corner " +*FvwmForm-RootCursor: Choice cursor_font bottom_right_corner off "bottom_right_corner" +*FvwmForm-RootCursor: Choice cursor_font bottom_side off "bottom_side " +*FvwmForm-RootCursor: Choice cursor_font bottom_tee off "bottom_tee " +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Choice cursor_font box_spiral off "box_spiral " +*FvwmForm-RootCursor: Choice cursor_font center_ptr off "center_ptr " +*FvwmForm-RootCursor: Choice cursor_font circle off "circle " +*FvwmForm-RootCursor: Choice cursor_font clock off "clock " +*FvwmForm-RootCursor: Choice cursor_font coffee_mug off "coffee_mug " +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Choice cursor_font cross off "cross " +*FvwmForm-RootCursor: Choice cursor_font cross_reverse off "cross_reverse " +*FvwmForm-RootCursor: Choice cursor_font crosshair off "crosshair " +*FvwmForm-RootCursor: Choice cursor_font diamond_cross off "diamond_cross " +*FvwmForm-RootCursor: Choice cursor_font dot off "dot " +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Choice cursor_font dotbox off "dotbox " +*FvwmForm-RootCursor: Choice cursor_font double_arrow off "double_arrow " +*FvwmForm-RootCursor: Choice cursor_font draft_large off "draft_large " +*FvwmForm-RootCursor: Choice cursor_font draft_small off "draft_small " +*FvwmForm-RootCursor: Choice cursor_font draped_box off "draped_box " +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Choice cursor_font exchange off "exchange " +*FvwmForm-RootCursor: Choice cursor_font fleur off "fleur " +*FvwmForm-RootCursor: Choice cursor_font gobbler off "gobbler " +*FvwmForm-RootCursor: Choice cursor_font gumby off "gumby " +*FvwmForm-RootCursor: Choice cursor_font hand1 off "hand1 " +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Choice cursor_font hand2 off "hand2 " +*FvwmForm-RootCursor: Choice cursor_font heart off "heart " +*FvwmForm-RootCursor: Choice cursor_font icon off "icon " +*FvwmForm-RootCursor: Choice cursor_font iron_cross off "iron_cross " +*FvwmForm-RootCursor: Choice cursor_font left_ptr on "left_ptr " +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Choice cursor_font left_side off "left_side " +*FvwmForm-RootCursor: Choice cursor_font left_tee off "left_tee " +*FvwmForm-RootCursor: Choice cursor_font leftbutton off "leftbutton " +*FvwmForm-RootCursor: Choice cursor_font ll_angle off "ll_angle " +*FvwmForm-RootCursor: Choice cursor_font lr_angle off "lr_angle " +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Choice cursor_font man off "man " +*FvwmForm-RootCursor: Choice cursor_font middlebutton off "middlebutton " +*FvwmForm-RootCursor: Choice cursor_font mouse off "mouse " +*FvwmForm-RootCursor: Choice cursor_font pencil off "pencil " +*FvwmForm-RootCursor: Choice cursor_font pirate off "pirate " +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Choice cursor_font plus off "plus " +*FvwmForm-RootCursor: Choice cursor_font question_arrow off "question_arrow " +*FvwmForm-RootCursor: Choice cursor_font right_ptr off "right_ptr " +*FvwmForm-RootCursor: Choice cursor_font right_side off "right_side " +*FvwmForm-RootCursor: Choice cursor_font right_tee off "right_tee " +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Choice cursor_font rightbutton off "rightbutton " +*FvwmForm-RootCursor: Choice cursor_font rtl_logo off "rtl_logo " +*FvwmForm-RootCursor: Choice cursor_font sailboat off "sailboat " +*FvwmForm-RootCursor: Choice cursor_font sb_down_arrow off "sb_down_arrow " +*FvwmForm-RootCursor: Choice cursor_font sb_h_double_arrow off "sb_h_double_arrow " +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Choice cursor_font sb_left_arrow off "sb_left_arrow " +*FvwmForm-RootCursor: Choice cursor_font sb_right_arrow off "sb_right_arrow " +*FvwmForm-RootCursor: Choice cursor_font sb_up_arrow off "sb_up_arrow " +*FvwmForm-RootCursor: Choice cursor_font sb_v_double_arrow off "sb_v_double_arrow " +*FvwmForm-RootCursor: Choice cursor_font shuttle off "shuttle " +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Choice cursor_font sizing off "sizing " +*FvwmForm-RootCursor: Choice cursor_font spider off "spider " +*FvwmForm-RootCursor: Choice cursor_font spraycan off "spraycan " +*FvwmForm-RootCursor: Choice cursor_font star off "star " +*FvwmForm-RootCursor: Choice cursor_font target off "target " +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Choice cursor_font tcross off "tcross " +*FvwmForm-RootCursor: Choice cursor_font top_left_arrow off "top_left_arrow " +*FvwmForm-RootCursor: Choice cursor_font top_left_corner off "top_left_corner " +*FvwmForm-RootCursor: Choice cursor_font top_right_corner off "top_right_corner " +*FvwmForm-RootCursor: Choice cursor_font top_side off "top_side " +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Choice cursor_font top_tee off "top_tee " +*FvwmForm-RootCursor: Choice cursor_font trek off "trek " +*FvwmForm-RootCursor: Choice cursor_font ul_angle off "ul_angle " +*FvwmForm-RootCursor: Choice cursor_font umbrella off "umbrella " +*FvwmForm-RootCursor: Choice cursor_font ur_angle off "ur_angle " +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Choice cursor_font watch off "watch " +*FvwmForm-RootCursor: Choice cursor_font xterm off "xterm " + +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Text "Cursor inner color" +*FvwmForm-RootCursor: Line expand + +*FvwmForm-RootCursor: Selection cursor_fg single +*FvwmForm-RootCursor: Line center +*FvwmForm-RootCursor: Choice cursor_fg black on " black " +*FvwmForm-RootCursor: Choice cursor_fg red off " red " +*FvwmForm-RootCursor: Choice cursor_fg green off " green " +*FvwmForm-RootCursor: Choice cursor_fg blue off " blue " +*FvwmForm-RootCursor: Choice cursor_fg bisque off " bisque " +*FvwmForm-RootCursor: Choice cursor_fg brown off " brown " +*FvwmForm-RootCursor: Choice cursor_fg gray off " gray " +*FvwmForm-RootCursor: Line center +*FvwmForm-RootCursor: Choice cursor_fg cyan off " cyan " +*FvwmForm-RootCursor: Choice cursor_fg violet off " violet " +*FvwmForm-RootCursor: Choice cursor_fg seagreen off " seagreen" +*FvwmForm-RootCursor: Choice cursor_fg navy off " navy " +*FvwmForm-RootCursor: Choice cursor_fg gold off " gold " +*FvwmForm-RootCursor: Choice cursor_fg yellow off " yellow " +*FvwmForm-RootCursor: Choice cursor_fg white off " white " + +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Text "Cursor outer color" +*FvwmForm-RootCursor: Line expand + +*FvwmForm-RootCursor: Selection cursor_bg single +*FvwmForm-RootCursor: Line center +*FvwmForm-RootCursor: Choice cursor_bg black off " black " +*FvwmForm-RootCursor: Choice cursor_bg red off " red " +*FvwmForm-RootCursor: Choice cursor_bg green off " green " +*FvwmForm-RootCursor: Choice cursor_bg blue off " blue " +*FvwmForm-RootCursor: Choice cursor_bg bisque off " bisque " +*FvwmForm-RootCursor: Choice cursor_bg brown off " brown " +*FvwmForm-RootCursor: Choice cursor_bg gray off " gray " +*FvwmForm-RootCursor: Line center +*FvwmForm-RootCursor: Choice cursor_bg cyan off " cyan " +*FvwmForm-RootCursor: Choice cursor_bg violet off " violet " +*FvwmForm-RootCursor: Choice cursor_bg seagreen off " seagreen" +*FvwmForm-RootCursor: Choice cursor_bg navy off " navy " +*FvwmForm-RootCursor: Choice cursor_bg gold off " gold " +*FvwmForm-RootCursor: Choice cursor_bg yellow off " yellow " +*FvwmForm-RootCursor: Choice cursor_bg white on " white " + +*FvwmForm-RootCursor: Line expand +*FvwmForm-RootCursor: Line expand + +*FvwmForm-RootCursor: Button continue " Set Root Cursor " +*FvwmForm-RootCursor: Command CursorStyle ROOT $(cursor_font!none) $(cursor_fg) $(cursor_bg) +*FvwmForm-RootCursor: Button quit " Finish " ^[ +*FvwmForm-RootCursor: Command Nop --- fvwm-2.5.27.ds.orig/debian/manoj/colorsets +++ fvwm-2.5.27.ds/debian/manoj/colorsets @@ -0,0 +1,401 @@ +########################################################################### +# set up the colors +# + +# selected (hilighted) window +# !HiForeColor Black (new command=HilightColor) +# HiBackColor PaleVioletRed +# !HiBackColor #9a5a9187d9da (new command=HilightColor) + +# Highlight color +# +# This sets the textcolor and background color for the active window +#Set the foreground and background color for selected windows +#Style * HilightFore #ff5555, HilightBack #1ea819 +HilightColor MidnightBlue #c06077 + +# sticky windows look like this +#!StickyForeColor Black (no sticky foreground color in fvwm2) +#!StickyBackColor CornflowerBlue (no sticky background color in fvwm2) + +# Menu colors +#!MenuForeColor Black (new command=MenuStyle) +#!MenuBackColor grey (new command=MenuStyle) +#!MenuStippleColor SlateGrey (new command=MenuStyle) + +# COLORSETS USED BY FVWM-THEMES +# +#This file includes the default colors@ component file (I, II, III and IV) and +#some comments on where these colorsets are used (V and VI). fvwm-themes uses +#internally colorsets 0 to 39, some colorsets are reserved for the future use. +#So, a user can freely use colorsets starting from 40 (for example, in his +#colors-extra@ component) if he ever needs any additional colorsets. +# +#Colorset N | Meaning | Usage Examples +#-----------+----------------------------+------------------------------------- +# 0 | default | feedback windows, FvwmScroll +# 1 | inactive window | window/icon titles, windows in Pager +# 2 | active window | window/icon titles, windows in Pager +# 3 | inactive borders | window borders (may copy 1) +# 4 | active borders | window borders (may copy 2) +# 5 | inactive menu item | menus (may have pixmap or gradient) +# 6 | active menu item | menus (only bg/fg used) +# 7 | greyed menu item | menus (only fg used) +# 8 | reserved | for the fvwm-themes future use +# 9 | reserved | for the fvwm-themes future use +# 10 | modules, default | Button Bar, Pager, other modules +# 11 | modules, default hilight | Button Bar +# 12 | modules, special | gradient for IconMan/IconBox +# 13 | modules, swallowed apps | bg, fg, sh, hi for xclock/xload etc. +# 14 | modules, default #2 | alternative for Pager, Button Bar +# 15 | modules, default hilight #2| alternative for Pager +# 16 | modules, balloons | TaskBar, Pager +# 17 | modules, winlist, standard | item of IconMan, WinList, TaskBar +# 18 | modules, winlist, active | --.-- +# 19 | modules, winlist, iconified| --.-- +# 20 | modules, winlist, pointed | --.-- +# 21 | modules, ident | FvwmIdent +# 22 | modules, console | FvwmConsole +# 23 | modules, transparent | Button Bar +# 24 | modules, reserved | for the fvwm-themes future use +# 25 | modules, reserved | for the fvwm-themes future use +# 26 | reserved | for the fvwm-themes future use +# 27 | reserved | for the fvwm-themes future use +# 28 | reserved | for the fvwm-themes future use +# 29 | dynamical/temporary | tools for choosing/previewing colors +# 30 | regular terminal | xterm/rxvt or any other terminal +# 31 | admin terminal | terminal for root (su) +# 32 | remote terminal | terminal with ssh/rsh/telnet +# 33 | viewer terminal | man, less, tail -f +# 34 | console application | top, editor +# 35 | dialog main area | FvwmScript, FvwmForm, xmessage +# 36 | dialog text area | FvwmScript, FvwmForm, xmessage +# 37 | reserved | for the fvwm-themes future use +# 38 | reserved | for the fvwm-themes future use +# 39 | reserved | for the fvwm-themes future use + +# **************************************************************************** +# +# I. FVWM Colorsets (0 to 9) +# I.1. Default Colorsets +# I.2. Window Decorations +# I.3. Menu Colorsets +# +# II. Module Colorsets (10 to 29) +# II.1. Common Colorsets +# II.2. Window List Module Colorsets +# II.3. Other Module Colorsets +# II.4. External Colorsets +# +# III. Application Colorsets (30 to 35) +# +# IV. Start/Stop functions +# +# V. Module Configurations (under modules/) +# +# VI. Miscellaneous Configurations +# +# **************************************************************************** + +# ============================================================================ +# I. FVWM Colorsets +# ============================================================================ + +# ---------------------- +# I.1. Default Colorsets +# ---------------------- + +# for feedback windows (like geometry window and NoteMessage) and FvwmScroll +# +#Colorset 0 fg black, bg #70A0A0 +#Colorset 0 fg white, Transparent +Colorset 0 fg Blue, Transparent + +# ----------------------- +# I.2. Window Decorations +# ----------------------- + +# The following colors are used in FvwmPager for the window colors +# and in a title bar of windows (shade/hilight colors, computed from +# the bg color, but might be specified directly by sh and hi). +# The title bar background is defined below using TitleStyle. + +# window title, inactive and active +# +#Colorset 1 fg black, bg rgb:88/7C/66, Plain, NoShape +#Colorset 1 fg #f6f6f6, bg black, IconAlpha 40 +Colorset 1 fg black, bg rgb:a0/a0/b0, Plain, NoShape + +Style "*" Colorset 1 + +#Colorset 2 fg white, bg black, fgsh black, IconAlpha 100 +Colorset 2 fg white, bg rgb:80/80/90, Plain, NoShape + +*FvwmPager: WindowColorsets 1 2 +Style * HilightColorset 2 + + +# window borders, inactive and active +# +Colorset 3 fg black, bg rgb:88/7C/66, Plain, NoShape + +Style * BorderColorset 3 + +Colorset 4 fg black, bg rgb:CC/BA/99, Plain, NoShape + +Style * HilightBorderColorset 4 + +# background for window title, buttons and border +# +DestroyFunc FuncFvwmDecorBackground +AddToFunc FuncFvwmDecorBackground ++ I TitleStyle ActiveUp (Solid rgb:CC/BA/99 -- Raised) ++ I TitleStyle ActiveDown (Solid rgb:CC/BA/99 -- Raised) ++ I TitleStyle Inactive (Solid rgb:88/7C/66 -- Raised) ++ I TitleStyle ToggledActiveUp (Solid rgb:CC/BA/99 -- Raised) ++ I TitleStyle ToggledActiveDown (Solid rgb:CC/BA/99 -- Raised) ++ I TitleStyle ToggledInactive (Solid rgb:88/7C/66 -- Raised) + ++ I ButtonStyle All Pixmap 16x16-general/empty.xpm ++ I ButtonStyle All -- UseTitleStyle + +# ------------------- +# I.3. Menu Colorsets +# ------------------- + +# inactive menu item fg+bg and menu face if any +# +#Colorset 5 fg black, bg rgb:A0/B8/D0, Plain, NoShape +#Colorset 5 RootTransparent, fg rgb:A0/B8/D0, bg rgb:08/08/03, CGradient 50 rgb:50/50/78 rgb:40/40/5a, Plain, NoShape +# Colorset 5 RootTransparent buffer, Tint rgb:00/30/30 20 +# Colorset 5 RootTransparent buffer, bg average, Tint black 30, bgTint black 30 +Colorset 5 Transparent, fg rgb:C7/DF/F7, fgsh grey30, Tint rgb:30/20/10 30 + +MenuStyle * MenuColorset 5 + +# active menu item fg+bg +# +# Colorset 6 RootTransparent, fg rgb:95/12/12, bg rgb:D0/D9/E8, Plain, NoShape +# Colorset 6 RootTransparent, fg rgb:f8/f8/f3, bg rgb:40/5a/40, Tint black 20, bgTint black 20 +Colorset 6 Transparent, fg rgb:f8/f8/f3, Tint black 20, bgTint black 20 +MenuStyle * ActiveColorset 6 + +# greyed menu item fg +# +#Colorset 7 RootTransparent, fg grey48, bg grey48, Plain, NoShape +Colorset 7 Transparent, fg grey48 + +MenuStyle * GreyedColorset 7 + +# ------------------------------------------------- +# Colorsets 8 and 9 are reserved for the future use. + +# ============================================================================ +# II. Module Colorsets +# ============================================================================ + +# ---------------------- +# II.1. Common Colorsets +# ---------------------- + +# default for modules +# For FvwmButtons, FvwmPager, can be also used for FvwmIconMan, FvwmIconBox. +# +# Colorset 10 fg black, bg rgb:80/A0/A0, Plain, NoShape +# Colorset 10 fg rgb:A9/99/A9, bg rgb:28/20/28, Plain, NoShape +Colorset 10 fg rgb:A9/99/A9, RootTransparent buffer + +*FvwmPager: Colorset 1 10 + +# default hilight for modules +# For hilighting a part of a button bar (some swallowed apps for example). +# +# Colorset 11 fg black, bg white, Plain, NoShape +Colorset 11 fg rgb:CA/B3/CA, bg rgb:08/10/58, Plain, NoShape + +*FvwmPager: HilightColorset 1 11 + +# special or funny: a gradient or a pixmap +# May be used in certain FvwmButtons, FvwmIconMan, FvwmIconBox. +# +Colorset 12 fg MistyRose, bg rgb:25/26/30, \ + VGradient 20 rgb:25/20/30 rgb:69/65/70, NoShape + +*FvwmIconBox: Colorset 12 + + +# swallowed window: the hilight and shadow colors should be defined +# (-hd of xclock and -hl of xload use sh, and -hl of xclock uses hi) +# +Colorset 13 fg HoneyDew, bg rgb:25/26/2C, hi Red, sh Gray10, \ + Plain, NoShape + + +# default #2 +# FvwmPager or to get more colors in FvwmButtons, can be set to 10. +# +#Colorset 14 fg rgb:A0/90/A0, bg rgb:12/14/16, Plain, NoShape +Colorset 14 fg rgb:A0/90/A0, RootTransparent + +*FvwmPager: Colorset 0 14 + +# default hilight #2 +# FvwmPager or to get more colors in FvwmButtons, can be set to 11. +# +#Colorset 15 RootTransparent, fg black, bg rgb:C0/F0/F0, Plain, NoShape +Colorset 15 fg rgb:DA/C3/DA, bg Sienna4, Plain, NoShape + +*FvwmPager: HilightColorset 0 15 +*FvwmIconMan: Colorset 15 + +# tips/balloons (TaskBar and FvwmPager) +# +#Colorset 16 RootTransparent, fg black, bg rgb:F0/F0/C0, Plain, NoShape +Colorset 16 Transparent, fg Yellow + +*FvwmPager: BalloonColorset * 16 + +*FvwmIconMan: FocusAndSelectColorset 16 +*FvwmIconMan: FocusColorset 16 + +# ---------------------------------- +# II.2. Window List Module Colorsets +# ---------------------------------- + +# standard item +# Colorset 17 fg black, bg rgb:80/A0/A0, Plain, NoShape +Colorset 17 fg black, bg rgb:90/A0/A0, Plain, NoShape + +# active item +Colorset 18 fg black, bg rgb:A0/C8/C8, Plain, NoShape + +# iconified item +Colorset 19 fg white, bg rgb:60/78/78, Plain, NoShape + +*FvwmIconBox: IconColorset 19 +Style * IconTitleColorset 19 +Style * IconBackGroundColorset 19 + +# pointed item +Colorset 20 fg black, bg rgb:88/AA/AA, Plain, NoShape + +*FvwmIconBox: IconHiColorset 20 +Style * HilightIconTitleColorset 20 + +# ---------------------------- +# II.3. Other Module Colorsets +# ---------------------------- + +# FvwmIdent +# +Colorset 21 fg black, bg bisque, Plain, NoShape + +*FvwmIdent: Colorset 21 + +# FvwmConsole +# +Colorset 22 fg white, bg rgb:00/30/60, Plain, NoShape + +# transparent +#Colorset 23 fg $[fg.cs10], bg $[bg.cs10], Transparent, Plain, NoShape +#Colorset 23 fg $[fg.cs10], Transparent, Tint rgb:00/30/60 10 +Colorset 23 fg $[fg.cs10], RootTransparent, Tint rgb:00/30/60 10 + +*FvwmButtons: Colorset 23 + +# ------------------------ +# II.4. External Colorsets +# ------------------------ + +# ---------------------------- +# reserved for modules@: 24-25 + +# ---------------------------------- +# reserved for the future use: 26-28 + +# temporary colorset: 29, has no static definition, used dynamically + +# ============================================================================ +# III. Application Colorsets +# ============================================================================ + +# regular terminal (xterm, rxvt, Eterm) Work2 +# +Colorset 30 fg white, bg rgb:00/00/50, Plain, NoShape + +# admin terminal (su xterm) (root) +# +Colorset 31 fg white, bg rgb:00/50/50, Plain, NoShape + +# remote terminal (ssh, telnet) Work3 +# +Colorset 32 fg white, bg rgb:50/00/00, Plain, NoShape + +# viewer terminal (man, less, tail -f) Root +# +Colorset 33 fg white, bg rgb:00/50/00, Plain, NoShape + +# application run in the terminal, text editor using ft-xrdb +# +Colorset 34 fg rgb:FF/FF/E8, bg rgb:30/48/48, Plain, NoShape + +# dialog main background (FvwmScript, FvwmForm, xmessage, ft-xrdb) +# +Colorset 35 fg black, bg rgb:80/A0/80, Plain, NoShape + +# dialog text area (FvwmScript, FvwmForm, xmessage, ft-xrdb) +# +Colorset 36 fg black, bg rgb:A0/C8/A0, Plain, NoShape + +# -------------------------------------------------- +# Colorsets 37 to 39 are reserved for the future use. + +Colorset 40 fg SkyBlue, bg rgb:75/75/75 + +Style "Root" Colorset 40 +Style "root*" Colorset 40 + +Colorset 41 fg Red, bg Green, Plain, NoShape + +Style "Root" HilightColorset 41 +Style "root*" HilightColorset 41 + +# window borders, inactive and active +# +Colorset 42 fg rgb:88/7C/66, bg black, Plain, NoShape + +Style "Root" BorderColorset 42 +Style "root*" BorderColorset 42 + +Colorset 43 fg rgb:CC/BA/99, bg black, Plain, NoShape + +Style "Root" HilightBorderColorset 43 +Style "root*" HilightBorderColorset 43 + + +#Colorset 50 Transparent, bg pink3, fg gray20 +#Colorset 50 Transparent, fg rgb:A9/A9/A9, bg rgb:20/20/20, Plain, NoShape +Colorset 50 Transparent, fg rgb:E9/E9/E9 + +# Used for menus and titles +#Colorset 51 RootTransparent buffer, fg gray80, bg #050218 +#Colorset 52 fg #151228, VGradient 40 #a17aa1 #714a71, bg average + +Colorset 51 fg Red, bg SkyBlue4 +Colorset 52 fg SkyBlue, VGradient 40 #8888aa #8888ee, bg Red + +TitleStyle Inactive Colorset 51 -- flat +AddTitleStyle Inactive Colorset 52 50 # alpha == 60% here + +ButtonStyle All AllInactive Colorset 51 -- flat +AddButtonStyle All AllInactive Colorset 52 50 + + +ButtonStyle All AllInactive -- !UseTitleStyle flat +TitleStyle Active Colorset 52 -- raised + +ButtonStyle All AllActive -- UseTitleStyle raised + + +colorset 77 transparent +*FvwmIconMan: *Colorset 77 --- fvwm-2.5.27.ds.orig/debian/manoj/FvwmForm-Talk +++ fvwm-2.5.27.ds/debian/manoj/FvwmForm-Talk @@ -0,0 +1,22 @@ +# FvwmForm-Talk - Basic replacement for FvwmTalk +DestroyModuleConfig FvwmForm-Talk: * +*FvwmForm-Talk: WarpPointer +# Layout +*FvwmForm-Talk: Line center +*FvwmForm-Talk: Text "Talk to Fvwm" +*FvwmForm-Talk: Line left +*FvwmForm-Talk: Text "Command:" +*FvwmForm-Talk: Input Command 80 "" +*FvwmForm-Talk: Line left +*FvwmForm-Talk: Text "Msg:" +*FvwmForm-Talk: Message +*FvwmForm-Talk: Line center +# Buttons +*FvwmForm-Talk: Button restart "Return - Execute" ^M +*FvwmForm-Talk: Command $(Command) +*FvwmForm-Talk: Button continue "F1 - Help" F1 +*FvwmForm-Talk: Command Module FvwmForm FvwmForm-TalkHelp +*FvwmForm-Talk: Button restart "F3 - Reset input" F3 +*FvwmForm-Talk: Command Nop +*FvwmForm-Talk: Button quit "F4 - Dismiss" F4 +*FvwmForm-Talk: Command Nop --- fvwm-2.5.27.ds.orig/fvwm/ConfigFvwmSetup +++ fvwm-2.5.27.ds/fvwm/ConfigFvwmSetup @@ -24,6 +24,7 @@ Style * IconBox 0 -10 -280 -1 Style * FocusFollowsMouse Style * TileCascadePlacement +Style * EWMHUseStackingOrderHints # Styles for various Fvwm modules: Style Fvwm* NoTitle, Sticky, WindowListSkip @@ -48,6 +49,7 @@ Style xmag Icon mag_glass.xpm, ClickToFocus Style xgraph Icon graphs.xpm, ClickToFocus Style xmosaic Color Green/Yellow, ClickToFocus +Style OpenOffice* NoFuncHint # some simple default key bindings: @@ -87,11 +89,21 @@ + I Nop ######################## Menus ################### +# Make sure that the Debian menus, and the icons they reference, are +# available +ImagePath /usr/share/icons:/usr/share/pixmaps:/usr/share/icons/wm-icons:+ +ImagePath +:/usr/X11R6/include/X11/pixmaps/:/usr/X11R6/include/X11/bitmaps/ +ImagePath +:/usr/include/X11/bitmaps/ +Read /etc/X11/fvwm/menudefs.hook Quiet +Read menudefs.hook Quiet + DestroyMenu MenuFvwmRoot AddToMenu MenuFvwmRoot "$[gt.Root Menu]" Title + "&1. XTerm" Exec exec xterm + "&2. Rxvt" Exec exec rxvt + "" Nop ++ "&D. Debian Menu" Popup "/Debian" ++ "" Nop + "&R. $[gt.Remote Logins]" Popup MenuFvwmLogins + "" Nop + "&U. $[gt.Utilities]" Popup MenuFvwmUtilities --- fvwm-2.5.27.ds.orig/fvwm/style.c +++ fvwm-2.5.27.ds/fvwm/style.c @@ -193,7 +193,7 @@ { return 1; } - if (fw->style_name == NULL && + if (fw->style_name != NULL && matchWildcards(SID_GET_NAME(s_id), fw->style_name) == 1) { return 1; --- fvwm-2.5.27.ds.orig/fvwm/externs.h +++ fvwm-2.5.27.ds/fvwm/externs.h @@ -30,8 +30,8 @@ #define EXTERNS_H void Done(int, char *) __attribute__((__noreturn__)); -void setInitFunctionName(int n, const char *name); -const char *getInitFunctionName(int n); +void set_init_function_name(int n, const char *name); +const char *get_init_function_name(int n); extern char NoName[]; extern char NoClass[]; --- fvwm-2.5.27.ds.orig/fvwm/fvwm.c +++ fvwm-2.5.27.ds/fvwm/fvwm.c @@ -137,7 +137,7 @@ static volatile sig_atomic_t fvwmRunState = FVWM_RUNNING; -static const char *initFunctionNames[4] = +static const char *init_function_names[4] = { "InitFunction", "RestartFunction", @@ -319,7 +319,7 @@ } /* - * parseCommandArgs - parses a given command string into a given limited + * parse_command_args - parses a given command string into a given limited * argument array suitable for execv*. The parsing is similar to shell's. * Returns: * positive number of parsed arguments - on success, @@ -338,121 +338,121 @@ * on the next function call. This can be changed using dynamic allocation, * in this case the caller must free the string pointed by argv[0]. */ -static int parseCommandArgs( - const char *command, char **argv, int maxArgc, const char **errorMsg) +static int parse_command_args( + const char *command, char **argv, int max_argc, const char **error_msg) { /* It is impossible to guess the exact length because of expanding */ #define MAX_TOTAL_ARG_LEN 256 - /* char *argString = safemalloc(MAX_TOTAL_ARG_LEN); */ - static char argString[MAX_TOTAL_ARG_LEN]; - int totalArgLen = 0; - int errorCode = 0; + /* char *arg_string = safemalloc(MAX_TOTAL_ARG_LEN); */ + static char arg_string[MAX_TOTAL_ARG_LEN]; + int total_arg_len = 0; + int error_code = 0; int argc; - char *aptr = argString; + char *aptr = arg_string; const char *cptr = command; -#define theChar (*cptr) -#define advChar (cptr++) -#define topChar (*cptr == '\\'? *(cptr+1): *cptr) -#define popChar (*(cptr++) == '\\'? *(cptr++): *(cptr-1)) -#define canAddArgChar (totalArgLen < MAX_TOTAL_ARG_LEN-1) -#define addArgChar(ch) (++totalArgLen, *(aptr++) = ch) -#define canAddArgStr(str) (totalArgLen < MAX_TOTAL_ARG_LEN-strlen(str)) -#define addArgStr(str) \ +#define the_char (*cptr) +#define adv_char (cptr++) +#define top_char (*cptr == '\\' ? *(cptr + 1) : *cptr) +#define pop_char (*(cptr++) == '\\' ? *(cptr++) : *(cptr - 1)) +#define can_add_arg_char (total_arg_len < MAX_TOTAL_ARG_LEN-1) +#define add_arg_char(ch) (++total_arg_len, *(aptr++) = ch) +#define can_add_arg_str(str) (total_arg_len < MAX_TOTAL_ARG_LEN - strlen(str)) +#define add_arg_str(str) \ {\ const char *tmp = str;\ while (*tmp)\ {\ - addArgChar(*(tmp++));\ + add_arg_char(*(tmp++));\ }\ } - *errorMsg = ""; + *error_msg = ""; if (!command) { - *errorMsg = "No command"; + *error_msg = "No command"; return -1; } - for (argc = 0; argc < maxArgc - 1; argc++) + for (argc = 0; argc < max_argc - 1; argc++) { - int sQuote = 0; + int s_quote = 0; argv[argc] = aptr; - while (isspace(theChar)) + while (isspace(the_char)) { - advChar; + adv_char; } - if (theChar == '\0') + if (the_char == '\0') { break; } - while ((sQuote || !isspace(theChar)) && - theChar != '\0' && canAddArgChar) + while ((s_quote || !isspace(the_char)) && + the_char != '\0' && can_add_arg_char) { - if (theChar == '"') + if (the_char == '"') { - if (sQuote) + if (s_quote) { - sQuote = 0; + s_quote = 0; } else { - sQuote = 1; + s_quote = 1; } - advChar; + adv_char; } - else if (!sQuote && theChar == '\'') + else if (!s_quote && the_char == '\'') { - advChar; - while (theChar != '\'' && theChar != '\0' && - canAddArgChar) + adv_char; + while (the_char != '\'' && the_char != '\0' && + can_add_arg_char) { - addArgChar(popChar); + add_arg_char(pop_char); } - if (theChar == '\'') + if (the_char == '\'') { - advChar; + adv_char; } - else if (!canAddArgChar) + else if (!can_add_arg_char) { break; } else { - *errorMsg = "No closing single quote"; - errorCode = -3; + *error_msg = "No closing single quote"; + error_code = -3; break; } } - else if (!sQuote && theChar == '~') + else if (!s_quote && the_char == '~') { - if (!canAddArgStr(home_dir)) + if (!can_add_arg_str(home_dir)) { break; } - addArgStr(home_dir); - advChar; + add_arg_str(home_dir); + adv_char; } - else if (theChar == '$') + else if (the_char == '$') { int beg, len; const char *str = getFirstEnv(cptr, &beg, &len); if (!str || beg) { - addArgChar(theChar); - advChar; + add_arg_char(the_char); + adv_char; continue; } - if (!canAddArgStr(str)) + if (!can_add_arg_str(str)) { break; } - addArgStr(str); + add_arg_str(str); cptr += len; } else { - if (addArgChar(popChar) == '\0') + if (add_arg_char(pop_char) == '\0') { break; } @@ -460,43 +460,43 @@ } if (*(aptr-1) == '\0') { - *errorMsg = "Unexpected last backslash"; - errorCode = -2; + *error_msg = "Unexpected last backslash"; + error_code = -2; break; } - if (errorCode) + if (error_code) { break; } - if (theChar == '~' || theChar == '$' || !canAddArgChar) + if (the_char == '~' || the_char == '$' || !can_add_arg_char) { - *errorMsg = "The command is too long"; - errorCode = -argc - 100; + *error_msg = "The command is too long"; + error_code = -argc - 100; break; } - if (sQuote) + if (s_quote) { - *errorMsg = "No closing double quote"; - errorCode = -4; + *error_msg = "No closing double quote"; + error_code = -4; break; } - addArgChar('\0'); + add_arg_char('\0'); } -#undef theChar -#undef advChar -#undef topChar -#undef popChar -#undef canAddArgChar -#undef addArgChar -#undef canAddArgStr -#undef addArgStr +#undef the_char +#undef adv_char +#undef top_char +#undef pop_char +#undef can_add_arg_char +#undef add_arg_char +#undef can_add_arg_str +#undef add_arg_str argv[argc] = NULL; - if (argc == 0 && !errorCode) + if (argc == 0 && !error_code) { - *errorMsg = "Void command"; + *error_msg = "Void command"; } - return errorCode ? errorCode : argc; + return error_code ? error_code : argc; } /* @@ -541,21 +541,21 @@ /* if restart is true, command must not be NULL... */ void Done(int restart, char *command) { - const char *exitFuncName; + const char *exit_func_name; if (!restart) { MoveViewport(0,0,False); } /* migo (03/Jul/1999): execute [Session]ExitFunction */ - exitFuncName = getInitFunctionName(2); - if (functions_is_complex_function(exitFuncName)) + exit_func_name = get_init_function_name(2); + if (functions_is_complex_function(exit_func_name)) { const exec_context_t *exc; exec_context_changes_t ecc; char *action = safestrdup( - CatString2("Function ", exitFuncName)); + CatString2("Function ", exit_func_name)); ecc.type = restart ? EXCT_TORESTART : EXCT_QUIT; ecc.w.wcontext = C_ROOT; exc = exc_create_context(&ecc, ECC_TYPE | ECC_WCONTEXT); @@ -574,7 +574,7 @@ EWMH_ExitStuff(); if (restart) { - Bool doPreserveState = True; + Bool do_preserve_state = True; SaveDesktopState(); if (command) @@ -585,7 +585,7 @@ } if (strncmp(command, "--dont-preserve-state", 21) == 0) { - doPreserveState = False; + do_preserve_state = False; command += 21; while (isspace(command[0])) command++; } @@ -598,7 +598,7 @@ /* won't return under SM on Restart without parameters */ RestartInSession( restart_state_filename, command == NULL, - doPreserveState); + do_preserve_state); /* RBW - 06/08/1999 - without this, windows will wander to * other pages on a Restart/Recapture because Restart gets the @@ -622,16 +622,16 @@ if (command) { char *my_argv[MAX_ARG_SIZE]; - const char *errorMsg; - int n = parseCommandArgs( - command, my_argv, MAX_ARG_SIZE, &errorMsg); + const char *error_msg; + int n = parse_command_args( + command, my_argv, MAX_ARG_SIZE, &error_msg); if (n <= 0) { fvwm_msg( ERR, "Done", "Restart command parsing error in" - " (%s): [%s]", command, errorMsg); + " (%s): [%s]", command, error_msg); } else if (strcmp(my_argv[0], "--pass-args") == 0) { @@ -1512,8 +1512,8 @@ /* Does initial window captures and runs init/restart function */ void StartupStuff(void) { -#define startFuncName "StartFunction" - const char *initFuncName; +#define start_func_name "StartFunction" + const char *init_func_name; const exec_context_t *exc; exec_context_changes_t ecc; @@ -1555,19 +1555,19 @@ #endif /* migo (04-Sep-1999): execute StartFunction */ - if (functions_is_complex_function(startFuncName)) + if (functions_is_complex_function(start_func_name)) { - char *action = "Function " startFuncName; + char *action = "Function " start_func_name; execute_function(NULL, exc, action, 0); } /* migo (03-Jul-1999): execute [Session]{Init|Restart}Function */ - initFuncName = getInitFunctionName(Restarting == True); - if (functions_is_complex_function(initFuncName)) + init_func_name = get_init_function_name(Restarting == True); + if (functions_is_complex_function(init_func_name)) { char *action = safestrdup( - CatString2("Function ", initFuncName)); + CatString2("Function ", init_func_name)); execute_function(NULL, exc, action, 0); free(action); @@ -1699,21 +1699,21 @@ } /* - * setInitFunctionName - sets one of the init, restart or exit function names - * getInitFunctionName - gets one of the init, restart or exit function names + * set_init_function_name - sets one of the init, restart or exit function names + * get_init_function_name - gets one of the init, restart or exit function names * * First parameter defines a function type: 0 - init, 1 - restart, 2 - exit. */ -void setInitFunctionName(int n, const char *name) +void set_init_function_name(int n, const char *name) { - initFunctionNames[n >= 0 && n < 3? n: 3] = name; + init_function_names[n >= 0 && n < 3? n: 3] = name; return; } -const char *getInitFunctionName(int n) +const char *get_init_function_name(int n) { - return initFunctionNames[n >= 0 && n < 3? n: 3]; + return init_function_names[n >= 0 && n < 3? n: 3]; } #ifndef _PATH_DEVNULL --- fvwm-2.5.27.ds.orig/fvwm/session.c +++ fvwm-2.5.27.ds/fvwm/session.c @@ -101,15 +101,15 @@ static char *previous_sm_client_id = NULL; static char *sm_client_id = NULL; static Bool sent_save_done = 0; -static char *realStateFilename = NULL; -static Bool goingToRestart = False; +static char *real_state_filename = NULL; +static Bool going_to_restart = False; static FIceIOErrorHandler prev_handler; static FSmcConn sm_conn = NULL; static int num_match = 0; static Match *matches = NULL; static Bool does_file_version_match = False; -static Bool doPreserveState = True; +static Bool do_preserve_state = True; /* ---------------------------- exported variables (globals) --------------- */ @@ -188,22 +188,22 @@ return 1; } -static void setRealStateFilename(char *filename) +static void set_real_state_filename(char *filename) { if (!SessionSupport) { return; } - if (realStateFilename) + if (real_state_filename) { - free(realStateFilename); + free(real_state_filename); } - realStateFilename = safestrdup(filename); + real_state_filename = safestrdup(filename); return; } -static char *getUniqueStateFilename(void) +static char *get_unique_state_filename(void) { const char *path = getenv("SM_SAVE_DIR"); char *filename; @@ -682,7 +682,7 @@ return found; } -static int saveStateFile(char *filename) +static int save_state_file(char *filename) { FILE *f; int success; @@ -701,16 +701,16 @@ fprintf(f, "# Normally, you must never delete this file," " it will be auto-deleted.\n\n"); - if (SessionSupport && goingToRestart) + if (SessionSupport && going_to_restart) { - fprintf(f, "[REAL_STATE_FILENAME] %s\n", realStateFilename); - goingToRestart = False; /* not needed */ + fprintf(f, "[REAL_STATE_FILENAME] %s\n", real_state_filename); + going_to_restart = False; /* not needed */ } - success = doPreserveState? - SaveVersionInfo(f) && SaveWindowStates(f) && SaveGlobalState(f): - 1; - doPreserveState = True; + success = do_preserve_state + ? SaveVersionInfo(f) && SaveWindowStates(f) && SaveGlobalState(f) + : 1; + do_preserve_state = True; if (fclose(f) != 0) return 0; @@ -727,7 +727,7 @@ } static void -setSmProperties(FSmcConn sm_conn, char *filename, char hint) +set_sm_properties(FSmcConn sm_conn, char *filename, char hint) { FSmProp prop1, prop2, prop3, prop4, prop5, prop6, prop7, *props[7]; FSmPropValue prop1val, prop2val, prop3val, prop4val, prop7val; @@ -735,7 +735,7 @@ char *user_id; char screen_num[32]; int numVals, i, priority = 30; - Bool xsmDetected = False; + Bool is_xsm_detected = False; if (!SessionSupport) { @@ -743,8 +743,8 @@ } #ifdef FVWM_SM_DEBUG_PROTO - fprintf(stderr, "[FVWM_SMDEBUG][setSmProperties] state filename: %s%s\n", - (filename)? filename:"(null)", sm_conn? "": " - not connected"); + fprintf(stderr, "[FVWM_SMDEBUG][set_sm_properties] state filename: %s%s\n", + filename ? filename : "(null)", sm_conn ? "" : " - not connected"); #endif if (!sm_conn) @@ -866,9 +866,9 @@ prop7.name = FSmDiscardCommand; - xsmDetected = StrEquals(getenv("SESSION_MANAGER_NAME"), "xsm"); + is_xsm_detected = StrEquals(getenv("SESSION_MANAGER_NAME"), "xsm"); - if (xsmDetected) + if (is_xsm_detected) { /* the protocol spec says that the discard command should be LISTofARRAY8 on posix systems, but xsm @@ -912,7 +912,7 @@ FSmcSetProperties (sm_conn, 7, props); free ((char *) prop6.vals); - if (!xsmDetected) + if (!is_xsm_detected) { free ((char *) prop7.vals); } @@ -936,16 +936,16 @@ return; } - filename = getUniqueStateFilename(); + filename = get_unique_state_filename(); #ifdef FVWM_SM_DEBUG_PROTO fprintf(stderr, "[FVWM_SMDEBUG][callback_save_yourself2]\n"); #endif - success = saveStateFile(filename); + success = save_state_file(filename); if (success) { - setSmProperties(sm_conn, filename, FSmRestartIfRunning); - setRealStateFilename(filename); + set_sm_properties(sm_conn, filename, FSmRestartIfRunning); + set_real_state_filename(filename); } free(filename); @@ -1142,8 +1142,8 @@ /* migo: temporarily (?) moved to LoadWindowStates (trick for gnome-session) sscanf(s, "%*s %s", s2); - setFSmProperties (sm_conn, s2, FSmRestartIfRunning); - setRealStateFilename(s2); + set_sm_properties(sm_conn, s2, FSmRestartIfRunning); + set_real_state_filename(s2); */ } else if (!strcmp(s1, "[DESKTOP]")) @@ -1243,7 +1243,7 @@ { return; } - setRealStateFilename(filename); + set_real_state_filename(filename); if ((f = fopen(filename, "r")) == NULL) { return; @@ -1266,8 +1266,8 @@ !strcmp(s1, "[REAL_STATE_FILENAME]")) { sscanf(s, "%*s %s", s1); - setSmProperties (sm_conn, s1, FSmRestartIfRunning); - setRealStateFilename(s1); + set_sm_properties(sm_conn, s1, FSmRestartIfRunning); + set_real_state_filename(s1); } else if (!strcmp(s1, "[CLIENT]")) { @@ -1584,16 +1584,16 @@ } void -RestartInSession (char *filename, Bool isNative, Bool _doPreserveState) +RestartInSession (char *filename, Bool is_native, Bool _do_preserve_state) { - doPreserveState = _doPreserveState; + do_preserve_state = _do_preserve_state; - if (SessionSupport && sm_conn && isNative) + if (SessionSupport && sm_conn && is_native) { - goingToRestart = True; + going_to_restart = True; - saveStateFile(filename); - setSmProperties(sm_conn, filename, FSmRestartImmediately); + save_state_file(filename); + set_sm_properties(sm_conn, filename, FSmRestartImmediately); MoveViewport(0, 0, False); Reborder(); @@ -1616,7 +1616,7 @@ exit(0); /* let the SM restart us */ } - saveStateFile(filename); + save_state_file(filename); /* return and let Done restart us */ return; @@ -1688,12 +1688,12 @@ #ifdef FVWM_SM_DEBUG_PROTO fprintf(stderr,"[FVWM_SMDEBUG] Connectecd to a SM\n"); #endif - setInitFunctionName(0, "SessionInitFunction"); - setInitFunctionName(1, "SessionRestartFunction"); - setInitFunctionName(2, "SessionExitFunction"); + set_init_function_name(0, "SessionInitFunction"); + set_init_function_name(1, "SessionRestartFunction"); + set_init_function_name(2, "SessionExitFunction"); /* basically to restet our restart style hint after a * restart */ - setSmProperties(sm_conn, NULL, FSmRestartIfRunning); + set_sm_properties(sm_conn, NULL, FSmRestartIfRunning); } return; @@ -1735,42 +1735,42 @@ * Alternative implementation may use unix signals, but this does not work * with all session managers (also must suppose that SM runs locally). */ -int getSmPid(void) +int get_sm_pid(void) { - const char *sessionManagerVar = getenv("SESSION_MANAGER"); - const char *smPidStrPtr; - int smPid = 0; + const char *session_manager_var = getenv("SESSION_MANAGER"); + const char *sm_pid_str_ptr; + int sm_pid = 0; if (!SessionSupport) { return 0; } - if (!sessionManagerVar) + if (!session_manager_var) { return 0; } - smPidStrPtr = strchr(sessionManagerVar, ','); - if (!smPidStrPtr) + sm_pid_str_ptr = strchr(session_manager_var, ','); + if (!sm_pid_str_ptr) { return 0; } - while (smPidStrPtr > sessionManagerVar && isdigit(*(--smPidStrPtr))) + while (sm_pid_str_ptr > session_manager_var && isdigit(*(--sm_pid_str_ptr))) { /* nothing */ } - while (isdigit(*(++smPidStrPtr))) + while (isdigit(*(++sm_pid_str_ptr))) { - smPid = smPid * 10 + *smPidStrPtr - '0'; + sm_pid = sm_pid * 10 + *sm_pid_str_ptr - '0'; } - return smPid; + return sm_pid; } /* - * quitSession - hopefully shutdowns the session + * quit_session - hopefully shutdowns the session */ -Bool quitSession(void) +Bool quit_session(void) { if (!SessionSupport) { @@ -1789,16 +1789,16 @@ /* migo: xsm does not support RequestSaveYourself, but supports * signals: */ /* - int smPid = getSmPid(); - if (!smPid) return False; - return kill(smPid, SIGTERM) == 0? True: False; + int sm_pid = get_sm_pid(); + if (!sm_pid) return False; + return kill(sm_pid, SIGTERM) == 0 ? True : False; */ } /* - * saveSession - hopefully saves the session + * save_session - hopefully saves the session */ -Bool saveSession(void) +Bool save_session(void) { if (!SessionSupport) { @@ -1817,16 +1817,16 @@ /* migo: xsm does not support RequestSaveYourself, but supports * signals: */ /* - int smPid = getSmPid(); - if (!smPid) return False; - return kill(smPid, SIGUSR1) == 0? True: False; + int sm_pid = get_sm_pid(); + if (!sm_pid) return False; + return kill(sm_pid, SIGUSR1) == 0 ? True : False; */ } /* - * saveQuitSession - hopefully saves and shutdowns the session + * save_quit_session - hopefully saves and shutdowns the session */ -Bool saveQuitSession(void) +Bool save_quit_session(void) { if (!SessionSupport) { @@ -1846,9 +1846,9 @@ /* migo: xsm does not support RequestSaveYourself, but supports * signals: */ /* - if (saveSession() == False) return False; + if (save_session() == False) return False; sleep(3); / * doesn't work anyway * / - if (quitSession() == False) return False; + if (quit_session() == False) return False; return True; */ } @@ -1857,21 +1857,21 @@ void CMD_QuitSession(F_CMD_ARGS) { - quitSession(); + quit_session(); return; } void CMD_SaveSession(F_CMD_ARGS) { - saveSession(); + save_session(); return; } void CMD_SaveQuitSession(F_CMD_ARGS) { - saveQuitSession(); + save_quit_session(); return; } --- fvwm-2.5.27.ds.orig/fvwm/events.c +++ fvwm-2.5.27.ds/fvwm/events.c @@ -2935,8 +2935,46 @@ FCheckIfEvent( dpy, &dummy, test_withdraw_request, (XPointer)&args)) { - /* The window is moved back to the WitdrawnState - * immideately. Don't map it. */ + /* The window is moved back to the WithdrawnState + * immideately. Don't map it. + * + * However, send make sure that a WM_STATE + * PropertyNotify event is sent to the window. + * QT needs this. + */ + Atom atype; + int aformat; + unsigned long nitems, bytes_remain; + unsigned char *prop; + + if ( + XGetWindowProperty( + dpy, ew, _XA_WM_STATE, 0L, 3L, False, + _XA_WM_STATE, &atype, &aformat, + &nitems,&bytes_remain,&prop) + == Success) + { + if (prop != NULL) + { + XFree(prop); + XDeleteProperty(dpy, ew, _XA_WM_STATE); + } + else + { + XPropertyEvent ev; + ev.type = PropertyNotify; + ev.display = dpy; + ev.window = ew; + ev.atom = _XA_WM_STATE; + ev.time = fev_get_evtime(); + ev.state = PropertyDelete; + FSendEvent( + dpy, ew, True, + PropertyChangeMask, + (XEvent*)&ev); + } + } + return; } --- fvwm-2.5.27.ds.orig/fvwm/ewmh_names.c +++ fvwm-2.5.27.ds/fvwm/ewmh_names.c @@ -161,6 +161,7 @@ { tmp_str[MAX_ICON_NAME_LEN] = 0; } + SET_HAS_EWMH_WM_ICON_NAME(fw, 1); if (fw->icon_name.name && strcmp(tmp_str, fw->icon_name.name) == 0) { /* migo: some apps update their names every second */ @@ -176,7 +177,6 @@ fw->icon_name.name = tmp_str; - SET_HAS_EWMH_WM_ICON_NAME(fw, 1); SET_WAS_ICON_NAME_PROVIDED(fw, 1); if (ev == NULL) @@ -228,6 +228,7 @@ { tmp_str[MAX_WINDOW_NAME_LEN] = 0; } + SET_HAS_EWMH_WM_NAME(fw, 1); if (fw->name.name && strcmp(tmp_str, fw->name.name) == 0) { /* migo: some apps update their names every second */ @@ -242,7 +243,6 @@ } fw->name.name = tmp_str; - SET_HAS_EWMH_WM_NAME(fw, 1); if (ev == NULL) { --- fvwm-2.5.27.ds.orig/sample.fvwmrc/new-features +++ fvwm-2.5.27.ds/sample.fvwmrc/new-features @@ -189,22 +189,22 @@ Style "*" StickyIcon Style "*" IconBox 5 -50 -134 -5 Style "*" BorderWidth 5, HandleWidth 5 -Style "*" NoPPosition +Style "*" !UsePPosition Style "*" NakedTransient # Some Fvwm-Related Styles -Style "Fvwm*" NoTitle, NoHandles, Sticky, WindowListSkip -Style "FvwmWinList" NoTitle +Style "Fvwm*" !Title, !Handles, Sticky, WindowListSkip +Style "FvwmWinList" !Title Style "FvwmPager" BorderWidth 0 # My own settings style "XTerm" BorderWidth 4, Handlewidth 4, Icon Monitor.xpm style "Netscape" BorderWidth 3, Handlewidth 3 -Style "*clock" BorderWidth 0,NoTitle,NoHandles,WindowListSkip,Sticky -Style "XMcd" NoTitle +Style "*clock" BorderWidth 0,!Title,!Handles,WindowListSkip,Sticky +Style "XMcd" !Title Style "*Dialog_popup" WindowListSkip -Style "*Download" WindowListSkip,NoTitle +Style "*Download" WindowListSkip,!Title # Resources for Modules # @@ -439,6 +439,9 @@ AddToMenu "Utilities" "Utilities" Title + "Xterm" Exec xterm -sl 1024 +ut -fg white -bg black -e tcsh + "" Nop +Test (f /etc/X11/fvwm/menudefs.hook) + "Debian Menu" Popup /Debian +Test (f /etc/X11/fvwm/menudefs.hook) + "Re-read System Menu" Read "/etc/X11/fvwm/menudefs.hook" +Test (f /etc/X11/fvwm/menudefs.hook) + "Update My Debian Menu" PipeRead 'update-menus && echo "Read $./menudefs.hook"' + "Remotes" Popup Remote-Popup + "Applications" Popup Applications-Popup + "Graphics Apps" Popup Graphics-Popup @@ -451,6 +454,44 @@ + "Refresh" Refresh + "Quit X" Popup Quit-Verify + +# Make sure that the Debian menus, and the icons they reference, are +# available if we have /etc/X11/fvwm/menudefs.hook +DestroyFunc SetDebianMenu +AddToFunc SetDebianMenu ++ I ImagePath /usr/share/icons:/usr/share/pixmaps:/usr/share/icons/wm-icons:+ ++ I ImagePath +:/usr/X11R6/include/X11/pixmaps/:/usr/X11R6/include/X11/bitmaps/ ++ I ImagePath +:/usr/include/X11/bitmaps/ ++ I Read /etc/X11/fvwm/menudefs.hook ++ I DestroyMenu Utilities ++ I AddToMenu Utilities "Root Menu" Title +#PREF 3 ++ I + "Xterm" Exec xterm -sl 1024 +ut -fg white -bg black -e tcsh ++ I + "" Nop ++ I + "Debian Menu" Popup "/Debian" ++ I + "Remotes" Popup Remote-Popup ++ I + "Applications" Popup Applications-Popup ++ I + "Shells" Popup /Debian/XShells ++ I + "Programs" Popup /Debian/Apps ++ I + "" Nop ++ I + "Graphics Apps" Popup Graphics-Popup ++ I + "Development" Popup Development-Popup ++ I + "Accessories" Popup Accessories-Popup ++ I + "Entertainment" Popup Games-Popup ++ I + "Sound Stuff" Popup Sound-Popup ++ I + "Fvwm Modules" Popup Module-Popup ++ I + "" Nop ++ I + "Help" Popup /Debian/Help ++ I + "Screen Saver" Popup /Debian/Screen ++ I + "" Nop ++ I + "Window Managers" Popup /Debian/WindowManagers ++ I + "Quit fvwm" FvwmForm FvwmForm-QuitVerify ++ I + "" Nop ++ I + "Refresh" Refresh ++ I + "Quit X" Popup Quit-Verify + +Test (f /etc/X11/fvwm/menudefs.hook) SetDebianMenu + AddToMenu "Quit-Verify" "Restart WM" Restart + "Yes, Really Quit" Quit + "" Nop --- fvwm-2.5.27.ds.orig/sample.fvwmrc/system.fvwm2rc +++ fvwm-2.5.27.ds/sample.fvwmrc/system.fvwm2rc @@ -21,13 +21,13 @@ Style * BorderWidth 7, HandleWidth 7 Style * Icon unknown1.xpm, Color lightgrey/dimgrey Style * MWMFunctions, MWMDecor, HintOverride -Style * DecorateTransient, NoPPosition +Style * DecorateTransient, !UsePPosition Style * IconBox 0 -10 -280 -1 Style * FocusFollowsMouse Style * TileCascadePlacement # Styles for various Fvwm modules: -Style "Fvwm*" NoTitle, Sticky, WindowListSkip +Style "Fvwm*" !Title, Sticky, WindowListSkip Style "Fvwm*" BorderWidth 2, CirculateSkipIcon, CirculateSkip Style "FvwmPager" StaysOnTop Style "FvwmBanner" StaysOnTop @@ -39,11 +39,11 @@ Style "rxvt" MWMBorder, MWMButtons # Styles for various common programs: -Style "*lock" NoTitle, NoHandles, Sticky, WindowListSkip, ClickToFocus -Style "xbiff" NoTitle, Sticky, WindowListSkip, ClickToFocus -Style "xcalc" Icon xcalc.xpm, NoButton 2,ClickToFocus -Style "xmh" Icon mail1.xpm, NoIconTitle,StickyIcon -Style "xmh" NoButton 2 +Style "*lock" !Title, !Handles, Sticky, WindowListSkip, ClickToFocus +Style "xbiff" !Title, Sticky, WindowListSkip, ClickToFocus +Style "xcalc" Icon xcalc.xpm, !Button 2,ClickToFocus +Style "xmh" Icon mail1.xpm, !IconTitle,StickyIcon +Style "xmh" !Button 2 Style "xman" Icon xman.xpm, ClickToFocus Style "xmag" Icon mag_glass.xpm, ClickToFocus Style "xgraph" Icon graphs.xpm, ClickToFocus @@ -89,6 +89,10 @@ + "XTerm" Exec exec xterm + "Rxvt" Exec exec rxvt + "" Nop +Test (f /etc/X11/fvwm/menudefs.hook) + "Debian Menu" Popup /Debian +Test (f /etc/X11/fvwm/menudefs.hook) + "Re-read System Menu" Read "/etc/X11/fvwm/menudefs.hook" +Test (f /etc/X11/fvwm/menudefs.hook) + "Update My Debian Menu" PipeRead 'update-menus && echo "Read $./menudefs.hook"' ++ "" Nop + "Remote Logins" Popup Remote-Logins + "" Nop + "Utilities" Popup Utilities @@ -116,6 +120,40 @@ + "" Nop + "Reset X defaults" Exec xrdb -load $HOME/.Xdefaults +# Make sure that the Debian menus, and the icons they reference, are +# available if we have /etc/X11/fvwm/menudefs.hook +DestroyFunc SetDebianMenu +AddToFunc SetDebianMenu ++ I ImagePath /usr/share/icons:/usr/share/pixmaps:/usr/share/icons/wm-icons:+ ++ I ImagePath +:/usr/X11R6/include/X11/pixmaps/:/usr/X11R6/include/X11/bitmaps/ ++ I ImagePath +:/usr/include/X11/bitmaps/ ++ I Read /etc/X11/fvwm/menudefs.hook ++ I DestroyMenu Utilities ++ I AddToMenu Utilities "Root Menu" Title +#PREF 3 ++ I + "Top" Exec exec xterm -T Top -n Top -e top ++ I + "Calculator" Exec exec xcalc ++ I + "Xman" Exec exec xman ++ I + "Xmag" Exec exec xmag ++ I + "Editres" Exec exec editres ++ I + "" Nop ++ I + "Debian Menu" Popup /Debian ++ I + "Shells" Popup /Debian/XShells ++ I + "Programs" Popup /Debian/Apps ++ I + "" Nop ++ I + "XEmacs" Exec exec xemacs ++ I + "Mail" MailFunction xmh "-font fixed" ++ I + "" Nop ++ I + "XLock" Exec exec xlock -mode random ++ I + "Mail" MailFunction xmh "-font fixed" ++ I + "Help" Popup /Debian/Help ++ I + "Screen Saver" Popup /Debian/Screen ++ I + "" Nop ++ I + "Window Managers" Popup /Debian/WindowManagers ++ I + "Reset X defaults" Exec xrdb -load $HOME/.Xdefaults + +Test (f /etc/X11/fvwm/menudefs.hook) SetDebianMenu + AddToMenu Misc-Ops "Misc Config Opts" Title + "Sloppy Focus" ChangeDefaultFocus SloppyFocus + "Click To Focus" ChangeDefaultFocus ClickToFocus @@ -348,8 +386,8 @@ ############################################################ ############################################################ # Note that icons are shown in the module -# only if NoIcon commnand is applied. -#Style * NoIcon +# only if !Icon commnand is applied. +#Style * !Icon ############################################################ *FvwmIconBox: IconBack #cfcfcf --- fvwm-2.5.27.ds.orig/sample.fvwmrc/DecorWin95 +++ fvwm-2.5.27.ds/sample.fvwmrc/DecorWin95 @@ -36,7 +36,7 @@ # Undo things specific to this decor: DestroyFunc DecorRemoveHook AddToFunc DecorRemoveHook -+ I Style "*" NoButton 1 -+ I Style "*" NoButton 2 -+ I Style "*" NoButton 4 -+ I Style "*" NoButton 6 ++ I Style "*" !Button 1 ++ I Style "*" !Button 2 ++ I Style "*" !Button 4 ++ I Style "*" !Button 6 --- fvwm-2.5.27.ds.orig/sample.fvwmrc/system.fvwm2rc-sample-2 +++ fvwm-2.5.27.ds/sample.fvwmrc/system.fvwm2rc-sample-2 @@ -45,7 +45,7 @@ Style * IconBox -215 200 -1 -100 # If you don't want icons for some or all windows (or all of them!) -# Style * NoIcon +# Style * !Icon # If you want ALL icons to follow you around the desktop (Sticky) #Style * StickyIcon @@ -108,24 +108,24 @@ # change the default width, set a global icon, and give borders to popups Style * BorderWidth 7, HandleWidth 7, Icon x.xpm, DecorateTransient -Style "Fvwm*" NoTitle, Sticky, WindowListSkip -Style "*lock" NoTitle, Sticky, WindowListSkip -Style "xbiff" NoTitle, Sticky, WindowListSkip -Style "xload" NoTitle, Sticky, WindowListSkip, ClickToFocus -Style "xsession" NoTitle, Sticky, WindowListSkip, ClickToFocus -Style "xconsole" NoTitle, Sticky, WindowListSkip, ClickToFocus -Style "xfsm" NoTitle, Sticky, WindowListSkip, ClickToFocus -Style "xdaliclock" NoTitle, Sticky, WindowListSkip, ClickToFocus +Style "Fvwm*" !Title, Sticky, WindowListSkip +Style "*lock" !Title, Sticky, WindowListSkip +Style "xbiff" !Title, Sticky, WindowListSkip +Style "xload" !Title, Sticky, WindowListSkip, ClickToFocus +Style "xsession" !Title, Sticky, WindowListSkip, ClickToFocus +Style "xconsole" !Title, Sticky, WindowListSkip, ClickToFocus +Style "xfsm" !Title, Sticky, WindowListSkip, ClickToFocus +Style "xdaliclock" !Title, Sticky, WindowListSkip, ClickToFocus Style "FvwmButtons" ClickToFocus -Style "Time 3D" NoTitle, Sticky +Style "Time 3D" !Title, Sticky Style "*term" Icon NeXT.xpm Style "xcalc" Icon xcalc.xpm Style "xbiff" Icon mail1.xpm Style "xman" Icon xman.xpm Style "Demineur" Icon jolifond.xpm Style "xneko" Icon xnekocat.xpm -Style "emacs" NoPPosition -Style "Mosaic" NoPPosition +Style "emacs" !UsePPosition +Style "Mosaic" !UsePPosition Style "xmh" Icon mail2.xpm StartsOnDesk 2 ############################################################################# @@ -224,6 +224,10 @@ + "Csugrad" Exec xterm -sb -sl 2048 -font 8x13 -geometry =80x35+50+50 -n "csugrad" -T "csugrad" -s -rw -e telnet csugrad & + "Netscape" Exec exec Netscape & + "" Nop +Test (f /etc/X11/fvwm/menudefs.hook) + "Debian Menu" Popup /Debian +Test (f /etc/X11/fvwm/menudefs.hook) + "Re-read System Menu" Read "/etc/X11/fvwm/menudefs.hook" +Test (f /etc/X11/fvwm/menudefs.hook) + "Update My Debian Menu" PipeRead 'update-menus && echo "Read $./menudefs.hook"' ++ "" Nop + "Leisure" Popup Leisure + "Utilities" Popup Utilities + "Lock Screen" Popup XlockMenu @@ -241,6 +245,39 @@ + "xcalc" Exec exec xcalc & + "xclipboard" Exec exec xclipboard & +# Make sure that the Debian menus, and the icons they reference, are +# available if we have /etc/X11/fvwm/menudefs.hook +DestroyFunc SetDebianMenu +AddToFunc SetDebianMenu ++ I ImagePath /usr/share/icons:/usr/share/pixmaps:/usr/share/icons/wm-icons:+ ++ I ImagePath +:/usr/X11R6/include/X11/pixmaps/:/usr/X11R6/include/X11/bitmaps/ ++ I ImagePath +:/usr/include/X11/bitmaps/ ++ I Read /etc/X11/fvwm/menudefs.hook ++ I DestroyMenu Utilities ++ I AddToMenu Utilities "Root Menu" Title +#PREF 3 ++ I + "emacs" Exec emacs -geometry 81x35+150+34 -fn 9x15 & ++ I + "xv" Function warp-or-run xv "Exec xv -ncols 240 -geometry +0+0 &" ++ I + "xfig" Exec exec xfig & ++ I + "xpaint" Exec exec xpaint & ++ I + "Top" Exec exec rxvt -T Top -n Top -e top & ++ I + "xMan" Exec exec xman -notopbox -geometry +150+102 & ++ I + "xloaD" Exec exec xload -geometry =136x136+0+0 & ++ I + "xcalc" Exec exec xcalc & ++ I + "xclipboard" Exec exec xclipboard & ++ I + "" Nop ++ I + "Debian Menu" Popup /Debian ++ I + "" Nop ++ I + "Shells" Popup /Debian/XShells ++ I + "Programs" Popup /Debian/Apps ++ I + "" Nop ++ I + "Help" Popup /Debian/Help ++ I + "Screen Saver" Popup /Debian/Screen ++ I + "" Nop ++ I + "Window Managers" Popup /Debian/WindowManagers + +Test (f /etc/X11/fvwm/menudefs.hook) SetDebianMenu + # Leisure stuff that doesn't go anywhere else.. AddToMenu Leisure "Time for Fun!" Title + "xboing" Exec exec xboing -sound & @@ -444,7 +481,7 @@ ############################################################################ # FvwmIconBox # -# NOTE: Icons will only be shown in module if Style "??" NoIcon is set +# NOTE: Icons will only be shown in module if Style "??" !Icon is set *FvwmIconBoxIconBack #cfcfcf *FvwmIconBoxIconHiFore black *FvwmIconBoxIconHiBack LightSkyBlue --- fvwm-2.5.27.ds.orig/sample.fvwmrc/DecorMwm +++ fvwm-2.5.27.ds/sample.fvwmrc/DecorMwm @@ -27,6 +27,6 @@ # Undo things specific to this decor: DestroyFunc DecorRemoveHook AddToFunc DecorRemoveHook -+ I Style "*" NoButton 1 -+ I Style "*" NoButton 2 -+ I Style "*" NoButton 4 ++ I Style "*" !Button 1 ++ I Style "*" !Button 2 ++ I Style "*" !Button 4 --- fvwm-2.5.27.ds.orig/sample.fvwmrc/system.fvwm2rc-sample-1 +++ fvwm-2.5.27.ds/sample.fvwmrc/system.fvwm2rc-sample-1 @@ -29,35 +29,35 @@ Style * TileManualPlacement Style * MWMFunctions,MWMDecor,HintOverride Style * DecorateTransient,IconBox 0 -10 -280 -1 -Style "Fvwm*" NoTitle, NoHandles, Sticky, WindowListSkip, +Style "Fvwm*" !Title, !Handles, Sticky, WindowListSkip, Style "Fvwm*" BorderWidth 0,CirculateSkipIcon Style "Fvwm Pager" StaysOnTop Style "FvwmPager" StaysOnTop Style "FvwmBanner" StaysOnTop -Style "FvwmButtons" NoTitle, NoHandles, Sticky, WindowListSkip +Style "FvwmButtons" !Title, !Handles, Sticky, WindowListSkip Style "FvwmButtons" BorderWidth 0, CirculateSkip Style "FvwmButtons" Icon toolbox.xpm,ClickToFocus -Style "*lock" NoTitle, NoHandles, Sticky, WindowListSkip +Style "*lock" !Title, !Handles, Sticky, WindowListSkip Style "*lock" TileCascadePlacement -Style "xbiff" NoTitle, Sticky, WindowListSkip,ClickToFocus +Style "xbiff" !Title, Sticky, WindowListSkip,ClickToFocus Style "Maker" StartsOnDesk 1,TileCascadePlacement,ClickToFocus Style "matlab" StartsOnDesk 3 Style "signal" StartsOnDesk 3 Style "rxvt" Icon term.xpm,SloppyFocus,IconBox -70 1 -1 -140 Style "XTerm" Icon xterm.xpm,IconBox -70 1 -1 -140 Style "XTerm" Color black/#aa80aa,MWMBorder,MWMButtons -Style "Appointment" Icon datebook.xpm, NoButton 2, NoButton 4,ClickToFocus -Style "xcalc" Icon xcalc.xpm, NoButton 2,TileCascadePlacement,ClickToFocus -Style "xmh" Icon mail1.xpm, NoIconTitle,StickyIcon -Style "xmh" TileCascadePlacement, StartsOnDesk 2, NoButton 2 +Style "Appointment" Icon datebook.xpm, !Button 2, !Button 4,ClickToFocus +Style "xcalc" Icon xcalc.xpm, !Button 2,TileCascadePlacement,ClickToFocus +Style "xmh" Icon mail1.xpm, !IconTitle,StickyIcon +Style "xmh" TileCascadePlacement, StartsOnDesk 2, !Button 2 Style "xman" Icon xman.xpm,TileCascadePlacement,ClickToFocus Style "xvgr" Icon graphs.xpm,TileCascadePlacement,ClickToFocus Style "matlab" Icon math4.xpm,ClickToFocus Style "xmag" Icon mag_glass.xpm,CenterPlacement, ClickToFocus Style "xgraph" Icon graphs.xpm,TileCascadePlacement,ClickToFocus -Style "sppeed6" Icon math3.xpm,NoTitle,ClickToFocus -Style "sppeed6_user" Icon math4.xpm,NoTitle -Style "xmosaic" NoPPosition, color Green/Yellow,ClickToFocus +Style "sppeed6" Icon math3.xpm,!Title,ClickToFocus +Style "sppeed6_user" Icon math4.xpm,!Title +Style "xmosaic" !UsePPosition, color Green/Yellow,ClickToFocus Style "MetaCard" TileCascadePlacement, ClickToFocus Key Left A C Scroll -100 0 @@ -120,6 +120,46 @@ + "Modules" Popup Module-Popup + "" Nop + "Exit Fvwm" Popup Quit-Verify + +# Make sure that the Debian menus, and the icons they reference, are +# available if we have /etc/X11/fvwm/menudefs.hook +DestroyFunc SetDebianMenu +AddToFunc SetDebianMenu ++ I ImagePath /usr/share/icons:/usr/share/pixmaps:/usr/share/icons/wm-icons:+ ++ I ImagePath +:/usr/X11R6/include/X11/pixmaps/:/usr/X11R6/include/X11/bitmaps/ ++ I ImagePath +:/usr/include/X11/bitmaps/ ++ I Read /etc/X11/fvwm/menudefs.hook ++ I DestroyMenu Utilities ++ I AddToMenu Utilities "Root Menu" Title +#PREF 3 ++ I + "Xterm" Exec exec xterm -e tcsh & ++ I + "Rxvt" Exec exec rxvt & ++ I + "Remote Logins" Popup Remote-Logins ++ I + "Top" Exec exec rxvt -T Top -n Top -e top & ++ I + "Calculator" Exec exec xcalc & ++ I + "Xman" Exec exec xman & ++ I + "Xmag" Exec exec xmag & ++ I + "emacs" Exec exec xemacs & ++ I + "Mail" MailFunction xmh "-font fixed" ++ I + "" Nop +Test (f /etc/X11/fvwm/menudefs.hook) + I + "Debian Menu" Popup /Debian +Test (f /etc/X11/fvwm/menudefs.hook) + I + "Re-read System Menu" Read "/etc/X11/fvwm/menudefs.hook" +Test (f /etc/X11/fvwm/menudefs.hook) + I + "Update My Debian Menu" PipeRead 'update-menus && echo "Read $./menudefs.hook"' ++ I + "" Nop ++ I + "Shells" Popup /Debian/XShells ++ I + "Programs" Popup /Debian/Apps ++ I + "" Nop ++ I + "Modules" Popup Module-Popup ++ I + "" Nop ++ I + "Help" Popup /Debian/Help ++ I + "Screen Saver" Popup /Debian/Screen ++ I + "" Nop ++ I + "Window Managers" Popup /Debian/WindowManagers ++ I + "" Nop ++ I + "Exit Fvwm" Popup Quit-Verify + +Test (f /etc/X11/fvwm/menudefs.hook) SetDebianMenu + AddToMenu Window-Ops "Window Ops" Title + "Move" Move-or-Raise2 + "Resize" Resize-or-Raise2 @@ -283,8 +323,8 @@ ############################################################ ############################################################ # Note that icons are shown in the module -# only if NoIcon commnand is applied. -#Style * NoIcon +# only if Icon commnand is applied. +#Style * !Icon ############################################################ *FvwmIconBoxIconBack #cfcfcf --- fvwm-2.5.27.ds.orig/sample.fvwmrc/system.fvwm2rc-sample-95 +++ fvwm-2.5.27.ds/sample.fvwmrc/system.fvwm2rc-sample-95 @@ -332,11 +332,11 @@ Style * MinOverlapPlacement # -# NoPPosition instructs fvwm to ignore the PPosition field in window +# !UsePPosition instructs fvwm to ignore the PPosition field in window # geometry hints. Emacs annoyingly sets PPosition to (0,0)! # -Style * NoPPosition +Style * !UsePPosition Style * GrabFocusOff @@ -472,25 +472,25 @@ # #-----------------------------------------------------------------------------# -Style *lock NoTitle, NoHandles, Sticky, WindowListSkip -Style xeyes NoTitle, Sticky -Style *biff* NoTitle, Sticky, WindowListSkip -Style xsysinfo NoTitle, Sticky, WindowListSkip -Style xload NoTitle, Sticky, WindowListSkip +Style *lock !Title, !Handles, Sticky, WindowListSkip +Style xeyes !Title, Sticky +Style *biff* !Title, Sticky, WindowListSkip +Style xsysinfo !Title, Sticky, WindowListSkip +Style xload !Title, Sticky, WindowListSkip Style xconsole Sticky, StartIconic Style xpostit WindowListSkip Style PostitNote WindowListSkip -Style Postit NoHandles, WindowListSkip +Style Postit !Handles, WindowListSkip # gnome panel & icons -Style panel Sticky, NoTitle, WindowListSkip, CirculateSkip -Style desktop_icon CirculateSkip, WindowListSkip, NoTitle +Style panel Sticky, !Title, WindowListSkip, CirculateSkip +Style desktop_icon CirculateSkip, WindowListSkip, !Title # Animation is broken in gnome panel 1.4 with GNOMEUseHints. # GNOMEIgnoreHints also disables panel moving itself from layer to layer. Style panel GNOMEIgnoreHints # xsm panel -Style xsm Sticky, NoTitle, WindowListSkip, CirculateSkip +Style xsm Sticky, !Title, WindowListSkip, CirculateSkip -Style FvwmForm-QuitVerify NoButton 1, NoButton 2, NoButton 4, NoButton 6, \ +Style FvwmForm-QuitVerify !Button 1, !Button 2, !Button 4, !Button 6, \ StaysOnTop, NoHandles, WindowListSkip # Some version of Netscape need the following if you want that the @@ -678,7 +678,7 @@ Style FvwmForm-Setup MiniIcon mini.fvwm.xpm, Icon settings.xpm Style FormFvwmAnimate MiniIcon mini.iconify.xpm, Icon settings.xpm Style xmessage MiniIcon mini.question.xpm, Icon settings.xpm -Style WinMakerAppButtons* NoIcon +Style WinMakerAppButtons* !Icon # Help Style man MiniIcon mini.book1.xpm, Icon help.xpm @@ -1024,12 +1024,12 @@ DestroyFunc AppsManNone AddToFunc AppsManNone -+ I Style * NoIcon ++ I Style * !Icon + I KillModule FvwmTaskBar + I KillModule FvwmWinList + I KillModule FvwmIconMan + I KillModule FvwmIconBox -+ I Exec echo "AddToFunc StartFunction I Style * NoIcon # No applications Manager" > $FVWM_USERDIR/.start-apps-man ++ I Exec echo "AddToFunc StartFunction I Style * !Icon # No applications Manager" > $FVWM_USERDIR/.start-apps-man DestroyFunc UseIcons AddToFunc UseIcons @@ -1045,71 +1045,71 @@ DestroyFunc WinListDesk AddToFunc WinListDesk -+ I Style * NoIcon ++ I Style * !Icon + I *FvwmWinList: ShowCurrentDesk + I Module FvwmWinList DestroyFunc WinListGlobal AddToFunc WinListGlobal -+ I Style * NoIcon ++ I Style * !Icon + I DestroyModuleConfig FvwmWinList: ShowCurrent* + I Module FvwmWinList DestroyFunc TaskBarDesk AddToFunc TaskBarDesk -+ I Style * NoIcon ++ I Style * !Icon + I DestroyModuleConfig FvwmTaskBar: AutoHid* + I *FvwmTaskBar: DeskOnly + I Module FvwmTaskBar DestroyFunc TaskBarGlobal AddToFunc TaskBarGlobal -+ I Style * NoIcon ++ I Style * !Icon + I DestroyModuleConfig FvwmTaskBar: AutoHid* + I DestroyModuleConfig FvwmTaskBar: Desk* + I Module FvwmTaskBar DestroyFunc TaskBarDeskAutoHide AddToFunc TaskBarDeskAutoHide -+ I Style * NoIcon ++ I Style * !Icon + I *FvwmTaskBar: DeskOnly + I *FvwmTaskBar: AutoHide + I Module FvwmTaskBar DestroyFunc TaskBarGlobalAutoHide AddToFunc TaskBarGlobalAutoHide -+ I Style * NoIcon ++ I Style * !Icon + I DestroyModuleConfig FvwmTaskBar: Desk* + I *FvwmTaskBar: AutoHide + I Module FvwmTaskBar DestroyFunc IconManGlobal AddToFunc IconManGlobal -+ I Style * NoIcon ++ I Style * !Icon + I *FvwmIconMan: Resolution global + I Module FvwmIconMan DestroyFunc IconManDesk AddToFunc IconManDesk -+ I Style * NoIcon ++ I Style * !Icon + I *FvwmIconMan: Resolution desk + I Module FvwmIconMan DestroyFunc IconManPage AddToFunc IconManPage -+ I Style * NoIcon ++ I Style * !Icon + I *FvwmIconMan: Resolution page + I Module FvwmIconMan DestroyFunc IconBoxDesk AddToFunc IconBoxDesk -+ I Style * NoIcon ++ I Style * !Icon + I *FvwmIconBox: ResolutionDesk + I Module FvwmIconBox DestroyFunc IconBoxGlobal AddToFunc IconBoxGlobal -+ I Style * NoIcon ++ I Style * !Icon + I DestroyModuleConfig FvwmIconBox: Reso* + I Module FvwmIconBox @@ -1136,7 +1136,7 @@ + I Read iconstyles + I Read menus # Need to reload the NoIcon style -+ I PipeRead 'if grep -qe AddToFunc $FVWM_USERDIR/.start-apps-man; then echo "Style * NoIcon"; fi' ++ I PipeRead 'if grep -qe AddToFunc $FVWM_USERDIR/.start-apps-man; then echo "Style * !Icon"; fi' #------------------------------------------------------------------------------ # Functions for Loading/Saving/Showing Settings @@ -1427,8 +1427,10 @@ + "&Documents%documents.xpm%" Popup Documents + "&Settings%settings.xpm%" Popup Settings + "" Nop -Test (f /etc/X11/fvwm/DebianMenu) + "&Debian Menu%programs.xpm%" Popup /Debian -+ "&Module%modules.xpm" Popup Module-Popup +Test (f /etc/X11/fvwm/menudefs.hook) + "&Debian Menu%programs.xpm%" Popup /Debian +Test (f /etc/X11/fvwm/menudefs.hook) + "$[gt.&Re-read System Menu]%menu/terminal.xpm%" Read "/etc/X11/fvwm/menudefs.hook" +Test (f /etc/X11/fvwm/menudefs.hook) + "$[gt.&Update My Debian Menu]%menu/terminal.xpm%" PipeRead 'update-menus && echo "Read $./menudefs.hook"' ++ "&Module%modules.xpm%" Popup Module-Popup + "&Find%find1.xpm%" FvwmScript FvwmScript-Find + "&Help%help.xpm%" Exec exec xman #PREF 1 @@ -1445,11 +1447,11 @@ AddToMenu Utilities "Root Menu" Title #PREF 3 + "&Terminal%mini.term.xpm%" Exec exec xterm -+ "&Editor%mini.edit.xpm" Exec exec emacs ++ "&Editor%mini.edit.xpm%" Exec exec emacs + "&File Manager%mini.filemgr.xpm%" Exec exec xfm + "&Top%mini.run.xpm%" Exec exec xterm -geometry 80x40 -T Top -n Top -e top + "" Nop -+ "&Shells%mini.term.xpm" Popup Shells ++ "&Shells%mini.term.xpm%" Popup Shells + "&Programs%mini.start.xpm%" Popup Programs + "" Nop + "Fvwm &Modules%mini.modules.xpm%" Popup Module-Popup @@ -1460,18 +1462,23 @@ + "&Restart%mini.turn.xpm%" Popup Restart + "&Quit fvwm%mini.stop.xpm%" FvwmForm FvwmForm-QuitVerify +# Make sure that the Debian menus, and the icons they reference, are +# available if we have /etc/X11/fvwm/menudefs.hook DestroyFunc SetDebianMenu AddToFunc SetDebianMenu -+ I Read /etc/X11/fvwm/DebianMenu ++ I ImagePath /usr/share/icons:/usr/share/pixmaps:/usr/share/icons/wm-icons:+ ++ I ImagePath +:/usr/X11R6/include/X11/pixmaps/:/usr/X11R6/include/X11/bitmaps/ ++ I ImagePath +:/usr/include/X11/bitmaps/ ++ I Read /etc/X11/fvwm/menudefs.hook + I DestroyMenu Utilities + I AddToMenu Utilities "Root Menu" Title #PREF 3 + I + "&Terminal%mini.term.xpm%" Exec exec x-terminal-emulator -+ I + "&Editor%mini.edit.xpm" Exec exec emacs ++ I + "&Editor%mini.edit.xpm%" Exec exec emacs + I + "&File Manager%mini.filemgr.xpm%" Exec exec xfm + I + "&Top%mini.run.xpm%" Exec exec xterm -geometry 80x40 -T Top -n Top -e top + I + "" Nop -+ I + "&Shells%mini.term.xpm" Popup /Debian/XShells ++ I + "&Shells%mini.term.xpm%" Popup /Debian/XShells + I + "&Programs%mini.start.xpm%" Popup /Debian/Apps + I + "" Nop + I + "&Fvwm Modules%mini.modules.xpm%" Popup Module-Popup @@ -1484,7 +1491,7 @@ + I + "&Restart%mini.turn.xpm%" Restart + I + "&Quit fvwm%mini.stop.xpm%" FvwmForm FvwmForm-QuitVerify -Test (f /etc/X11/fvwm/DebianMenu) SetDebianMenu +Test (f /etc/X11/fvwm/menudefs.hook) SetDebianMenu #------------------------------------------------------------------------------ #--------- SHELLS @@ -1542,19 +1549,19 @@ #AddToMenu Programs "GNOME &RedHat%mini.gnome.xpm%" Popup gnome-redhat #+ "" Nop #K_SM 2 -#AddToMenu Programs "&KDE Menu%mini.kde.xpm" Popup kde-sys +#AddToMenu Programs "&KDE Menu%mini.kde.xpm%" Popup kde-sys #+ "" Nop #K_UM 2 -#AddToMenu Programs "KDE &User%mini.kde.xpm" Popup kde-user +#AddToMenu Programs "KDE &User%mini.kde.xpm%" Popup kde-user #+ "" Nop #CDE 2 -#AddToMenu Programs "&CDE Menu%mini.folder.xpm" Popup cde-menu +#AddToMenu Programs "&CDE Menu%mini.folder.xpm%" Popup cde-menu #+ "" Nop AddToMenu Programs + "&Accessories%mini.hammer.xpm%" Popup Accessories + "&Applications%mini.pencil.xpm%" Popup Applications -+ "&Science%mini.question.xpm" Popup Science -+ "&System%mini.filemgr.xpm" Popup System ++ "&Science%mini.question.xpm%" Popup Science ++ "&System%mini.filemgr.xpm%" Popup System + "&Editors%mini.edit.xpm%" Popup Editors + "&Network%mini.telnet.xpm%" Popup Network + "&Internet%mini.connect.xpm%" Popup Internet @@ -1589,7 +1596,7 @@ #+ "Desktop &Help%mini.book1.xpm%" Exec exec /usr/dt/bin/dthelpview -helpVolume browser #+ "Man Pages%mini.book1.xpm%" Exec exec /usr/dt/bin/dthelpview -man #+ "&Mailer%mini.mail.xpm%" Exec exec /usr/dt/bin/dtmail -#+ "&Calandar%mini.calandar.xpm" Exec exec /usr/dt/bin/dtcm +#+ "&Calandar%mini.calandar.xpm%" Exec exec /usr/dt/bin/dtcm #+ "&Calculator%mini.calc.xpm%" Exec exec /usr/dt/bin/dtcalc #+ "&Icon Editor%mini.palette.xpm%" Exec exec /usr/dt/bin/dticon #+ "&Print Manager%mini.fax.xpm%" Exec exec /usr/dt/bin/dtprintinfo @@ -1815,7 +1822,7 @@ + "Desker &Panel%mini.pager.xpm%" All (DeskerPanelButtons) Close + "Sound &effect%mini.sound.xpm%" KillModule FvwmEvent + "&Talk%mini.telnet.xpm%" All (FvwmForm-Talk) Close -+ "Task&Bar%mini.exp.xpm" KillModule FvwmTaskBar ++ "Task&Bar%mini.exp.xpm%" KillModule FvwmTaskBar + "Window &List%mini.windows.xpm%" KillModule FvwmWinList + "&Wharf%mini.pencil.xpm%" KillModule FvwmWharf @@ -1837,7 +1844,7 @@ + "Desker &Panel%mini.pager.xpm%" Popup DeskerPanel-settings + "S&ounds Effect%mini.audiovol.xpm%" Popup Sound-Settings + "&WMaker Applets%mini.pencil.xpm%" Popup WinMakerApp-Settings -+ "Set &Layers%mini.windows.xpm" Popup Layers-Settings ++ "Set &Layers%mini.windows.xpm%" Popup Layers-Settings + "&X Setup Scripts%mini.x.xpm%" Popup XsetupScripts + "&Show/Load/Save Settings%mini.turn.xpm%" Popup Load-Settings + "" Nop @@ -1856,7 +1863,7 @@ DestroyMenu FvwmConfig AddToMenu FvwmConfig + "&Base Configuration%mini.fvwm.xpm%" FvwmScript FvwmScript-BaseConfig -+ "&Form Configuration%mini.fvwm.xpm" FvwmForm FvwmForm-Form ++ "&Form Configuration%mini.fvwm.xpm%" FvwmForm FvwmForm-Form + "" Nop + "&Rebuild Sample 95%mini.fvwm.xpm%" FvwmScript FvwmScript-Setup95 + "&Load Default Sample%mini.fvwm.xpm%" FvwmForm FvwmForm-Setup @@ -2180,7 +2187,7 @@ DestroyMenu X-Settings AddToMenu X-Settings -+ "Back &Color%mini.colors.xpm" Popup Backcolor ++ "Back &Color%mini.colors.xpm%" Popup Backcolor + "Back &Animation%mini.fractal.xpm%" Popup Background-Animation + "&Root Cursor Form%mini.xarchie.xpm%" FvwmForm FvwmForm-RootCursor + "&Video tuning%mini.monitor.xpm%" Exec exec xterm -T Xvidtune -e xvidtune @@ -2390,8 +2397,8 @@ + "R&aise%mini.raise2.xpm%" Raise + "&Lower%mini.lower2.xpm%" Lower + "" Nop -+ "&Delete%mini.cross.xpm" Delete -+ "&Close%mini.delete.xpm" Close ++ "&Delete%mini.cross.xpm%" Delete ++ "&Close%mini.delete.xpm%" Close + "&Destroy%mini.bomb.xpm%" Destroy + "" Nop + "Move to &Page%mini.move1.xpm%" Popup Move-window @@ -2417,7 +2424,7 @@ + "(Un)S&tick%mini.stick1.xpm%" Stick #+ "R&aiseLower%mini.raise2.xpm%" RaiseLower + "" Nop -+ "&Close%mini.delete.xpm" Close ++ "&Close%mini.delete.xpm%" Close + "" Nop + "&Identify%mini.question.xpm%" Module FvwmIdent + "More&...%mini.window.xpm%" Menu Window This 0 0 @@ -2437,7 +2444,7 @@ + "(Un)M&aximize%mini.maximize1.xpm%" Maximize 95 95 + "%mini.window.xpm%Scroll&Bar (75%% scr)" Module FvwmScroll 75p 75p + "" Nop -+ "&Close%mini.delete.xpm" Close ++ "&Close%mini.delete.xpm%" Close + "" Nop + "&Identify%mini.question.xpm%" Module FvwmIdent + "More&...%mini.window.xpm%" Menu Window This 0 0 @@ -2470,8 +2477,8 @@ + "R&aise%mini.raise2.xpm%" Pick All ($c) Raise + "&Lower%mini.lower2.xpm%" Pick All ($c) Lower + "" Nop -+ "&Delete%mini.cross.xpm" Pick Delete -+ "&Close%mini.delete.xpm" Pick Close ++ "&Delete%mini.cross.xpm%" Pick Delete ++ "&Close%mini.delete.xpm%" Pick Close + "&Destroy%mini.bomb.xpm%" Pick Destroy + "&Quick move to ..." Title + 'Page &1%mini.move1.xpm%' Pick All ($c) MoveToPage 0 0 @@ -2487,8 +2494,8 @@ DestroyMenu WindowStyle AddToMenu WindowStyle + "%mini.window.xpm%Title&AtTop" Pick (CirculateHit) Style $n TitleAtTop -+ "%mini.window.xpm%&NoTitle" Pick (CirculateHit) Style $n NoTitle -+ "%mini.window.xpm%&Title" Pick (CirculateHit) Style $n NoTitle ++ "%mini.window.xpm%&NoTitle" Pick (CirculateHit) Style $n !Title ++ "%mini.window.xpm%&Title" Pick (CirculateHit) Style $n !Title + "%mini.window.xpm%TitleAt&Bottom" Pick (CirculateHit) Style $n TitleAtBottom + "" Nop + "%mini.raise2.xpm%StaysOn&Top" Pick (CirculateHit) StyleAndRecapture $n StaysOnTop @@ -2500,7 +2507,7 @@ + "%mini.window.xpm%&DepressableBorder" Pick (CirculateHit) Style $n DepressableBorder + "%mini.window.xpm%&FirmBorder" Pick (CirculateHit) Style $n FirmBorder + "%mini.window.xpm%&Handles" Pick (CirculateHit) Style $n Handles -+ "%mini.window.xpm%&NoHandles" Pick (CirculateHit) Style $n NoHandles ++ "%mini.window.xpm%&NoHandles" Pick (CirculateHit) Style $n !Handles + "%mini.window.xpm%BorderWidth &0" Pick (CirculateHit) Style $n BorderWidth 0 + "%mini.window.xpm%BorderWidth &5" Pick (CirculateHit) Style $n BorderWidth 5 + "%mini.window.xpm%HandleWidth &0" Pick (CirculateHit) Style $n HandleWidth 0 @@ -2550,14 +2557,14 @@ #------------------------------------------------------------------------------ #------------------ FvwmBanner #------------------------------------------------------------------------------ -Style FvwmBanner NoTitle, Sticky, StaysOnTop, WindowListSkip, CirculateSkip +Style FvwmBanner !Title, Sticky, StaysOnTop, WindowListSkip, CirculateSkip *FvwmBannerTimeout 2 #------------------------------------------------------------------------------ #------------------ FvwmButtons: BarButtons #------------------------------------------------------------------------------ -Style BarButtons NoTitle, NoHandles, Sticky, WindowListSkip, \ +Style BarButtons !Title, !Handles, Sticky, WindowListSkip, \ BorderWidth 4, CirculateSkip DestroyModuleConfig BarButtons: * @@ -2613,7 +2620,7 @@ #------------------ FvwmButtons: MiniButtons #------------------------------------------------------------------------------ -Style "MiniButtons" NoTitle, NoHandles, Sticky, WindowListSkip, \ +Style "MiniButtons" !Title, !Handles, Sticky, WindowListSkip, \ BorderWidth 0, CirculateSkip DestroyModuleConfig MiniButtons* @@ -2636,9 +2643,9 @@ #------------------ FvwmButtons: DeskerPanelButtons #------------------------------------------------------------------------------ -Style "DeskerPanelButtons" NoTitle, NoHandles, Sticky, WindowListSkip, \ +Style "DeskerPanelButtons" !Title, !Handles, Sticky, WindowListSkip, \ BorderWidth 0, CirculateSkip -#Style "DeskerPanelButtons" StayOnTop +#Style "DeskerPanelButtons" StaysOnTop DestroyModuleConfig DeskerPanelButtons: * *DeskerPanelButtons: Fore Black *DeskerPanelButtons: Back grey57 @@ -2654,7 +2661,7 @@ #------------------------------------------------------------------------------ #------------------ FvwmButtons: WinMakerAppButtons & WinMakerAppPanelCd #------------------------------------------------------------------------------ -Style "WinMakerApp*" NoTitle, NoHandles, BorderWidth 0, Sticky, \ +Style "WinMakerApp*" !Title, !Handles, BorderWidth 0, Sticky, \ WindowListSkip, CirculateSkip DestroyModuleConfig WinMakerAppButtons: * @@ -2754,7 +2761,7 @@ #------------------------------------------------------------------------------ #------------------ IconBox #------------------------------------------------------------------------------ -Style "FvwmIconBox" NoTitle, NoHandles, Sticky, WindowListSkip, CirculateSkip +Style "FvwmIconBox" !Title, !Handles, Sticky, WindowListSkip, CirculateSkip DestroyModuleConfig FvwmIconBox: * *FvwmIconBox: Back #c0c0c0 @@ -2803,7 +2810,7 @@ #------------------------------------------------------------------------------ #------------------ IconMan #------------------------------------------------------------------------------ -Style "FvwmIconMan" NoTitle, NoHandles, Sticky, WindowListSkip, CirculateSkip +Style "FvwmIconMan" !Title, !Handles, Sticky, WindowListSkip, CirculateSkip DestroyModuleConfig FvwmIconMan: * @@ -2858,7 +2865,7 @@ #------------------------------------------------------------------------------ #------------------ Identify #------------------------------------------------------------------------------ -Style "FvwmIdent" Sticky, NoButton 2, NoButton 4, NoButton 6 +Style "FvwmIdent" Sticky, !Button 2, !Button 4, !Button 6 *FvwmIdent: Back Blue4 *FvwmIdent: Fore Yellow @@ -2867,7 +2874,7 @@ #------------------------------------------------------------------------------ #------------------ FvwmPager: Swallowed by ButtonBar #------------------------------------------------------------------------------ -Style "FvwmPagerPager" NoTitle, NoHandles, Sticky, WindowListSkip, CirculateSkip +Style "FvwmPagerPager" !Title, !Handles, Sticky, WindowListSkip, CirculateSkip DestroyModuleConfig FvwmPagerPager: * *FvwmPagerPager: UseSkipList @@ -2894,7 +2901,7 @@ #------------------------------------------------------------------------------ #------------------ FvwmPager: FvwmDesker, the panel of StartPagerButtons #------------------------------------------------------------------------------ -Style "FvwmDesker" NoTitle, NoHandles, Sticky, WindowListSkip, CirculateSkip +Style "FvwmDesker" !Title, !Handles, Sticky, WindowListSkip, CirculateSkip DestroyModuleConfig FvwmDesker: * *FvwmDesker: UseSkipList @@ -2931,7 +2938,7 @@ #------------------ FvwmTaskBar #------------------------------------------------------------------------------ -Style "FvwmTaskBar" NoTitle, NoHandles, Sticky, WindowListSkip, \ +Style "FvwmTaskBar" !Title, !Handles, Sticky, WindowListSkip, \ CirculateSkip, TitleAtBottom # Note: Title at bottom is for shading. @@ -2962,7 +2969,7 @@ #------------------ FvwmWharf #------------------------------------------------------------------------------ -Style "FvwmWharf" NoTitle, NoHandles, Sticky, WindowListSkip, \ +Style "FvwmWharf" !Title, !Handles, Sticky, WindowListSkip, \ BorderWidth 2, CirculateSkip DestroyModuleConfig FvwmWharf: * @@ -3003,7 +3010,7 @@ #------------------------------------------------------------------------------ #------------------ FvwmWinList #------------------------------------------------------------------------------ -Style "FvwmWinList" NoTitle, Sticky, WindowListSkip, CirculateSkip +Style "FvwmWinList" !Title, Sticky, WindowListSkip, CirculateSkip DestroyModuleConfig FvwmWinList: * *FvwmWinList: Back #c3c3c3 --- fvwm-2.5.27.ds.orig/docs/COMMANDS +++ fvwm-2.5.27.ds/docs/COMMANDS @@ -1,4 +1,4 @@ -The recognized commands for fvwm 2.5.22 (from cvs) as of 05-Aug-2007: +The recognized commands for fvwm 2.5.28 (from cvs) as of 17-Mar-2009: # - Comment line (ignored) * - Module configuration line (no space after asterisk) --- fvwm-2.5.27.ds.orig/docs/ChangeLog +++ fvwm-2.5.27.ds/docs/ChangeLog @@ -1,3 +1,16 @@ +2009-03-17 Mikhael Goikhman + + * COMMANDS: + regenerated (by create-commands) + +2009-02-27 Thomas Adam + + * todo-2.6: + Deprecate the "Closed recently" section, since this file is updated so + infrequently, the term "recently" was in 2005, when at the time of + writing, it's 2009. Instead, add all closed bugs under "Closed" from + now on. + 2009-02-23 Dominik Vogt * ANNOUNCE: --- fvwm-2.5.27.ds.orig/libs/Fplay.h +++ fvwm-2.5.27.ds/libs/Fplay.h @@ -0,0 +1,364 @@ +#ifndef FPLAY_H +#define FPLAY_H + +#ifdef HAVE_RPLAY +#define USE_FPLAY 1 +#else +#define USE_FPLAY 0 +#endif + +#if USE_FPLAY +# include +# undef M_ERROR /* Solaris fix */ + typedef RPLAY FPLAY; + typedef RPLAY_ATTRS FPLAY_ATTRS; + +# define FPLAY_DEFAULT_VALUE RPLAY_DEFAULT_VOLUME +# define FPLAY_DEFAULT_PRIORITY RPLAY_DEFAULT_PRIORITY +# define FPLAY_NULL RPLAY_NULL +# define FPLAY_PLAY RPLAY_PLAY +# define FPLAY_STOP RPLAY_STOP +# define FPLAY_PAUSE RPLAY_PAUSE +# define FPLAY_CONTINUE RPLAY_CONTINUE +# define FPLAY_SOUND RPLAY_SOUND +# define FPLAY_VOLUME RPLAY_VOLUME +# define FPLAY_NSOUNDS RPLAY_NSOUNDS +# define FPLAY_COMMAND RPLAY_COMMAND +# define FPLAY_APPEND RPLAY_APPEND +# define FPLAY_INSERT RPLAY_INSERT +# define FPLAY_DELETE RPLAY_DELETE +# define FPLAY_CHANGE RPLAY_CHANGE +# define FPLAY_COUNT RPLAY_COUNT +# define FPLAY_LIST_COUNT RPLAY_LIST_COUNT +# define FPLAY_PRIORITY RPLAY_PRIORITY +# define FPLAY_RANDOM_SOUND RPLAY_RANDOM_SOUND +# define FPLAY_PING RPLAY_PING +# define FPLAY_RPTP_SERVER RPLAY_RPTP_SERVER +# define FPLAY_RPTP_SERVER_PORT RPLAY_RPTP_SERVER_PORT +# define FPLAY_RPTP_SEARCH RPLAY_RPTP_SEARCH +# define FPLAY_RPTP_FROM_SENDER RPLAY_RPTP_FROM_SENDER +# define FPLAY_SAMPLE_RATE RPLAY_SAMPLE_RATE +# define FPLAY_RESET RPLAY_RESET +# define FPLAY_DONE RPLAY_DONE +# define FPLAY_CLIENT_DATA RPLAY_CLIENT_DATA +# define FPLAY_LIST_NAME RPLAY_LIST_NAME +# define FPLAY_PUT RPLAY_PUT +# define FPLAY_ID RPLAY_ID +# define FPLAY_SEQUENCE RPLAY_SEQUENCE +# define FPLAY_DATA RPLAY_DATA +# define FPLAY_DATA_SIZE RPLAY_DATA_SIZE +# define FPLAY_FORMAT_NONE RPLAY_FORMAT_NONE +# define FPLAY_FORMAT_LINEAR_8 RPLAY_FORMAT_LINEAR_8 +# define FPLAY_FORMAT_ULINEAR_8 RPLAY_FORMAT_ULINEAR_8 +# define FPLAY_FORMAT_LINEAR_16 RPLAY_FORMAT_LINEAR_16 +# define FPLAY_FORMAT_ULINEAR_16 RPLAY_FORMAT_ULINEAR_16 +# define FPLAY_FORMAT_ULAW RPLAY_FORMAT_ULAW +# define FPLAY_FORMAT_G721 RPLAY_FORMAT_G721 +# define FPLAY_FORMAT_G723_3 RPLAY_FORMAT_G723_3 +# define FPLAY_FORMAT_G723_5 RPLAY_FORMAT_G723_5 +# define FPLAY_FORMAT_GSM RPLAY_FORMAT_GSM +# define FPLAY_BIG_ENDIAN RPLAY_BIG_ENDIAN +# define FPLAY_LITTLE_ENDIAN RPLAY_LITTLE_ENDIAN +# define FPLAY_AUDIO_PORT_NONE RPLAY_AUDIO_PORT_NONE +# define FPLAY_AUDIO_PORT_SPEAKER RPLAY_AUDIO_PORT_SPEAKER +# define FPLAY_AUDIO_PORT_HEADPHONE RPLAY_AUDIO_PORT_HEADPHONE +# define FPLAY_AUDIO_PORT_LINEOUT RPLAY_AUDIO_PORT_LINEOUT +# define FPLAY_MIN_VOLUME RPLAY_MIN_VOLUME +# define FPLAY_MAX_VOLUME RPLAY_MAX_VOLUME +# define FPLAY_MIN_PRIORITY RPLAY_MIN_PRIORITY +# define FPLAY_MAX_PRIORITY RPLAY_MAX_PRIORITY +# define FPLAY_DEFAULT_VOLUME RPLAY_DEFAULT_VOLUME +# define FPLAY_DEFAULT_PRIORITY RPLAY_DEFAULT_PRIORITY +# define FPLAY_DEFAULT_COUNT RPLAY_DEFAULT_COUNT +# define FPLAY_DEFAULT_LIST_COUNT RPLAY_DEFAULT_LIST_COUNT +# define FPLAY_DEFAULT_RANDOM_SOUND RPLAY_DEFAULT_RANDOM_SOUND +# define FPLAY_DEFAULT_SAMPLE_RATE RPLAY_DEFAULT_SAMPLE_RATE +# define FPLAY_DEFAULT_OFFSET RPLAY_DEFAULT_OFFSET +# define FPLAY_DEFAULT_BYTE_ORDER RPLAY_DEFAULT_BYTE_ORDER +# define FPLAY_DEFAULT_CHANNELS RPLAY_DEFAULT_CHANNELS +# define FPLAY_DEFAULT_BITS RPLAY_DEFAULT_BITS +# define FPLAY_ERROR_NONE RPLAY_ERROR_NONE +# define FPLAY_ERROR_MEMORY RPLAY_ERROR_MEMORY +# define FPLAY_ERROR_HOST RPLAY_ERROR_HOST +# define FPLAY_ERROR_CONNECT RPLAY_ERROR_CONNECT +# define FPLAY_ERROR_SOCKET RPLAY_ERROR_SOCKET +# define FPLAY_ERROR_WRITE RPLAY_ERROR_WRITE +# define FPLAY_ERROR_CLOSE RPLAY_ERROR_CLOSE +# define FPLAY_ERROR_PACKET_SIZE RPLAY_ERROR_PACKET_SIZE +# define FPLAY_ERROR_BROADCAST RPLAY_ERROR_BROADCAST +# define FPLAY_ERROR_ATTRIBUTE RPLAY_ERROR_ATTRIBUTE +# define FPLAY_ERROR_COMMAND RPLAY_ERROR_COMMAND +# define FPLAY_ERROR_INDEX RPLAY_ERROR_INDEX +# define FPLAY_ERROR_MODIFIER RPLAY_ERROR_MODIFIER +# define FRPTP_ERROR_NONE RPTP_ERROR_NONE +# define FRPTP_ERROR_MEMORY RPTP_ERROR_MEMORY +# define FRPTP_ERROR_HOST RPTP_ERROR_HOST +# define FRPTP_ERROR_CONNECT RPTP_ERROR_CONNECT +# define FRPTP_ERROR_SOCKET RPTP_ERROR_SOCKET +# define FRPTP_ERROR_OPEN RPTP_ERROR_OPEN +# define FRPTP_ERROR_READ RPTP_ERROR_READ +# define FRPTP_ERROR_WRITE RPTP_ERROR_WRITE +# define FRPTP_ERROR_PING RPTP_ERROR_PING +# define FRPTP_ERROR_TIMEOUT RPTP_ERROR_TIMEOUT +# define FRPTP_ERROR_PROTOCOL RPTP_ERROR_PROTOCOL +# define FRPTP_ERROR RPTP_ERROR +# define FRPTP_OK RPTP_OK +# define FRPTP_TIMEOUT RPTP_TIMEOUT +# define FRPTP_NOTIFY RPTP_NOTIFY +# define FOLD_RPLAY_PLAY OLD_RPLAY_PLAY +# define FOLD_RPLAY_STOP OLD_RPLAY_STOP +# define FOLD_RPLAY_PAUSE OLD_RPLAY_PAUSE +# define FOLD_RPLAY_CONTINUE OLD_RPLAY_CONTINUE +# define FRPTP_ASYNC_READ RPTP_ASYNC_READ +# define FRPTP_ASYNC_WRITE RPTP_ASYNC_WRITE +# define FRPTP_ASYNC_RAW RPTP_ASYNC_RAW +# define FRPTP_ASYNC_ENABLE RPTP_ASYNC_ENABLE +# define FRPTP_ASYNC_DISABLE RPTP_ASYNC_DISABLE +# define FRPTP_EVENT_OK RPTP_EVENT_OK +# define FRPTP_EVENT_ERROR RPTP_EVENT_ERROR +# define FRPTP_EVENT_TIMEOUT RPTP_EVENT_TIMEOUT +# define FRPTP_EVENT_OTHER RPTP_EVENT_OTHER +# define FRPTP_EVENT_CONTINUE RPTP_EVENT_CONTINUE +# define FRPTP_EVENT_DONE RPTP_EVENT_DONE +# define FRPTP_EVENT_PAUSE RPTP_EVENT_PAUSE +# define FRPTP_EVENT_PLAY RPTP_EVENT_PLAY +# define FRPTP_EVENT_SKIP RPTP_EVENT_SKIP +# define FRPTP_EVENT_STATE RPTP_EVENT_STATE +# define FRPTP_EVENT_STOP RPTP_EVENT_STOP +# define FRPTP_EVENT_VOLUME RPTP_EVENT_VOLUME +# define FRPTP_EVENT_CLOSE RPTP_EVENT_CLOSE +# define FRPTP_EVENT_FLOW RPTP_EVENT_FLOW +# define FRPTP_EVENT_MODIFY RPTP_EVENT_MODIFY +# define FRPTP_EVENT_LEVEL RPTP_EVENT_LEVEL +# define FRPTP_EVENT_POSITION RPTP_EVENT_POSITION +# define FRPTP_EVENT_ALL RPTP_EVENT_ALL +# define FRPTP_MAX_ARGS RPTP_MAX_ARGS +# define FRPTP_MAX_LINE RPTP_MAX_LINE +# define FPLAY_PORT RPLAY_PORT +# define FRPTP_PORT RPTP_PORT +# define FOLD_RPLAY_PORT OLD_RPLAY_PORT +# define FOLD_RPTP_PORT OLD_RPTP_PORT +# define FPLAY_PACKET_ID RPLAY_PACKET_ID + +# define Fplay_errno rplay_errno +# define Frptp_errno rptp_errno + +# define Fplay(a,b) rplay(a,b) +# define Fplay_create(a) rplay_create(a) +# define Fplay_perror(a) rplay_perror(a) +# define Fplay_set(...) rplay_set(__VA_ARGS__) +# define Fplay_get(...) rplay_get(__VA_ARGS__) +# define Fplay_destroy(a) rplay_destroy(a) +# define Fplay_default_host() rplay_default_host() +# define Fplay_display(a) rplay_display(a) +# define Fplay_host(a,b) rplay_host(a,b) +# define Fplay_host_volume(a,b,c) rplay_host_volume(a,b,c) +# define Fplay_local(a) rplay_local(a) +# define Fplay_open(a) rplay_open(a) +# define Fplay_open_default() rplay_open_default() +# define Fplay_open_display() rplay_open_display() +# define Fplay_open_port(a,b) rplay_open_port(a,b) +# define Fplay_open_sockaddr_in(a) rplay_open_sockaddr(a) +# define Fplay_ping(a) rplay_ping(a) +# define Fplay_ping_sockaddr_in(a) rplay_ping_sockaddr_in(a) +# define Fplay_ping_sockfd(a) rplay_ping_sockfd(a) +# define Fplay_close(a) rplay_close(a) +# define Fplay_sound(a,b) rplay_sound(a,b) +# define Fplay_default(a) rplay_default(a) +# define Fplay_convert(a) rplay_convert(a) +# define Fplay_pack(a) rplay_pack(a) +# define Fplay_unpack(a) rplay_unpack(a) +# define Frptp_open(a,b,c,d) rptp_open(a,b,c,d) +# define Frptp_read(a,b,c) rptp_read(a,b,c) +# define Frptp_write(a,b,c) rptp_write(a,b,c) +# define Frptp_close(a) rptp_close(a) +# define Frptp_perror(a) rptp_perror(a) +# define Frptp_putline(...) rptp_putline(__VA_ARGS__) +# define Frptp_async_putline(...) rptp_async_putline(__VA_ARGS__) +# define Frptp_getline(a,b,c) rptp_getline(a,b,c) +# define Frptp_command(a,b,c,d) rptp_command(a,b,c,d) +# define Frptp_parse(a,b) rptp_parse(a,b) +# define Frptp_async_write(a,b,c,d) rptp_async_write(a,b,c,d) +# define Frptp_async_register(a,b,c) rptp_async_register(a,b,c) +# define Frptp_async_notify(a,b,c) rptp_async_notify(a,b,c) +# define Frptp_async_process(a,b) rptp_async_process(a,b) +# define Frptp_main_loop() rptp_main_loop() +# define Frptp_stop_main_loop(a) rptp_stop_main_loop(a) +#else + typedef void FPLAY; + typedef void FPLAY_ATTRS; +# define FPLAY_DEFAULT_VALUE 0 +# define FPLAY_DEFAULT_PRIORITY 0 +# define FPLAY_NULL 0 +# define FPLAY_PLAY 0 +# define FPLAY_STOP 0 +# define FPLAY_PAUSE 0 +# define FPLAY_CONTINUE 0 +# define FPLAY_SOUND 0 +# define FPLAY_VOLUME 0 +# define FPLAY_NSOUNDS 0 +# define FPLAY_COMMAND 0 +# define FPLAY_APPEND 0 +# define FPLAY_INSERT 0 +# define FPLAY_DELETE 0 +# define FPLAY_CHANGE 0 +# define FPLAY_COUNT 0 +# define FPLAY_LIST_COUNT 0 +# define FPLAY_PRIORITY 0 +# define FPLAY_RANDOM_SOUND 0 +# define FPLAY_PING 0 +# define FPLAY_RPTP_SERVER 0 +# define FPLAY_RPTP_SERVER_PORT 0 +# define FPLAY_RPTP_SEARCH 0 +# define FPLAY_RPTP_FROM_SENDER 0 +# define FPLAY_SAMPLE_RATE 0 +# define FPLAY_RESET 0 +# define FPLAY_DONE 0 +# define FPLAY_CLIENT_DATA 0 +# define FPLAY_LIST_NAME 0 +# define FPLAY_PUT 0 +# define FPLAY_ID 0 +# define FPLAY_SEQUENCE 0 +# define FPLAY_DATA 0 +# define FPLAY_DATA_SIZE 0 +# define FPLAY_FORMAT_NONE 0 +# define FPLAY_FORMAT_LINEAR_8 0 +# define FPLAY_FORMAT_ULINEAR_8 0 +# define FPLAY_FORMAT_LINEAR_16 0 +# define FPLAY_FORMAT_ULINEAR_16 0 +# define FPLAY_FORMAT_ULAW 0 +# define FPLAY_FORMAT_G721 0 +# define FPLAY_FORMAT_G723_3 0 +# define FPLAY_FORMAT_G723_5 0 +# define FPLAY_FORMAT_GSM 0 +# define FPLAY_BIG_ENDIAN 0 +# define FPLAY_LITTLE_ENDIAN 0 +# define FPLAY_AUDIO_PORT_NONE 0 +# define FPLAY_AUDIO_PORT_SPEAKER 0 +# define FPLAY_AUDIO_PORT_HEADPHONE 0 +# define FPLAY_AUDIO_PORT_LINEOUT 0 +# define FPLAY_MIN_VOLUME 0 +# define FPLAY_MAX_VOLUME 0 +# define FPLAY_MIN_PRIORITY 0 +# define FPLAY_MAX_PRIORITY 0 +# define FPLAY_DEFAULT_VOLUME 0 +# define FPLAY_DEFAULT_PRIORITY 0 +# define FPLAY_DEFAULT_COUNT 0 +# define FPLAY_DEFAULT_LIST_COUNT 0 +# define FPLAY_DEFAULT_RANDOM_SOUND 0 +# define FPLAY_DEFAULT_SAMPLE_RATE 0 +# define FPLAY_DEFAULT_OFFSET 0 +# define FPLAY_DEFAULT_BYTE_ORDER 0 +# define FPLAY_DEFAULT_CHANNELS 0 +# define FPLAY_DEFAULT_BITS 0 +# define FPLAY_ERROR_NONE 0 +# define FPLAY_ERROR_MEMORY 0 +# define FPLAY_ERROR_HOST 0 +# define FPLAY_ERROR_CONNECT 0 +# define FPLAY_ERROR_SOCKET 0 +# define FPLAY_ERROR_WRITE 0 +# define FPLAY_ERROR_CLOSE 0 +# define FPLAY_ERROR_PACKET_SIZE 0 +# define FPLAY_ERROR_BROADCAST 0 +# define FPLAY_ERROR_ATTRIBUTE 0 +# define FPLAY_ERROR_COMMAND 0 +# define FPLAY_ERROR_INDEX 0 +# define FPLAY_ERROR_MODIFIER 0 +# define FRPTP_ERROR_NONE 0 +# define FRPTP_ERROR_MEMORY 0 +# define FRPTP_ERROR_HOST 0 +# define FRPTP_ERROR_CONNECT 0 +# define FRPTP_ERROR_SOCKET 0 +# define FRPTP_ERROR_OPEN 0 +# define FRPTP_ERROR_READ 0 +# define FRPTP_ERROR_WRITE 0 +# define FRPTP_ERROR_PING 0 +# define FRPTP_ERROR_TIMEOUT 0 +# define FRPTP_ERROR_PROTOCOL 0 +# define FRPTP_ERROR 0 +# define FRPTP_OK 0 +# define FRPTP_TIMEOUT 0 +# define FRPTP_NOTIFY 0 +# define FOLD_RPLAY_PLAY 0 +# define FOLD_RPLAY_STOP 0 +# define FOLD_RPLAY_PAUSE 0 +# define FOLD_RPLAY_CONTINUE 0 +# define FRPTP_ASYNC_READ 0 +# define FRPTP_ASYNC_WRITE 0 +# define FRPTP_ASYNC_RAW 0 +# define FRPTP_ASYNC_ENABLE 0 +# define FRPTP_ASYNC_DISABLE 0 +# define FRPTP_EVENT_OK 0 +# define FRPTP_EVENT_ERROR 0 +# define FRPTP_EVENT_TIMEOUT 0 +# define FRPTP_EVENT_OTHER 0 +# define FRPTP_EVENT_CONTINUE 0 +# define FRPTP_EVENT_DONE 0 +# define FRPTP_EVENT_PAUSE 0 +# define FRPTP_EVENT_PLAY 0 +# define FRPTP_EVENT_SKIP 0 +# define FRPTP_EVENT_STATE 0 +# define FRPTP_EVENT_STOP 0 +# define FRPTP_EVENT_VOLUME 0 +# define FRPTP_EVENT_CLOSE 0 +# define FRPTP_EVENT_FLOW 0 +# define FRPTP_EVENT_MODIFY 0 +# define FRPTP_EVENT_LEVEL 0 +# define FRPTP_EVENT_POSITION 0 +# define FRPTP_EVENT_ALL 0 +# define FRPTP_MAX_ARGS 0 +# define FRPTP_MAX_LINE 0 +# define FPLAY_PORT 0 +# define FRPTP_PORT 0 +# define FOLD_RPLAY_PORT 0 +# define FOLD_RPTP_PORT 0 +# define FPLAY_PACKET_ID 0 + +# define Fplay_errno 0 +# define Frptp_errno 0 + + +# define Fplay(a,b) 0 +# define Fplay_create(a) 0 +# define Fplay_perror(a) +# define Fplay_set(...) +# define Fplay_get(...) 0 +# define Fplay_destroy(a) +# define Fplay_default_host() "" +# define Fplay_display(a) 0 +# define Fplay_host(a,b) 0 +# define Fplay_host_volume(a,b,c) 0 +# define Fplay_local(a) 0 +# define Fplay_open(a) -1 +# define Fplay_open_default() -1 +# define Fplay_open_display() -1 +# define Fplay_open_port(a,b) -1 +# define Fplay_open_sockaddr_in(a) -1 +# define Fplay_close(a) 0 +# define Fplay_ping(a) 0 +# define Fplay_ping_sockaddr_in(a) 0 +# define Fplay_ping_sockfd(a) 0 +# define Fplay_sound(a,b) 0 +# define Fplay_default(a) 0 +# define Fplay_convert(a) NULL +# define Fplay_pack(a) 0 +# define Fplay_unpack(a) 0 +# define Frptp_open(a,b,c,d) -1 +# define Frptp_read(a,b,c) 0 +# define Frptp_write(a,b,c) 0 +# define Frptp_close(a) 0 +# define Frptp_perror(a) +# define Frptp_putline(...) 0 +# define Frptp_async_putline(...) 0 +# define Frptp_getline(a,b,c) 0 +# define Frptp_command(a,b,c,d) 0 +# define Frptp_parse(a,b) NULL +# define Frptp_async_write(a,b,c,d) 0 +# define Frptp_async_register(a,b,c) +# define Frptp_async_notify(a,b,c) +# define Frptp_async_process(a,b) +# define Frptp_main_loop() 0 +# define Frptp_stop_main_loop(a) +#endif + +#endif --- fvwm-2.5.27.ds.orig/libs/Makefile.am +++ fvwm-2.5.27.ds/libs/Makefile.am @@ -8,14 +8,14 @@ CombineChars.h Cursor.h Event.h FBidi.h FEvent.h FGettext.h FImage.h \ FRender.h FRenderInit.h FRenderInterface.h FSMlib.h FScreen.h \ FShape.h FShm.h FTips.h Fcursor.h Fft.h FftInterface.h Ficonv.h \ - Flocale.h FlocaleCharset.h Fpng.h Fsvg.h Fxpm.h Grab.h Graphics.h \ - Module.h Parse.h Picture.h PictureBase.h PictureDitherMatrice.h \ - PictureGraphics.h PictureImageLoader.h PictureUtils.h Rectangles.h \ - Strings.h System.h Target.h WinMagic.h XError.h XResource.h charmap.h \ - defaults.h envvar.h fio.h flist.h fsm.h ftime.h fvwm_sys_stat.h \ - fvwmlib.h fvwmrect.h fvwmsignal.h gravity.c gravity.h lang-strings.h \ - modifiers.h queue.h safemalloc.h setpgrp.h timeout.h vpacket.h \ - wcontext.h wild.h \ + Flocale.h FlocaleCharset.h Fplay.h Fpng.h Fsvg.h Fxpm.h Grab.h \ + Graphics.h Module.h Parse.h Picture.h PictureBase.h \ + PictureDitherMatrice.h PictureGraphics.h PictureImageLoader.h \ + PictureUtils.h Rectangles.h Strings.h System.h Target.h WinMagic.h \ + XError.h XResource.h charmap.h defaults.h envvar.h fio.h flist.h \ + fsm.h ftime.h fvwm_sys_stat.h fvwmlib.h fvwmrect.h fvwmsignal.h \ + gravity.c gravity.h lang-strings.h modifiers.h queue.h safemalloc.h \ + setpgrp.h timeout.h vpacket.h wcontext.h wild.h \ \ BidiJoin.c Flocale.c PictureUtils.c FScreen.c Graphics.c \ PictureGraphics.c Bindings.c FlocaleCharset.c Parse.c \ --- fvwm-2.5.27.ds.orig/bin/fvwm-config.in +++ fvwm-2.5.27.ds/bin/fvwm-config.in @@ -228,7 +228,7 @@ echo " sm (session management): $with_sm" echo " stroke (mouse gestures): $with_stroke" echo " rsvg (SVG icons and images): $with_rsvg" - echo " xcursor (ARGB/animated cursors): $with_xcursor" + echo " xcursor (ARGB/animated cursors): $with_xcursor" echo " xinerama (multi-head): $with_xinerama" echo " xft (FreeType anti-alias font): $with_xft" echo " xpm: $with_xpm" --- fvwm-2.5.27.ds.orig/bin/fvwm-menu-headlines.in +++ fvwm-2.5.27.ds/bin/fvwm-menu-headlines.in @@ -1,12 +1,28 @@ #!@PERL@ +# Copyright (c) 1999-2009 Mikhael Goikhman +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + # Filter this script to pod2man to get a man page: # pod2man -c "Fvwm Utilities" fvwm-menu-headlines | nroff -man | less -e require 5.002; use strict; -use vars qw($siteInfo @smonths @lmonths %smonthHash %lmonthHash); -use vars qw($entityMap $errorMenuContent); +use vars qw($site_info @smonths @lmonths %smonth_hash %lmonth_hash); +use vars qw($entity_map $error_menu_content); use Getopt::Long; use Socket; use POSIX qw(strftime); @@ -14,40 +30,40 @@ my $version = "@VERSION@"; -local $siteInfo = { +local $site_info = { 'freshmeat' => { 'name' => "FreshMeat", 'host' => "freshmeat.net", 'path' => "/backend/recentnews.txt", - 'func' => \&processFreshMeat, + 'func' => \&process_freshmeat, 'flds' => 'headline, date, url', }, 'slashdot' => { 'name' => "Slashdot", 'host' => "slashdot.org", 'path' => "/slashdot.xml", - 'func' => \&processSlashdot, + 'func' => \&process_slashdot, 'flds' => 'title, url, time, author, department, topic, comments, section, image', }, 'linuxtoday' => { 'name' => "LinuxToday", 'host' => "linuxtoday.com", 'path' => "/lthead.txt", - 'func' => \&processLinuxToday, + 'func' => \&process_linuxtoday, 'flds' => 'headline, url, date', }, 'old-segfault' => { 'name' => "Old-Segfault (empty now)", 'host' => "segfault.org", 'path' => "/stories.txt", - 'func' => \&processSegfault, + 'func' => \&process_segfault, 'flds' => 'headline, url, date, author_name, author_email, type', }, 'old-appwatch' => { 'name' => "Old-AppWatch (closed by ZDNet)", 'host' => "www.appwatch.com", 'path' => "/appwatch.rdf", - 'func' => \&processPoorRdf, + 'func' => \&process_poor_rdf, 'flds' => 'title, link, description', }, 'old-linuxapps' => { @@ -61,14 +77,14 @@ 'name' => "Old-JustLinux (no headlines?)", 'host' => "www.justlinux.com", 'path' => "/backend/discussion.rdf", - 'func' => \&processPoorRdf, + 'func' => \&process_poor_rdf, 'flds' => 'title, link', }, 'daemonnews' => { 'name' => "DaemonNews", 'host' => "daily.daemonnews.org", 'path' => "/ddn.rdf.php3", - 'func' => \&processPoorRdf, + 'func' => \&process_poor_rdf, 'flds' => 'title, link', }, # this is now called FootNotes or GNOME Desktop News, was news.gnome.org @@ -76,49 +92,49 @@ 'name' => "GNOME-News", 'host' => "www.gnomedesktop.org", 'path' => "/backend.php", - 'func' => \&processPoorRdf, + 'func' => \&process_poor_rdf, 'flds' => 'title, link', }, 'kde-news' => { 'name' => "KDE-News", 'host' => "news.kde.org", 'path' => "/rdf", - 'func' => \&processKDENews, + 'func' => \&process_kde_news, 'flds' => 'title, link', }, 'old-freekde' => { 'name' => "Old-FreeKDE (taken off?)", 'host' => "freekde.org", 'path' => "/freekdeorg.rdf", - 'func' => \&processFreeKDE, + 'func' => \&process_freekde, 'flds' => 'title, link', }, 'rootprompt' => { 'name' => "RootPrompt", 'host' => "rootprompt.org", 'path' => "/rss/", - 'func' => \&processRootPrompt, + 'func' => \&process_rootprompt, 'flds' => 'title, link, description', }, 'newsforge' => { 'name' => "NewsForge", 'host' => "www.newsforge.com", 'path' => "/newsforge.xml", - 'func' => \&processSlashdot, + 'func' => \&process_slashdot, 'flds' => 'title, url, time, author, department, topic, comments, section, image', }, 'kuro5hin' => { 'name' => "Kuro5hin", 'host' => "www.kuro5hin.org", 'path' => "/backend.rdf", - 'func' => \&processKuro5hin, + 'func' => \&process_kuro5hin, 'flds' => 'title, link, description', }, 'bbspot' => { 'name' => "BBSpot", 'host' => "bbspot.com", 'path' => "/bbspot.rdf", - 'func' => \&processPoorRdf, + 'func' => \&process_poor_rdf, 'flds' => 'title, link', }, 'linuxfr' => { @@ -126,7 +142,7 @@ 'host' => "linuxfr.org", # 'path' => "/short.php3", 'path' => "/backend.rss", - 'func' => \&processLinuxFr, + 'func' => \&process_linuxfr, # 'flds' => 'headline, url, author_name, author_email, type', 'flds' => 'title, link', }, @@ -134,14 +150,14 @@ 'name' => "ThinkGeek", 'host' => "www.thinkgeek.com", 'path' => "/thinkgeek.rdf", - 'func' => \&processPoorRdf, + 'func' => \&process_poor_rdf, 'flds' => 'title, link', }, 'cnn' => { 'name' => "CNN", 'host' => "www.cnn.com", 'path' => "/desktop/content.html", - 'func' => \&processCNN, + 'func' => \&process_cnn, 'flds' => 'headline, url', }, # to be removed @@ -149,7 +165,7 @@ 'name' => "BBC-World (obsolete)", 'host' => "news.bbc.co.uk", 'path' => "/low/english/world/default.stm", - 'func' => \&processOldBBC, + 'func' => \&process_old_bbc, 'flds' => 'headline, url, abstract', }, # to be removed @@ -157,14 +173,14 @@ 'name' => "BBC-SciTech (obsolete)", 'host' => "news.bbc.co.uk", 'path' => "/low/english/sci/tech/default.stm", - 'func' => \&processOldBBC, + 'func' => \&process_old_bbc, 'flds' => 'headline, url, abstract', }, 'bbc' => { 'name' => "BBC", 'host' => "news.bbc.co.uk", 'host0' => "tickers.bbc.co.uk", 'path' => "/tickerdata/story2.dat", - 'func' => \&processBBC, + 'func' => \&process_bcc, 'flds' => 'story, headline, url', }, }; @@ -172,70 +188,70 @@ # Site specific parsers may use these constants to convert month to unix time. local @smonths = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); local @lmonths = qw(January February March April May June July August September October November December); -local (%smonthHash, %lmonthHash) = (); -foreach (0 .. 11) { $smonthHash{$smonths[$_]} = $_; $lmonthHash{$lmonths[$_]} = $_; } +local (%smonth_hash, %lmonth_hash) = (); +foreach (0 .. 11) { $smonth_hash{$smonths[$_]} = $_; $lmonth_hash{$lmonths[$_]} = $_; } my $TIMEFIELDS_DATE_TIME = 1; my $TIMEFIELDS_ONLY_DATE = 2; my $TIMEFIELDS_NONE = 3; my $home = $ENV{'HOME'} || '/tmp'; -my $fvwmUserDir = $ENV{'FVWM_USERDIR'} || "$home/.fvwm"; -$fvwmUserDir = $home unless -d $fvwmUserDir; -my $workHome = "$fvwmUserDir/.fvwm-menu-headlines"; +my $fvwm_user_dir = $ENV{'FVWM_USERDIR'} || "$home/.fvwm"; +$fvwm_user_dir = $home unless -d $fvwm_user_dir; +my $work_home = "$fvwm_user_dir/.fvwm-menu-headlines"; -require "$workHome/extension.pl" if -r "$workHome/extension.pl"; +require "$work_home/extension.pl" if -r "$work_home/extension.pl"; my $info = undef; -my $defaultSite = 'freshmeat'; +my $default_site = 'freshmeat'; my $site = undef; my $name = undef; my $title = undef; -my $itemF = '%h\t%[(%Y-%m-%d %H:%M)]'; -my $execF = q(netscape -remote 'openURL(%u, new-window)' || netscape '%u'); -my $commF = undef; -my $iconT = ''; -my $iconI = ''; -my $iconH = ''; -my $iconE = ''; -my $wmIcons = 0; +my $itemf = '%h\t%[(%Y-%m-%d %H:%M)]'; +my $execf = q(firefox '%u'); +my $commf = undef; +my $icont = ''; +my $iconi = ''; +my $iconh = ''; +my $icone = ''; +my $wm_icons = 0; my $proxy = undef; my $port = 80; my $frontpage = undef; my @time = localtime(); -my $menuFile = undef; -my $fakeFile = undef; +my $menu_filename = undef; +my $fake_filename = undef; my $timeout = 20; my $endl = "\r\n"; # this is preferable for http sockets to "\n" GetOptions( - "help|h|?" => \&showHelp, - "version|V" => \&showVersion, + "help|h|?" => \&show_help, + "version|V" => \&show_version, "info:s" => \$info, "site=s" => \$site, "name=s" => \$name, "title=s" => \$title, - "item=s" => \$itemF, - "exec=s" => \$execF, - "command=s" => \$commF, - "icon-title=s" => \$iconT, - "icon-item=s" => \$iconI, - "icon-home=s" => \$iconH, - "icon-error=s" => \$iconE, - "wm-icons" => \$wmIcons, + "item=s" => \$itemf, + "exec=s" => \$execf, + "command=s" => \$commf, + "icon-title=s" => \$icont, + "icon-item=s" => \$iconi, + "icon-home=s" => \$iconh, + "icon-error=s" => \$icone, + "wm-icons" => \$wm_icons, "proxy=s" => \$proxy, "frontpage:s" => \$frontpage, - "file:s" => \$menuFile, - "fake:s" => \$fakeFile, + "file:s" => \$menu_filename, + "fake:s" => \$fake_filename, "timeout=i" => \$timeout, -) || wrongUsage(); -wrongUsage() if @ARGV; +) || wrong_usage(); +wrong_usage() if @ARGV; if (defined $info) { if ($info) { - my $_info = $siteInfo->{lc($info)}; + my $_info = $site_info->{lc($info)}; die "Unsupported site '$info'; try --info.\n" unless $_info; my $host0 = $_info->{'host0'} || $_info->{'host'}; print @@ -244,40 +260,40 @@ "Headlines:\n\thttp://$host0$_info->{'path'}\n", "Headline fields:\n\t$_info->{'flds'}\n"; } else { - print "All supported sites:\n\t", join(", ", &getAllSiteNames()), + print "All supported sites:\n\t", join(", ", &get_all_site_names()), "\n\nSpecify a site name after --info to get a site headlines info.\n"; } exit(0); } -$site ||= $defaultSite; $site = lc($site); -die "Unsupported site '$site'; try --info.\n" unless exists $siteInfo->{$site}; -#$name ||= "MenuHeadlines$siteInfo->{$site}->{'name'}"; +$site ||= $default_site; $site = lc($site); +die "Unsupported site '$site'; try --info.\n" unless exists $site_info->{$site}; +#$name ||= "MenuHeadlines$site_info->{$site}->{'name'}"; $name ||= $site; -$title ||= "$siteInfo->{$site}->{'name'} Headlines"; +$title ||= "$site_info->{$site}->{'name'} Headlines"; -my $siteName = $siteInfo->{$site}->{'name'}; -my $siteHost = $siteInfo->{$site}->{'host'}; -my $sitePath = $siteInfo->{$site}->{'path'}; -my $siteFunc = $siteInfo->{$site}->{'func'}; +my $site_name = $site_info->{$site}->{'name'}; +my $site_host = $site_info->{$site}->{'host'}; +my $site_path = $site_info->{$site}->{'path'}; +my $site_func = $site_info->{$site}->{'func'}; -$commF ||= "Exec $execF"; +$commf ||= "Exec $execf"; $title =~ s/\\t/\t/g; -$itemF =~ s/\\t/\t/g; -$commF =~ s/\\t/\t/g; +$itemf =~ s/\\t/\t/g; +$commf =~ s/\\t/\t/g; -if ($wmIcons) { - $iconT ||= ""; - $iconI ||= "menu/information.xpm"; - $iconH ||= "menu/home.xpm"; - $iconE ||= "menu/choice-no.xpm"; +if ($wm_icons) { + $icont ||= ""; + $iconi ||= "menu/information.xpm"; + $iconh ||= "menu/home.xpm"; + $icone ||= "menu/choice-no.xpm"; } -my $iconTStr = $iconT? "%$iconT%": ""; -my $iconIStr = $iconI? "%$iconI%": ""; -my $iconHStr = $iconH? "%$iconH%": ""; -my $iconEStr = $iconE? "%$iconE%": ""; +my $icont_str = $icont ? "%$icont%" : ""; +my $iconi_str = $iconi ? "%$iconi%" : ""; +my $iconh_str = $iconh ? "%$iconh%" : ""; +my $icone_str = $icone ? "%$icone%" : ""; if (defined $proxy && $proxy =~ /^(.+):(\d+)$/) { $proxy = $1; @@ -288,41 +304,41 @@ # 1) no --file option or value '-' specified (STDOUT is used) # 2) no or empty menu file in --file specified (the default name is used) # 3) non-empty menu file specified (use it) -$menuFile = undef if defined $menuFile && $menuFile eq '-'; -if ($menuFile) { - $menuFile =~ s:^~(/|$):$home$1:; - $menuFile =~ m:^(.+)/[^/]+$:; $workHome = $1 || "."; -} elsif (defined $menuFile) { - $menuFile = "$workHome/$site.menu"; +$menu_filename = undef if defined $menu_filename && $menu_filename eq '-'; +if ($menu_filename) { + $menu_filename =~ s:^~(/|$):$home$1:; + $menu_filename =~ m:^(.+)/[^/]+$:; $work_home = $1 || "."; +} elsif (defined $menu_filename) { + $menu_filename = "$work_home/$site.menu"; } my $content = ""; $content .= qq(DestroyMenu $name\n); -$content .= qq(AddToMenu $name "$iconTStr$title" Title\n); -local $errorMenuContent = $content; +$content .= qq(AddToMenu $name "$icont_str$title" Title\n); +local $error_menu_content = $content; -my $frontpageEntry = ""; +my $frontpage_entry = ""; if (defined $frontpage) { - my $cmd = &expandAllWidthSpecifiers($commF, {'u' => "http://$siteHost/"}); - $frontpageEntry = qq(+ "$iconHStr$siteName Frontpage" $cmd\n); - $errorMenuContent .= qq($frontpageEntry\n+ "" Nop\n); + my $cmd = &expand_all_width_specifiers($commf, {'u' => "http://$site_host/"}); + $frontpage_entry = qq(+ "$iconh_str$site_name Frontpage" $cmd\n); + $error_menu_content .= qq($frontpage_entry\n+ "" Nop\n); } -$errorMenuContent .= "+ `$iconEStr` DestroyMenu $name\n"; +$error_menu_content .= "+ `$icone_str` DestroyMenu $name\n"; if (defined $frontpage && $frontpage !~ /^b/) { - $content .= qq($frontpageEntry\n+ "" Nop\n); + $content .= qq($frontpage_entry\n+ "" Nop\n); } -unless (defined $fakeFile) { - $siteHost = $siteInfo->{$site}->{'host0'} - if defined $siteInfo->{$site}->{'host0'}; - my $redirectDepth = 0; +unless (defined $fake_filename) { + $site_host = $site_info->{$site}->{'host0'} + if defined $site_info->{$site}->{'host0'}; + my $redirect_depth = 0; HTTP_CONNECTION: - my $host = $proxy || $siteHost; - my $iaddr = inet_aton($host) || &dieNet("Can't resolve host $host"); + my $host = $proxy || $site_host; + my $iaddr = inet_aton($host) || &die_net("Can't resolve host $host"); my $paddr = sockaddr_in($port, $iaddr); my $proto = getprotobyname('tcp'); @@ -331,76 +347,76 @@ eval { socket(SOCK, PF_INET, SOCK_STREAM, $proto) && connect(SOCK, $paddr) - } || &dieNet("Can't connect host $host"); + } || &die_net("Can't connect host $host"); alarm(0); select(SOCK); $| = 1; select(STDOUT); # do http request - my $httpHeaders = "$endl" . - "Host: $siteHost$endl" . + my $http_headers = "$endl" . + "Host: $site_host$endl" . "Connection: close$endl" . "User-Agent: fvwm-menu-headlines/$version$endl" . "Pragma: no-cache$endl" . "$endl"; if (defined $proxy) { - print SOCK "GET http://$siteHost$sitePath HTTP/1.1$httpHeaders"; + print SOCK "GET http://$site_host$site_path HTTP/1.1$http_headers"; } else { - print SOCK "GET $sitePath HTTP/1.1$httpHeaders"; + print SOCK "GET $site_path HTTP/1.1$http_headers"; } - unless (readLine() =~ m{HTTP/1\.\d (\d+) \w+}) { - &dieNet("Invalid HTTP response from http://$siteHost$sitePath", 0); + unless (read_line() =~ m{HTTP/1\.\d (\d+) \w+}) { + &die_net("Invalid HTTP response from http://$site_host$site_path", 0); } my $status = $1; - if ($status =~ /^301|302$/ && ++$redirectDepth < 5) { + if ($status =~ /^301|302$/ && ++$redirect_depth < 5) { # redirection while (1) { - my $line = readLine(); + my $line = read_line(); $line =~ s/[\n\r]+$//s; last unless $line; if ($line =~ m{Location: http://([^/]+)(/.*)}i) { - $siteHost = $1; - $sitePath = $2; + $site_host = $1; + $site_path = $2; goto HTTP_CONNECTION; } } } - &dieNet("Unexpected HTTP response $status from http://$siteHost$sitePath", 0) + &die_net("Unexpected HTTP response $status from http://$site_host$site_path", 0) unless $status eq "200"; # skip http response headers - while (readLine() !~ /^\r?\n?$/s) {} + while (read_line() !~ /^\r?\n?$/s) {} } else { - if ($fakeFile) { - $fakeFile =~ s:^~(/|$):$home$1:; + if ($fake_filename) { + $fake_filename =~ s:^~(/|$):$home$1:; } else { - $fakeFile = "$workHome/$site.in"; + $fake_filename = "$work_home/$site.in"; } - open(SOCK, "<$fakeFile") || &dieSys("Can't open $fakeFile"); + open(SOCK, "<$fake_filename") || &die_sys("Can't open $fake_filename"); } -my $entries = &$siteFunc; +my $entries = &$site_func; -close(SOCK) || &dieNet("Error closing socket"); +close(SOCK) || &die_net("Error closing socket"); foreach (@$entries) { - my $text = &expandAllWidthSpecifiers($itemF, $_); - my $comm = &expandAllWidthSpecifiers($commF, $_); + my $text = &expand_all_width_specifiers($itemf, $_); + my $comm = &expand_all_width_specifiers($commf, $_); $text =~ s/"/\\"/g; - $content .= qq(+ "$iconIStr$text" $comm\n); + $content .= qq(+ "$iconi_str$text" $comm\n); } if (defined $frontpage && $frontpage =~ /^b/) { - $content .= qq(+ "" Nop\n$frontpageEntry); + $content .= qq(+ "" Nop\n$frontpage_entry); } -if (defined $menuFile) { - unless (-d $workHome) { - mkdir($workHome, 0775) || &dieSys("Can't create $workHome"); +if (defined $menu_filename) { + unless (-d $work_home) { + mkdir($work_home, 0775) || &die_sys("Can't create $work_home"); } - open(MENU_FILE, ">$menuFile") || &dieSys("Can't open $menuFile"); + open(MENU_FILE, ">$menu_filename") || &die_sys("Can't open $menu_filename"); print MENU_FILE $content; - close(MENU_FILE) || &dieSys("Can't close $menuFile"); + close(MENU_FILE) || &die_sys("Can't close $menu_filename"); } else { print $content; } @@ -409,26 +425,26 @@ # --------------------------------------------------------------------------- -sub readLine { +sub read_line { local $SIG{ALRM} = sub { die "timeout\n"; }; alarm($timeout); my $line = eval { }; if ($@) { - &dieNet("Timeout of $timeout seconds reached") if $@ eq "timeout\n"; - &dieNet($@); + &die_net("Timeout of $timeout seconds reached") if $@ eq "timeout\n"; + &die_net($@); } alarm(0); print STDERR $line if $ENV{"DEBUG_DUMP_RESPONSE"}; return $line; } -sub readAllLines { +sub read_all_lines { local $SIG{ALRM} = sub { die "timeout\n"; }; alarm($timeout * 2); my $lines = eval { join('', ) }; if ($@) { - &dieNet("Timeout of $timeout seconds reached") if $@ eq "timeout\n"; - &dieNet($@); + &die_net("Timeout of $timeout seconds reached") if $@ eq "timeout\n"; + &die_net($@); } alarm(0); print STDERR $lines if $ENV{"DEBUG_DUMP_RESPONSE"}; @@ -436,9 +452,9 @@ } # make unix time from year (2001 or 101), mon (0..11), day, hour, min, sec -sub makeTime { # ($$$$$$$) - my ($hourD, $year, $mon, $day, $hour, $min, $sec) = @_; - $hourD ||= 0; +sub make_time { # ($$$$$$$) + my ($h_offset, $year, $mon, $day, $hour, $min, $sec) = @_; + $h_offset ||= 0; my $type = $TIMEFIELDS_DATE_TIME; unless (defined $hour || defined $min) { @@ -458,29 +474,29 @@ $sec = 0 unless $sec && $sec >= 0 && $sec < 60; return [ - timegm($sec, $min, $hour, $day, $mon, $year) - $hourD * 60 * 60, + timegm($sec, $min, $hour, $day, $mon, $year) - $h_offset * 60 * 60, $type ]; } -sub setEntryAliasesAndTime ($$$$) { +sub set_entry_aliases_and_time ($$$$) { my $entry = shift; my $aliases = shift; - my $timeSub = shift; - my $hOffset = shift; + my $time_func = shift; + my $h_offset = shift; my ($alias, $orig); while (($alias, $orig) = each %$aliases) { - $entry->{$alias} = !$orig? "": - ref($orig) eq 'CODE'? &{$orig}($entry): $entry->{$orig}; + $entry->{$alias} = !$orig ? "" : + ref($orig) eq 'CODE' ? &{$orig}($entry) : $entry->{$orig}; $entry->{$alias} = "" unless defined $entry->{$alias}; } - $entry->{'_'} = makeTime($hOffset, &{$timeSub}($entry->{'d'})); + $entry->{'_'} = make_time($h_offset, &{$time_func}($entry->{'d'})); } BEGIN { - $entityMap = { + $entity_map = { 'gt' => '>', 'lt' => '<', 'quot' => '"', @@ -488,20 +504,22 @@ }; } -sub processXml ($$$$) { - my $entryTag = shift; +sub process_xml ($$$$) { + my $entry_tag = shift; my $aliases = shift; - my $timeSub = shift; - my $hOffset = shift; + my $time_func = shift; + my $h_offset = shift; my @entries = (); - my $doc = readAllLines(); + my $doc = read_all_lines(); ENTRY: - foreach ($doc =~ m!<$entryTag\b[^>]*>(.*?)!sg) { + foreach ($doc =~ m!<$entry_tag\b[^>]*>(.*?)!sg) { s/&quot;/"/g; # fix buggy html in some backends # replace ' with single quote and " with double quote - s/&(?:(\w+)|#(\d+));/ $1? $entityMap->{$1} || "{$1}": chr($2) /ge; + s/&(?:(\w+)|#(\d{2,})|#x([\da-fA-F]{2,4}));/ + $1 ? $entity_map->{$1} || "{$1}" : chr($2 || hex($3)) + /ge; my $entry = {}; @@ -513,24 +531,24 @@ $entry->{$1} = $2; } - setEntryAliasesAndTime($entry, $aliases, $timeSub, $hOffset); + set_entry_aliases_and_time($entry, $aliases, $time_func, $h_offset); push @entries, $entry; } return \@entries; } -sub processText ($$$$) { +sub process_text ($$$$) { my $fields = shift; my $aliases = shift; - my $timeSub = shift; - my $hOffset = shift; + my $time_func = shift; + my $h_offset = shift; my @entries = (); ENTRY: while (1) { my $entry = {}; foreach (@$fields) { - my $line = readLine(); + my $line = read_line(); last ENTRY unless defined $line; next if $_ eq '_ignore_'; @@ -541,14 +559,14 @@ $entry->{$_} = $line; } - setEntryAliasesAndTime($entry, $aliases, $timeSub, $hOffset); + set_entry_aliases_and_time($entry, $aliases, $time_func, $h_offset); push @entries, $entry; } return \@entries; } -sub processSlashdot () { - return processXml( +sub process_slashdot () { + return process_xml( 'story', { 'h' => 'title', 'u' => 'url', 'd' => 'time' }, sub ($) { @@ -558,50 +576,50 @@ ); } -sub processFreshMeat () { - return processText( +sub process_freshmeat () { + return process_text( [ qw( headline date url ) ], { 'h' => 'headline', 'u' => 'url', 'd' => 'date' }, sub ($) { $_[0] =~ /^(?:\w+, )?(\w+) (\d+)\w* (\d+),? (\d+):(\d+)/; - ($3, $lmonthHash{$1}, $2, $4, $5, 0); + ($3, $lmonth_hash{$1}, $2, $4, $5, 0); }, -5 + (abs((localtime())[4] - 5.5) < 3), ); } -sub processLinuxToday () { +sub process_linuxtoday () { my $line; - while ($line = readLine()) { - last if $line =~ /linuxtoday.com/; # skip the text note - last if $line =~ /&&/ and readLine() x 3; # if it was replaced + while ($line = read_line()) { + last if $line =~ /linuxtoday.com/; # skip the text note + last if $line =~ /&&/ and read_line() x 3; # if it was replaced } - return processText( + return process_text( [ qw( _ignore_ headline url date ) ], { 'h' => 'headline', 'u' => 'url', 'd' => 'date' }, sub ($) { $_[0] =~ /(\w+) (\d+), (\d+), (\d+):(\d+):(\d+)/; - ($3, $smonthHash{$1}, $2, $4, $5, $6); + ($3, $smonth_hash{$1}, $2, $4, $5, $6); }, +0, ); } -sub processSegfault () { +sub process_segfault () { my $line; - while ($line = readLine()) { + while ($line = read_line()) { last if $line =~ /^%%/; # skip the text note } - return processText( + return process_text( [ qw( headline url date author_name author_email type _ignore_ ) ], { 'h' => 'headline', 'u' => 'url', 'd' => 'date' }, sub ($) { $_[0] =~ /(\d+) (\w+) (\d+):(\d+):(\d+) (\d+)/; - ($6, $smonthHash{$2}, $1, $3, $4, $5); + ($6, $smonth_hash{$2}, $1, $3, $4, $5); }, -8 + (abs((localtime())[4] - 5.5) < 3), ); } -sub processPoorRdf () { - return processXml( +sub process_poor_rdf () { + return process_xml( 'item', { 'h' => 'title', 'u' => 'link', 'd' => undef }, sub ($) { @@ -612,35 +630,35 @@ ); } -sub processLinuxApps_old () { - return processText( +sub process_linuxapps_old () { + return process_text( [ qw( headline date url ) ], { 'h' => 'headline', 'u' => 'url', 'd' => 'date' }, sub ($) { $_[0] =~ /(\w+) (\d+) (\d+):(\d+):(\d+) \w+ (\d+)/; - ($6, $smonthHash{$1}, $2, $3, $4, $5); + ($6, $smonth_hash{$1}, $2, $3, $4, $5); }, -5, ); } -sub processKDENews () { - my $linkToTime = sub ($) { $_[0]->{'link'} =~ m|/(\d+)/?$|; $1; }; - return processXml( +sub process_kde_news () { + my $link_to_time = sub ($) { $_[0]->{'link'} =~ m|/(\d+)/?$|; $1; }; + return process_xml( 'item', - { 'h' => 'title', 'u' => 'link', 'd' => $linkToTime }, + { 'h' => 'title', 'u' => 'link', 'd' => $link_to_time }, sub ($) { (gmtime($_[0]))[5,4,3,2,1,0]; }, +0, ); } -sub processFreeKDE () { - my $linkToDate = sub ($) { - $_[0]->{'link'} =~ m|/(\d\d/\d\d/\d\d)/|; $1? "20$1": ''; +sub process_freekde () { + my $link_to_date = sub ($) { + $_[0]->{'link'} =~ m|/(\d\d/\d\d/\d\d)/|; $1 ? "20$1" : ''; }; - return processXml( + return process_xml( 'item', - { 'h' => 'title', 'u' => 'link', 'd' => $linkToDate }, + { 'h' => 'title', 'u' => 'link', 'd' => $link_to_date }, sub ($) { $_[0] =~ m|(\d+)/(\d+)/(\d+)|; ($1, ($2 || 0) - 1, $3); @@ -648,27 +666,30 @@ ); } -sub processRootPrompt () { - my $descToDate = sub ($) { - $_[0]->{'description'} =~ /^(\d+ \w{3} \d{4}):/; $1; +sub process_rootprompt () { + my $title_stripped = sub ($) { + $_[0]->{'title'} =~ /(.*) \([^\(\)]+\)$/ ? $1 : $_[0]->{'title'}; + }; + my $title_to_date = sub ($) { + $_[0]->{'title'} =~ / \((\d+ \w{3} \d{4})\)$/; $1; }; - return processXml( + return process_xml( 'item', - { 'h' => 'title', 'u' => 'link', 'd' => $descToDate }, + { 'h' => $title_stripped, 'u' => 'link', 'd' => $title_to_date }, sub ($) { $_[0] =~ /(\d+) (\w+) (\d+)/; - ($3, $smonthHash{$2}, $1); + ($3, $smonth_hash{$2}, $1); }, +0, ); } -sub processKuro5hin () { - my $linkToDate = sub ($) { +sub process_kuro5hin () { + my $link_to_date = sub ($) { $_[0]->{'link'} =~ m|/(\d\d\d\d/\d{1,2}/\d{1,2})/|; $1; }; - return processXml( + return process_xml( 'item', - { 'h' => 'title', 'u' => 'link', 'd' => $linkToDate }, + { 'h' => 'title', 'u' => 'link', 'd' => $link_to_date }, sub ($) { $_[0] =~ m|(\d+)/(\d+)/(\d+)|; ($1, ($2 || 0) - 1, $3); @@ -676,18 +697,18 @@ ); } -sub processLinuxFr () { - my $linkToDate = sub ($) { +sub process_linuxfr () { + my $link_to_date = sub ($) { $_[0]->{'link'} =~ m|/(\d\d\d\d/\d\d/\d\d)/|; $1; }; - my $hackForUrl = sub ($) { - # hack for netscape -remote openURL + my $hack_for_url = sub ($) { + # hack for mozilla -remote openURL my $u = $_[0]->{'link'}; $u =~ s|,|\%2c|g; $u; }; - return processXml( + return process_xml( 'item', - { 'h' => 'title', 'u' => $hackForUrl, 'd' => $linkToDate }, + { 'h' => 'title', 'u' => $hack_for_url, 'd' => $link_to_date }, sub ($) { $_[0] =~ m|(\d+)/(\d+)/(\d+)|; ($1, ($2 || 0) - 1, $3); @@ -695,22 +716,22 @@ ); } -sub processLinuxFr_old () { - my $linkToDate = sub ($) { +sub process_linuxfr_old () { + my $link_to_date = sub ($) { $_[0]->{'url'} =~ m|/(\d\d\d\d/\d\d/\d\d)/|; $1; }; - my $hackForUrl = sub ($) { - # hack for netscape -remote openURL + my $hack_for_url = sub ($) { + # hack for mozilla -remote openURL my $u = $_[0]->{'url'}; $u =~ s|,|\%2c|g; $u; }; my $line; - while ($line = readLine()) { + while ($line = read_line()) { last if $line =~ /^%%/; # skip the text note } - return processText( + return process_text( [ qw( headline url author_name author_email type _ignore_ ) ], - { 'h' => 'headline', 'u' => $hackForUrl, 'd' => $linkToDate }, + { 'h' => 'headline', 'u' => $hack_for_url, 'd' => $link_to_date }, sub ($) { $_[0] =~ m|(\d+)/(\d+)/(\d+)|; ($1, ($2 || 0) - 1, $3); @@ -718,11 +739,11 @@ ); } -sub processCNN () { - my $contents = readAllLines(); +sub process_cnn () { + my $contents = read_all_lines(); my @entries = (); - my $linkToDate = sub ($) { + my $link_to_date = sub ($) { $_[0]->{'url'} =~ m|/(\d\d\d\d).*?(/\d\d/\d\d)/|; "$1$2"; }; @@ -730,13 +751,13 @@ my $entry = {}; $entry->{'url'} = "http://www.cnn.com$1"; $entry->{'headline'} = $2; - setEntryAliasesAndTime( + set_entry_aliases_and_time( $entry, - { 'h' => 'headline', 'u' => 'url', 'd' => $linkToDate }, + { 'h' => 'headline', 'u' => 'url', 'd' => $link_to_date }, sub ($) { - $_[0] =~ m|(\d+)/(\d+)/(\d+)|? - ($1, ($2 || 0) - 1, $3): - (); + $_[0] =~ m|(\d+)/(\d+)/(\d+)| + ? ($1, ($2 || 0) - 1, $3) + : (); }, -5, ); push @entries, $entry; @@ -746,8 +767,8 @@ return \@entries; } -sub processOldBBC () { - my $contents = readAllLines(); +sub process_old_bbc () { + my $contents = read_all_lines(); $contents =~ s!\r\n...\r\n!!sg; # they insert this randomly! $contents =~ s!\s*<(br|/h3|h3|span[^>]*|/span|img [^>]+)>[ \t\r]*\n?!!sig; my @entries = (); @@ -759,7 +780,7 @@ $entry->{'abstract'} = $3; $path =~ s|^(/\d+)?/low/|$1/hi/|; $entry->{'url'} = "http://news.bbc.co.uk$path"; - setEntryAliasesAndTime( + set_entry_aliases_and_time( $entry, { 'h' => 'headline', 'u' => 'url', 'd' => undef }, sub ($) { @@ -773,10 +794,10 @@ return \@entries; } -sub processBBC () { - readAllLines() =~ /STORY 1\nHEADLINE Last update at (\d+:\d+)\nURL \n(.*)$/s; +sub process_bcc () { + read_all_lines() =~ /STORY 1\nHEADLINE Last update at (\d+:\d+)\nURL \n(.*)$/s; my ($time, $contents) = ($1, $2); - dieNet("Parse error. Did BBC site change format?", "") unless defined $time; + die_net("Parse error. Did BBC site change format?", "") unless defined $time; my @entries = (); $contents =~ s{STORY (\d+)\nHEADLINE (.*?)\nURL (.*?)\n}{ @@ -794,13 +815,13 @@ $url = "http://news.bbc.co.uk/" if $url eq ""; $entry->{'url'} = $url; $entry->{'date'} = $date; - setEntryAliasesAndTime( + set_entry_aliases_and_time( $entry, { 'h' => 'headline', 'u' => 'url', 'd' => 'date' }, sub ($) { return () unless defined $_[0] && $_[0] =~ /^(\d+) (\w+) (\d+) (\d+):(\d+)/; - ($3, $lmonthHash{$2}, $1, $4, $5); + ($3, $lmonth_hash{$2}, $1, $4, $5); }, +0, ); push @entries, $entry; @@ -812,7 +833,7 @@ # --------------------------------------------------------------------------- -sub dieSys ($) { +sub die_sys ($) { my $msg = shift; $msg = "$0: $msg: [$!]\n"; @@ -823,22 +844,22 @@ exit(-1); } -sub dieNet ($;$) { +sub die_net ($;$) { my $msg = shift; - my $checkNetworkMsg = @_? "": "; check network connection"; + my $check_network_msg = @_ ? "" : "; check network connection"; - #dieSys($msg); - $errorMenuContent =~ s//$msg$checkNetworkMsg/; - print $errorMenuContent; + #die_sys($msg); + $error_menu_content =~ s//$msg$check_network_msg/; + print $error_menu_content; exit(-1); } # like strftime, but gets unix time, instead of sec/min/hour/day/mon/year. -sub formatTime ($$) { - my ($fmt, $timePair) = @_; +sub format_time ($$) { + my ($fmt, $time_pair) = @_; - $timePair = [] unless ref($timePair) eq 'ARRAY'; - my ($time, $type) = @$timePair; + $time_pair = [] unless ref($time_pair) eq 'ARRAY'; + my ($time, $type) = @$time_pair; $time ||= time(); $type ||= $TIMEFIELDS_NONE; @@ -855,36 +876,36 @@ # Substitutes all %N1*N2x in $name by properly stripped and justified $values. # $name example: %[%d %b %y %H:%M], %*-7(some text), %-32*30h, %{url}. # $values is a hash of named values to substitute. -sub expandAllWidthSpecifiers ($$) { +sub expand_all_width_specifiers ($$) { my ($name, $values) = @_; $name =~ s/%(-?\d+)?(\*(-?)(\d+))?(\w|{\w+}|\(.*?\)|\[.*?\])/ my $tag = substr($5, 0, 1); - my $arg = length($5) == 1? $5: substr($5, 1, -1); + my $arg = length($5) == 1 ? $5 : substr($5, 1, -1); my $value = - $tag eq '('? $arg: - $tag eq '['? formatTime($arg, $values->{'_'}): + $tag eq '(' ? $arg : + $tag eq '[' ? format_time($arg, $values->{'_'}) : $values->{$arg}; $value = "(%$5 is not defined)" unless defined $value; - $value = !$2 || $4 <= 3 || $4 > length($value)? $value: $3? + $value = !$2 || $4 <= 3 || $4 > length($value) ? $value : $3? "..." . substr($value, -$4 + 3, $4 - 3): substr($value, 0, $4 - 3) . "..."; - $1? sprintf("%$1s", $value): $value; + $1 ? sprintf("%$1s", $value) : $value; /ge; return $name; } -sub getAllSiteNames () { - return sort map { $siteInfo->{$_}->{'name'} } keys %$siteInfo; +sub get_all_site_names () { + return sort map { $site_info->{$_}->{'name'} } keys %$site_info; } -sub showHelp { - $site ||= $defaultSite; - #$name ||= "MenuHeadlines$siteInfo->{$site}->{'name'}"; +sub show_help { + $site ||= $default_site; + #$name ||= "MenuHeadlines$site_info->{$site}->{'name'}"; $name ||= $site; - $title ||= "$siteInfo->{$site}->{'name'} Headlines"; + $title ||= "$site_info->{$site}->{'name'} Headlines"; print "A perl script which builds headlines menu for fvwm.\n"; - print "Supported sites: ", join(', ', getAllSiteNames()), "\n\n"; + print "Supported sites: ", join(', ', get_all_site_names()), "\n\n"; print "Usage: $0 [OPTIONS]\n"; print "Options:\n"; print "\t--help show this help and exit\n"; @@ -893,8 +914,8 @@ print "\t--site=NAME headlines site, default is $site\n"; print "\t--name=NAME menu name, default is '$name'\n"; print "\t--title=NAME menu title, default is '$title'\n"; - print "\t--item=FORMAT menu item format, default is '$itemF'\n"; - print "\t--exec=FORMAT exec command, default is {$execF}\n"; + print "\t--item=FORMAT menu item format, default is '$itemf'\n"; + print "\t--exec=FORMAT exec command, default is {$execf}\n"; print "\t--command=FORMAT fvwm command, default is no\n"; print "\t--icon-title=XPM menu title icon, default is no\n"; print "\t--icon-item=XPM menu item icon, default is no\n"; @@ -903,19 +924,19 @@ print "\t--wm-icons define icon names to use with wm-icons\n"; print "\t--frontpage[=V] show frontpage item; values: top, bottom\n"; print "\t--proxy=host[:port] specify proxy host and port (80)\n"; - print "\t--file[=FILE] menu file, default is $workHome/$site.menu\n"; + print "\t--file[=FILE] menu file, default is $work_home/$site.menu\n"; print "\t--fake[=FILE] don't connect, read input from file\n"; print "\t--timeout=SECS timeout for a line reading from a socket\n"; print "Short options are ok if not ambiguous: -h, -t.\n"; exit 0; } -sub showVersion { +sub show_version { print "$version\n"; exit 0; } -sub wrongUsage { +sub wrong_usage { print STDERR "Try '$0 --help' for more information.\n"; exit -1; } @@ -1025,6 +1046,10 @@ get only the 20 last characters, but if the length is less then 10 - to fill with up to 10 spaces on the right. +Example: + + --exec "iceweasel -remote 'openURL(%u, new-window)' || iceweasel '%u'" + =item B<--command> command-format like B<--exec> above, but enables to specify any fvwm command, @@ -1159,17 +1184,17 @@ itself. Put your perl extensions to the file WORK_HOME/extension.pl. For each site add something similar to: - $siteInfo->{'myslashdot'} = { + $site_info->{'myslashdot'} = { 'name' => "MySlashdot", 'host' => "myslashdot.org", 'path' => "/myslashdot.xml", - 'func' => \&processMySlashdot, + 'func' => \&process_my_slashdot, # the following string is only used in --info 'flds' => 'time, title, department, topic, author, url', }; - sub processMySlashdot () { - return processXml( + sub process_my_slashdot () { + return process_xml( 'story', # mandatory 'h', 'u' and 'd' aliases or undef { 'h' => 'title', 'u' => 'url', 'd' => 'time' }, --- fvwm-2.5.27.ds.orig/bin/fvwm-menu-desktop.in +++ fvwm-2.5.27.ds/bin/fvwm-menu-desktop.in @@ -65,7 +65,7 @@ my $DESKTOP = ''; # will contain Kde or Gnome if possible my $OPT_MENU_TITLE = ''; my $OPT_MENU_NAME = ''; -my $fvwmGtkName = "FvwmGtk"; # FvwmGtk module name +my $fvwmgtk_name = "FvwmGtk"; # FvwmGtk module name # Default "icon" @@ -105,7 +105,7 @@ my $MINI_ICONS = 0; # mini-icon disabled (enable =1) my $TRAN = 0; # mini-icon translation disabled (enable =1) -my $wmIcons = 0; # use wm-icons compatible menu icon names +my $wm_icons = 0; # use wm-icons compatible menu icon names # default for style @@ -141,7 +141,7 @@ # Menu Style option my $MENU_STYLE = ""; -my @menusForStyle = (); +my @menus_for_style = (); my $name = ""; my $l = ""; @@ -158,28 +158,28 @@ my $order =""; my $add = 1; # merge usr menu -my $mergeUserMenu = 0; -my $mergeDir = ""; -my $mergeUserDir = ""; -my $sysDir = ""; -my $mergeDirType = ""; -my $userMenuDone = 0; +my $merge_user_menu = 0; +my $merge_dir = ""; +my $merge_user_dir = ""; +my $sys_dir = ""; +my $merge_dir_type = ""; +my $user_menu_done = 0; # check icons -my $checkIcons = ""; -my $checkMiniIcons = ""; -my @checkIconsPath = (); -my @checkMiniIconsPath = (); +my $check_icons = ""; +my $check_mini_icons = ""; +my @check_icons_path = (); +my @check_mini_icons_path = (); #-------- # Read the options GetOptions( - "help|h|?" => \&showHelp, - "version|v|V" => \&showVersion, + "help|h|?" => \&show_help, + "version|v|V" => \&show_version, "install-prefix:s" => $OPT_INSTALL_PREFIX, "desktop:s" => \$MENU_NAME, "type:s" => \$MENU_TYPE, - "fvwmgtk-alias=s" => \$fvwmGtkName, + "fvwmgtk-alias=s" => \$fvwmgtk_name, "title:s" => \$OPT_MENU_TITLE, "name:s" => \$OPT_MENU_NAME, "enable-mini-icons" => \$MINI_ICONS, @@ -206,20 +206,20 @@ "uniconv-exec=s" => \$UNICONV_EXEC, "menu-style=s" => \$MENU_STYLE, "check-app!" => \$CHECK, - "wm-icons" => \$wmIcons, + "wm-icons" => \$wm_icons, "time-limit=s" => \$timelimit, - "merge-user-menu" => \$mergeUserMenu, - "check-mini-icon=s" => \$checkMiniIcons, - "check-icons=s" => \$checkIcons, -) || wrongUsage(); -wrongUsage() if @ARGV; + "merge-user-menu" => \$merge_user_menu, + "check-mini-icon=s" => \$check_mini_icons, + "check-icons=s" => \$check_icons, +) || wrong_usage(); +wrong_usage() if @ARGV; -die "fvwm-menu-desktop: Incorrect alias ($fvwmGtkName) is given\n" - if $fvwmGtkName !~ /^\w[\w\d\.-]*$/; +die "fvwm-menu-desktop: Incorrect alias ($fvwmgtk_name) is given\n" + if $fvwmgtk_name !~ /^\w[\w\d\.-]*$/; -sub printModuleConfig (@) { +sub print_module_config (@) { foreach (@_) { - print "*${fvwmGtkName}: $_\n"; + print "*${fvwmgtk_name}: $_\n"; } } @@ -253,8 +253,8 @@ || $MENU_DESTROY =~ /^d/) ); } -if ( $MENU_NAME eq 'gnome-sys' && $mergeUserMenu) { - $mergeUserDir = "$ENV{HOME}/.gnome/apps"; +if ( $MENU_NAME eq 'gnome-sys' && $merge_user_menu) { + $merge_user_dir = "$ENV{HOME}/.gnome/apps"; } if ( $MENU_NAME eq 'gnome-user' ) { @@ -285,8 +285,8 @@ if ( $MENU_NAME eq 'kde-sys' ) { $APPS_DIR = $KDE_APPS; $MENU_TITLE = 'Kde System Menu'; - if ($mergeUserMenu) { - $mergeUserDir = "$ENV{HOME}/.kde/share/applnk"; + if ($merge_user_menu) { + $merge_user_dir = "$ENV{HOME}/.kde/share/applnk"; } } @@ -321,7 +321,7 @@ # --------- # Icon init -if ($wmIcons) { +if ($wm_icons) { $MINI_ICONS = 1; $MINI_ICONS_DIR = ""; $DI{"fvwm_toptitle"} = "menu/folder-open.xpm:ow"; @@ -427,11 +427,11 @@ } -if ($checkMiniIcons ne "") { - @checkMiniIconsPath = split(":",$checkMiniIcons); +if ($check_mini_icons ne "") { + @check_mini_icons_path = split(":", $check_mini_icons); } -if ($checkIcons ne "") { - @checkIconsPath = split(":",$checkIcons); +if ($check_icons ne "") { + @check_icons_path = split(":", $check_icons); } #---------------- @@ -489,12 +489,12 @@ # "Main" variable: contains the directories to look at. # + is the "level" separator, the menu is built level by level # with a double loop -if ($mergeUserMenu && -d $mergeUserDir) { - @Rec_Dir_List = ("$mergeUserDir","+"); +if ($merge_user_menu && -d $merge_user_dir) { + @Rec_Dir_List = ("$merge_user_dir","+"); } else { @Rec_Dir_List = ("$APPS_DIR", "+"); - $userMenuDone = 1; - $mergeUserMenu = 0; + $user_menu_done = 1; + $merge_user_menu = 0; } # init level @@ -507,7 +507,7 @@ } $top_level = $level; $nlevel = $level +1; # next level -my $isTopLevel = 1; +my $is_top_level = 1; #--------------------------------- # Main loop (double loop) @@ -529,13 +529,13 @@ my @uDir = (); my @list = (); - if ($mergeUserMenu) { - $mergeDir = $dir; - $sysDir = $dir; - $mergeDir =~ s#^$APPS_DIR#$mergeUserDir#; - $sysDir =~ s#^$mergeUserDir#$APPS_DIR#; - if ("$sysDir" eq "$dir") { $mergeDirType = "s"; } - else { $mergeDirType = "u"; } + if ($merge_user_menu) { + $merge_dir = $dir; + $sys_dir = $dir; + $merge_dir =~ s#^$APPS_DIR#$merge_user_dir#; + $sys_dir =~ s#^$merge_user_dir#$APPS_DIR#; + if ("$sys_dir" eq "$dir") { $merge_dir_type = "s"; } + else { $merge_dir_type = "u"; } } #-------- @@ -560,9 +560,9 @@ # for kde # see if the user has over read the systeme .directory: - if ("$mergeDirType" eq "s" && -f "$mergeDir/.directory") { - open(ORDER, "$mergeDir/.directory") || print STDERR - "fvwm-menu-desktop: Can't open $mergeDir/.directory: $!\n"; + if ("$merge_dir_type" eq "s" && -f "$merge_dir/.directory") { + open(ORDER, "$merge_dir/.directory") || print STDERR + "fvwm-menu-desktop: Can't open $merge_dir/.directory: $!\n"; while() { $hidden = 1 if /^hidden=true/i; if ( /^SortOrder=(.*)$/ ) { @@ -570,7 +570,7 @@ $order = "$1"; @list = split(/\s*,\s*/, "$order"); foreach $name (@list) { - next if -f "$mergeDir/$name" && isHidden("$mergeDir/$name"); + next if -f "$merge_dir/$name" && is_hidden("$merge_dir/$name"); push(@orderedList, "$dir/$name"); } } @@ -586,8 +586,8 @@ $order = "$1"; @list = split(/\s*[,;]\s*/, "$order"); foreach $name (@list) { - next if $mergeUserMenu && -f "$mergeDir/$name" && - isHidden("$mergeDir/$name"); + next if $merge_user_menu && -f "$merge_dir/$name" && + is_hidden("$merge_dir/$name"); push(@orderedList, "$dir/$name"); } } @@ -600,13 +600,13 @@ # AND WE UPDATE @Rec_Dir_List HERE # a system submenu has a submenu in the user menu: - if ($mergeDirType eq "s" && ! -d $dir && -d $mergeDir) { - foreach $name (orderReadDir("$mergeDir")) { + if ($merge_dir_type eq "s" && ! -d $dir && -d $merge_dir) { + foreach $name (read_dir($merge_dir)) { next if $name =~ /^\./; - $add = (-f "$dir/$name") || isDirNonEmpty("$dir/$name"); - if (-d "$mergeDir/$name") { - next if -f "$mergeDir/$name/.directory" && - isHidden("$mergeDir/$name/.directory"); + $add = (-f "$dir/$name") || is_dir_not_empty("$dir/$name"); + if (-d "$merge_dir/$name") { + next if -f "$merge_dir/$name/.directory" && + is_hidden("$merge_dir/$name/.directory"); push(@uDir, "$dir/$name") if $add; } foreach $j (@orderedList) { $add=0 if "$dir/$name" eq "$j"; } @@ -615,22 +615,22 @@ } if (-d $dir) { - foreach $name (orderReadDir("$dir")) { + foreach $name (read_dir($dir)) { next if $name =~ /^\./; - $add = (-f "$dir/$name") || isDirNonEmpty("$dir/$name"); + $add = (-f "$dir/$name") || is_dir_not_empty("$dir/$name"); if ( -d "$dir/$name" ) { - if ($mergeDirType eq "s" && -f "$mergeDir/$name/.directory") { - next if isHidden("$mergeDir/$name/.directory"); + if ($merge_dir_type eq "s" && -f "$merge_dir/$name/.directory") { + next if is_hidden("$merge_dir/$name/.directory"); } - elsif ($mergeDirType eq "u" && -d "$sysDir/$name") { + elsif ($merge_dir_type eq "u" && -d "$sys_dir/$name") { next; } elsif ( -f "$dir/$name/.directory") { - next if isHidden("$dir/$name/.directory"); + next if is_hidden("$dir/$name/.directory"); } push(@sDir, "$dir/$name") if $add; - } elsif ($mergeDirType eq "s" && -f "$mergeDir/$name") { - next if isHidden("$mergeDir/$name"); + } elsif ($merge_dir_type eq "s" && -f "$merge_dir/$name") { + next if is_hidden("$merge_dir/$name"); } foreach $j (@orderedList) { $add=0 if ("$dir/$name" eq "$j"); @@ -640,15 +640,15 @@ close(DIR); } # added user entries in a "system" submenu - if ($mergeDirType eq "s" && -d "$mergeDir") { - foreach $name (orderReadDir("$mergeDir")) { + if ($merge_dir_type eq "s" && -d "$merge_dir") { + foreach $name (read_dir("$merge_dir")) { next if $name =~ /^\./; next if -d "$dir/$name" || -f "$dir/$name"; next if "$dir" eq "$APPS_DIR"; - if (-d "$mergeDir/$name") { - push(@uDir, "$dir/$name") if -d "$mergeDir/$name"; - } elsif (-f "$mergeDir/$name") { - next if isHidden("$mergeDir/$name"); + if (-d "$merge_dir/$name") { + push(@uDir, "$dir/$name") if -d "$merge_dir/$name"; + } elsif (-f "$merge_dir/$name") { + next if is_hidden("$merge_dir/$name"); } $add = 1; foreach $j (@orderedList) { @@ -670,14 +670,14 @@ } # next level - $isTopLevel = 0; + $is_top_level = 0; $level = $nlevel; ++$nlevel; shift @Rec_Dir_List; # push out the "+" push( @Rec_Dir_List, '+' ); # add a level separator - if ($mergeUserMenu && $Rec_Dir_List[0] eq '+' && !$userMenuDone) { - $userMenuDone = 1; - $isTopLevel = 1; + if ($merge_user_menu && $Rec_Dir_List[0] eq '+' && !$user_menu_done) { + $user_menu_done = 1; + $is_top_level = 1; @Rec_Dir_List = ("$APPS_DIR", "+"); } # @Rec_Dir_List = (+) => END @@ -688,7 +688,7 @@ # output the menu style if ($MENU_STYLE ne "") { - foreach (@menusForStyle) { + foreach (@menus_for_style) { print qq(ChangeMenuStyle "$MENU_STYLE" "$_"\n); } } @@ -697,8 +697,8 @@ #---------------------------------------------------------------------------- #---------------------------------------------------------------------------- # Subroutines: -# orderReadDir -# isHidden +# read_dir +# is_hidden # up_directory # build_a_level (build a (sub)Menu) # get_info (Read Desktop hints, compute icons) @@ -708,10 +708,10 @@ #---------------------------------------------------------------------------- #---------------------------------------------------------------------------- # -sub orderReadDir { +sub read_dir { my $dir = shift; - opendir(DIR,"$dir") || return (); + opendir(DIR, $dir) || return (); # put the dirs first ... my @f = (); my @d = (); @@ -729,26 +729,26 @@ return (@d, @f); } -sub isDirNonEmpty { +sub is_dir_not_empty { my $dir = shift; return 0 if (! -d $dir); - opendir(DIR,"$dir") || return 0; + opendir(DIR, $dir) || return 0; foreach $name (readdir(DIR)) { - next if $name =~ /^\./; + next if $name =~ /^\./; close(DIR); return 1; } return 0; } -sub isHidden { +sub is_hidden { my $file = shift; my $return = 0; return 0 if ! -f $file; open(ISHIDDEN, "$file") || print STDERR - "fvwm-menu-desktop: Can't open $mergeDir/$file"; + "fvwm-menu-desktop: Can't open $merge_dir/$file"; while() { $return = 1 if /^hidden=true/i; } close(ISHIDDEN); return $return; @@ -778,11 +778,11 @@ # Head of the menu # if ( $level == $top_level ) { - if ($isTopLevel) { + if ($is_top_level) { $mini_icon = $dmicon{$flag .'toptitle'}; $name = $MENU_NAME; - if ($mergeDirType eq "s" && -r "$mergeDir/.directory") { - ($label, $mini_icon) = get_info("$mergeDir/.directory", 'toptitle') + if ($merge_dir_type eq "s" && -r "$merge_dir/.directory") { + ($label, $mini_icon) = get_info("$merge_dir/.directory", 'toptitle') } if (-r "$dir/.directory") { ($label, $mini_icon) = get_info("$APPS_DIR/.directory", 'toptitle') @@ -794,8 +794,8 @@ $tmp_name = substr($dir,rindex ($dir,'/')+1); $name = "$SUBMENUS_PREFIX$tmp_name-$level"; $mini_icon = $dmicon{$flag . 'title'}; - if ($mergeDirType eq "s" && -r "$mergeDir/.directory") { - ($label, $mini_icon) = get_info("$mergeDir/.directory", 'title'); + if ($merge_dir_type eq "s" && -r "$merge_dir/.directory") { + ($label, $mini_icon) = get_info("$merge_dir/.directory", 'title'); } if (-r "$dir/.directory") { ($label, $mini_icon) = get_info("$dir/.directory", 'title'); @@ -805,27 +805,27 @@ } # Now we can print the Head of the (sub)menu - if (!($isTopLevel && $mergeUserMenu && $userMenuDone)) { + if (!($is_top_level && $merge_user_menu && $user_menu_done)) { if ( $flag eq 'gtk_' ) { - printModuleConfig qq(Destroy "$name") + print_module_config qq(Destroy "$name") if ( $level == $top_level && $MENU_DESTROY =~ /^y/ ); - printModuleConfig qq(Menu "$name"), + print_module_config qq(Menu "$name"), qq(Title "$label" $mini_icon), qq(Separator); } else { # if ( $level != $top_level || $MENU_DESTROY =~ /^y/ ) { - if ( (!$isTopLevel || $MENU_DESTROY =~ /^y/) ) { + if ( (!$is_top_level || $MENU_DESTROY =~ /^y/) ) { print "DestroyMenu \"$name\"\n"; } elsif ( $MENU_DESTROY =~ /^d/ ) { print "DestroyMenu recreate \"$name\"\n"; } print "AddToMenu \"$name$spic{\"$flag$titletype\"}" . "$scolor{\"$flag$titletype\"}\" \"$label$mini_icon\" Title\n"; - push @menusForStyle, $name; + push @menus_for_style, $name; } } else { if ( $flag eq 'gtk_' ) { - printModuleConfig qq(Menu "$name"); + print_module_config qq(Menu "$name"); } else { print "AddToMenu \"$name\" \n"; } @@ -842,8 +842,8 @@ $tmp_name = substr($item,rindex ($item,'/')+1); my $itemDD = "$item/.directory"; - if ($mergeDirType eq "s" && -r "$mergeDir/$tmp_name") { - $item = "$mergeDir/$tmp_name"; + if ($merge_dir_type eq "s" && -r "$merge_dir/$tmp_name") { + $item = "$merge_dir/$tmp_name"; $itemDD = "$item/.directory" if -r "$item/.directory"; } @@ -854,7 +854,7 @@ if (-r "$itemDD"); $label= $tmp_name if ( $label eq ""); if ( $flag eq 'gtk_' ) { - printModuleConfig qq(Destroy "$name"), + print_module_config qq(Destroy "$name"), qq(SubMenu "$label" "$name" $mini_icon); } else { print "+ \"$label$mini_icon\" Popup \"$name\"\n"; @@ -868,7 +868,7 @@ } if ( $exec ne '' ) { if ( $flag eq 'gtk_' ) { - printModuleConfig qq(Item "$name" "Exec exec $exec" $mini_icon); + print_module_config qq(Item "$name" "Exec exec $exec" $mini_icon); } else { print "+ \"$name$mini_icon\" Exec exec $exec\n"; } @@ -877,7 +877,7 @@ # for kde if ( $item eq "$dir/SEPARATOR") { if ( $flag eq 'gtk_' ) { - printModuleConfig "Separator"; + print_module_config "Separator"; } else { print qq(+ "" Nop\n); } @@ -926,8 +926,8 @@ # Mandrake creates lines like: # Exec=NO_XALF command args... - if ( /^Exec\s*=\s*NO_XALF\s*((\S*).*$)/ ) { - print STDERR "FOUND X_ALF EXEC $1 EXEC_EXEC $2\n"; + if ( /^Exec\s*=\s*NO_XALF\s*((\S*).*$)/ ) { + #print STDERR "FOUND X_ALF EXEC $1 EXEC_EXEC $2\n"; $exec = $1; $exec_exec = $2; next; @@ -1031,18 +1031,18 @@ # no .png icons with fvwm menu #$mini_icon = '' if ( $flag eq 'fvwm_' && $mini_icon =~ /\.png$/ ); - if ($checkMiniIcons ne "" && $mini_icon ne "") { + if ($check_mini_icons ne "" && $mini_icon ne "") { my $ok = 0; my $d; - foreach $d (@checkMiniIconsPath) { + foreach $d (@check_mini_icons_path) { $ok = 1 if -f "$d/mini_icon"; } $mini_icon = "" if !$ok; } - if ($checkIcons ne "" && $icon ne "") { + if ($check_icons ne "" && $icon ne "") { my $ok = 0; my $d; - foreach $d (@checkIconsPath) { + foreach $d (@check_icons_path) { $ok = 1 if -f "$d/icon"; } $icon = "" if !$ok; @@ -1175,7 +1175,7 @@ #---------------------------------------------------------------------------- # Standard functions -sub showHelp { +sub show_help { print <. -.tr \(*W-|\(bv\*(Tr +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- @@ -48,22 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. -.if \nF \{\ +.ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it makes -.\" way too many mistakes in technical documents. -.hy 0 -.if n .na +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -129,50 +132,22 @@ .\" ======================================================================== .\" .IX Title "fvwm-menu-directory 1" -.TH fvwm-menu-directory 1 "2005-07-08" "perl v5.8.5" "Fvwm Utilities" +.TH fvwm-menu-directory 1 "2009-03-17" "perl v5.10.0" "Fvwm Utilities" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" fvwm\-menu\-directory \- builds a directory browsing menu for fvwm .SH "SYNOPSIS" .IX Header "SYNOPSIS" -\&\fBfvwm-menu-directory\fR -[ \fB\-\-help\fR|\fB\-h\fR|\fB\-?\fR ] -[ \fB\-\-version\fR|\fB\-V\fR ] -[ \fB\-\-name\fR|\fB\-na\fR \s-1NAME\s0 ] -[ \fB\-\-title\fR|\fB\-t\fR \s-1NAME\s0 ] -[ \fB\-\-item\fR|\fB\-it\fR \s-1NAME\s0 ] -[ \fB\-\-icon\-title\fR|\fB\-icon\-t\fR \s-1XPM\s0 ] -[ \fB\-\-icon\-dir\fR|\fB\-icon\-d\fR \s-1XPM\s0 ] -[ \fB\-\-icon\-file\fR|\fB\-icon\-f\fR \s-1XPM\s0 ] -[ \fB\-\-icon\-app\fR|\fB\-icon\-a\fR \s-1XPM\s0 ] -[ \fB\-\-wm\-icons\fR ] -[ \fB\-\-dir\fR|\fB\-d\fR \s-1NAME\s0 ] -[ \fB\-\-order\fR|\fB\-o\fR \s-1NUM\s0 ] -[ \fB\-\-[no]all\fR|\fB\-a\fR ] -[ \fB\-\-[no]links\fR|\fB\-l\fR ] -[ \fB\-\-xterm\fR|\fB\-x\fR \s-1CMD\s0 ] -[ \fB\-\-exec\-title\fR|\fB\-exec\-t\fR \s-1CMD\s0 ] -[ \fB\-\-exec\-file\fR|\fB\-exec\-f\fR \s-1CMD\s0 ] -[ \fB\-\-exec\-app\fR|\fB\-exec\-a\fR [\s-1CMD\s0] ] -[ \fB\-\-command\-title\fR|\fB\-command\-t\fR \s-1CMD\s0 ] -[ \fB\-\-command\-file\fR|\fB\-command\-f\fR \s-1CMD\s0 ] -[ \fB\-\-command\-app\fR|\fB\-command\-a\fR \s-1CMD\s0 ] -[ \fB\-\-[no]reuse\fR|\fB\-r\fR ] -[ \fB\-\-[no]check\-subdirs\fR|\fB\-ch\fR ] -[ \fB\-\-special\-dirs\fR|\fB\-s\fR [\s-1VALUE\s0] ] -[ \fB\-\-[no]memory\-for\-speed\fR|\fB\-mem\fR ] -[ \fB\-\-menu\-style\fR|\fB\-men\fR \s-1NAME\s0 ] -[ \fB\-\-func\-name\fR|\fB\-f\fR \s-1NAME\s0 ] +\&\fBfvwm-menu-directory\fR [ \fB\-\-help\fR|\fB\-h\fR|\fB\-?\fR ] [ \fB\-\-version\fR|\fB\-V\fR ] [ \fB\-\-name\fR|\fB\-na\fR \s-1NAME\s0 ] [ \fB\-\-title\fR|\fB\-t\fR \s-1NAME\s0 ] [ \fB\-\-item\fR|\fB\-it\fR \s-1NAME\s0 ] [ \fB\-\-icon\-title\fR|\fB\-icon\-t\fR \s-1XPM\s0 ] [ \fB\-\-icon\-dir\fR|\fB\-icon\-d\fR \s-1XPM\s0 ] [ \fB\-\-icon\-file\fR|\fB\-icon\-f\fR \s-1XPM\s0 ] [ \fB\-\-icon\-app\fR|\fB\-icon\-a\fR \s-1XPM\s0 ] [ \fB\-\-wm\-icons\fR ] [ \fB\-\-dir\fR|\fB\-d\fR \s-1NAME\s0 ] [ \fB\-\-order\fR|\fB\-o\fR \s-1NUM\s0 ] [ \fB\-\-[no]all\fR|\fB\-a\fR ] [ \fB\-\-[no]links\fR|\fB\-l\fR ] [ \fB\-\-xterm\fR|\fB\-x\fR \s-1CMD\s0 ] [ \fB\-\-exec\-title\fR|\fB\-exec\-t\fR \s-1CMD\s0 ] [ \fB\-\-exec\-file\fR|\fB\-exec\-f\fR \s-1CMD\s0 ] [ \fB\-\-exec\-app\fR|\fB\-exec\-a\fR [\s-1CMD\s0] ] [ \fB\-\-command\-title\fR|\fB\-command\-t\fR \s-1CMD\s0 ] [ \fB\-\-command\-file\fR|\fB\-command\-f\fR \s-1CMD\s0 ] [ \fB\-\-command\-app\fR|\fB\-command\-a\fR \s-1CMD\s0 ] [ \fB\-\-[no]reuse\fR|\fB\-r\fR ] [ \fB\-\-[no]check\-subdirs\fR|\fB\-ch\fR ] [ \fB\-\-special\-dirs\fR|\fB\-s\fR [\s-1VALUE\s0] ] [ \fB\-\-[no]memory\-for\-speed\fR|\fB\-mem\fR ] [ \fB\-\-menu\-style\fR|\fB\-men\fR \s-1NAME\s0 ] [ \fB\-\-func\-name\fR|\fB\-f\fR \s-1NAME\s0 ] .SH "DESCRIPTION" .IX Header "DESCRIPTION" -A perl script which provides an output to read in with PipeRead to build an -fvwm menu containing a directory listing. Almost everything can be configured. +A perl script which provides an output to read in with PipeRead to build an fvwm menu containing a directory listing. Almost everything can be configured. .SH "HINTS" .IX Header "HINTS" -The title item with its own attached action is usually added to the menu. -This may be used to define an action for the directory for which the menu is -built, such as starting a terminal in this directory (the default). -However, this may annoy some users. To disable the title action use -\&\fB\-\-command\-title\fR "", to remove the title completely use \fB\-\-title\fR "". +The title item with its own attached action is usually added to the menu. This may be used to define an action for the directory for which the menu is built, such as starting a terminal in this directory (the default). However, this may annoy some users. To disable the title action use \fB\-\-command\-title\fR "", to remove the title completely use \fB\-\-title\fR "". .SH "OPTIONS" .IX Header "OPTIONS" .IP "\fB\-\-help\fR" 4 @@ -186,38 +161,25 @@ menu name, used only with \-\-reuse, default is MenuBrowser .IP "\fB\-\-title\fR title" 4 .IX Item "--title title" -menu title format, default is '%*\-40p' \- last 40 characters -of the current full path. -\&\s-1TAB\s0 can be specified as '\et', but in .fvwm2rc you should specify a double -backslash or a real \s-1TAB\s0. +menu title format, default is '%*\-40p' \- last 40 characters of the current full path. \s-1TAB\s0 can be specified as '\et', but in .fvwm2rc you should specify a double backslash or a real \s-1TAB\s0. .Sp -Format specifiers: - \f(CW%d\fR \- the current directory name - \f(CW%p\fR \- the current directory full path +Format specifiers: \f(CW%d\fR \- the current directory name \f(CW%p\fR \- the current directory full path .Sp -These specifiers can receive an optional integer size, positive for right -adjusted string or negative for left adjusted, example: \f(CW%8x\fR; and optional -*num or *\-num, which means to leave only the first or last (if minus) num of -chars, the num must be greater than 3, since the striped part is replaced -with \*(L"...\*(R", example: %*30x. Both can be combined: %\-10*\-20x, this instructs to -get only the 20 last characters, but if the length is less then 10 \- to fill -with up to 10 spaces on the right. +These specifiers can receive an optional integer size, positive for right adjusted string or negative for left adjusted, example: \f(CW%8x\fR; and optional *num or *\-num, which means to leave only the first or last (if minus) num of chars, the num must be greater than 3, since the striped part is replaced with \*(L"...\*(R", example: %*30x. Both can be combined: %\-10*\-20x, this instructs to get only the 20 last characters, but if the length is less then 10 \- to fill with up to 10 spaces on the right. .IP "\fB\-\-item\fR format" 4 .IX Item "--item format" -menu item format, default is '%n'. \s-1TAB\s0 and width modifiers -for \f(CW%n\fR, \f(CW%N\fR and \f(CW%s\fR can be specified as described in \fB\-\-title\fR above. -Note, specifying a non default format slows the script. +menu item format, default is '%n'. \s-1TAB\s0 and width modifiers for \f(CW%n\fR, \f(CW%N\fR and \f(CW%s\fR can be specified as described in \fB\-\-title\fR above. Note, specifying a non default format slows the script. .Sp Format specifiers: .Sp .Vb 7 -\& %n - file/dir name (without the path) -\& %N - file/dir name (full with the path) -\& %d - file/dir date (yyyy-mm-dd HH:MM:SS) -\& %D - file/dir date (yyyy-mm-dd) -\& %s - file/dir size (in bytes) -\& %t - file/dir type (File|Dir |Link|Sock|Blck|Char|Pipe) -\& %T - file/dir type (F|D|L|S|B|C|P) +\& %n \- file/dir name (without the path) +\& %N \- file/dir name (full with the path) +\& %d \- file/dir date (yyyy\-mm\-dd HH:MM:SS) +\& %D \- file/dir date (yyyy\-mm\-dd) +\& %s \- file/dir size (in bytes) +\& %t \- file/dir type (File|Dir |Link|Sock|Blck|Char|Pipe) +\& %T \- file/dir type (F|D|L|S|B|C|P) .Ve .Sp Example: \-\-title '%*\-40p\etDate, Type\etSize' \-\-item '%*40n\et%d \f(CW%t\fR\et%s' @@ -235,9 +197,7 @@ menu application icon, default is none .IP "\fB\-\-wm\-icons\fR" 4 .IX Item "--wm-icons" -define icon names suitable for use with wm-icons package. -Currently this is equivalent to: \-\-icon\-title menu/folder\-open.xpm \-\-icon\-item -menu/file.xpm \-\-icon\-dir menu/folder.xpm \-\-icon\-app menu/utility.xpm. +define icon names suitable for use with wm-icons package. Currently this is equivalent to: \-\-icon\-title menu/folder\-open.xpm \-\-icon\-item menu/file.xpm \-\-icon\-dir menu/folder.xpm \-\-icon\-app menu/utility.xpm. .IP "\fB\-\-dir\fR dir" 4 .IX Item "--dir dir" starting dir, default is ${\s-1HOME\-\s0.} @@ -246,8 +206,8 @@ in the range (\-6 .. 6), default is 5: .Sp .Vb 3 -\& 1 - do not sort, 2 - dirs first, 3 - files first -\& 4 - sort by name, 5 - dirs first, 6 - files first +\& 1 \- do not sort, 2 \- dirs first, 3 \- files first +\& 4 \- sort by name, 5 \- dirs first, 6 \- files first \& Negative number represents reverse order. .Ve .IP "\fB\-\-[no]all\fR" 4 @@ -261,117 +221,71 @@ X terminal call, default is 'xterm \-e' .IP "\fB\-\-exec\-title\fR command" 4 .IX Item "--exec-title command" -an fvwm Exec command on directory title (usually the -shell), default is ${SHELL\-/bin/sh}. -\&'\-' means no Exec command, i.e. Nop. -If the command is not started with '^' X terminal call is prepended. -The command is started in the currently browsed directory. +an fvwm Exec command on directory title (usually the shell), default is ${SHELL\-/bin/sh}. '\-' means no Exec command, i.e. Nop. If the command is not started with '^' X terminal call is prepended. The command is started in the currently browsed directory. .IP "\fB\-\-exec\-file\fR command" 4 .IX Item "--exec-file command" -an fvwm Exec command on regular files, -default is ${EDITOR\-vi}. -\&'\-' means no Exec command, i.e. Nop. -If the command is not started with '^' X terminal call is prepended. -The actual file name is appended to the command. +an fvwm Exec command on regular files, default is ${EDITOR\-vi}. '\-' means no Exec command, i.e. Nop. If the command is not started with '^' X terminal call is prepended. The actual file name is appended to the command. .IP "\fB\-\-exec\-app\fR [command]" 4 .IX Item "--exec-app [command]" -an fvwm Exec command on +x files, default is '\-', -which means the same command as on regular files. If no command is given, -it is assumed to be empty \- simply run the +x file. -If the command is not started with '^' X terminal call is prepended. -The actual file name is appended to the command. +an fvwm Exec command on +x files, default is '\-', which means the same command as on regular files. If no command is given, it is assumed to be empty \- simply run the +x file. If the command is not started with '^' X terminal call is prepended. The actual file name is appended to the command. .IP "\fB\-\-command\-title\fR command" 4 .IX Item "--command-title command" -an fvwm command to execute on title. -If this option is not given (or command is '\-'), the \f(CW\*(C`\-\-exec\-title\*(C'\fR -is used instead. -In the command, \f(CW%d\fR is substituted with the full directory path. +an fvwm command to execute on title. If this option is not given (or command is '\-'), the \f(CW\*(C`\-\-exec\-title\*(C'\fR is used instead. In the command, \f(CW%d\fR is substituted with the full directory path. .Sp -In fact, \fI\-\-exec\-title=tcsh\fR is equivalent -to \fI\-\-command\-title='Exec cd \*(L"%d\*(R"; xterm \-e tcsh'\fR +In fact, \fI\-\-exec\-title=tcsh\fR is equivalent to \fI\-\-command\-title='Exec cd \*(L"%d\*(R"; xterm \-e tcsh'\fR .Sp The empty value disables the title action. .IP "\fB\-\-command\-file\fR command" 4 .IX Item "--command-file command" -an fvwm command to execute on regular files. -If this option is not given (or command is '\-'), the \f(CW\*(C`\-\-exec\-file\*(C'\fR -is used instead. -In the command, \f(CW%f\fR is substituted with the full file path. +an fvwm command to execute on regular files. If this option is not given (or command is '\-'), the \f(CW\*(C`\-\-exec\-file\*(C'\fR is used instead. In the command, \f(CW%f\fR is substituted with the full file path. .Sp -In fact, \-\-exec\-file=vi is equivalent -to \-\-command\-file='Exec xterm \-e vi \*(L"%f\*(R"' +In fact, \-\-exec\-file=vi is equivalent to \-\-command\-file='Exec xterm \-e vi \*(L"%f\*(R"' .IP "\fB\-\-command\-app\fR command" 4 .IX Item "--command-app command" -an fvwm command to execute on +x files. -If this option is not given (or command is '\-'), the \f(CW\*(C`\-\-command\-app\*(C'\fR -is used instead. -In the command, \f(CW%f\fR is substituted with the full file path. +an fvwm command to execute on +x files. If this option is not given (or command is '\-'), the \f(CW\*(C`\-\-command\-app\*(C'\fR is used instead. In the command, \f(CW%f\fR is substituted with the full file path. .Sp -In fact, \-\-exec\-app=^exec is equivalent -to \-\-command\-app='Exec exec \*(L"%f\*(R"' +In fact, \-\-exec\-app=^exec is equivalent to \-\-command\-app='Exec exec \*(L"%f\*(R"' .IP "\fB\-\-[no]reuse\fR" 4 .IX Item "--[no]reuse" -no pop-up menus, reuse the same menu, default is \-\-noreuse. -When you specify this option the Menu action is used, not Popup. Also, -the \-\-name parameter is not ignored, and \-\-dir parameter is ignored -if there is ~/.fvwm/.fvwm\-menu\-directory.dir file. This file is only created -or used with this option specified, it is the only solution for the current -fvwm menu state. +no pop-up menus, reuse the same menu, default is \-\-noreuse. When you specify this option the Menu action is used, not Popup. Also, the \-\-name parameter is not ignored, and \-\-dir parameter is ignored if there is ~/.fvwm/.fvwm\-menu\-directory.dir file. This file is only created or used with this option specified, it is the only solution for the current fvwm menu state. .IP "\fB\-\-[no]check\-subdirs\fR" 4 .IX Item "--[no]check-subdirs" -check all subdirs for having execute (+x) permission -and replace \*(L"Popup\*(R"/\*(L"Menu\*(R" command with \*(L"Nop\*(R" for these without permissions. -This has a visual effect of disabling popup triangle in the subdirectory item. -The default is \-\-nocheck\-subdirs, because: 1) enabling this slows a bit the -script, 2) with this option enabled, if no icons used and no dir/file separate -sorting used there is no way to know that the item is directory and not file. +check all subdirs for having execute (+x) permission and replace \*(L"Popup\*(R"/\*(L"Menu\*(R" command with \*(L"Nop\*(R" for these without permissions. This has a visual effect of disabling popup triangle in the subdirectory item. The default is \-\-nocheck\-subdirs, because: 1) enabling this slows a bit the script, 2) with this option enabled, if no icons used and no dir/file separate sorting used there is no way to know that the item is directory and not file. .IP "\fB\-\-special\-dirs\fR value" 4 .IX Item "--special-dirs value" -add .. or ~ or / special directories according to -given optional value. Without with option these directories are not added. -Default value if not specified is \*(L"1,2\*(R". The value is comma separated ordered -special directory indexes, where 1 is parent directory, 2 is home directory, -3 is root directory. If minus is prepended to the value, special directories -are added at the bottom of menu instead of top. Value \*(L"0\*(R" or any bad value -is equivalent to non-specifying this option at all. +add .. or ~ or / special directories according to given optional value. Without with option these directories are not added. Default value if not specified is \*(L"1,2\*(R". The value is comma separated ordered special directory indexes, where 1 is parent directory, 2 is home directory, 3 is root directory. If minus is prepended to the value, special directories are added at the bottom of menu instead of top. Value \*(L"0\*(R" or any bad value is equivalent to non-specifying this option at all. .IP "\fB\-\-[no]memory\-for\-speed\fR" 4 .IX Item "--[no]memory-for-speed" -use speed optimization, i.e. use previously -created directory menus without destroying it when closed, default is -\&\-\-nomemory\-for\-speed +use speed optimization, i.e. use previously created directory menus without destroying it when closed, default is \-\-nomemory\-for\-speed .Sp .Vb 2 \& Warning: speed optimization takes up a lot of memory -\& that is never free'd again while fvwm is running. +\& that is never free\*(Aqd again while fvwm is running. .Ve .IP "\fB\-\-menu\-style\fR name" 4 .IX Item "--menu-style name" assign MenuStyle name to the menus .IP "\fB\-\-func\-name\fR name" 4 .IX Item "--func-name name" -overwrite the default MissingSubmenuFunction name that is -\&\*(L"FuncFvwmMenuDirectory\*(R" +overwrite the default MissingSubmenuFunction name that is \*(L"FuncFvwmMenuDirectory\*(R" .PP -Option parameters can be specified either using '=' or in the next argument. -Short options are ok if not ambiguous: \f(CW\*(C`\-a\*(C'\fR, \f(CW\*(C`\-x\*(C'\fR, \f(CW\*(C`\-icon\-f\*(C'\fR; but be -careful with short options, what is now unambiguous, can become ambiguous -in the next versions. +Option parameters can be specified either using '=' or in the next argument. Short options are ok if not ambiguous: \f(CW\*(C`\-a\*(C'\fR, \f(CW\*(C`\-x\*(C'\fR, \f(CW\*(C`\-icon\-f\*(C'\fR; but be careful with short options, what is now unambiguous, can become ambiguous in the next versions. .SH "USAGE" .IX Header "USAGE" Put this into your fvwm configuration file to invoke the script: .PP .Vb 2 \& AddToFunc FuncFvwmMenuDirectory -\& + I PipeRead "fvwm-menu-directory -d '$0'" +\& + I PipeRead "fvwm\-menu\-directory \-d \*(Aq$0\*(Aq" .Ve .PP More complex example: .PP .Vb 4 \& # AddToFunc FuncFvwmMenuDirectory -\& # + I PipeRead "fvwm-menu-directory -d '$0' -x 'Eterm -g 80x40 -e' \e\e -\& -a -l -o 6 --exec-app --exec-title 'tcsh -l' --exec-file 'vim -R' \e\e -\& -t 'Go to: %d' --wm-icons" +\& # + I PipeRead "fvwm\-menu\-directory \-d \*(Aq$0\*(Aq \-x \*(AqEterm \-g 80x40 \-e\*(Aq \e\e +\& \-a \-l \-o 6 \-\-exec\-app \-\-exec\-title \*(Aqtcsh \-l\*(Aq \-\-exec\-file \*(Aqvim \-R\*(Aq \e\e +\& \-t \*(AqGo to: %d\*(Aq \-\-wm\-icons" .Ve .PP And put this in the menu from which you want to pop-up the directory menus: @@ -384,8 +298,7 @@ .PP Note: please use absolute path names. .PP -It is a good idea to set the menu pop-up delay to something positive -and enable busy cursor +It is a good idea to set the menu pop-up delay to something positive and enable busy cursor .PP .Vb 2 \& MenuStyle * PopupDelayed, PopupDelay 200 @@ -399,21 +312,19 @@ .Vb 4 \& AddToMenu Browser \& + DynamicPopupAction PipeRead \e\e -\& "fvwm-menu-directory -r -na Browser -d / -s" +\& "fvwm\-menu\-directory \-r \-na Browser \-d / \-s" \& AddToMenu SomeMenu "My Browser" Menu Browser .Ve .PP -Here the \f(CW\*(C`\-\-dir\*(C'\fR parameter (starting directory) is ignored if there is -~/.fvwm/.fvwm\-menu\-directory.dir file, which you can delete. +Here the \f(CW\*(C`\-\-dir\*(C'\fR parameter (starting directory) is ignored if there is ~/.fvwm/.fvwm\-menu\-directory.dir file, which you can delete. .SH "AUTHORS" .IX Header "AUTHORS" -Inspired on 1999\-06\-07 by Dominik Vogt . +Inspired on 1999\-06\-07 by Dominik Vogt . .PP Rewritten on 1999\-08\-05 by Mikhael Goikhman . .SH "COPYING" .IX Header "COPYING" -The script is distributed by the same terms as fvwm itself. -See \s-1GNU\s0 General Public License for details. +The script is distributed by the same terms as fvwm itself. See \s-1GNU\s0 General Public License for details. .SH "BUGS" .IX Header "BUGS" Report bugs to fvwm\-bug@fvwm.org. --- fvwm-2.5.27.ds.orig/bin/fvwm-perllib.1 +++ fvwm-2.5.27.ds/bin/fvwm-perllib.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.02) .\" .\" Standard preamble: .\" ======================================================================== @@ -25,11 +25,11 @@ .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to -.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' -.\" expand to `' in nroff, nothing in troff, for use with C<>. -.tr \(*W-|\(bv\*(Tr +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- @@ -48,22 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. -.if \nF \{\ +.ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it makes -.\" way too many mistakes in technical documents. -.hy 0 -.if n .na +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -129,75 +132,64 @@ .\" ======================================================================== .\" .IX Title "fvwm-perllib 1" -.TH fvwm-perllib 1 "2003-03-11" "perl v5.8.0" "Fvwm Utilities" +.TH fvwm-perllib 1 "2009-03-17" "perl v5.10.0" "Fvwm Utilities" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" fvwm\-perllib \- shows the documentation of the Fvwm Perl library .SH "SYNOPSIS" .IX Header "SYNOPSIS" -\&\fBfvwm-perllib\fR -[ \fB\-\-help\fR|\fB\-h\fR|\fB\-?\fR ] -[ \fB\-\-version\fR|\fB\-v\fR|\fB\-V\fR ] -[ \fBman\fR [ \fIPerl::Class\fR ] ] -[ \fBcat\fR [ \fIPerl::Class\fR ] ] -[ \fBraw\fR [ \fIPerl::Class\fR ] ] -[ \fBdir\fR ] +\&\fBfvwm-perllib\fR [ \fB\-\-help\fR|\fB\-h\fR|\fB\-?\fR ] [ \fB\-\-version\fR|\fB\-v\fR|\fB\-V\fR ] [ \fBman\fR [ \fIPerl::Class\fR ] ] [ \fBcat\fR [ \fIPerl::Class\fR ] ] [ \fBraw\fR [ \fIPerl::Class\fR ] ] [ \fBdir\fR ] .SH "DESCRIPTION" .IX Header "DESCRIPTION" -Starting from fvwm\-2.5.x versions there is a built-in support for creating -\&\s-1fvwm\s0 modules in Perl. This \fBfvwm-perllib\fR utility provides help services -for the \s-1fvwm\s0 Perl library. +Starting from fvwm\-2.5.x versions there is a built-in support for creating fvwm modules in Perl. This \fBfvwm-perllib\fR utility provides help services for the Fvwm Perl library. .SH "OPTIONS" .IX Header "OPTIONS" -\&\fB\-\-help\fR - show the help and exit +\&\fB\-\-help\fR show the help and exit .PP -\&\fB\-\-version\fR - show the version and exit +\&\fB\-\-version\fR show the version and exit .PP -\&\fB\-\-man\fR or \fBman\fR [ \fIPerl::Class\fR ] - show manual page just like \fIman\fR\|(1) +\&\fB\-\-man\fR or \fBman\fR [ \fIPerl::Class\fR ] show manual page just like \fIman\fR\|(1) .PP -\&\fB\-\-cat\fR or \fBcat\fR [ \fIPerl::Class\fR ] - show manual page in plain text +\&\fB\-\-cat\fR or \fBcat\fR [ \fIPerl::Class\fR ] show manual page in plain text .PP -\&\fB\-\-raw\fR or \fBraw\fR [ \fIPerl::Class\fR ] - generate output in man format (not human readable) +\&\fB\-\-raw\fR or \fBraw\fR [ \fIPerl::Class\fR ] generate output in man format (not human readable) .PP -\&\fB\-\-dir\fR or \fBdir\fR - print perllib directory without a trailing end of line +\&\fB\-\-dir\fR or \fBdir\fR print perllib directory without a trailing end of line .SH "USAGE" .IX Header "USAGE" -Use this in the \s-1fvwm\s0 modules written in Perl: +Use this in the fvwm modules written in Perl: .PP .Vb 1 -\& use lib `fvwm-perllib dir`; +\& use lib \`fvwm\-perllib dir\`; .Ve .PP -Introduction to the \s-1Fvwm\s0 Perl library: +Introduction to the Fvwm Perl library: .PP .Vb 1 -\& % fvwm-perllib man +\& % fvwm\-perllib man .Ve .PP Manual page for the \f(CW\*(C`FVWM::Module\*(C'\fR class: .PP .Vb 1 -\& % fvwm-perllib man FVWM::Module +\& % fvwm\-perllib man FVWM::Module .Ve .PP Standard options: .PP .Vb 2 -\& % fvwm-perllib --help -\& % fvwm-perllib --version +\& % fvwm\-perllib \-\-help +\& % fvwm\-perllib \-\-version .Ve .SH "AUTHORS" .IX Header "AUTHORS" Mikhael Goikhman . .SH "COPYING" .IX Header "COPYING" -The script is distributed by the same terms as fvwm itself. -See \s-1GNU\s0 General Public License for details. +The script is distributed by the same terms as fvwm itself. See \s-1GNU\s0 General Public License for details. .SH "BUGS" .IX Header "BUGS" No known bugs. --- fvwm-2.5.27.ds.orig/bin/fvwm-perllib.in +++ fvwm-2.5.27.ds/bin/fvwm-perllib.in @@ -1,5 +1,21 @@ #!@PERL@ +# Copyright (c) 2002-2009 Mikhael Goikhman +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + # Filter this script to pod2man to get a man page: # pod2man -c "Fvwm Utilities" fvwm-perllib | nroff -man | less -e @@ -24,39 +40,39 @@ use General::FileSystem '-die'; my $version = "@VERSION@"; -my $versionInfo = "@VERSIONINFO@"; +my $version_info = "@VERSIONINFO@"; my $pager = $ENV{PAGER} || "less -e"; -my $doMan = 0; -my $doCat = 0; -my $doRaw = 0; +my $do_man = 0; +my $do_cat = 0; +my $do_raw = 0; GetOptions( - "help|h|?" => \&showHelp, - "version|v|V" => \&showVersion, - "man" => \$doMan, - "cat" => \$doCat, - "raw" => \$doRaw, + "help|h|?" => \&show_help, + "version|v|V" => \&show_version, + "man" => \$do_man, + "cat" => \$do_cat, + "raw" => \$do_raw, "dir" => sub { print $perllibdir; exit(0); }, -) || wrongUsage(); +) || wrong_usage(); if ($ARGV[0] eq 'man') { - $doMan = 1; + $do_man = 1; shift; } elsif ($ARGV[0] eq 'cat') { - $doCat = 1; + $do_cat = 1; shift; } elsif ($ARGV[0] eq 'raw') { - $doRaw = 1; + $do_raw = 1; shift; } -wrongUsage() if !$doMan && !$doCat && !$doRaw || @ARGV > 1; +wrong_usage() if !$do_man && !$do_cat && !$do_raw || @ARGV > 1; -my $manOrCatStr = $doMan || $doRaw? "man": "cat"; -my $internalPods = {}; +my $man_or_cat_str = $do_man || $do_raw ? "man" : "cat"; +my $internal_pods = {}; -$internalPods->{index} = qq{ +$internal_pods->{index} = qq{ :head1 NAME index - lists all available help topics @@ -68,7 +84,7 @@ You may read the Perl library documentation locally by running: - % fvwm-perllib $manOrCatStr + % fvwm-perllib $man_or_cat_str Available topics: @@ -79,14 +95,14 @@ For example: - % fvwm-perllib $manOrCatStr FVWM::Module + % fvwm-perllib $man_or_cat_str FVWM::Module :head1 AUTHOR Mikhael Goikhman . }; -$internalPods->{tutorial} = q{ +$internal_pods->{tutorial} = q{ :head1 NAME tutorial - common techniques for writting fvwm modules @@ -164,12 +180,12 @@ and to define two event handlers for I. But for our purposes one I would be more than enough: - $module->addHandler(M_NEW_PAGE, \&gotNewPage); + $module->add_handler(M_NEW_PAGE, \&got_new_page); - It is a time to implement our C function that will be + It is a time to implement our C function that will be called every time the desktop page is changed. - sub gotNewPage { + sub got_new_page { my ($module, $event) = @_; my $width = $event->_vp_width; @@ -205,7 +221,7 @@ Finally, all persistent modules should enter the event loop: - $module->eventLoop; + $module->event_loop; The full module source that we just wrote is available at ftp://ftp.fvwm.org/pub/fvwm/devel/sources/tests/perl/module-flash . @@ -288,10 +304,10 @@ my $format = "(%d, %d)"; # the default format $module->mask($module->mask | M_STRING); - $module->addHandler(M_STRING, sub { + $module->add_handler(M_STRING, sub { my ($module, $event) = @_; my $line = $event->_text; - my ($action, @args) = getTokens($line); + my ($action, @args) = get_tokens($line); if ($action eq "stop") { $module->terminate; @@ -305,8 +321,8 @@ use lib `fvwm-perllib dir`; use FVWM::Module::Gtk; - use Gtk -init; use POSIX qw(SIGALRM); + Gtk->init; my $format = "(%d, %d)"; my $module = new FVWM::Module::Gtk; @@ -344,7 +360,7 @@ alarm(1); }); - $module->eventLoop; + $module->event_loop; The full module source that we just wrote is available at ftp://ftp.fvwm.org/pub/fvwm/devel/sources/tests/perl/module-gtkflash . @@ -366,7 +382,7 @@ Mikhael Goikhman . }; -$internalPods->{events} = q{ +$internal_pods->{events} = q{ :head1 NAME events - list of all fvwm events with arguments @@ -382,7 +398,7 @@ There are several more ways to access arguments, like: - $win_id = $event->argValues->[0]; + $win_id = $event->arg_values->[0]; $text = $event->args->{text}; :head1 EVENTS WITH ARGUMENTS @@ -415,15 +431,15 @@ my $topic = $ARGV[0] || "index"; my $file = "-"; my $text = ""; -if (exists $internalPods->{$topic}) { - $text = $internalPods->{$topic}; +if (exists $internal_pods->{$topic}) { + $text = $internal_pods->{$topic}; $text =~ s/^\t//mg; $text =~ s/^:/=/mg; if ($topic eq 'index') { - my @classNames = sort @{listFileNames($perllibdir, 1)}; - @classNames = map { s!\.pm$!!; s!/!::!g; $_ } @classNames; - $text =~ s/{{CLASS_NAMES}}/join("\n ", @classNames)/seg; + my @class_names = sort @{list_filenames($perllibdir, 1)}; + @class_names = map { s!\.pm$!!; s!/!::!g; $_ } @class_names; + $text =~ s/{{CLASS_NAMES}}/join("\n ", @class_names)/seg; } if ($topic eq 'events') { @@ -446,11 +462,11 @@ die "No $file found.\n" unless -f $file; } -my $manConverter = $doMan? " | nroff -man | $pager": ""; -open(MANPIPE, $doCat? "| pod2text '$file' | $pager": - "| pod2man --section 3 --release 'fvwm $version$versionInfo'" . +my $man_converter = $do_man ? " | nroff -man | $pager" : ""; +open(MANPIPE, $do_cat ? "| pod2text '$file' | $pager" : + "| pod2man --section 3 --release 'fvwm $version$version_info'" . " --center 'Fvwm Perl library' '$file'" . - " | sed 's//perllib/ig'$manConverter") + " | sed 's//perllib/ig'$man_converter") or die "Can't open pipe to pod/man viewer\n"; print MANPIPE $text or die "Can't write to pod/man viewer\n"; @@ -458,10 +474,10 @@ # --------------------------------------------------------------------------- -sub showHelp { +sub show_help { print "Shows documentation of the supplied FVWM Perl library.\n\n"; print "Usage: fvwm-perllib man|cat\n"; - print "\tAn introduction to the Fvwm Perl library\n\n"; + print "\tAn introduction to the FVWM Perl library\n\n"; print "Usage: fvwm-perllib man|cat|raw \n"; print "\tManual page for , try: man FVWM::Module\n"; print "\t\$PAGER is used for a pager, the default is '$pager'\n\n"; @@ -474,12 +490,12 @@ exit 0; } -sub showVersion { +sub show_version { print "$version\n"; exit 0; } -sub wrongUsage { +sub wrong_usage { print STDERR "Try '$0 --help' for more information.\n"; exit -1; } --- fvwm-2.5.27.ds.orig/bin/fvwm-menu-directory.in +++ fvwm-2.5.27.ds/bin/fvwm-menu-directory.in @@ -1,5 +1,21 @@ #!@PERL@ +# Copyright (c) 1999-2009 Mikhael Goikhman +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + # Filter this script to pod2man to get a man page: # pod2man -c "Fvwm Utilities" fvwm-menu-directory | nroff -man | less -e @@ -15,69 +31,69 @@ my $name = "MenuBrowser"; # used only with --reuse my $title = "%*-40p"; # may contain specifiers %d, %p. -my $itemF = "%n"; # may contain specifiers %n, %t, %T, %d, %D, %s. -my $iconT = ""; -my $iconD = ""; -my $iconF = ""; -my $iconA = ""; +my $itemf = "%n"; # may contain specifiers %n, %t, %T, %d, %D, %s. +my $icont = ""; +my $icond = ""; +my $iconf = ""; +my $icona = ""; my $home = $ENV{'HOME'} || '/tmp'; my $dir = $home; my $xterm = "xterm -e"; # the X terminal program to invoke -my $execT = $ENV{'SHELL'} || '/bin/sh'; -my $execF = $ENV{'EDITOR'} || "vi"; # the command to execute on plain files -my $execA = undef; -my $commT = undef; -my $commF = undef; -my $commA = undef; +my $exect = $ENV{'SHELL'} || '/bin/sh'; +my $execf = $ENV{'EDITOR'} || "vi"; # the command to execute on plain files +my $execa = undef; +my $commt = undef; +my $commf = undef; +my $comma = undef; my $all = 0; # whether show hidden files (like in 'ls -A') my $links = 0; # whether follow linked dirs or not my $order = 5; # -6, -5, -4, -3, -2, -1, 1, 2, 3, 4, 5, 6 my $reuse = 0; # non-popup mode -my $wmIcons = 0; -my $checkSubdirs = 0; # whether check subdirs for +x permissions -my $specialDirVal = undef; # which of (.. ~ /) dirs include or none -my $memoryForSpeed = 0; -my $submenuPos = " item +100 c"; # " menu +0 +0" -my $fvwmUserDir = $ENV{'FVWM_USERDIR'} || "$home/.fvwm"; -$fvwmUserDir = $home unless -d $fvwmUserDir; -my $dirFile = "$fvwmUserDir/.fvwm-menu-directory.dir"; -my $changeMenuStyle = ""; -my $funcName = "FuncFvwmMenuDirectory"; +my $wm_icons = 0; +my $check_subdirs = 0; # whether check subdirs for +x permissions +my $special_dir_val = undef; # which of (.. ~ /) dirs include or none +my $memory_for_speed = 0; +my $submenu_pos = " item +100 c"; # " menu +0 +0" +my $fvwm_user_dir = $ENV{'FVWM_USERDIR'} || "$home/.fvwm"; +$fvwm_user_dir = $home unless -d $fvwm_user_dir; +my $dir_filename = "$fvwm_user_dir/.fvwm-menu-directory.dir"; +my $change_menu_style = ""; +my $func_name = "FuncFvwmMenuDirectory"; GetOptions( - "help|h|?" => \&showHelp, - "version|V" => \&showVersion, + "help|h|?" => \&show_help, + "version|V" => \&show_version, "name=s" => \$name, "title=s" => \$title, - "item=s" => \$itemF, - "icon-title=s" => \$iconT, - "icon-dir=s" => \$iconD, - "icon-file=s" => \$iconF, - "icon-app=s" => \$iconA, + "item=s" => \$itemf, + "icon-title=s" => \$icont, + "icon-dir=s" => \$icond, + "icon-file=s" => \$iconf, + "icon-app=s" => \$icona, "dir=s" => \$dir, "order=i" => \$order, "all!" => \$all, "links!" => \$links, "xterm=s" => \$xterm, - "exec-title=s" => \$execT, - "exec-file=s" => \$execF, - "exec-app:s" => \$execA, - "command-title=s" => \$commT, - "command-file=s" => \$commF, - "command-app=s" => \$commA, + "exec-title=s" => \$exect, + "exec-file=s" => \$execf, + "exec-app:s" => \$execa, + "command-title=s" => \$commt, + "command-file=s" => \$commf, + "command-app=s" => \$comma, "reuse!" => \$reuse, - "wm-icons" => \$wmIcons, - "check-subdirs!" => \$checkSubdirs, - "special-dirs:s" => \$specialDirVal, - "memory-for-speed!" => \$memoryForSpeed, - "menu-style=s" => \$changeMenuStyle, - "func-name=s" => \$funcName, -) || wrongUsage(); -wrongUsage() if @ARGV; + "wm-icons" => \$wm_icons, + "check-subdirs!" => \$check_subdirs, + "special-dirs:s" => \$special_dir_val, + "memory-for-speed!" => \$memory_for_speed, + "menu-style=s" => \$change_menu_style, + "func-name=s" => \$func_name, +) || wrong_usage(); +wrong_usage() if @ARGV; $name = $dir unless $reuse; $dir =~ s:^~(/|$):$home$1:; -chomp($dir = `cat "$dirFile"`) if $reuse && -f $dirFile; +chomp($dir = `cat "$dir_filename"`) if $reuse && -f $dir_filename; unless (-d $dir) { # the next line may be commented not to throw error @@ -89,81 +105,81 @@ chdir($dir) || exit(-1); # exit if no execute permission on the directory # expand title -&expandWidthSpecifier(\$title, 'd', (split('/', $dir))[-1] || '/') +&expand_width_specifier(\$title, 'd', (split('/', $dir))[-1] || '/') if $title =~ /%(-?\d+)?(\*-?\d+)?d/; -&expandWidthSpecifier(\$title, 'p', $dir) +&expand_width_specifier(\$title, 'p', $dir) if $title =~ /%(-?\d+)?(\*-?\d+)?p/; $title =~ s/\\t/\t/g; -$itemF =~ s/\\t/\t/g; +$itemf =~ s/\\t/\t/g; # item format optimization variables -my $itemF_eval = $itemF ne '%f'; # evaluation needed -my $itemF_name = undef; -my $itemF_stat = undef; # stat() needed -my $itemF_date = undef; -my $itemF_size = undef; -my $itemF_type = undef; - -if ($itemF_eval) { - $itemF_name = $itemF =~ /%(-?\d+)?(\*-?\d+)?[nN]/; - $itemF_date = $itemF =~ /%[dD]/; - $itemF_size = $itemF =~ /%(-?\d+)?(\*-?\d+)?s/; - $itemF_type = $itemF =~ /%[tT]/; - $itemF_stat = $itemF_size || $itemF_date || $itemF_size || $itemF_type; +my $itemf_eval = $itemf ne '%f'; # evaluation needed +my $itemf_name = undef; +my $itemf_stat = undef; # stat() needed +my $itemf_date = undef; +my $itemf_size = undef; +my $itemf_type = undef; + +if ($itemf_eval) { + $itemf_name = $itemf =~ /%(-?\d+)?(\*-?\d+)?[nN]/; + $itemf_date = $itemf =~ /%[dD]/; + $itemf_size = $itemf =~ /%(-?\d+)?(\*-?\d+)?s/; + $itemf_type = $itemf =~ /%[tT]/; + $itemf_stat = $itemf_size || $itemf_date || $itemf_size || $itemf_type; } my @type1 = ("Sock", "Link", "File", "Blck", "Dir ", "Char", "Pipe"); my @type2 = ("S", "L", "F", "B", "D", "C", "P"); -if ($wmIcons) { - $iconT ||= "menu/folder-open.xpm"; - $iconD ||= "menu/folder.xpm"; - $iconF ||= "menu/file.xpm"; - $iconA ||= "menu/utility.xpm"; -} - -my $iconTStr = $iconT? "%$iconT%": ""; -my $iconDStr = $iconD? "%$iconD%": ""; -my $iconFStr = $iconF? "%$iconF%": ""; -my $iconAStr = $iconA? "%$iconA%": ""; - -$execT = undef if defined $execT && $execT eq '-'; -$execF = undef if defined $execF && $execF eq '-'; -$execA = undef if defined $execA && $execA eq '-'; - -$execT = $execT =~ /^\^(.*)$/? $1: "$xterm $execT" if defined $execT; -$execF = $execF =~ /^\^(.*)$/? $1: "$xterm $execF" if defined $execF; -$execA = $execA =~ /^\^(.*)$/? $1: "$xterm $execA" if defined $execA; - -$commT = undef if defined $commT && $commT eq '-'; -$commF = undef if defined $commF && $commF eq '-'; -$commA = undef if defined $commA && $commA eq '-'; - -$commT = defined $execT? qq(Exec cd "%d"; $execT): "Nop" if !defined $commT; -$commF = defined $execF? qq(Exec $execF "%f"): "Nop" if !defined $commF; -$commA = defined $execA? qq(Exec $execA "%f"): $commF if !defined $commA; +if ($wm_icons) { + $icont ||= "menu/folder-open.xpm"; + $icond ||= "menu/folder.xpm"; + $iconf ||= "menu/file.xpm"; + $icona ||= "menu/utility.xpm"; +} + +my $icont_str = $icont ? "%$icont%" : ""; +my $icond_str = $icond ? "%$icond%" : ""; +my $iconf_str = $iconf ? "%$iconf%" : ""; +my $icona_str = $icona ? "%$icona%" : ""; + +$exect = undef if defined $exect && $exect eq '-'; +$execf = undef if defined $execf && $execf eq '-'; +$execa = undef if defined $execa && $execa eq '-'; + +$exect = $exect =~ /^\^(.*)$/ ? $1 : "$xterm $exect" if defined $exect; +$execf = $execf =~ /^\^(.*)$/ ? $1 : "$xterm $execf" if defined $execf; +$execa = $execa =~ /^\^(.*)$/ ? $1 : "$xterm $execa" if defined $execa; + +$commt = undef if defined $commt && $commt eq '-'; +$commf = undef if defined $commf && $commf eq '-'; +$comma = undef if defined $comma && $comma eq '-'; + +$commt = defined $exect ? qq(Exec cd "%d"; $exect): "Nop" if !defined $commt; +$commf = defined $execf ? qq(Exec $execf "%f"): "Nop" if !defined $commf; +$comma = defined $execa ? qq(Exec $execa "%f"): $commf if !defined $comma; # manage special directories if needed -my ($specialDirLines, $specialDirPos, @specialDirs) = (""); -$specialDirVal = "1,2" if defined $specialDirVal && $specialDirVal eq ""; -if ($specialDirVal && $specialDirVal =~ /([\d,]+)(-?)/) { - @specialDirs = grep(/^[1-3]$/, split(/,+/, $1)); - $specialDirPos = $2? -1: 1; -} -if (@specialDirs) { - my $parentDir = $dir eq '/' || $dir !~ m!^(.*)/[^\/]+$!? undef: $1; - $parentDir = '/' if defined $parentDir && $parentDir eq ''; - my @specialDirDef = ( - [ '..' => $parentDir ], +my ($special_dir_lines, $special_dir_pos, @special_dirs) = (""); +$special_dir_val = "1,2" if defined $special_dir_val && $special_dir_val eq ""; +if ($special_dir_val && $special_dir_val =~ /([\d,]+)(-?)/) { + @special_dirs = grep(/^[1-3]$/, split(/,+/, $1)); + $special_dir_pos = $2 ? -1 : 1; +} +if (@special_dirs) { + my $parent_dir = $dir eq '/' || $dir !~ m!^(.*)/[^\/]+$! ? undef : $1; + $parent_dir = '/' if defined $parent_dir && $parent_dir eq ''; + my @special_dir_def = ( + [ '..' => $parent_dir ], [ '~' => $home ], [ '/' => '/' ], ); - foreach (@specialDirs) { - $specialDirLines .= qq(+ "" Nop\n) if $specialDirLines; - $specialDirLines .= &evalFolderLine(@{$specialDirDef[$_ - 1]}); + foreach (@special_dirs) { + $special_dir_lines .= qq(+ "" Nop\n) if $special_dir_lines; + $special_dir_lines .= &eval_folder_line(@{$special_dir_def[$_ - 1]}); } } else { - $specialDirPos = 0; + $special_dir_pos = 0; } # create file listing @@ -172,75 +188,75 @@ closedir(DIR); @files = grep /^[^.]/, @files unless $all; -my $absOrder = abs($order); +my $abs_order = abs($order); # To avoid warnings, '!!' must be added before '-d'. Will this slow things? -my $sortSub = - $absOrder == 2? sub { -d $b <=> -d $a }: - $absOrder == 3? sub { -d $a <=> -d $b }: - $absOrder == 4? sub { $a cmp $b }: - $absOrder == 5? sub { -d $b <=> -d $a || $a cmp $b }: - $absOrder == 6? sub { -d $a <=> -d $b || $a cmp $b }: +my $sort_sub = + $abs_order == 2 ? sub { -d $b <=> -d $a } : + $abs_order == 3 ? sub { -d $a <=> -d $b } : + $abs_order == 4 ? sub { $a cmp $b } : + $abs_order == 5 ? sub { -d $b <=> -d $a || $a cmp $b } : + $abs_order == 6 ? sub { -d $a <=> -d $b || $a cmp $b } : sub { 0 }; -@files = sort $sortSub @files if $absOrder != 1; +@files = sort $sort_sub @files if $abs_order != 1; @files = reverse @files if $order < 0; # dump all menu items and start adding new items -my $menuName = &escapeFvwmName($name); -my $menuName2 = &escapeMenuName($name); -print qq(DestroyMenu recreate "$menuName"\nAddToMenu "$menuName2"\n); +my $menuName = &escape_file_name($name); +my $menuName2 = &escape_menu_name($name); +print qq(DestroyMenu recreate "$menu_name"\nAddToMenu "$menuName2"\n); # destroy the menu after it is popped down -print qq(+ DynamicPopDownAction DestroyMenu "$menuName"\n) - unless $memoryForSpeed || $reuse; +print qq(+ DynamicPopDownAction DestroyMenu "$menu_name"\n) + unless $memory_for_speed || $reuse; # set the 'missing submenu function' -print qq(+ MissingSubmenuFunction $funcName\n) unless $reuse; +print qq(+ MissingSubmenuFunction $func_name\n) unless $reuse; # add a new title (item and separator, or real Title if no action) -my $titleAct = $commT; $titleAct =~ s/%d/$dir/g; +my $title_act = $commt; $title_act =~ s/%d/$dir/g; if ($title ne "") { - if ($titleAct eq "") { - print qq(+ "$iconTStr$title" Title\n); + if ($title_act eq "") { + print qq(+ "$icont_str$title" Title\n); } else { - print qq(+ "$iconTStr$title" $titleAct\n+ "" Nop\n); + print qq(+ "$icont_str$title" $title_act\n+ "" Nop\n); } } # add special dirs at the top if needed -print qq($specialDirLines+ "" Nop\n) if $specialDirPos > 0; +print qq($special_dir_lines+ "" Nop\n) if $special_dir_pos > 0; # add directory contents foreach (@files) { next if $_ eq '.' or $_ eq '..'; - my $filePath = "$dir/$_"; - $filePath =~ s|/+|/|g; + my $file_path = "$dir/$_"; + $file_path =~ s|/+|/|g; if (-d) { # it's a directory - print &evalFolderLine($_, $filePath); + print &eval_folder_line($_, $file_path); } else { # something else, apply editor to it or run itself - my $itemStr = $itemF_eval? &evalItem($_, $filePath): $_; - $itemStr = &escapeItemName($itemStr); - my $isApp = -x && -f; - my $iconStr = $isApp && $iconAStr? $iconAStr: $iconFStr; - my $fileAct = $isApp? $commA: $commF; - $fileAct =~ s/%f/&escapeFileName($filePath)/ge; - print qq(+ "$iconStr$itemStr" $fileAct\n); + my $item_str = $itemf_eval ? &eval_item($_, $file_path) : $_; + $item_str = &escape_item_name($item_str); + my $is_app = -x && -f; + my $icon_str = $is_app && $icona_str ? $icona_str : $iconf_str; + my $file_act = $is_app ? $comma : $commf; + $file_act =~ s/%f/&escape_file_name($file_path)/ge; + print qq(+ "$icon_str$item_str" $file_act\n); } } # add special dirs at the bottom if needed -print qq(+ "" Nop\n$specialDirLines) if $specialDirPos < 0; +print qq(+ "" Nop\n$special_dir_lines) if $special_dir_pos < 0; # add style: -if ($changeMenuStyle ne "") { - print qq(ChangeMenuStyle "$changeMenuStyle" "$menuName"\n); +if ($change_menu_style ne "") { + print qq(ChangeMenuStyle "$change_menu_style" "$menu_name"\n); } exit(0); # --------------------------------------------------------------------------- -sub escapeFvwmName ($) { +sub escape_fvwm_name ($) { my $name = shift; $name =~ s/\\/\\\\/g; $name =~ s/"/\\"/g; @@ -248,16 +264,16 @@ $name; } -sub escapeMenuName ($) { - my $name = escapeFvwmName(shift()); +sub escape_menu_name ($) { + my $name = escape_fvwm_name(shift()); # fvwm is really inconsistent here $name =~ s/\^/^^/g; $name =~ s/@/@@/g; $name; } -sub escapeItemName ($) { - my $name = escapeFvwmName(shift()); +sub escape_item_name ($) { + my $name = escape_fvwm_name(shift()); $name =~ s/%/%%/g; $name =~ s/&/&&/g; $name =~ s/\*/**/g; @@ -265,7 +281,7 @@ $name; } -sub escapeFileName ($) { +sub escape_file_name ($) { my $name = shift; $name =~ s/\\/\\\\/g; $name =~ s/"/\\"/g; @@ -274,44 +290,44 @@ $name; } -sub evalFolderLine ($$) { +sub eval_folder_line ($$) { my ($_name, $dir) = @_; - my $itemStr = $dir && $itemF_eval? &evalItem($_name, $dir): $_name; - $itemStr = escapeItemName($itemStr); - my $act = !$dir || $checkSubdirs && !-x $dir? "Nop": !$reuse? - qq(Popup ") . escapeFileName($dir) . qq("$submenuPos): - qq(PipeRead 'echo ") . escapeFileName($dir) . qq(" >$dirFile; ) - . qq(echo Menu ") . escapeFvwmName($name) . qq(" WarpTitle'); - return qq(+ "$iconDStr$itemStr" $act\n); + my $item_str = $dir && $itemf_eval ? &eval_item($_name, $dir) : $_name; + $item_str = escape_item_name($item_str); + my $act = !$dir || $check_subdirs && !-x $dir ? "Nop" : !$reuse ? + qq(Popup ") . escape_file_name($dir) . qq("$submenu_pos) : + qq(PipeRead 'echo ") . escape_file_name($dir) . qq(" >$dir_filename; ) + . qq(echo Menu ") . escape_fvwm_name($name) . qq(" WarpTitle'); + return qq(+ "$icond_str$item_str" $act\n); } -sub evalItem ($$) { +sub eval_item ($$) { my ($name, $file) = @_; - return $name unless $itemF_eval; + return $name unless $itemf_eval; - my $itemStr = "$itemF"; - if ($itemF_name) { - &expandWidthSpecifier(\$itemStr, 'n', $name); - &expandWidthSpecifier(\$itemStr, 'N', $file); + my $item_str = "$itemf"; + if ($itemf_name) { + &expand_width_specifier(\$item_str, 'n', $name); + &expand_width_specifier(\$item_str, 'N', $file); } - return $itemStr unless $itemF_stat; + return $item_str unless $itemf_stat; # / $dev, $ino, $mode, $nlink, $uid, $gid, $rdev, # \ $size, $atime, $mtime, $ctime, $blksize, $blocks my ($misc1, $misc2, $mode, $misc3, $misc4, $misc5, $misc6, $size, $misc7, $time) = stat($file); - if ($itemF_date) { - eval 'use POSIX' unless defined $POSIX::VERSION; + if ($itemf_date) { + eval 'use POSIX qw(strftime);' unless defined $POSIX::VERSION; my @time = localtime($time); my $date1 = strftime("%Y-%m-%d %H:%M:%S", @time); my $date2 = strftime("%Y-%m-%d", @time); - $itemStr =~ s/%d/$date1/g; - $itemStr =~ s/%D/$date2/g; + $item_str =~ s/%d/$date1/g; + $item_str =~ s/%D/$date2/g; } - if ($itemF_size) { - &expandWidthSpecifier(\$itemStr, 's', $size); + if ($itemf_size) { + &expand_width_specifier(\$item_str, 's', $size); } - if ($itemF_type) { + if ($itemf_type) { my $type; # $type = 2 if ($mode & 0100000); # regular # $type = 4 if ($mode & 0040000); # directory @@ -320,26 +336,26 @@ # $type = 3 if ($mode & 0060000); # block # $type = 5 if ($mode & 0020000); # char-dev # $type = 6 if ($mode & 0010000); # fifo - $type = -p _? 6: -c _? 5: -b _? 3: -l $file? 1: - -S _? 0: -d _? 4: 2; - $itemStr =~ s/%t/$type1[$type]/g; - $itemStr =~ s/%T/$type2[$type]/g; + $type = -p _ ? 6 : -c _ ? 5 : -b _ ? 3 : -l $file ? 1 : + -S _ ? 0 : -d _ ? 4 : 2; + $item_str =~ s/%t/$type1[$type]/g; + $item_str =~ s/%T/$type2[$type]/g; } - return $itemStr; + return $item_str; } # Substitutes all %N1*N2x in $name by properly stripped and justified $value. -sub expandWidthSpecifier (\$$$) { +sub expand_width_specifier (\$$$) { my ($name, $char, $value) = @_; $$name =~ s/%(-?\d+)?(\*(-?)(\d+))?$char/ - my $value = !$2 || $4 <= 3 || $4 > length($value)? $value: $3? - "..." . substr($value, -$4 + 3, $4 - 3): - substr($value, 0, $4 - 3) . "..."; - $1? sprintf("%$1s", $value): $value; + my $value = !$2 || $4 <= 3 || $4 > length($value) ? $value : $3 + ? "..." . substr($value, -$4 + 3, $4 - 3) + : substr($value, 0, $4 - 3) . "..."; + $1 ? sprintf("%$1s", $value) : $value; /ge; } -sub showHelp { +sub show_help { print "A perl script that builds directory listing for fvwm.\n\n"; print "Usage: $0 [OPTIONS]\n"; print "Options:\n"; @@ -347,7 +363,7 @@ print "\t--version show the version and exit\n"; print "\t--name=NAME menu name, default is '$name'\n"; print "\t--title=NAME menu title, default is '$title'\n"; - print "\t--item=NAME menu item format, default is '$itemF'\n"; + print "\t--item=NAME menu item format, default is '$itemf'\n"; print "\t--icon-title=XPM menu title icon, default is none\n"; print "\t--icon-dir=XPM menu dir icon, default is none\n"; print "\t--icon-file=XPM menu file icon, default is none\n"; @@ -361,8 +377,8 @@ print "\t--all show hidden files, default is no\n"; print "\t--links follow linked dirs, default is no\n"; print "\t--xterm=CMD xterm call, default is '$xterm'\n"; - print "\t--exec-title=CMD title exec command, default is '$execT'\n"; - print "\t--exec-file=CMD file exec command, default is '$execF'\n"; + print "\t--exec-title=CMD title exec command, default is '$exect'\n"; + print "\t--exec-file=CMD file exec command, default is '$execf'\n"; print "\t--exec-app[=CMD] +x files exec command, default is '-'\n"; print "\t--command-title=CMD title fvwm command, default is '-'\n"; print "\t--command-file=CMD file fvwm command, default is '-'\n"; @@ -376,12 +392,12 @@ exit 0; } -sub showVersion { +sub show_version { print "$version\n"; exit 0; } -sub wrongUsage { +sub wrong_usage { print STDERR "Try '$0 --help' for more information.\n"; exit -1; } --- fvwm-2.5.27.ds.orig/bin/fvwm-menu-headlines.1 +++ fvwm-2.5.27.ds/bin/fvwm-menu-headlines.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.02) .\" .\" Standard preamble: .\" ======================================================================== @@ -25,11 +25,11 @@ .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to -.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' -.\" expand to `' in nroff, nothing in troff, for use with C<>. -.tr \(*W-|\(bv\*(Tr +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- @@ -48,22 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. -.if \nF \{\ +.ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it makes -.\" way too many mistakes in technical documents. -.hy 0 -.if n .na +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -129,41 +132,21 @@ .\" ======================================================================== .\" .IX Title "fvwm-menu-headlines 1" -.TH fvwm-menu-headlines 1 "2003-11-29" "perl v5.8.1" "Fvwm Utilities" +.TH fvwm-menu-headlines 1 "2009-03-17" "perl v5.10.0" "Fvwm Utilities" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" fvwm\-menu\-headlines \- builds headlines menu definition for fvwm .SH "SYNOPSIS" .IX Header "SYNOPSIS" -\&\fBfvwm-menu-headlines\fR -[ \fB\-\-help\fR|\fB\-h\fR|\fB\-?\fR ] -[ \fB\-\-version\fR|\fB\-V\fR ] -[ \fB\-\-info\fR [site] ] -[ \fB\-\-site\fR|\fB\-s\fR site ] -[ \fB\-\-name\fR|\fB\-n\fR name ] -[ \fB\-\-title\fR|\fB\-t\fR title ] -[ \fB\-\-item\fR item ] -[ \fB\-\-exec\fR|\fB\-e\fR exec-command ] -[ \fB\-\-command\fR|\fB\-e\fR fvwm-command ] -[ \fB\-\-icon\-title\fR icon ] -[ \fB\-\-icon\-item\fR icon ] -[ \fB\-\-icon\-home\fR icon ] -[ \fB\-\-icon\-error\fR icon ] -[ \fB\-\-wm\-icons\fR ] -[ \fB\-\-frontpage\fR [where] ] -[ \fB\-\-proxy\fR|\fB\-p\fR host:port ] -[ \fB\-\-file\fR [file] ] -[ \fB\-\-fake\fR [file] ] -[ \fB\-\-timeout\fR seconds ] +\&\fBfvwm-menu-headlines\fR [ \fB\-\-help\fR|\fB\-h\fR|\fB\-?\fR ] [ \fB\-\-version\fR|\fB\-V\fR ] [ \fB\-\-info\fR [site] ] [ \fB\-\-site\fR|\fB\-s\fR site ] [ \fB\-\-name\fR|\fB\-n\fR name ] [ \fB\-\-title\fR|\fB\-t\fR title ] [ \fB\-\-item\fR item ] [ \fB\-\-exec\fR|\fB\-e\fR exec-command ] [ \fB\-\-command\fR|\fB\-e\fR fvwm-command ] [ \fB\-\-icon\-title\fR icon ] [ \fB\-\-icon\-item\fR icon ] [ \fB\-\-icon\-home\fR icon ] [ \fB\-\-icon\-error\fR icon ] [ \fB\-\-wm\-icons\fR ] [ \fB\-\-frontpage\fR [where] ] [ \fB\-\-proxy\fR|\fB\-p\fR host:port ] [ \fB\-\-file\fR [file] ] [ \fB\-\-fake\fR [file] ] [ \fB\-\-timeout\fR seconds ] .SH "DESCRIPTION" .IX Header "DESCRIPTION" -This configurable perl script builds an fvwm menu definition for headlines -of popular news web sites: FreshMeat, Slashdot, LinuxToday, -DaemonNews, GNOME\-News, KDE\-News, RootPrompt, LinuxFr, ThinkGeek, -\&\s-1CNN\s0, \s-1BBC\s0 and more. -.PP -It is possible to specify a customized menu item format, change a command -(usually launching a browser) and add menu icons (there is a support for -the wm-icons package). +This configurable perl script builds an fvwm menu definition for headlines of popular news web sites: FreshMeat, Slashdot, LinuxToday, DaemonNews, GNOME-News, KDE-News, RootPrompt, LinuxFr, ThinkGeek, \s-1CNN\s0, \s-1BBC\s0 and more. +.PP +It is possible to specify a customized menu item format, change a command (usually launching a browser) and add menu icons (there is a support for the wm-icons package). .SH "OPTIONS" .IX Header "OPTIONS" .IP "\fB\-\-help\fR" 4 @@ -174,13 +157,10 @@ show the version and exit .IP "\fB\-\-info\fR [site]" 4 .IX Item "--info [site]" -if site name is given print the site specific info, -otherwise print all site names +if site name is given print the site specific info, otherwise print all site names .IP "\fB\-\-site\fR site" 4 .IX Item "--site site" -defile a web site, headlines of which to show, this option -also can be used together with \-\-help to get new defaults. -Default site: freshmeat. +defile a web site, headlines of which to show, this option also can be used together with \-\-help to get new defaults. Default site: freshmeat. .IP "\fB\-\-name\fR name" 4 .IX Item "--name name" define menu name (default is \*(L"MenuHeadlinesFreshmeat\*(R") @@ -193,42 +173,36 @@ .IP "\fB\-\-exec\fR command-format" 4 .IX Item "--exec command-format" .PD -define format for menu item or command (what is shown and what is -executed when the item is chosen). -Default label is '%h\et%[(%Y\-%m\-%d \f(CW%H:\fR%M)]'. -\&\s-1TAB\s0 can be specified as '\et', but in .fvwm2rc you should specify a double -backslash or a real \s-1TAB\s0. +define format for menu item or command (what is shown and what is executed when the item is chosen). Default label is '%h\et%[(%Y\-%m\-%d \f(CW%H:\fR%M)]'. \s-1TAB\s0 can be specified as '\et', but in .fvwm2rc you should specify a double backslash or a real \s-1TAB\s0. .Sp Format specifiers for a headline format: .Sp .Vb 11 -\& %h - headline -\& %u - url -\& %d - date in the native format (that site backend supplied) -\& %[strftime-argument-string] - date/time, see strftime(3) +\& %h \- headline +\& %u \- url +\& %d \- date in the native format (that site backend supplied) +\& %[strftime\-argument\-string] \- date/time, see strftime(3) \& the date/time is represented according to the local time; -\& date and/or time fields that can't be guessed are stripped +\& date and/or time fields that can\*(Aqt be guessed are stripped \& Example: %[|%d %B %Y| %H:%M %S] -\& If site supplied only date - this becomes %[|%d %B %Y|], -\& if site supplied no date - this becomes an empty string. -\& %{name} - site specific named value, like %{comments} -\& %(text) - arbitrary text, good for escaping or aligning +\& If site supplied only date \- this becomes %[|%d %B %Y|], +\& if site supplied no date \- this becomes an empty string. +\& %{name} \- site specific named value, like %{comments} +\& %(text) \- arbitrary text, good for escaping or aligning .Ve .Sp -These specifiers can receive an optional integer size, positive for right -adjusted string or negative for left adjusted, example: \f(CW%8x\fR; and optional -*num or *\-num, which means to leave only the first or last (if minus) num of -chars, the num must be greater than 3, since the striped part is replaced -with \*(L"...\*(R", example: %*30x. Both can be combined: %\-10*\-20x, this instructs to -get only the 20 last characters, but if the length is less then 10 \- to fill -with up to 10 spaces on the right. +These specifiers can receive an optional integer size, positive for right adjusted string or negative for left adjusted, example: \f(CW%8x\fR; and optional *num or *\-num, which means to leave only the first or last (if minus) num of chars, the num must be greater than 3, since the striped part is replaced with \*(L"...\*(R", example: %*30x. Both can be combined: %\-10*\-20x, this instructs to get only the 20 last characters, but if the length is less then 10 \- to fill with up to 10 spaces on the right. +.Sp +Example: +.Sp +.Vb 1 +\& \-\-exec "iceweasel \-remote \*(AqopenURL(%u, new\-window)\*(Aq || iceweasel \*(Aq%u\*(Aq" +.Ve .IP "\fB\-\-command\fR command-format" 4 .IX Item "--command command-format" -like \fB\-\-exec\fR above, but enables to specify any fvwm command, -for example, \*(L"Function FuncFvwmShowURL '%u'\*(R" not only Exec. +like \fB\-\-exec\fR above, but enables to specify any fvwm command, for example, \*(L"Function FuncFvwmShowURL '%u'\*(R" not only Exec. .Sp -In fact, \-\-exec=\*(L"mozilla '%u'\*(R" is equivalent -to \-\-command=\*(L"Exec mozilla '%u'\*(R" +In fact, \-\-exec=\*(L"mozilla '%u'\*(R" is equivalent to \-\-command=\*(L"Exec mozilla '%u'\*(R" .IP "\fB\-\-icon\-title\fR icon" 4 .IX Item "--icon-title icon" .PD 0 @@ -239,56 +213,37 @@ .IP "\fB\-\-icon\-error\fR icon" 4 .IX Item "--icon-error icon" .PD -define menu icon for title, regular item, frontpage item and error item -respectively. Default is no menu icons (equivalent to an empty icon argument). +define menu icon for title, regular item, frontpage item and error item respectively. Default is no menu icons (equivalent to an empty icon argument). .IP "\fB\-\-wm\-icons\fR" 4 .IX Item "--wm-icons" -define icon names suitable for use with wm-icons package. -Currently this is equivalent to: \-\-icon\-title '' \-\-icon\-item -menu/information.xpm \-\-icon\-home menu/home.xpm \-\-icon\-error menu/choice\-no.xpm. +define icon names suitable for use with wm-icons package. Currently this is equivalent to: \-\-icon\-title '' \-\-icon\-item menu/information.xpm \-\-icon\-home menu/home.xpm \-\-icon\-error menu/choice\-no.xpm. .IP "\fB\-\-frontpage\fR [where]" 4 .IX Item "--frontpage [where]" -add the site frontpage item to the menu. -Optional value can be used to specify where this item will be placed in -the menu \- 'top' or 't', 'bottom' or 'b'. +add the site frontpage item to the menu. Optional value can be used to specify where this item will be placed in the menu \- 'top' or 't', 'bottom' or 'b'. .IP "\fB\-\-proxy\fR host[:port]" 4 .IX Item "--proxy host[:port]" -define a proxy to use. -Example: \-\-proxy proxy.inter.net:3128 +define a proxy to use. Example: \-\-proxy proxy.inter.net:3128 .IP "\fB\-\-file\fR [file]" 4 .IX Item "--file [file]" -write the menu output to specified file. If no filename is -given with this option (or empty filename), the default filename -\&\s-1WORK_HOME/SITE\s0.menu is used. Without this option or with '\-' -filename, the menu output is written to standard output. +write the menu output to specified file. If no filename is given with this option (or empty filename), the default filename \s-1WORK_HOME/SITE\s0.menu is used. Without this option or with '\-' filename, the menu output is written to standard output. .IP "\fB\-\-fake\fR [file]" 4 .IX Item "--fake [file]" -don't connect to the host using \s-1HTTP\s0 protocol, instead, -read from \s-1WORK_HOME/SITE\s0.in file. The following reads input from -freshmeat.in (downloaded http://freshmeat.net/backend/recentnews.txt) and -saves output to segfault.menu (both files are in \s-1WORK_HOME\s0): - fvwm-menu-headlines \-\-site freshmeat \-\-fake \-\-file +don't connect to the host using \s-1HTTP\s0 protocol, instead, read from \s-1WORK_HOME/SITE\s0.in file. The following reads input from freshmeat.in (downloaded http://freshmeat.net/backend/recentnews.txt) and saves output to segfault.menu (both files are in \s-1WORK_HOME\s0): fvwm-menu-headlines \-\-site freshmeat \-\-fake \-\-file .IP "\fB\-\-timeout\fR seconds" 4 .IX Item "--timeout seconds" -limit a line reading from a socket to this timeout, -the default timeout is 20 seconds. +limit a line reading from a socket to this timeout, the default timeout is 20 seconds. .PP -\&\s-1WORK_HOME\s0 of this script is ~/.fvwm/.fvwm\-menu\-headlines. -It is created if needed. +\&\s-1WORK_HOME\s0 of this script is ~/.fvwm/.fvwm\-menu\-headlines. It is created if needed. .PP -Option parameters can be specified either using '=' or in the next argument. -Short options are ok if not ambiguous: \f(CW\*(C`\-h\*(C'\fR, \f(CW\*(C`\-t\*(C'\fR; but be careful with -short options, what is now unambiguous, can become ambiguous in the next -versions. +Option parameters can be specified either using '=' or in the next argument. Short options are ok if not ambiguous: \f(CW\*(C`\-h\*(C'\fR, \f(CW\*(C`\-t\*(C'\fR; but be careful with short options, what is now unambiguous, can become ambiguous in the next versions. .SH "USAGE" .IX Header "USAGE" -1. One of the ways to use this script is to define a crontab -entry to run the script every hour or so for every monitored site: +1. One of the ways to use this script is to define a crontab entry to run the script every hour or so for every monitored site: .PP .Vb 3 -\& 0,30 * * * * fvwm-menu-headlines --file --site freshmeat -\& 1,31 * * * * fvwm-menu-headlines --file --site linuxtoday -\& 2,32 * * * * fvwm-menu-headlines --file --site slashdot +\& 0,30 * * * * fvwm\-menu\-headlines \-\-file \-\-site freshmeat +\& 1,31 * * * * fvwm\-menu\-headlines \-\-file \-\-site linuxtoday +\& 2,32 * * * * fvwm\-menu\-headlines \-\-file \-\-site slashdot .Ve .PP Then add these lines to your fvwm configuration file: @@ -296,10 +251,8 @@ .Vb 3 \& DestroyFunc FuncFvwmMenuHeadlines \& AddToFunc FuncFvwmMenuHeadlines -\& + I Read "$HOME/.fvwm/.fvwm-menu-headlines/$0.menu" -.Ve -.PP -.Vb 6 +\& + I Read "$HOME/.fvwm/.fvwm\-menu\-headlines/$0.menu" +\& \& DestroyMenu MenuHeadlines \& AddToMenu MenuHeadlines "Headlines" Title \& + MissingSubmenuFunction FuncFvwmMenuHeadlines @@ -308,85 +261,71 @@ \& + "Slashdot" Popup slashdot .Ve .PP -2. Another way to use this script (only if you have fast network/proxy) is to -run it every time you want to open your Headlines submenus. -(Note, the submenu that is once created is not reloaded, use \*(L"Reset all\*(R".) +2. Another way to use this script (only if you have fast network/proxy) is to run it every time you want to open your Headlines submenus. (Note, the submenu that is once created is not reloaded, use \*(L"Reset all\*(R".) .PP In this case your fvwm configuration lines could be: .PP .Vb 4 \& DestroyFunc FuncFvwmMenuHeadlines \& AddToFunc FuncFvwmMenuHeadlines -\& + I PipeRead "fvwm-menu-headlines --site $0" +\& + I PipeRead "fvwm\-menu\-headlines \-\-site $0" \& #+ I Schedule 900000 DestroyMenu $0 # reset generated menu in 15 minutes -.Ve -.PP -.Vb 10 +\& \& DestroyMenu MenuHeadlines \& AddToMenu MenuHeadlines "Headlines" Title \& + MissingSubmenuFunction FuncFvwmMenuHeadlines \& + "FreshMeat" Popup freshmeat \& + "Slashdot" Popup slashdot \& + "LinuxToday" Popup linuxtoday -\& + "GNOME News" Popup gnome-news -\& + "KDE News" Popup kde-news +\& + "GNOME News" Popup gnome\-news +\& + "KDE News" Popup kde\-news \& + "" Nop \& + "Reset all" FuncResetHeadlines -.Ve -.PP -.Vb 7 +\& \& DestroyFunc FuncResetHeadlines \& AddToFunc FuncResetHeadlines \& + I DestroyMenu freshmeat \& + I DestroyMenu linuxtoday \& + I DestroyMenu slashdot -\& + I DestroyMenu gnome-news -\& + I DestroyMenu kde-news +\& + I DestroyMenu gnome\-news +\& + I DestroyMenu kde\-news .Ve .PP And finally, add \*(L"Popup MenuHeadlines\*(R" somewhere. .PP -3. Here is a usual usage. Use FvwmConsole or FvwmCommand to run fvwm commands -from a shell script. Every time you want headlines from some site, execute -(give any additional options if you want): +3. Here is a usual usage. Use FvwmConsole or FvwmCommand to run fvwm commands from a shell script. Every time you want headlines from some site, execute (give any additional options if you want): .PP .Vb 3 -\& PipeRead "fvwm-menu-headlines --site newsforge --name MenuHeadlinesNewsForge" +\& PipeRead "fvwm\-menu\-headlines \-\-site newsforge \-\-name MenuHeadlinesNewsForge" \& # this may take several seconds, you may use: BusyCursor Read true \& Popup MenuHeadlinesNewsForge .Ve .SH "HOW TO ADD SITE HEADLINES" .IX Header "HOW TO ADD SITE HEADLINES" -It is possible to add user defined site headlines without touching the script -itself. Put your perl extensions to the file WORK_HOME/extension.pl. -For each site add something similar to: +It is possible to add user defined site headlines without touching the script itself. Put your perl extensions to the file WORK_HOME/extension.pl. For each site add something similar to: .PP .Vb 8 -\& $siteInfo->{'myslashdot'} = { -\& 'name' => "MySlashdot", -\& 'host' => "myslashdot.org", -\& 'path' => "/myslashdot.xml", -\& 'func' => \e&processMySlashdot, -\& # the following string is only used in --info -\& 'flds' => 'time, title, department, topic, author, url', +\& $site_info\->{\*(Aqmyslashdot\*(Aq} = { +\& \*(Aqname\*(Aq => "MySlashdot", +\& \*(Aqhost\*(Aq => "myslashdot.org", +\& \*(Aqpath\*(Aq => "/myslashdot.xml", +\& \*(Aqfunc\*(Aq => \e&process_my_slashdot, +\& # the following string is only used in \-\-info +\& \*(Aqflds\*(Aq => \*(Aqtime, title, department, topic, author, url\*(Aq, \& }; -.Ve -.PP -.Vb 11 -\& sub processMySlashdot () { -\& return processXml( -\& 'story', -\& # mandatory 'h', 'u' and 'd' aliases or undef -\& { 'h' => 'title', 'u' => 'url', 'd' => 'time' }, -\& sub ($) { # convert 'd' string to (y, m, d, H, M, S) -\& $_[0] =~ /(\ed+)-(\ed+)-(\ed+) (\ed+):(\ed+):(\ed+)/; -\& ($1, ($2 || 0) - 1, $3, $4, $5, $6); +\& +\& sub process_my_slashdot () { +\& return process_xml( +\& \*(Aqstory\*(Aq, +\& # mandatory \*(Aqh\*(Aq, \*(Aqu\*(Aq and \*(Aqd\*(Aq aliases or undef +\& { \*(Aqh\*(Aq => \*(Aqtitle\*(Aq, \*(Aqu\*(Aq => \*(Aqurl\*(Aq, \*(Aqd\*(Aq => \*(Aqtime\*(Aq }, +\& sub ($) { # convert \*(Aqd\*(Aq string to (y, m, d, H, M, S) +\& $_[0] =~ /(\ed+)\-(\ed+)\-(\ed+) (\ed+):(\ed+):(\ed+)/; +\& ($1, ($2 || 0) \- 1, $3, $4, $5, $6); \& }, +0, # timezone offset; already in UTC \& ); \& } -.Ve -.PP -.Vb 1 +\& \& 1; .Ve .SH "AUTHORS" @@ -398,24 +337,18 @@ \& (http://rive.boxybutgood.com/WMHeadlines/). .Ve .PP -Reimplemented for \s-1fvwm\s0 and heavily enhanced by: +Reimplemented for fvwm and heavily enhanced by: .PP .Vb 1 \& Mikhael Goikhman , 16 Dec 1999. .Ve .SH "COPYING" .IX Header "COPYING" -The script is distributed by the same terms as fvwm itself. -See \s-1GNU\s0 General Public License for details. +The script is distributed by the same terms as fvwm itself. See \s-1GNU\s0 General Public License for details. .SH "BUGS" .IX Header "BUGS" -I try to keep all supported site info up to date, but sites often go down, -change their backend formats, change their httpd responses, just stop to -post news and so on; the script in the latest cvs may be more up to date. -.PP -The headline times may be off by one hour or more, since the time is -displayed for your local time zone, and the time zone of the original time -in the site backend output is often guessed (sometimes incorrectly); -similarly it is guessed whether to apply the daylight saving correction. +I try to keep all supported site info up to date, but sites often go down, change their backend formats, change their httpd responses, just stop to post news and so on; the script in the latest cvs may be more up to date. +.PP +The headline times may be off by one hour or more, since the time is displayed for your local time zone, and the time zone of the original time in the site backend output is often guessed (sometimes incorrectly); similarly it is guessed whether to apply the daylight saving correction. .PP Report bugs to fvwm\-bug@fvwm.org. --- fvwm-2.5.27.ds.orig/bin/fvwm-menu-xlock.in +++ fvwm-2.5.27.ds/bin/fvwm-menu-xlock.in @@ -1,5 +1,21 @@ #!@PERL@ +# Copyright (c) 1999-2009 Mikhael Goikhman +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + # Filter this script to pod2man to get a man page: # pod2man -c "Fvwm Utilities" fvwm-menu-xlock | nroff -man | less -e @@ -9,43 +25,43 @@ my $name = 'XLockMenu'; my $title = 'XLock Modes'; -my $itemF = '%n\t(%d)'; # may contain %n, %d, %D. -my $iconT = ''; -my $iconI = ''; -my $wmIcons = 0; -my $specialFirst = 0; +my $itemf = '%n\t(%d)'; # may contain %n, %d, %D. +my $icont = ''; +my $iconi = ''; +my $wm_icons = 0; +my $special_first = 0; GetOptions( - "help|h|?" => \&showHelp, - "version|V" => \&showVersion, + "help|h|?" => \&show_help, + "version|V" => \&show_version, "name=s" => \$name, "title=s" => \$title, - "item=s" => \$itemF, - "icon-title=s" => \$iconT, - "icon-item=s" => \$iconI, - "wm-icons" => \$wmIcons, - "special-first" => \$specialFirst, -) || wrongUsage(); - -if ($wmIcons) { - $iconT ||= ""; - $iconI ||= "menu/lock.xpm"; -} - -my $iconTStr = $iconT? "%$iconT%": ""; -my $iconIStr = $iconI? "%$iconI%": ""; -my $params = @ARGV? ' ' . join(' ', @ARGV): ''; -my $dscLen = 36; + "item=s" => \$itemf, + "icon-title=s" => \$icont, + "icon-item=s" => \$iconi, + "wm-icons" => \$wm_icons, + "special-first" => \$special_first, +) || wrong_usage(); + +if ($wm_icons) { + $icont ||= ""; + $iconi ||= "menu/lock.xpm"; +} + +my $icont_str = $icont ? "%$icont%" : ""; +my $iconi_str = $iconi ? "%$iconi%" : ""; +my $params = @ARGV ? ' ' . join(' ', @ARGV) : ''; my $lines1 = ""; # non-special mode lines my $lines2 = ""; # special mode lines my $start = 0; my $special = 0; -$itemF =~ s/\\t/\t/g; -open(XL, "xlock -h 2>&1 |") || die "Exec echo 'Could not run xlock'\n"; +$itemf =~ s/\\t/\t/g; +open(XL, "xlock -display NONE -help 2>&1 |") + || die "Exec echo 'Could not run xlock'\n"; print "DestroyMenu $name\n"; -print "AddToMenu $name \"$iconTStr$title\" Title\n"; +print "AddToMenu $name \"$icont_str$title\" Title\n"; while () { chomp; @@ -57,40 +73,40 @@ if ($start && $_) { my ($misc, $name, $dsc) = split(/\s+/, $_, 3); next if $name =~ /^-/; - my $dsc2 = $dsc =~ /^Shows (.*)$/? $1: $dsc; - my $itemStr = $itemF; - $itemStr =~ s/\\t/\t/g; - &expandWidthSpecifier(\$itemStr, 'n', $name); - &expandWidthSpecifier(\$itemStr, 'd', $dsc); - &expandWidthSpecifier(\$itemStr, 'D', $dsc2); + my $dsc2 = $dsc =~ /^Shows (.*)$/ ? $1 : $dsc; + my $item_str = $itemf; + $item_str =~ s/\\t/\t/g; + &expand_width_specifier(\$item_str, 'n', $name); + &expand_width_specifier(\$item_str, 'd', $dsc); + &expand_width_specifier(\$item_str, 'D', $dsc2); $special = 1 if !$special && $name eq 'blank'; - ($special? $lines2: $lines1) .= - qq(+ "$iconIStr$itemStr" Exec xlock$params -mode $name\n); + ($special ? $lines2 : $lines1) .= + qq(+ "$iconi_str$item_str" Exec xlock$params -mode $name\n); } } close XL; -print $specialFirst? - qq($lines2+ "" Nop\n$lines1): - qq($lines1+ "" Nop\n$lines2); +print $special_first + ? qq($lines2+ "" Nop\n$lines1) + : qq($lines1+ "" Nop\n$lines2); exit(0); # --------------------------------------------------------------------------- # Substitutes all %N1*N2x in $name by properly stripped and justified $value. -sub expandWidthSpecifier (\$$$) { +sub expand_width_specifier (\$$$) { my ($name, $char, $value) = @_; $$name =~ s/%(-?\d+)?(\*(-?)(\d+))?$char/ - my $value = !$2 || $4 <= 3 || $4 > length($value)? $value: $3? - "..." . substr($value, -$4 + 3, $4 - 3): - substr($value, 0, $4 - 3) . "..."; + my $value = !$2 || $4 <= 3 || $4 > length($value) ? $value : $3 + ? "..." . substr($value, -$4 + 3, $4 - 3) + : substr($value, 0, $4 - 3) . "..."; $1? sprintf("%$1s", $value): $value; /ge; } -sub showHelp { +sub show_help { print "A small perl script which builds xlock menu for fvwm.\n\n"; print "Usage: $0 [OPTIONS] [-- XLOCK-OPTIONS]\n"; print "Options:\n"; @@ -98,7 +114,7 @@ print "\t--version show the version and exit\n"; print "\t--name=NAME menu name, default is '$name'\n"; print "\t--title=NAME menu title, default is '$title'\n"; - print "\t--item=NAME menu item format, default is '$itemF'\n"; + print "\t--item=NAME menu item format, default is '$itemf'\n"; print "\t--icon-title=XPM menu title icon, default is no\n"; print "\t--icon-item=XPM menu item icon, default is no\n"; print "\t--wm-icons define icon names to use with wm-icons\n"; @@ -113,12 +129,12 @@ exit 0; } -sub showVersion { +sub show_version { print "$version\n"; exit 0; } -sub wrongUsage { +sub wrong_usage { print STDERR "Try '$0 --help' for more information.\n"; exit -1; } --- fvwm-2.5.27.ds.orig/bin/Makefile.am +++ fvwm-2.5.27.ds/bin/Makefile.am @@ -28,38 +28,38 @@ ## The long generation for *.1 is to make both pod2man and 'make -j' happy. _fvwm-menu-xlock.1: fvwm-menu-xlock.in - @TMP=tmp-$$$$ && (\ + @TMP=tmp-$$$$ NAME=fvwm-menu-xlock && (\ mkdir $$TMP && \ - cp fvwm-menu-xlock.in $$TMP/fvwm-menu-xlock && \ - pod2man --center "Fvwm Utilities" $$TMP/fvwm-menu-xlock >$$TMP/fvwm-menu-xlock.1 2>/dev/null && \ - mv $$TMP/fvwm-menu-xlock.1 .; \ + cp $$NAME.in $$TMP/$$NAME && \ + pod2man --center "Fvwm Utilities" --name $$NAME $$TMP/$$NAME >$$TMP/$$NAME.1 2>/dev/null && \ + mv $$TMP/$$NAME.1 .; \ rm -rf $$TMP) _fvwm-menu-directory.1: fvwm-menu-directory.in - @TMP=tmp-$$$$ && (\ + @TMP=tmp-$$$$ NAME=fvwm-menu-directory && (\ mkdir $$TMP && \ - cp fvwm-menu-directory.in $$TMP/fvwm-menu-directory && \ - pod2man --center "Fvwm Utilities" $$TMP/fvwm-menu-directory >$$TMP/fvwm-menu-directory.1 2>/dev/null && \ - mv $$TMP/fvwm-menu-directory.1 .; \ + cp $$NAME.in $$TMP/$$NAME && \ + pod2man --center "Fvwm Utilities" --name $$NAME $$TMP/$$NAME >$$TMP/$$NAME.1 2>/dev/null && \ + mv $$TMP/$$NAME.1 .; \ rm -rf $$TMP) _fvwm-menu-headlines.1: fvwm-menu-headlines.in - @TMP=tmp-$$$$ && (\ + @TMP=tmp-$$$$ NAME=fvwm-menu-headlines && (\ mkdir $$TMP && \ - cp fvwm-menu-headlines.in $$TMP/fvwm-menu-headlines && \ - pod2man --center "Fvwm Utilities" $$TMP/fvwm-menu-headlines >$$TMP/fvwm-menu-headlines.1 2>/dev/null && \ - mv $$TMP/fvwm-menu-headlines.1 .; \ + cp $$NAME.in $$TMP/$$NAME && \ + pod2man --center "Fvwm Utilities" --name $$NAME $$TMP/$$NAME >$$TMP/$$NAME.1 2>/dev/null && \ + mv $$TMP/$$NAME.1 .; \ rm -rf $$TMP) _fvwm-perllib.1: fvwm-perllib.in - @TMP=tmp-$$$$ && (\ + @TMP=tmp-$$$$ NAME=fvwm-perllib && (\ mkdir $$TMP && \ - cp fvwm-perllib.in $$TMP/fvwm-perllib && \ - pod2man --center "Fvwm Utilities" $$TMP/fvwm-perllib >$$TMP/fvwm-perllib.1 2>/dev/null && \ - mv $$TMP/fvwm-perllib.1 .; \ + cp $$NAME.in $$TMP/$$NAME && \ + pod2man --center "Fvwm Utilities" --name $$NAME $$TMP/$$NAME >$$TMP/$$NAME.1 2>/dev/null && \ + mv $$TMP/$$NAME.1 .; \ rm -rf $$TMP) -pod2man: \ +regenerate: \ _fvwm-menu-xlock.1 _fvwm-menu-directory.1 _fvwm-menu-headlines.1 \ _fvwm-perllib.1 --- fvwm-2.5.27.ds.orig/bin/ChangeLog +++ fvwm-2.5.27.ds/bin/ChangeLog @@ -1,3 +1,32 @@ +2009-03-17 Mikhael Goikhman + + * fvwm-menu-desktop.in: + * fvwm-menu-directory.in: + * fvwm-menu-headlines.in: + * fvwm-menu-xlock.in: + * fvwm-perllib.in: + convert my old code to use var_name and function_name coding style + + * Makefile.am: + rename target "pod2man" to "regenerate" + + * fvwm-menu-*.1: + regenerated + +2009-03-10 Mikhael Goikhman + + * fvwm-perllib.in: + hide "use Gtk;" pseudo-dependency from annoying package builders + +2009-03-10 Mikhael Goikhman + + * fvwm-config.in: + fix wrong spacing in the output caused by libXcursor patch + + * fvwm-menu-headlines.in: + switch the default broswer from "netscape" to "firefox", + fix parsing of "ꯍ" entities in xml and RootPrompt site + 2007-08-07 Dominik Vogt * fvwm-menu-directory.1: @@ -23,7 +52,6 @@ * Makefile.am (LDADD): fixed building with libXcursor - 2007-06-22 Simon Griph * fvwm-config.in: --- fvwm-2.5.27.ds.orig/bin/fvwm-menu-xlock.1 +++ fvwm-2.5.27.ds/bin/fvwm-menu-xlock.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.02) .\" .\" Standard preamble: .\" ======================================================================== @@ -25,11 +25,11 @@ .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. | will give a -.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to -.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' -.\" expand to `' in nroff, nothing in troff, for use with C<>. -.tr \(*W-|\(bv\*(Tr +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- @@ -48,22 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. -.if \nF \{\ +.ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} -.\" -.\" For nroff, turn off justification. Always turn off hyphenation; it makes -.\" way too many mistakes in technical documents. -.hy 0 -.if n .na +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -129,25 +132,19 @@ .\" ======================================================================== .\" .IX Title "fvwm-menu-xlock 1" -.TH fvwm-menu-xlock 1 "2003-03-15" "perl v5.8.0" "Fvwm Utilities" +.TH fvwm-menu-xlock 1 "2009-03-17" "perl v5.10.0" "Fvwm Utilities" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" fvwm\-menu\-xlock \- builds xlock menu definition for fvwm .SH "SYNOPSIS" .IX Header "SYNOPSIS" -\&\fBfvwm-menu-xlock\fR -[ \fB\-\-help\fR|\fB\-h\fR|\fB\-?\fR ] -[ \fB\-\-version\fR|\fB\-V\fR ] -[ \fB\-\-name\fR|\fB\-n\fR name ] -[ \fB\-\-title\fR|\fB\-t\fR title ] -[ \fB\-\-item\fR format ] -[ \fB\-\-icon\-title\fR icon ] -[ \fB\-\-icon\-item\fR icon ] -[ \fB\-\-special\-first\fR|\fB\-s\fR ] -[ \*(-- xlock params ] +\&\fBfvwm-menu-xlock\fR [ \fB\-\-help\fR|\fB\-h\fR|\fB\-?\fR ] [ \fB\-\-version\fR|\fB\-V\fR ] [ \fB\-\-name\fR|\fB\-n\fR name ] [ \fB\-\-title\fR|\fB\-t\fR title ] [ \fB\-\-item\fR format ] [ \fB\-\-icon\-title\fR icon ] [ \fB\-\-icon\-item\fR icon ] [ \fB\-\-special\-first\fR|\fB\-s\fR ] [ \*(-- xlock params ] .SH "DESCRIPTION" .IX Header "DESCRIPTION" -A simple perl script which parses xlock's output to build an fvwm -menu definition of all xlock's modes. +A simple perl script which parses xlock's output to build an fvwm menu definition of all xlock's modes. .SH "OPTIONS" .IX Header "OPTIONS" .IP "\fB\-\-help\fR" 4 @@ -158,55 +155,38 @@ show the version and exit .IP "\fB\-\-name\fR name" 4 .IX Item "--name name" -define menu name in the following argument. -Default is \*(L"XLockMenu\*(R" +define menu name in the following argument. Default is \*(L"XLockMenu\*(R" .IP "\fB\-\-title\fR title" 4 .IX Item "--title title" -define menu title in the following argument. -Default is \*(L"XLock Modes\*(R". +define menu title in the following argument. Default is \*(L"XLock Modes\*(R". .IP "\fB\-\-item\fR format" 4 .IX Item "--item format" -define menu item format in the following argument, -default is '%n\et(%d)'. -\&\s-1TAB\s0 can be specified as '\et', but in .fvwm2rc you should specify a double -backslash or a real \s-1TAB\s0. +define menu item format in the following argument, default is '%n\et(%d)'. \s-1TAB\s0 can be specified as '\et', but in .fvwm2rc you should specify a double backslash or a real \s-1TAB\s0. .Sp Format specifiers: .Sp .Vb 3 -\& %n - mode name -\& %d - mode description -\& %D - mode description without "Shows " prefix if any +\& %n \- mode name +\& %d \- mode description +\& %D \- mode description without "Shows " prefix if any .Ve .Sp -These specifiers can receive an optional integer size, positive for right -adjusted string or negative for left adjusted, example: \f(CW%8x\fR; and optional -*num or *\-num, which means to leave only the first or last (if minus) num of -chars, the num must be greater than 3, since the striped part is replaced -with \*(L"...\*(R", example: %*30x. Both can be combined: %\-10*\-20x, this instructs to -get only the 20 last characters, but if the length is less then 10 \- to fill -with up to 10 spaces on the right. +These specifiers can receive an optional integer size, positive for right adjusted string or negative for left adjusted, example: \f(CW%8x\fR; and optional *num or *\-num, which means to leave only the first or last (if minus) num of chars, the num must be greater than 3, since the striped part is replaced with \*(L"...\*(R", example: %*30x. Both can be combined: %\-10*\-20x, this instructs to get only the 20 last characters, but if the length is less then 10 \- to fill with up to 10 spaces on the right. .IP "\fB\-\-icon\-title\fR icon" 4 .IX Item "--icon-title icon" .PD 0 .IP "\fB\-\-icon\-item\fR icon" 4 .IX Item "--icon-item icon" .PD -define menu icon for title and regular item accordingly. -Default is no menu icons (equivalent to an empty icon argument). +define menu icon for title and regular item accordingly. Default is no menu icons (equivalent to an empty icon argument). .IP "\fB\-\-wm\-icons\fR" 4 .IX Item "--wm-icons" -define icon names suitable for use with wm-icons package. -Currently this is equivalent to: \-\-icon\-title '' \-\-icon\-item -menu/lock.xpm. +define icon names suitable for use with wm-icons package. Currently this is equivalent to: \-\-icon\-title '' \-\-icon\-item menu/lock.xpm. .IP "\fB\-\-special\-first\fR" 4 .IX Item "--special-first" instructs to include special modes (usually black, bomb and random) first. .PP -Option parameters can be specified either using '=' or in the next argument. -Short options are ok if not ambiguous: \-h, \-t; but be careful with -short options, what is now unambiguous, can became ambiguous in the next -versions. +Option parameters can be specified either using '=' or in the next argument. Short options are ok if not ambiguous: \-h, \-t; but be careful with short options, what is now unambiguous, can became ambiguous in the next versions. .PP Additional arguments (after \fB\-\-\fR) will be passed to xlock. .PP @@ -216,12 +196,12 @@ Add these lines to your fvwm configuration file: .PP .Vb 6 -\& PipeRead 'fvwm-menu-xlock --name MenuSSaver --title "Screensaver" \e -\& --icon-item mini-bball.xpm --special-first -- -nice 19 -nolock' -\& PipeRead 'fvwm-menu-xlock --name MenuSLock --title "Lock Screen" \e -\& --icon-item mini-rball.xpm --special-first -- -nice 19' -\& AddToMenu "Utilities" "Screensaver%mini-monitor.xpm%" Popup MenuSSaver -\& AddToMenu "Utilities" "Screenlock%mini-lock.xpm%" Popup MenuSLock +\& PipeRead \*(Aqfvwm\-menu\-xlock \-\-name MenuSSaver \-\-title "Screensaver" \e +\& \-\-icon\-item mini\-bball.xpm \-\-special\-first \-\- \-nice 19 \-nolock\*(Aq +\& PipeRead \*(Aqfvwm\-menu\-xlock \-\-name MenuSLock \-\-title "Lock Screen" \e +\& \-\-icon\-item mini\-rball.xpm \-\-special\-first \-\- \-nice 19\*(Aq +\& AddToMenu "Utilities" "Screensaver%mini\-monitor.xpm%" Popup MenuSSaver +\& AddToMenu "Utilities" "Screenlock%mini\-lock.xpm%" Popup MenuSLock .Ve .SH "AUTHORS" .IX Header "AUTHORS" @@ -230,11 +210,9 @@ Mikhael Goikhman , from 24 Feb 1999. .SH "COPYING" .IX Header "COPYING" -The script is distributed by the same terms as fvwm itself. -See \s-1GNU\s0 General Public License for details. +The script is distributed by the same terms as fvwm itself. See \s-1GNU\s0 General Public License for details. .SH "BUGS" .IX Header "BUGS" -Depends on the output of xlock. Will produce an empty menu if the structure -of the output is changed. +Depends on the output of xlock. Will produce an empty menu if the structure of the output is changed. .PP Report bugs to fvwm\-bug@fvwm.org. --- fvwm-2.5.27.ds.orig/rpm/fvwm.spec.in +++ fvwm-2.5.27.ds/rpm/fvwm.spec.in @@ -21,13 +21,8 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-root Packager: Fvwm Workers Autoreq: 1 - -Requires: libXpm.so.4 -#Requires: xpm >= 3.4g Requires: perl >= @REQUIRED_PERL_VERSION@ -# GTK, Imlib, stroke - # RedHat should stop using name "fvwm" to refer to fvwm1 package. Provides: fvwm @@ -90,12 +85,10 @@ %doc docs/error_codes docs/fvwm.lsm %{prefix}/bin/* %{prefix}/libexec/* -%{prefix}/share/* -# the following correct lines somehow generate rpm-build errors, so own share/* -#%{prefix}/share/doc/* -#%{prefix}/share/fvwm -#%{prefix}/share/man/*/* -#%{prefix}/share/locale/*/*/* +%{prefix}/share/doc/* +%{prefix}/share/fvwm +%{prefix}/share/man/*/* +%{prefix}/share/locale/*/*/* %define date%(echo `LC_ALL="C" date +"%a %b %d %Y"`) %changelog --- fvwm-2.5.27.ds.orig/rpm/Makefile.am +++ fvwm-2.5.27.ds/rpm/Makefile.am @@ -5,7 +5,7 @@ version = @VERSION@ release = 0.`date +%Y%m%d` -cparams = --without-gnome --without-rplay-library --sysconfdir=/etc +cparams = --without-gnome --without-rplay-library --sysconfdir=/etc --enable-htmldoc mparams = CFLAGS="-O2" this: @PACKAGE@.spec --- fvwm-2.5.27.ds.orig/rpm/ChangeLog +++ fvwm-2.5.27.ds/rpm/ChangeLog @@ -1,3 +1,11 @@ +2009-03-10 Mikhael Goikhman + + * Makefile.am: + pass --enable-htmldoc to configure + + * fvwm.spec.in: + small cleanup + 2008-11-07 Dan Espen * fvwm.spec.in: Copyright -> License --- fvwm-2.5.27.ds.orig/perllib/ChangeLog +++ fvwm-2.5.27.ds/perllib/ChangeLog @@ -1,3 +1,42 @@ +2009-03-18 Mikhael Goikhman + + * FVWM/Module.pm.in: + add new request_query method; + fix small typo in the code to support old API + + * FVWM/EventNames.pm: + add new event type MX_REPLY + +2009-03-17 Mikhael Goikhman + + * FVWM/Commands.pm: + * FVWM/Event.pm: + * FVWM/EventNames.pm: + * FVWM/Module.pm.in: + * FVWM/Tracker.pm: + * FVWM/create-commands: + * FVWM/Module/Gtk.pm: + * FVWM/Module/Gtk2.pm: + * FVWM/Module/Terminal.pm: + * FVWM/Module/Tk.pm: + * FVWM/Module/Toolkit.pm: + * FVWM/Tracker/Colorsets.pm: + * FVWM/Tracker/GlobalConfig.pm: + * FVWM/Tracker/ModuleConfig.pm: + * FVWM/Tracker/PageInfo.pm: + * FVWM/Tracker/Scheduler.pm: + * FVWM/Tracker/WindowList.pm: + * General/FileSystem.pm: + * General/Parse.pm: + convert my old code to use var_name and function_name coding style + + * FVWM/Constants.pm: + * FVWM/Commands.pm: + regenerated + + * FVWM/Makefile.am: + add "regenerate" target + 2007-08-07 Dominik Vogt * FVWM/EventNames.pm: --- fvwm-2.5.27.ds.orig/perllib/General/Parse.pm +++ fvwm-2.5.27.ds/perllib/General/Parse.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2002-2003, Mikhael Goikhman +# Copyright (c) 2002-2009, Mikhael Goikhman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -21,11 +21,11 @@ require Exporter; @ISA = qw(Exporter); @EXPORT = qw( - getToken cutToken getTokens cutTokens eqi nei + get_token cut_token get_tokens cut_tokens eqi nei ); # currently backslashes are ignored and this is a bit buggy -sub getToken ($) { +sub get_token ($) { my $line = shift; my $token; @@ -44,34 +44,34 @@ $token = $line; $line = ""; } - return wantarray? ($token, $line): $token; + return wantarray ? ($token, $line) : $token; } # returns the next quoted token, modifies the parameter (ref to line) -sub cutToken ($) { - my $lineRef = shift; - my ($token, $rest) = getToken($$lineRef); - $$lineRef = $rest; +sub cut_token ($) { + my $line_ref = shift; + my ($token, $rest) = get_token($$line_ref); + $$line_ref = $rest; return $token; } -sub cutTokens ($$) { - my $lineRef = shift; +sub cut_tokens ($$) { + my $line_ref = shift; my $limit = shift; my @tokens = (); - $$lineRef =~ s/^\s+//; - while ($$lineRef ne "" && $limit-- > 0) { - push @tokens, cutToken($lineRef); + $$line_ref =~ s/^\s+//; + while ($$line_ref ne "" && $limit-- > 0) { + push @tokens, cut_token($line_ref); } - return wantarray? @tokens: \@tokens; + return wantarray ? @tokens : \@tokens; } -sub getTokens ($;$) { +sub get_tokens ($;$) { my $line = shift; my $limit = shift || 1000; - return cutTokens(\$line, $limit); + return cut_tokens(\$line, $limit); } sub eqi ($$) { @@ -95,11 +95,11 @@ use General::Parse; my $string = q{Some "not very long" string of 6 tokens.}; - my $token1 = cutToken(\$string); # $token1 = "Some"; - my ($token2, $token3) = cutTokens(\$string, 2); - my @subtokens = getTokens($token2); # ("not", "very", "long") - my $subtoken1 = getToken($token2); # the same as $subtokens[0] - my $endingArrayRef = getTokens($string); # ["of", "6", "tokens."] + my $token1 = cut_token(\$string); # $token1 = "Some"; + my ($token2, $token3) = cut_tokens(\$string, 2); + my @subtokens = get_tokens($token2); # ("not", "very", "long") + my $subtoken1 = get_token($token2); # the same as $subtokens[0] + my $ending_array_ref = get_tokens($string); # ["of", "6", "tokens."] =head1 DESCRIPTION @@ -108,7 +108,7 @@ =head1 FUNCTIONS -=head2 getToken +=head2 get_token =over 4 @@ -133,7 +133,7 @@ =back -=head2 cutToken +=head2 cut_token =over 4 @@ -156,7 +156,7 @@ =back -=head2 getTokens +=head2 get_tokens =over 4 @@ -184,7 +184,7 @@ =back -=head2 cutTokens +=head2 cut_tokens =over 4 --- fvwm-2.5.27.ds.orig/perllib/General/FileSystem.pm +++ fvwm-2.5.27.ds/perllib/General/FileSystem.pm @@ -1,4 +1,4 @@ -# Copyright (c) 1998-2003, Mikhael Goikhman +# Copyright (C) 1998-2009, Mikhael Goikhman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -22,13 +22,13 @@ require Exporter; @ISA = qw(Exporter); @EXPORT = qw( - loadFile saveFile appendFile removeFile copyFile moveFile - makeDir makePath cleanDir removeDir copyDir moveDir - listFileNames findFile findExecutable - defaultDirPerm preserveStat parsePath getCwd + load_file save_file append_file remove_file copy_file move_file + make_dir make_path clean_dir remove_dir copy_dir move_dir + list_filenames find_file find_executable + default_dir_perm preserve_stat parse_path get_cwd ); -use vars qw($CACHE_FILE_NUM $cacheCounter @prevFileNames @prevFileContentRefs); +use vars qw($CACHE_FILE_NUM $cache_counter @prev_filenames @prev_file_content_refs); use vars qw($ENABLE_CACHE %NEVER_COPY_FILES %NEVER_REMOVE_FILES); use vars qw($DEFAULT_DIR_PERM $PRESERVED_STAT); use vars qw($DEBUG_ENABLED $ERROR_HANDLER $LOAD_FILE_DIRS $SAVE_FILE_DIR); @@ -59,21 +59,21 @@ use General::FileSystem "-die", "-debug"; # die on errors eval { - makePath("/tmp/my-own/dir"); + make_path("/tmp/my-own/dir"); - my $fileContentRef = loadFile("/etc/issue"); - saveFile("/tmp/my-own/dir/issue", $fileContentRef); + my $file_content_ref = load_file("/etc/issue"); + save_file("/tmp/my-own/dir/issue", $file_content_ref); # This is equivalent to the previous two lines, but optimized - copyFile("/etc/issue", "/tmp/my-own/dir/issue"); + copy_file("/etc/issue", "/tmp/my-own/dir/issue"); - makeDir("/tmp/my-own/dir2", 0711); - copyFile("/etc/issue", "/tmp/my-own/dir2/issue"); - moveFile("/tmp/my-own/dir2/issue", "/tmp/my-own/dir2/issue2"); - removeFile("/tmp/my-own/dir2/issue2"); - cleanDir("/tmp/my-own/dir2"); # no effect, it's empty already + make_dir("/tmp/my-own/dir2", 0711); + copy_file("/etc/issue", "/tmp/my-own/dir2/issue"); + move_file("/tmp/my-own/dir2/issue", "/tmp/my-own/dir2/issue2"); + remove_file("/tmp/my-own/dir2/issue2"); + clean_dir("/tmp/my-own/dir2"); # no effect, it's empty already - removeDir("/tmp/my-own"); + remove_dir("/tmp/my-own"); }; if ($@) { print "File System Error: $@"; @@ -82,16 +82,16 @@ or just: use General::FileSystem; - copyFile("origin.txt", "backup.txt"); + copy_file("origin.txt", "backup.txt"); =head1 DESCRIPTION This package contains common file operation functions: -B, B, B, B, B, B, -B, B, B, B, B, B, -B, B, B, -B, B, B, B. +B, B, B, B, B, B, +B, B, B, B, B, B, +B, B, B, +B, B, B, B. On fatal file system errors all functions call the error handler, that may throw exception (die), issue a warning or quietly return undef. @@ -126,7 +126,7 @@ # private function -sub callErrorHandler ($) { +sub call_error_handler ($) { my $msg = shift; die "$msg: [$!]\n" if $ERROR_HANDLER eq "die"; warn "$msg: [$!]\n" if $ERROR_HANDLER eq "warn"; @@ -137,7 +137,7 @@ # private function -sub printLog ($) { +sub print_log ($) { my $msg = shift; return unless $DEBUG_ENABLED; print STDERR "FileSystem: $msg\n"; @@ -146,13 +146,13 @@ # ---------------------------------------------------------------------------- -=head2 loadFile +=head2 load_file =over 4 =item usage - $contentRef = loadFile($fileName) + $content_ref = load_file($filename) =item description @@ -160,7 +160,7 @@ =item parameters - * fileName - name of the file to be loaded. + * filename - name of the file to be loaded. =item returns @@ -175,45 +175,45 @@ BEGIN { $CACHE_FILE_NUM = 6; - $cacheCounter = -1; - @prevFileNames = ("", "", "", "", "", ""); - @prevFileContentRefs = \("", "", "", "", "", ""); + $cache_counter = -1; + @prev_filenames = ("", "", "", "", "", ""); + @prev_file_content_refs = \("", "", "", "", "", ""); } -sub loadFile ($) { - my $fileName = shift; +sub load_file ($) { + my $filename = shift; foreach (@$LOAD_FILE_DIRS) { - if (-f "$_/$fileName") { $fileName = "$_/$fileName"; last; } + if (-f "$_/$filename") { $filename = "$_/$filename"; last; } } - printLog("Loading file $fileName") if $DEBUG_ENABLED; + print_log("Loading file $filename") if $DEBUG_ENABLED; if ($ENABLE_CACHE) { for (0 .. $CACHE_FILE_NUM-1) { - if ($fileName eq $prevFileNames[$_] && -r $fileName) { - printLog("getting from file cache") if $DEBUG_ENABLED; - return $prevFileContentRefs[$_]; + if ($filename eq $prev_filenames[$_] && -r $filename) { + print_log("getting from file cache") if $DEBUG_ENABLED; + return $prev_file_content_refs[$_]; } } } - open(FILE, "<$fileName") || return callErrorHandler("Can't open $fileName"); - my $fileContent = join("", ); - close(FILE) || return callErrorHandler("Can't close $fileName"); + open(FILE, "<$filename") || return call_error_handler("Can't open $filename"); + my $content = join("", ); + close(FILE) || return call_error_handler("Can't close $filename"); if ($ENABLE_CACHE) { - $cacheCounter = ($cacheCounter+1) % $CACHE_FILE_NUM; - $prevFileNames[$cacheCounter] = $fileName; - $prevFileContentRefs[$cacheCounter] = \$fileContent; + $cache_counter = ($cache_counter+1) % $CACHE_FILE_NUM; + $prev_filenames[$cache_counter] = $filename; + $prev_file_content_refs[$cache_counter] = \$content; } - return \$fileContent; + return \$content; } # ---------------------------------------------------------------------------- -=head2 saveFile +=head2 save_file =over 4 @@ -223,13 +223,13 @@ =item usage - saveFile($fileName, \$fileContent); + save_file($filename, \$content); =item parameters - * fileName - name of the file to be saved into - * fileContentRef - reference to file-content string - * createSubdirs - optional flag (default is 0 - don't create subdirs) + * filename - name of the file to be saved into + * content_ref - reference to file content string + * create_subdirs - optional flag (default is 0 - don't create subdirs) =item returns @@ -241,52 +241,52 @@ # ============================================================================ -sub saveFile ($$;$) { - my ($fileName, $fileContentRef, $createDirs) = @_; +sub save_file ($$;$) { + my ($filename, $content_ref, $create_dirs) = @_; - if ($fileName !~ m=^[/\\]|\w:\\=) { - $fileName = "$SAVE_FILE_DIR/$fileName"; + if ($filename !~ m=^[/\\]|\w:\\=) { + $filename = "$SAVE_FILE_DIR/$filename"; } - printLog("Saving file $fileName") if $DEBUG_ENABLED; - die("saveFile: No SCALAR ref parameter\n") - unless ref($fileContentRef) eq 'SCALAR'; + print_log("Saving file $filename") if $DEBUG_ENABLED; + die("save_file: No SCALAR ref parameter\n") + unless ref($content_ref) eq 'SCALAR'; if ($ENABLE_CACHE) { for (0 .. $CACHE_FILE_NUM-1) { - $prevFileContentRefs[$_] = $fileContentRef - if $fileName eq $prevFileNames[$_]; + $prev_file_content_refs[$_] = $content_ref + if $filename eq $prev_filenames[$_]; } } - if ($createDirs) { - my $dirName = dirname($fileName); - makePath($dirName) unless -d $dirName; + if ($create_dirs) { + my $dirname = dirname($filename); + make_path($dirname) unless -d $dirname; } - open(FILE, ">$fileName") || return callErrorHandler("Can't open $fileName"); - print FILE $$fileContentRef; - close(FILE) || return callErrorHandler("Can't close $fileName"); + open(FILE, ">$filename") || return call_error_handler("Can't open $filename"); + print FILE $$content_ref; + close(FILE) || return call_error_handler("Can't close $filename"); return 1; } # ---------------------------------------------------------------------------- -=head2 appendFile +=head2 append_file =over 4 =item description -Appends file-append-content to local filesystem with given file-name. +Appends file-content to local filesystem with given file-name. =item usage - appendFile($fileName, \$fileAppendContent); + append_file($filename, \$appended_content); =item parameters - * fileName - name of the file to be saved into - * fileAppendContentRef - reference to file-append-content string + * filename - name of the file to be saved into + * appended_content_ref - reference to appended-content string =item returns @@ -298,27 +298,27 @@ # ============================================================================ -sub appendFile ($$) { - my ($fileName, $fileAppendRef) = @_; - printLog("Append>>file $fileName") if $DEBUG_ENABLED; +sub append_file ($$) { + my ($filename, $appended_content_ref) = @_; + print_log("Append>>file $filename") if $DEBUG_ENABLED; if ($ENABLE_CACHE) { - for (0 .. $CACHE_FILE_NUM-1 && -r $fileName) { - ${$prevFileContentRefs[$_]} .= $$fileAppendRef - if $fileName eq $prevFileNames[$_]; + for (0 .. $CACHE_FILE_NUM-1 && -r $filename) { + ${$prev_file_content_refs[$_]} .= $$appended_content_ref + if $filename eq $prev_filenames[$_]; } } - open(FILE, ">>$fileName") || return callErrorHandler("Can't append to $fileName"); - print FILE $$fileAppendRef; - close(FILE) || return callErrorHandler("Can't close $fileName"); + open(FILE, ">>$filename") || return call_error_handler("Can't append to $filename"); + print FILE $$appended_content_ref; + close(FILE) || return call_error_handler("Can't close $filename"); return 1; } # ---------------------------------------------------------------------------- -=head2 removeFile +=head2 remove_file =over 4 @@ -328,11 +328,11 @@ =item usage - removeFile($fileName); + remove_file($filename); =item parameters - * fileName - name of the file to be deleted + * filename - name of the file to be deleted =item returns @@ -344,17 +344,17 @@ # ============================================================================ -sub removeFile ($;$) { - my $fileName = shift; - printLog("Removin file $fileName") if $DEBUG_ENABLED; - unlink($fileName) || return callErrorHandler("Can't unlink $fileName"); +sub remove_file ($;$) { + my $filename = shift; + print_log("Removin file $filename") if $DEBUG_ENABLED; + unlink($filename) || return call_error_handler("Can't unlink $filename"); return 1; } # ---------------------------------------------------------------------------- -=head2 makeDir +=head2 make_dir =over 4 @@ -364,7 +364,7 @@ =item usage - makeDir($PREVIEW_DIR); + make_dir($PREVIEW_DIR); =item parameters @@ -381,19 +381,19 @@ # ============================================================================ -sub makeDir ($;$) { - my $dirName = shift; +sub make_dir ($;$) { + my $dirname = shift; my $perm = shift || $DEFAULT_DIR_PERM; - printLog("Creating dir $dirName, " . sprintf("%o", $perm)) + print_log("Creating dir $dirname, " . sprintf("%o", $perm)) if $DEBUG_ENABLED; - mkdir($dirName, $perm) || return callErrorHandler("Can't mkdir $dirName"); + mkdir($dirname, $perm) || return call_error_handler("Can't mkdir $dirname"); return 1; } # ---------------------------------------------------------------------------- -=head2 makePath +=head2 make_path =over 4 @@ -403,7 +403,7 @@ =item usage - makePath($PUBLISH_DIR); + make_path($PUBLISH_DIR); =item parameters @@ -420,18 +420,18 @@ # ============================================================================ -sub makePath ($;$) { - my $dirName = shift; +sub make_path ($;$) { + my $dirname = shift; my $perm = shift || $DEFAULT_DIR_PERM; - printLog("Making path $dirName, " . sprintf("%o", $perm)) + print_log("Making path $dirname, " . sprintf("%o", $perm)) if $DEBUG_ENABLED; - return 1 if -d $dirName; - my $parentDir = dirname($dirName); + return 1 if -d $dirname; + my $parent_dir = dirname($dirname); local $DEBUG_ENABLED = 0; - &makePath($parentDir, $perm) unless -d $parentDir; - makeDir($dirName, $perm); + &make_path($parent_dir, $perm) unless -d $parent_dir; + make_dir($dirname, $perm); return 1; } @@ -439,7 +439,7 @@ # ---------------------------------------------------------------------------- -=head2 copyFile +=head2 copy_file =over 4 @@ -449,7 +449,7 @@ =item usage - copyFile($from, $to); + copy_file($from, $to); =item parameters @@ -466,20 +466,20 @@ # ============================================================================ -sub copyFile ($$) { - my ($srcFileName, $dstFileName) = @_; - printLog("Copying file $srcFileName to $dstFileName") +sub copy_file ($$) { + my ($src_filename, $dst_filename) = @_; + print_log("Copying file $src_filename to $dst_filename") if $DEBUG_ENABLED; # Must manage symbolic links somehow - # return if -l $srcFileName; + # return if -l $src_filename; - copy($srcFileName, $dstFileName) - or return callErrorHandler("Can't copy $srcFileName $dstFileName"); + copy($src_filename, $dst_filename) + or return call_error_handler("Can't copy $src_filename $dst_filename"); if ($PRESERVED_STAT) { - my ($device, $inode, $mode) = stat($srcFileName); - chmod($mode, $dstFileName); + my ($device, $inode, $mode) = stat($src_filename); + chmod($mode, $dst_filename); } return 1; } @@ -487,7 +487,7 @@ # ---------------------------------------------------------------------------- -=head2 moveFile +=head2 move_file =over 4 @@ -497,7 +497,7 @@ =item usage - moveFile($from, $to); + move_file($from, $to); =item parameters @@ -514,20 +514,20 @@ # ============================================================================ -sub moveFile ($$) { - my ($srcFileName, $dstFileName) = @_; - printLog("Moving file $srcFileName to $dstFileName") +sub move_file ($$) { + my ($src_filename, $dst_filename) = @_; + print_log("Moving file $src_filename to $dst_filename") if $DEBUG_ENABLED; - move($srcFileName, $dstFileName) - or return callErrorHandler("Can't move $srcFileName $dstFileName"); + move($src_filename, $dst_filename) + or return call_error_handler("Can't move $src_filename $dst_filename"); return 1; } # ---------------------------------------------------------------------------- -=head2 cleanDir +=head2 clean_dir =over 4 @@ -537,7 +537,7 @@ =item usage - cleanDir($PREVIEW_DIR); + clean_dir($PREVIEW_DIR); =item parameters @@ -558,34 +558,34 @@ # ============================================================================ -sub cleanDir ($;$) { - my $dirName = shift; +sub clean_dir ($;$) { + my $dirname = shift; my $recursive = shift || 1; - die("cleanDir: Unsupported flag $recursive\n") + die("clean_dir: Unsupported flag $recursive\n") if $recursive > 3 || $recursive < 0; - printLog(($recursive != 3? "Cleaning": "Removing") . " dir $dirName " + print_log(($recursive != 3 ? "Cleaning" : "Removing") . " dir $dirname " . ["files only", "recursively files only", "recursively", "completely"]->[$recursive]) if $DEBUG_ENABLED; local $DEBUG_ENABLED = 0; my @subdirs = (); - my $fileNames = listFileNames($dirName); + my $filenames = list_filenames($dirname); # process files - foreach (@$fileNames) { + foreach (@$filenames) { next if $NEVER_REMOVE_FILES{$_}; - my $fileName = "$dirName/$_"; - if (-d $fileName) { push @subdirs, $fileName; } - else { unlink("$fileName") || return callErrorHandler("Can't unlink $fileName"); } + my $filename = "$dirname/$_"; + if (-d $filename) { push @subdirs, $filename; } + else { unlink("$filename") || return call_error_handler("Can't unlink $filename"); } } # process subdirs map { - cleanDir($_, $recursive); - rmdir($_) || return callErrorHandler("Can't unlink $_") if $recursive == 2; + clean_dir($_, $recursive); + rmdir($_) || return call_error_handler("Can't unlink $_") if $recursive == 2; } @subdirs if $recursive; - rmdir($dirName) || return callErrorHandler("Can't unlink $dirName") if $recursive == 3; + rmdir($dirname) || return call_error_handler("Can't unlink $dirname") if $recursive == 3; return 1; } @@ -593,18 +593,18 @@ # ---------------------------------------------------------------------------- -=head2 removeDir +=head2 remove_dir =over 4 =item description Entirely removes given directory and its content (if any). -This is an alias to C. +This is an alias to C. =item usage - removeDir($TMP_DIR); + remove_dir($TMP_DIR); =item parameters @@ -620,15 +620,15 @@ # ============================================================================ -sub removeDir ($) { - my $dirName = shift; - return cleanDir($dirName, 3); +sub remove_dir ($) { + my $dirname = shift; + return clean_dir($dirname, 3); } # ---------------------------------------------------------------------------- -=head2 copyDir +=head2 copy_dir =over 4 @@ -637,12 +637,12 @@ Recursively copies all files and subdirectories inside given directory to new location. -Destination directory must not exist. Use: C +Destination directory must not exist. Use: C to remove it before copying. =item usage - copyDir($dirFrom, $dirTo); + copy_dir($dir_from, $dir_to); =item parameters @@ -660,40 +660,40 @@ # ============================================================================ -sub copyDir ($$) { - my ($srcDirName, $dstDirName, $perm) = @_; +sub copy_dir ($$) { + my ($src_dirname, $dst_dirname, $perm) = @_; - return callErrorHandler("Directory $srcDirName does not exist") - unless -d $srcDirName; - makeDir($dstDirName, $perm) unless -d $dstDirName; + return call_error_handler("Directory $src_dirname does not exist") + unless -d $src_dirname; + make_dir($dst_dirname, $perm) unless -d $dst_dirname; - printLog("Copying dir $srcDirName to $dstDirName recursively") + print_log("Copying dir $src_dirname to $dst_dirname recursively") if $DEBUG_ENABLED;; local $DEBUG_ENABLED = 0; my $error = 0; my @subdirs = (); - my $fileNames = listFileNames($srcDirName); + my $filenames = list_filenames($src_dirname); # process files - foreach (@$fileNames) { + foreach (@$filenames) { next if $NEVER_COPY_FILES{$_}; - my $srcFileName = "$srcDirName/$_"; - my $dstFileName = "$dstDirName/$_"; - if (-d $srcFileName) { push @subdirs, $_; } - elsif (-l $srcFileName) { next if "# We ignore links for now! TO FIX!" } - else { copyFile($srcFileName, $dstFileName) or $error = 1; } + my $src_filename = "$src_dirname/$_"; + my $dst_filename = "$dst_dirname/$_"; + if (-d $src_filename) { push @subdirs, $_; } + elsif (-l $src_filename) { next if "# We ignore links for now! TO FIX!" } + else { copy_file($src_filename, $dst_filename) or $error = 1; } } # process subdirs foreach (@subdirs) { - my $srcSubDirName = "$srcDirName/$_"; - my $dstSubDirName = "$dstDirName/$_"; - ©Dir($srcSubDirName, $dstSubDirName) or $error = 1; + my $src_subdirname = "$src_dirname/$_"; + my $dst_subdirname = "$dst_dirname/$_"; + ©_dir($src_subdirname, $dst_subdirname) or $error = 1; } - return callErrorHandler("Errors while copying some files/subdirs in $srcDirName to $dstDirName") + return call_error_handler("Errors while copying some files/subdirs in $src_dirname to $dst_dirname") if $error; return 1; } @@ -701,7 +701,7 @@ # ---------------------------------------------------------------------------- -=head2 moveDir +=head2 move_dir =over 4 @@ -709,12 +709,12 @@ Moves (or actually renames) a directory to another location. -Destination directory must not exist. Use: C +Destination directory must not exist. Use: C to remove it before copying. =item usage - moveDir($dirFrom, $dirTo); + move_dir($dir_from, $dir_to); =item parameters @@ -731,20 +731,20 @@ # ============================================================================ -sub moveDir ($$) { - my ($srcDirName, $dstDirName) = @_; - printLog("Moving dir $srcDirName to $dstDirName") +sub move_dir ($$) { + my ($src_dirname, $dst_dirname) = @_; + print_log("Moving dir $src_dirname to $dst_dirname") if $DEBUG_ENABLED; - rename($srcDirName, $dstDirName) - or return callErrorHandler("Can't rename $srcDirName $dstDirName"); + rename($src_dirname, $dst_dirname) + or return call_error_handler("Can't rename $src_dirname $dst_dirname"); return 1; } # ---------------------------------------------------------------------------- -=head2 listFileNames +=head2 list_filenames =over 4 @@ -757,7 +757,7 @@ # mini file lister $dir = '/home/ftp'; - foreach my $file (@{listFileNames($dir)}) { + foreach my $file (@{list_filenames($dir)}) { print "File $file\n" if -f "$dir/$file"; print "Dir $file\n" if -d "$dir/$file"; } @@ -778,27 +778,27 @@ # ============================================================================ -sub listFileNames ($;$) { - my $dirName = shift; +sub list_filenames ($;$) { + my $dirname = shift; my $recursive = shift || 0; - if (ref($dirName) eq "ARRAY") { + if (ref($dirname) eq "ARRAY") { my @files = (); - foreach (@$dirName) { push @files, &listFileNames($_); } + foreach (@$dirname) { push @files, &list_filenames($_); } return \@files; } - printLog("Listing dir $dirName") if $DEBUG_ENABLED; + print_log("Listing dir $dirname") if $DEBUG_ENABLED; - opendir(DIR, $dirName) || return callErrorHandler("Can't opendir $dirName"); + opendir(DIR, $dirname) || return call_error_handler("Can't opendir $dirname"); my @files = grep { $_ ne '.' && $_ ne '..' } readdir(DIR); - closedir(DIR) || return callErrorHandler("Can't closedir $dirName"); + closedir(DIR) || return call_error_handler("Can't closedir $dirname"); if ($recursive) { my $i = 0; for (; $i < @files; ) { my $subdir = $files[$i]; - if (-d "$dirName/$subdir") { + if (-d "$dirname/$subdir") { splice(@files, $i, 1, map { "$subdir/$_" } - @{&listFileNames("$dirName/$subdir")}); + @{&list_filenames("$dirname/$subdir")}); } else { $i++; } @@ -811,7 +811,7 @@ # ---------------------------------------------------------------------------- -=head2 findFile +=head2 find_file =over 4 @@ -823,7 +823,7 @@ =item usage - my $gtkrc = findFile(".gtkrc", [$home, "$home/.gnome"]); + my $gtkrc = find_file(".gtkrc", [$home, "$home/.gnome"]); =item parameters @@ -840,13 +840,13 @@ # ============================================================================ -sub findFile ($$) { - my $fileName = shift; +sub find_file ($$) { + my $filename = shift; my $dirs = shift(); - die "findFile: no dirs given\n" unless ref($dirs) eq "ARRAY"; + die "find_file: no dirs given\n" unless ref($dirs) eq "ARRAY"; foreach (@$dirs) { - my $filePath = "$_/$fileName"; - return $filePath if -f $filePath; + my $file_path = "$_/$filename"; + return $file_path if -f $file_path; } return undef; } @@ -854,7 +854,7 @@ # ---------------------------------------------------------------------------- -=head2 findExecutable +=head2 find_executable =over 4 @@ -867,12 +867,12 @@ =item usage - my $gzipExe = findExecutable("gzip", ["/usr/gnu/bin", "/gnu/bin"]); + my $gzip_exe = find_executable("gzip", ["/usr/gnu/bin", "/gnu/bin"]); =item parameters * file name to search for (only executables are tested) - * optional array ref of directories to search in + * optional array ref of extra directories to search in =item returns @@ -884,16 +884,16 @@ # ============================================================================ -sub findExecutable ($;$) { - my $fileName = shift; - my $addDirs = shift; +sub find_executable ($;$) { + my $filename = shift; + my $extra_dirs = shift; my @dirs = split(":", $ENV{"PATH"} || ""); - if (ref($addDirs) eq "ARRAY") { - push @dirs, @$addDirs; + if (ref($extra_dirs) eq "ARRAY") { + push @dirs, @$extra_dirs; } foreach (@dirs) { - my $filePath = "$_/$fileName"; - return $filePath if -x $filePath; + my $file_path = "$_/$filename"; + return $file_path if -x $file_path; } return undef; } @@ -901,14 +901,14 @@ # ---------------------------------------------------------------------------- -=head2 defaultDirPerm +=head2 default_dir_perm =over 4 =item description This functions changes default directory permissions, used in -C, C, C and C functions. +C, C, C and C functions. The default of this package is 0775. @@ -916,7 +916,7 @@ =item usage - defaultDirPerm(0700); + default_dir_perm(0700); =item parameters @@ -932,28 +932,28 @@ # ============================================================================ -sub defaultDirPerm (;$) { +sub default_dir_perm (;$) { return if $^O =~ /Win|DOS/; - my $newValue = shift; - my $oldValue = $DEFAULT_DIR_PERM; + my $new_value = shift; + my $old_value = $DEFAULT_DIR_PERM; - if (defined $newValue) { - printLog("defaultDirPerm = $newValue") if $DEBUG_ENABLED; - $DEFAULT_DIR_PERM = $newValue; + if (defined $new_value) { + print_log("default_dir_perm = $new_value") if $DEBUG_ENABLED; + $DEFAULT_DIR_PERM = $new_value; } - return $oldValue; + return $old_value; } # ---------------------------------------------------------------------------- -=head2 preserveStat +=head2 preserve_stat =over 4 =item description -This functions changes behavior of C and C functions. +This functions changes behavior of C and C functions. If 0 is given as a parameter stats will not be preserved. TODO: specify values for diferent preserves: @@ -972,7 +972,7 @@ =item usage - preserveStat(1); + preserve_stat(1); =item parameters @@ -988,28 +988,28 @@ # ============================================================================ -sub preserveStat (;$) { +sub preserve_stat (;$) { return if $^O =~ /Win|DOS/; - my $newValue = shift; - my $oldValue = $PRESERVED_STAT; + my $new_value = shift; + my $old_value = $PRESERVED_STAT; - if (defined $newValue) { - printLog("preserveStat = $newValue") if $DEBUG_ENABLED; - $PRESERVED_STAT = $newValue; + if (defined $new_value) { + print_log("preserve_stat = $new_value") if $DEBUG_ENABLED; + $PRESERVED_STAT = $new_value; } - return $oldValue; + return $old_value; } # ---------------------------------------------------------------------------- -=head2 parsePath +=head2 parse_path =over 4 =item usage - my ($dirName, $baseName) = parsePath($fileName); + my ($dirname, $basename) = parse_path($filename); =item examples @@ -1037,28 +1037,28 @@ # ============================================================================ -sub parsePath ($) { +sub parse_path ($) { my $path = shift; if ($path =~ m=^(.*)[/\\]+([^/\\]*)$=) { return ($1, $2); } else { # support even funny dos form c:file - return $path =~ m=^(\w:)(.*)$=? - ($1 . ".", $2): - (".", $path); + return $path =~ m=^(\w:)(.*)$= + ? ($1 . ".", $2) + : (".", $path); } } # ---------------------------------------------------------------------------- -=head2 getCwd +=head2 get_cwd =over 4 =item usage - my $cwd = getCwd(); + my $cwd = get_cwd(); =item description @@ -1070,8 +1070,8 @@ # ============================================================================ -sub getCwd () { - $^O eq "MSWin32"? Win32::GetCwd(): require "getcwd.pl" && getcwd(); +sub get_cwd () { + $^O eq "MSWin32" ? Win32::GetCwd() : require "getcwd.pl" && getcwd(); } --- fvwm-2.5.27.ds.orig/perllib/FVWM/Tracker.pm +++ fvwm-2.5.27.ds/perllib/FVWM/Tracker.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2003, Mikhael Goikhman +# Copyright (c) 2003-2009, Mikhael Goikhman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -51,8 +51,8 @@ module => $module, data => undef, active => 0, - handlerTypes => {}, - handlerIds => {}, + handler_types => {}, + handler_ids => {}, observers => {}, }; bless $self, $class; @@ -64,37 +64,37 @@ my $self = shift; my $mask = 0; my $xmask = 0; - while (my ($id, $type) = each %{$self->{handlerTypes}}) { - (($type & M_EXTENDED_MSG)? $xmask: $mask) |= $type; + while (my ($id, $type) = each %{$self->{handler_types}}) { + (($type & M_EXTENDED_MSG) ? $xmask : $mask) |= $type; } - $self->internalDie("Inactive mask is not zero") + $self->internal_die("Inactive mask is not zero") unless $self->{active} || !$mask && !$xmask; my @list = ($mask, $xmask); - return wantarray? @list: \@list; + return wantarray ? @list : \@list; } -sub addHandler ($$$) { +sub add_handler ($$$) { my $self = shift; my $type = shift; my $handler = shift; - my $handlerId = $self->{module}->addHandler($type, $handler, 1); - $self->{handlerTypes}->{$handlerId} = $type; - $self->{handlerIds}->{$handlerId} = $handlerId; - return $handlerId; + my $handler_id = $self->{module}->add_handler($type, $handler, 1); + $self->{handler_types}->{$handler_id} = $type; + $self->{handler_ids}->{$handler_id} = $handler_id; + return $handler_id; } -sub deleteHandlers ($;$) { +sub delete_handlers ($;$) { my $self = shift; - my $handlerIds = ref($_[0]) eq 'ARRAY'? - shift(): [ keys %{$self->{handlerIds}} ]; + my $handler_ids = ref($_[0]) eq 'ARRAY' + ? shift() : [ keys %{$self->{handler_ids}} ]; - foreach (@$handlerIds) { - next unless defined delete $self->{handlerTypes}->{$_}; - my $handlerId = delete $self->{handlerIds}->{$_} + foreach (@$handler_ids) { + next unless defined delete $self->{handler_types}->{$_}; + my $handler_id = delete $self->{handler_ids}->{$_} or die "Internal #1"; if ($self->{module}) { - $self->{module}->deleteHandler($handlerId) + $self->{module}->delete_handler($handler_id) or die "Internal #2"; } } @@ -102,7 +102,7 @@ sub observe ($$;$) { my $self = shift; - my $observable = ref($_[0]) eq ""? shift: "main"; + my $observable = ref($_[0]) eq "" ? shift : "main"; my $callback = shift; my $observables = $self->observables; @@ -119,8 +119,8 @@ sub unobserve ($;$$) { my $self = shift; - my $observable = ref($_) eq ""? shift: "*"; - my $observerId = shift || "*"; + my $observable = ref($_) eq "" ? shift : "*"; + my $observer_id = shift || "*"; ### TODO #$self->{observers}->{$observable} = []; @@ -153,8 +153,8 @@ $self->{active} = 1; - $self->{module}->FVWM::Module::eventLoop(1) - if %{$self->{handlerIds}}; + $self->{module}->FVWM::Module::event_loop(1) + if %{$self->{handler_ids}}; return $self->data; } @@ -162,7 +162,7 @@ sub stop ($) { my $self = shift; return unless $self->{active}; - $self->deleteHandlers; + $self->delete_handlers; $self->{active} = 0; } @@ -172,7 +172,7 @@ $self->start; } -sub toBeDisconnected ($) { +sub to_be_disconnected ($) { } sub data ($) { @@ -185,32 +185,32 @@ return ""; } -sub requestWindowListEvents ($) { +sub request_windowlist_events ($) { my $self = shift; my $module = $self->{module}; - warn "requestWindowListEvents() called after start()" if $self->{active}; + warn "request_windowlist_events() called after start()" if $self->{active}; - $self->addHandler(M_END_WINDOWLIST, sub { $_[0]->terminate; }); - $module->emulateEvent(M_END_WINDOWLIST, []) if $module->isDummy; - $module->postponeSend("Send_WindowList"); + $self->add_handler(M_END_WINDOWLIST, sub { $_[0]->terminate; }); + $module->emulate_event(M_END_WINDOWLIST, []) if $module->is_dummy; + $module->postpone_send("Send_WindowList"); } -sub requestConfigInfoEvents ($;$) { +sub request_configinfo_events ($;$) { my $self = shift; my $name = shift; my $module = $self->{module}; - warn "requestConfigInfoEvents() called after start()" if $self->{active}; + warn "request_configinfo_events() called after start()" if $self->{active}; - $self->addHandler(M_END_CONFIG_INFO, sub { $_[0]->terminate; }); - $module->emulateEvent(M_END_CONFIG_INFO, []) if $module->isDummy; - $module->postponeSend("Send_ConfigInfo" . ($name? " *$name": "")); + $self->add_handler(M_END_CONFIG_INFO, sub { $_[0]->terminate; }); + $module->emulate_event(M_END_CONFIG_INFO, []) if $module->is_dummy; + $module->postpone_send("Send_ConfigInfo" . ($name ? " *$name" : "")); } -sub internalDie ($$) { +sub internal_die ($$) { my $self = shift; my $msg = shift; my $class = ref($self); - $self->{module}->internalDie("$class: $msg") + $self->{module}->internal_die("$class: $msg") } sub DESTROY ($) { @@ -223,6 +223,28 @@ return []; } +use vars qw($AUTOLOAD); + +# support old API, like addHandler, dispatch to add_handler +sub AUTOLOAD ($;@) { + my $self = shift; + my @params = @_; + + my $autoload_method = $AUTOLOAD; + my $method = $autoload_method; + + # remove the package name + $method =~ s/.*://g; + + $method =~ s/XMask/Xmask/; + $method =~ s/([a-z])([A-Z])/${1}_\L$2/g; + + die "No method $method in $self as guessed from $autoload_method" + unless $self->can($method); + + $self->$method(@params); +} + 1; __END__ @@ -245,14 +267,14 @@ Using B $module object: my $tracker = $module->track("TrackerName", @params); - my $initialData = $tracker->data; + my $initial_data = $tracker->data; $tracker->observe("observable1", sub { shift->data }); $tracker->observe("observable2", sub { shift->stop }); In the future this syntax will probably work too: my $tracker = new FVWM::Tracker::TrackerName($module, @params); - my $initialData = $tracker->start; + my $initial_data = $tracker->start; $tracker->observe("observable1", sub { shift->data }); $tracker->observe("observable2", sub { shift->stop }); @@ -345,14 +367,14 @@ I is an B instance. I is specific to the concrete Tracker class. -=item B I I +=item B I I -A wrapper to B::B, has the same syntax, but stores -all handlers so they may be deleted at once using B. +A wrapper to B::B, has the same syntax, but stores +all handlers so they may be deleted at once using B. -=item B [I] +=item B [I] -Deletes all handlers defined using addHandler or the ones specified +Deletes all handlers defined using add_handler or the ones specified using an optional I array ref. =item B I [I] @@ -361,7 +383,7 @@ observer function with the following parameters: $module, $tracker, $data, I. -=item B +=item B Subclasses that work using I events sent in responce to B command should call this shortcut method. @@ -369,7 +391,7 @@ counted) and defines a handler that terminates the initial tracker event loop in response to I event. -=item B +=item B Subclasses that work using I events sent in responce to B command should call this shortcut method. @@ -377,12 +399,12 @@ counted) and defines a handler that terminates the initial tracker event loop in response to I event. -=item B +=item B Subclasses may call this method when something wrong happens. -This is a wrapper to B::B. +This is a wrapper to B::B. -=item B +=item B Does nothing by default. Subclasses may implement this method if something should be sent to I just before the module disconnects itself. --- fvwm-2.5.27.ds.orig/perllib/FVWM/Event.pm +++ fvwm-2.5.27.ds/perllib/FVWM/Event.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2003 Mikhael Goikhman +# Copyright (c) 2003-2009 Mikhael Goikhman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -22,22 +22,22 @@ sub new ($$$) { my $class = shift; my $type = shift; - my $argValues = shift; + my $arg_values = shift; - my $isSpecial = defined $argValues? 0: 1; - my $isExtended = $type & M_EXTENDED_MSG? 1: 0; + my $is_special = defined $arg_values ? 0 : 1; + my $is_extended = $type & M_EXTENDED_MSG ? 1 : 0; - $argValues ||= []; - $argValues = eventArgValues($isSpecial? "faked": $type, $argValues) - unless ref($argValues); + $arg_values ||= []; + $arg_values = event_arg_values($is_special ? "faked" : $type, $arg_values) + unless ref($arg_values); my $self = { type => $type, args => undef, # lazy hash of event arguments - argValues => $argValues, - propagationAllowed => 1, - isSpecial => $isSpecial, - isExtended => $isExtended, + arg_values => $arg_values, + propagation_allowed => 1, + is_special => $is_special, + is_extended => $is_extended, }; bless $self, $class; @@ -50,53 +50,53 @@ return $self->{'type'}; } -sub argValues ($) { +sub arg_values ($) { my $self = shift; - return $self->{'argValues'}; + return $self->{'arg_values'}; } -sub argNames ($) { +sub arg_names ($) { my $self = shift; - return eventArgNames($self->type, $self->argValues); + return event_arg_names($self->type, $self->arg_values); } -sub argTypes ($) { +sub arg_types ($) { my $self = shift; - return eventArgTypes($self->type, $self->argValues); + return event_arg_types($self->type, $self->arg_values); } -sub loopArgNames ($) { +sub loop_arg_names ($) { my $self = shift; - return eventLoopArgNames($self->type, $self->argValues); + return event_loop_arg_names($self->type, $self->arg_values); } -sub loopArgTypes ($) { +sub loop_arg_types ($) { my $self = shift; - return eventLoopArgTypes($self->type, $self->argValues); + return event_loop_arg_types($self->type, $self->arg_values); } sub args ($) { my $self = shift; - $self->{'args'} ||= eventArgs($self->type, $self->argValues); + $self->{'args'} ||= event_args($self->type, $self->arg_values); return $self->{'args'}; } -sub isExtended ($) { +sub is_extended ($) { my $self = shift; - return $self->{'isExtended'}; + return $self->{'is_extended'}; } sub name ($) { my $self = shift; - return eventName($self->type); + return event_name($self->type); } -sub propagationAllowed ($;$) { +sub propagation_allowed ($;$) { my $self = shift; my $value = shift; - $self->{'propagationAllowed'} = $value if defined $value; + $self->{'propagation_allowed'} = $value if defined $value; - return $self->{'propagationAllowed'}; + return $self->{'propagation_allowed'}; } sub dump ($) { @@ -104,14 +104,14 @@ my $args = $self->args; my $string = $self->name . "\n"; - my @argNames = @{$self->argNames}; - my @argTypes = @{$self->argTypes}; - my @argValues = @{$self->argValues}; - - while (@argNames) { - my $name = shift @argNames; - my $type = shift @argTypes; - my $value = shift @argValues; + my @arg_names = @{$self->arg_names}; + my @arg_types = @{$self->arg_types}; + my @arg_values = @{$self->arg_values}; + + while (@arg_names) { + my $name = shift @arg_names; + my $type = shift @arg_types; + my $value = shift @arg_values; my $text; if ($type == FVWM::EventNames::number) { @@ -128,30 +128,30 @@ $value =~ s/"/\\"/g; $text = qq("$value"); } elsif ($type == FVWM::EventNames::looped) { - my $loopArgNames = $self->loopArgNames; - my $loopArgTypes = $self->loopArgTypes; + my $loop_arg_names = $self->loop_arg_names; + my $loop_arg_types = $self->loop_arg_types; my $j = 0; while ($j < @$value) { my $k = 0; - foreach (@$loopArgNames) { - my $i = int($j / @$loopArgNames) + 1; - push @argNames, "[$i] $_"; - push @argTypes, $loopArgTypes->[$k]; - push @argValues, $value->[$j]; + foreach (@$loop_arg_names) { + my $i = int($j / @$loop_arg_names) + 1; + push @arg_names, "[$i] $_"; + push @arg_types, $loop_arg_types->[$k]; + push @arg_values, $value->[$j]; $j++; $k++; } } - $text = sprintf("(%d)", @$value / @$loopArgNames); + $text = sprintf("(%d)", @$value / @$loop_arg_names); } elsif ($type == FVWM::EventNames::wflags) { $text = qq([window flags are not supported yet]); } else { $text = qq([unsupported arg type $type] "$value"); } - my $nameLen = 12; - $nameLen = int((length($name) + 5) / 6) * 6 - if length($name) > $nameLen; - $string .= sprintf "\t%-${nameLen}s %s\n", $name, $text; + my $name_len = 12; + $name_len = int((length($name) + 5) / 6) * 6 + if length($name) > $name_len; + $string .= sprintf "\t%-${name_len}s %s\n", $name, $text; } return $string; } @@ -168,12 +168,12 @@ return if $method eq 'DESTROY'; if ($method =~ s/^_//) { - my $argValue = $self->args->{$method}; - return $argValue if defined $argValue; + my $arg_value = $self->args->{$method}; + return $arg_value if defined $arg_value; - my $alias = eventArgAliases($self->type)->{$method} || '*none*'; - $argValue = $self->args->{$alias}; - return $argValue if defined $argValue; + my $alias = event_arg_aliases($self->type)->{$method} || '*none*'; + $arg_value = $self->args->{$alias}; + return $arg_value if defined $arg_value; die "Unknown argument $method for event " . $self->name . "\n"; } @@ -195,16 +195,16 @@ my $module = new FVWM::Module(Mask => M_FOCUS_CHANGE); # auto-raise all windows - sub autoRaise ($$) { + sub auto_raise ($$) { my ($module, $event) = @_; $module->debug("Got " . $event->name . "\n"); $module->debug("\t$_: " . $event->args->{$_} . "\n") foreach sort keys %{$event->args}; $module->send("Raise", $event->_win_id); } - $module->addHandler(M_FOCUS_CHANGE, \&autoRaise); + $module->add_handler(M_FOCUS_CHANGE, \&auto_raise); - $module->eventLoop; + $module->event_loop; =head1 DESCRIPTION @@ -214,10 +214,10 @@ =over 4 -=item B I I +=item B I I Constructs event object of the given I. -I is either an array ref of event's arguments (every event type +I is either an array ref of event's arguments (every event type has its own argument list, see L) or a packed string of these arguments as received from the I pipe. @@ -225,31 +225,31 @@ Returns event's type (usually long integer). -=item B +=item B Returns an array ref of the event argument names. - print "$_ " foreach @{$event->argNames}); + print "$_ " foreach @{$event->arg_names}); Note that this array of names is statical for any given event type. -=item B +=item B Returns an array ref of the event argument types. - print "$_ " foreach @{$event->argTypes}); + print "$_ " foreach @{$event->arg_types}); Note that this array of types is statical for any given event type. -=item B +=item B Returns an array ref of the looped argument names of the event (or undef). -=item B +=item B Returns an array ref of the looped argument types of the event (or undef). -=item B +=item B Returns an array ref of the event argument values. In the previous versions of the library, all argument values were passed @@ -267,7 +267,7 @@ while (($name, $value) = each %{$event->args}) { print "\t$name: $value\n"; } -=item B +=item B For technical reasons there are 2 categories of fvwm events, regular and extended. This was done to enable more events. With introdution of the @@ -283,7 +283,7 @@ the same as the corresponding C/Perl constant. May be (and in fact is) used for debugging. -=item B [I] +=item B [I] Sets or returns a boolean value that indicates enabling or disabling of this event propagation. --- fvwm-2.5.27.ds.orig/perllib/FVWM/Module.pm.in +++ fvwm-2.5.27.ds/perllib/FVWM/Module.pm.in @@ -1,4 +1,4 @@ -# Copyright (c) 2003 Mikhael Goikhman +# Copyright (c) 2003-2009 Mikhael Goikhman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -38,34 +38,34 @@ @ISA = qw(Exporter); # The major version part indicates major API changes -$VERSION = '1.2'; +$VERSION = '2.0'; # Set the fvwm search directories (used for non fully qualified file names) $General::FileSystem::SAVE_FILE_DIR = $General::FileSystem::SAVE_FILE_DIR || - __PACKAGE__->userDataDir(); + __PACKAGE__->user_data_dir(); $General::FileSystem::LOAD_FILE_DIRS = $General::FileSystem::LOAD_FILE_DIRS || - [ __PACKAGE__->searchDirs() ]; + [ __PACKAGE__->search_dirs() ]; -sub internalDie ($$) { +sub internal_die ($$) { my $self = shift; my $msg = shift; $msg =~ s/([^\.!?])$/$1./; die $self->name . ": $msg Exiting.\n"; } -sub showError ($$) { +sub show_error ($$) { my $self = shift; my $msg = shift; print STDERR $self->name . ": $msg\n"; } -sub showMessage ($$) { +sub show_message ($$) { my $self = shift; my $msg = shift; print STDERR "[" . $self->name . "]: $msg\n"; } -sub showDebug ($$) { +sub show_debug ($$) { my $self = shift; my $msg = shift; print STDERR "[" . $self->name . "]: $msg\n"; @@ -76,17 +76,17 @@ my $msg = shift; my $level = shift; $level = 1 unless defined $level; - my $debugLevel = $self->{debug}; - $debugLevel = $ENV{FVWM_MODULE_DEBUG} if exists $ENV{FVWM_MODULE_DEBUG}; - return if $debugLevel < $level; + my $debug_level = $self->{debug}; + $debug_level = $ENV{FVWM_MODULE_DEBUG} if exists $ENV{FVWM_MODULE_DEBUG}; + return if $debug_level < $level; $msg =~ s/\n$//s; - $self->showDebug($msg); + $self->show_debug($msg); } -sub isEventExtended ($$) { +sub is_event_extended ($$) { my $self = shift; my $type = shift; - return $type & M_EXTENDED_MSG? 1: 0; + return $type & M_EXTENDED_MSG ? 1 : 0; } sub new ($@) { @@ -98,23 +98,23 @@ $name = $params{'Name'} || $name; my $mask = $params{'Mask'}; my $xmask = $params{'XMask'}; - my $syncMask = $params{'SyncMask'}; - my $syncXMask = $params{'SyncXMask'}; + my $sync_mask = $params{'SyncMask'}; + my $sync_xmask = $params{'SyncXMask'}; # initialize module from argv - my ($outFd, $inFd, $rcFile, $winId, $context); + my ($out_fd, $in_fd, $rc_file, $win_id, $context); if (@ARGV >= 5 && $ARGV[0] =~ /^\d+$/ && $ARGV[1] =~ /^\d+$/) { - $self->{isDummy} = 0; - ($outFd, $inFd, $rcFile, $winId, $context) = splice(@ARGV, 0, 5); + $self->{is_dummy} = 0; + ($out_fd, $in_fd, $rc_file, $win_id, $context) = splice(@ARGV, 0, 5); } else { warn "$name should be spawned by fvwm normally.\n"; warn "Activating a dummy command line mode for 30 minutes (no events).\n"; warn "----------------------------------------------------------------\n"; open(DUMMYOUT, '| cat >/dev/null'); open(DUMMYIN, 'sleep 1800 |'); - $self->{isDummy} = 1; - ($outFd, $inFd) = (fileno(DUMMYOUT), fileno(DUMMYIN)); - ($rcFile, $winId, $context) = ("none", 0, 0); + $self->{is_dummy} = 1; + ($out_fd, $in_fd) = (fileno(DUMMYOUT), fileno(DUMMYIN)); + ($rc_file, $win_id, $context) = ("none", 0, 0); } if (@ARGV && $params{'EnableAlias'} && $ARGV[0] =~ /^\w[\w\d\.\/-]*/) { @@ -128,8 +128,8 @@ } my @argv = @ARGV; - $self->{rcFile} = $rcFile; - $self->{winId} = hex $winId; + $self->{rc_file} = $rc_file; + $self->{win_id} = hex $win_id; $self->{context} = $context; $self->{argv} = [@argv]; @@ -137,38 +137,38 @@ autoflush STDOUT; autoflush STDERR; - $self->{ostream} = new IO::File ">&$outFd" - or die "$name: Can't write to file descriptor (&$outFd)\n"; - $self->{istream} = new IO::File "<&$inFd" - or die "$name: Can't read from file descriptor (&$inFd)\n"; + $self->{ostream} = new IO::File ">&$out_fd" + or die "$name: Can't write to file descriptor (&$out_fd)\n"; + $self->{istream} = new IO::File "<&$in_fd" + or die "$name: Can't read from file descriptor (&$in_fd)\n"; $self->{ostream}->autoflush(1); $self->{istream}->autoflush(1); $self->{disconnected} = 0; $self->{debug} = $params{'Debug'} || 0; $self->{debug} = ${$self->{debug}} if ref($self->{debug}) eq 'SCALAR'; - $self->{lastPacket} = []; + $self->{last_packet} = []; $self->{handlers} = {}; - $self->{shouldSendUnlock} = 0; - $self->{shouldSendReady} = 1; - $self->{addMask} = 0; - $self->{addXMask} = 0; - $self->{maskWasSet} = defined $mask; - $self->{xmaskWasSet} = defined $xmask; - - $self->{heldCommandArgs} = []; - $self->{syntheticEvents} = []; - $self->{usedTrackerClasses} = {}; + $self->{should_send_unlock} = 0; + $self->{should_send_ready} = 1; + $self->{add_mask} = 0; + $self->{add_xmask} = 0; + $self->{mask_was_set} = defined $mask; + $self->{xmask_was_set} = defined $xmask; + + $self->{held_command_args} = []; + $self->{synthetic_events} = []; + $self->{used_tracker_classes} = {}; $self->{trackers} = {}; # bless here, so die above does not run DESTROY bless $self, $class; $self->name($name); - $self->mask($mask || 0, $self->{maskWasSet}); - $self->xmask($xmask, $self->{xmaskWasSet}) if $xmask; - $self->syncMask($syncMask || 0); - $self->syncXMask($syncXMask) if $syncXMask; - $self->resetHandlers; + $self->mask($mask || 0, $self->{mask_was_set}); + $self->xmask($xmask, $self->{xmask_was_set}) if $xmask; + $self->sync_mask($sync_mask || 0); + $self->sync_xmask($sync_xmask) if $sync_xmask; + $self->reset_handlers; return $self; } @@ -179,7 +179,7 @@ return if $self->{disconnected}; $self->{disconnected} = 1; - $self->invokeHandler(new FVWM::Event(ON_EXIT)); + $self->invoke_handler(new FVWM::Event(ON_EXIT)); if (defined $self->{ostream} && $self->{ostream}->opened) { # TODO: should wait until fvwm actually gets it @@ -196,9 +196,9 @@ $self->disconnect; } -sub isDummy ($) { +sub is_dummy ($) { my $self = shift; - return $self->{isDummy}; + return $self->{is_dummy}; } sub name ($;$) { @@ -215,14 +215,14 @@ $explicit = 1 unless defined $explicit; if (defined $mask) { - $self->internalDie("mask() can't get extended mask, use xmask()") - if $self->isEventExtended($mask); - my $oldMask = $self->{mask}; - $self->sendMask($mask, $self->{addMask}) - unless defined $oldMask && $oldMask == $mask; + $self->internal_die("mask() can't get extended mask, use xmask()") + if $self->is_event_extended($mask); + my $old_mask = $self->{mask}; + $self->send_mask($mask, $self->{add_mask}) + unless defined $old_mask && $old_mask == $mask; $self->{mask} = $mask; - $self->{maskWasSet} = $explicit; - return $oldMask; + $self->{mask_was_set} = $explicit; + return $old_mask; } return $self->{mask} || 0; } @@ -235,56 +235,56 @@ if (defined $mask) { $mask &= ~M_EXTENDED_MSG; - my $oldMask = $self->{xmask}; - $self->sendMask($mask | M_EXTENDED_MSG, $self->{addXMask}) - unless defined $oldMask && $oldMask == $mask; + my $old_mask = $self->{xmask}; + $self->send_mask($mask | M_EXTENDED_MSG, $self->{add_xmask}) + unless defined $old_mask && $old_mask == $mask; $self->{xmask} = $mask; - $self->{xmaskWasSet} = $explicit; - return $oldMask; + $self->{xmask_was_set} = $explicit; + return $old_mask; } return $self->{xmask} || 0; } -sub isInMask ($$) { +sub is_in_mask ($$) { my $self = shift; my $type = shift; - my $mask = ($type & M_EXTENDED_MSG)? $self->{xmask}: $self->{mask}; + my $mask = ($type & M_EXTENDED_MSG) ? $self->{xmask} : $self->{mask}; return $type & ($mask || 0); } -sub syncMask ($;$) { +sub sync_mask ($;$) { my $self = shift; my $mask = shift; if (defined $mask) { - $self->internalDie("syncMask() can't get extended mask, use syncXMask()") - if $self->isEventExtended($mask); - my $oldMask = $self->{syncMask}; + $self->internal_die("sync_mask() can't get extended mask, use sync_xmask()") + if $self->is_event_extended($mask); + my $old_mask = $self->{sync_mask}; $self->send("SET_SYNC_MASK $mask") - unless defined $oldMask && $oldMask == $mask; - $self->{syncMask} = $mask; - return $oldMask; + unless defined $old_mask && $old_mask == $mask; + $self->{sync_mask} = $mask; + return $old_mask; } - return $self->{syncMask} || 0; + return $self->{sync_mask} || 0; } -sub syncXMask ($;$) { +sub sync_xmask ($;$) { my $self = shift; my $mask = shift; if (defined $mask) { $mask &= ~M_EXTENDED_MSG; - my $oldMask = $self->{syncXMask}; + my $old_mask = $self->{sync_xmask}; $self->send("SET_SYNC_MASK " . ($mask | M_EXTENDED_MSG)) - unless defined $oldMask && $oldMask == $mask; - $self->{syncXMask} = $mask; - return $oldMask; + unless defined $old_mask && $old_mask == $mask; + $self->{sync_xmask} = $mask; + return $old_mask; } - return $self->{syncXMask} || 0; + return $self->{sync_xmask} || 0; } -sub isInSyncMask ($$) { +sub is_in_sync_mask ($$) { my $self = shift; my $type = shift; - my $mask = ($type & M_EXTENDED_MSG)? $self->{syncXMask}: $self->{syncMask}; + my $mask = ($type & M_EXTENDED_MSG) ? $self->{sync_xmask} : $self->{sync_mask}; return $type & ($mask || 0); } @@ -294,7 +294,7 @@ return "@VERSION@"; } -sub versionInfo ($) { +sub version_info ($) { my $self = shift; return "@VERSIONINFO@"; } @@ -304,7 +304,7 @@ return @{$self->{argv}}; } -sub resetHandlers ($) { +sub reset_handlers ($) { my $self = shift; $self->{handlers}->{regular} = {}; @@ -312,41 +312,41 @@ $self->{handlers}->{special} = {}; } -sub getHandlerCategory ($$) { +sub get_handler_category ($$) { my $self = shift; my $type = shift; return "special" if $type =~ /e/i; - return "extended" if $self->isEventExtended($type); + return "extended" if $self->is_event_extended($type); return "regular"; } -sub postponeSend ($@) { +sub postpone_send ($@) { my $self = shift; - push @{$self->{heldCommandArgs}}, [ @_ ]; + push @{$self->{held_command_args}}, [ @_ ]; } -# params: text, [winId], [continue=0/1] +# params: text, [win_id], [continue=0/1] sub send ($$;$$) { my $self = shift; my $text = shift; - my $winId = shift || 0; + my $win_id = shift || 0; my $continue = shift; $continue = 1 unless defined $continue; - $self->internalDie("send requires at least text param") + $self->internal_die("send requires at least text param") unless defined $text; my @lines = split(/\n/s, $text); - my $lastLine = ""; + my $last_line = ""; for my $line (@lines) { # support continuation lines - $line = "$lastLine$line" if $lastLine ne ""; + $line = "$last_line$line" if $last_line ne ""; if ($line =~ /^(.*)\\$/) { - $lastLine = $1; + $last_line = $1; next; } else { - $lastLine = ""; + $last_line = ""; } next if $line =~ /^\s*$/; @@ -360,32 +360,40 @@ $self->debug("Failed send [$line]\n", 1); }; $self->{ostream}->print( - pack("l!l!a${len}l!", $winId, $len, $line, $continue) + pack("l!l!a${len}l!", $win_id, $len, $line, $continue) ); } return $self; } -sub sendReady ($) { +sub send_ready ($) { my $self = shift; - $self->send(RESPONSE_READY) if $self->{shouldSendReady}; - $self->{shouldSendReady} = 0; + $self->send(RESPONSE_READY) if $self->{should_send_ready}; + $self->{should_send_ready} = 0; return $self; } -sub sendUnlock ($) { +sub send_unlock ($) { my $self = shift; - $self->send(RESPONSE_UNLOCK) if $self->{shouldSendUnlock}; - $self->{shouldSendUnlock} = 0; + $self->send(RESPONSE_UNLOCK) if $self->{should_send_unlock}; + $self->{should_send_unlock} = 0; return $self; } -sub sendMask ($$;$) { +sub send_mask ($$;$) { my $self = shift; my $mask = shift; - my $addMask = shift || 0; + my $add_mask = shift || 0; - $self->send("SET_MASK " . ($mask | $addMask)); + $self->send("SET_MASK " . ($mask | $add_mask)); +} + +sub request_reply ($$) { + my $self = shift; + my $text = shift; + my $win_id = shift; + + $self->send("Send_Reply $text", $win_id); } sub terminate ($;$) { @@ -395,20 +403,20 @@ die "!next"; } -sub waitPacket ($) { +sub wait_packet ($) { } -sub readPacket ($) { +sub read_packet ($) { my $self = shift; - goto RETURN_PACKET if @{$self->{syntheticEvents}}; + goto RETURN_PACKET if @{$self->{synthetic_events}}; - $self->{lastPacket} = []; + $self->{last_packet} = []; my $header = ""; my $packet = ""; - $self->waitPacket; + $self->wait_packet; # read a packet's header first, sizeof(int) * HEADER_SIZE bytes long my $got; @@ -420,13 +428,13 @@ if ($got != (INTSIZE * HEADER_SIZE)) { # module killed or other read error - $self->debug($got? "read packet error": "connection closed", 3); + $self->debug($got ? "read packet error" : "connection closed", 3); return undef; } my ($magic, $type, $len, $timestamp) = unpack(sprintf("L!%d", HEADER_SIZE), $header); - $self->internalDie("Bad magic number $magic in packet") + $self->internal_die("Bad magic number $magic in packet") unless $magic == START_FLAG; # $type should not be anything other than a 32-bit number @@ -443,32 +451,32 @@ while ($off < $len) { $got = sysread($self->{istream}, $packet, $len, $off); if (!defined $got) { - $self->internalDie("sysread error: $!"); + $self->internal_die("sysread error: $!"); } $off += $got; } - $self->internalDie("Got packet len $off while expecting $len") + $self->internal_die("Got packet len $off while expecting $len") if $off != $len; } RETURN_PACKET: - ($type, $packet) = @{shift @{$self->{syntheticEvents}}} - if @{$self->{syntheticEvents}}; - $self->{lastPacket} = [$type, $packet]; + ($type, $packet) = @{shift @{$self->{synthetic_events}}} + if @{$self->{synthetic_events}}; + $self->{last_packet} = [$type, $packet]; return ($type, $packet); } -sub invokeHandler ($$) { +sub invoke_handler ($$) { my $self = shift; my $event = shift; my $type = $event->type; - my $category = $self->getHandlerCategory($type); + my $category = $self->get_handler_category($type); my @masks = sort { $a <=> $b } keys %{$self->{handlers}->{$category}}; foreach my $mask (@masks) { if ($type eq $mask || $type & $mask) { foreach my $handler (@{$self->{handlers}->{$category}->{$mask}}) { - last unless $event->propagationAllowed; + last unless $event->propagation_allowed; next unless defined $handler; # skip deleted ones eval { &$handler($self, $event); }; @@ -484,169 +492,169 @@ return 1; } -sub processPacket ($;$$) { +sub process_packet ($;$$) { my $self = shift; my ($type, $packet) = @_; - ($type, $packet) = @{$self->{lastPacket}} unless defined $packet; + ($type, $packet) = @{$self->{last_packet}} unless defined $packet; return undef unless defined $packet; my $event = eval { new FVWM::Event($type, $packet); }; - $self->internalDie($@ || "Internal error") unless defined $event; + $self->internal_die($@ || "Internal error") unless defined $event; if ($self->{debug}) { my $msg = "got " . $event->name; - $msg .= " [" . $event->argValues->[-1] . "]" - if @{$event->argTypes} && $event->argTypes->[-1] == FVWM::EventNames::string(); + $msg .= " [" . $event->arg_values->[-1] . "]" + if @{$event->arg_types} && $event->arg_types->[-1] == FVWM::EventNames::string(); $self->debug($msg, 2); } - $self->{shouldSendUnlock} = 1 if $self->isInSyncMask($type); + $self->{should_send_unlock} = 1 if $self->is_in_sync_mask($type); - my $continue = $self->invokeHandler($event); + my $continue = $self->invoke_handler($event); - $self->sendUnlock if $self->{shouldSendUnlock}; + $self->send_unlock if $self->{should_send_unlock}; return $continue; } -sub emulateEvent ($$$) { +sub emulate_event ($$$) { my $self = shift; my ($type, $packet) = @_; - if ($self->{isInEventLoop}) { - $self->invokeHandler(new FVWM::Event($type, $packet)); + if ($self->{is_in_event_loop}) { + $self->invoke_handler(new FVWM::Event($type, $packet)); return; } - push @{$self->{syntheticEvents}}, [$type, $packet]; + push @{$self->{synthetic_events}}, [$type, $packet]; } -sub eventLoopPrepared ($@) { +sub event_loop_prepared ($@) { my $self = shift; - my $tracking = shift()? 1: 0; + my $tracking = shift() ? 1 : 0; - if (!$self->{isInEventLoop}) { - $self->sendReady unless $tracking; + if (!$self->{is_in_event_loop}) { + $self->send_ready unless $tracking; $self->debug("entered event loop", 3 + $tracking); - $self->{isInEventLoop} = 1; + $self->{is_in_event_loop} = 1; } # update module masks to handle trackers if needed - my $addMask = 0; - my $addXMask = 0; + my $add_mask = 0; + my $add_xmask = 0; foreach (values %{$self->{trackers}}) { my ($mask, $xmask) = $_->masks; - $addMask |= $mask; - $addXMask |= $xmask; + $add_mask |= $mask; + $add_xmask |= $xmask; } - $self->sendMask($self->mask, $self->{addMask} = $addMask) - if $addMask != $self->{addMask}; - $self->sendMask($self->xmask | M_EXTENDED_MSG, $self->{addXMask} = $addXMask) - if $addXMask != $self->{addXMask}; + $self->send_mask($self->mask, $self->{add_mask} = $add_mask) + if $add_mask != $self->{add_mask}; + $self->send_mask($self->xmask | M_EXTENDED_MSG, $self->{add_xmask} = $add_xmask) + if $add_xmask != $self->{add_xmask}; # execute postponed commands if any - $self->send(@{shift @{$self->{heldCommandArgs}}}) - while @{$self->{heldCommandArgs}}; + $self->send(@{shift @{$self->{held_command_args}}}) + while @{$self->{held_command_args}}; # fire emulated events if any - $self->processPacket(@{shift @{$self->{syntheticEvents}}}) - while !$tracking && @{$self->{syntheticEvents}}; + $self->process_packet(@{shift @{$self->{synthetic_events}}}) + while !$tracking && @{$self->{synthetic_events}}; } -sub eventLoopFinished ($@) { +sub event_loop_finished ($@) { my $self = shift; - my $tracking = shift()? 1: 0; + my $tracking = shift() ? 1 : 0; $self->debug("exited event loop", 3 + $tracking); unless ($tracking) { foreach my $tracker (values %{$self->{trackers}}) { - $tracker->toBeDisconnected; + $tracker->to_be_disconnected; } $self->disconnect; } - $self->{isInEventLoop} = 0; + $self->{is_in_event_loop} = 0; } -sub eventLoop ($@) { +sub event_loop ($@) { my $self = shift; while (1) { - $self->eventLoopPrepared(@_); + $self->event_loop_prepared(@_); # catch exceptions during read, for example from alarm() handler, # but don't catch errors (or die) in event handlers - $self->processPacket(eval { $self->readPacket }) || last; + $self->process_packet(eval { $self->read_packet }) || last; } - $self->eventLoopFinished(@_); + $self->event_loop_finished(@_); } sub track ($$;$@) { my $self = shift; - my $params = ref($_[0]) eq 'HASH'? shift(): {}; - my $trackerType = shift; + my $params = ref($_[0]) eq 'HASH' ? shift() : {}; + my $tracker_type = shift; - my $trackerClass = $trackerType =~ /::/? - $trackerType: "FVWM::Tracker::$trackerType"; + my $tracker_class = $tracker_type =~ /::/ + ? $tracker_type : "FVWM::Tracker::$tracker_type"; # load a tracker class if not yet - unless (defined $self->{usedTrackerClasses}->{$trackerType}) { - eval "use $trackerClass;"; die $@ if $@; - $self->{usedTrackerClasses}->{$trackerType} = 1; + unless (defined $self->{used_tracker_classes}->{$tracker_class}) { + eval "use $tracker_class;"; die $@ if $@; + $self->{used_tracker_classes}->{$tracker_class} = 1; } - my $tracker = !$params->{NoReuse} && $self->{trackers}->{$trackerType} - || $trackerClass->new($self, @_); + my $tracker = !$params->{NoReuse} && $self->{trackers}->{$tracker_type} + || $tracker_class->new($self, @_); if ($params->{NoReuse}) { - $trackerType .= "+" while exists $self->{trackers}->{$trackerType}; + $tracker_type .= "+" while exists $self->{trackers}->{$tracker_type}; } - $self->{trackers}->{$trackerType} = $tracker; + $self->{trackers}->{$tracker_type} = $tracker; $tracker->start unless $params->{NoStart}; return $tracker; } -sub addHandler ($$$;$) { +sub add_handler ($$$;$) { my $self = shift; my $type = shift; my $handler = shift; - my $isTracking = shift || 0; + my $is_tracking = shift || 0; - $self->internalDie("addHandler: no handler type") unless defined $type; - $self->internalDie("addHandler: no handler code") unless ref($handler) eq 'CODE'; + $self->internal_die("add_handler: no handler type") unless defined $type; + $self->internal_die("add_handler: no handler code") unless ref($handler) eq 'CODE'; - my $category = $self->getHandlerCategory($type); + my $category = $self->get_handler_category($type); $self->{handlers}->{$category}->{$type} = [] unless exists $self->{handlers}->{$category}->{$type}; push @{$self->{handlers}->{$category}->{$type}}, $handler; my $index = @{$self->{handlers}->{$category}->{$type}} - 1; - unless ($isTracking) { + unless ($is_tracking) { $self->mask($self->mask | $type, 0) - if !$self->{maskWasSet} && $category eq "regular"; + if !$self->{mask_was_set} && $category eq "regular"; $self->xmask($self->xmask | $type, 0) - if !$self->{xmaskWasSet} && $category eq "extended"; + if !$self->{xmask_was_set} && $category eq "extended"; } return [$type, $index]; } -sub deleteHandler ($$) { +sub delete_handler ($$) { my $self = shift; my $id = shift; return 0 unless ref($id) eq 'ARRAY' && @$id == 2; my ($type, $index) = @$id; - my $category = $self->getHandlerCategory($type); + my $category = $self->get_handler_category($type); return 0 unless defined $self->{handlers}->{$category}->{$type}->[$index]; $self->{handlers}->{$category}->{$type}->[$index] = undef; return 1; } -sub addDefaultErrorHandler ($) { +sub add_default_error_handler ($) { my $self = shift; - $self->addHandler(M_ERROR, sub { + $self->add_handler(M_ERROR, sub { my ($self, $type, @args) = @_; my $error = $args[3]; print STDERR "[", $self->name, "]: got fvwm error: $error\n"; @@ -654,17 +662,37 @@ }); } -sub userDataDir ($) { +sub user_data_dir ($) { return $ENV{FVWM_USERDIR} || (($ENV{HOME} || "") . "/.fvwm"); } -sub siteDataDir ($) { +sub site_data_dir ($) { return "@FVWM_DATADIR@"; } -sub searchDirs ($) { +sub search_dirs ($) { my $this = shift; - return ($this->userDataDir, $this->siteDataDir); + return ($this->user_data_dir, $this->site_data_dir); +} + +# support old API, like addHandler, dispatch to add_handler +sub AUTOLOAD ($;@) { + my $self = shift; + my @params = @_; + + my $autoload_method = $AUTOLOAD; + my $method = $autoload_method; + + # remove the package name + $method =~ s/.*://g; + + $method =~ s/XMask/Xmask/; + $method =~ s/([a-z])([A-Z])/${1}_\L$2/g; + + die "No method $method in $self as guessed from $autoload_method" + unless $self->can($method); + + $self->$method(@params); } 1; @@ -685,18 +713,18 @@ $module->send("Beep"); # auto-raise all windows - sub autoRaise { $_[0]->send("Raise", $_[1]->_win_id) }; - $module->addHandler(M_FOCUS_CHANGE, \&autoRaise); + sub auto_raise { $_[0]->send("Raise", $_[1]->_win_id) }; + $module->add_handler(M_FOCUS_CHANGE, \&auto_raise); # terminate itself after 5 minutes my $scheduler = $module->track('Scheduler'); $scheduler->schedule(5 * 60, sub { $module->terminate; }); - # print the current desk number ($pageTracker is auto updated) - my $pageTracker = $module->track("PageInfo"); - $module->showMessage("Desk: " . $pageTracker->data->{desk_n}); + # print the current desk number ($page_tracker is auto updated) + my $page_tracker = $module->track("PageInfo"); + $module->show_message("Desk: " . $page_tracker->data->{desk_n}); - $module->eventLoop; + $module->event_loop; =head1 DESCRIPTION @@ -712,19 +740,19 @@ that only send commands back when something happens. A typical fvwm module has an initialization part including setting event -handlers using B methods and entering an event loop using -B method. Most of the work is done in the event handlers although +handlers using B methods and entering an event loop using +B method. Most of the work is done in the event handlers although a module may define other execution ways, for example using C<$SIG{ALRM}>. -An fvwm module receives 3 values from I: I - the file this +An fvwm module receives 3 values from I: I - the file this module was called from or "none" if the module is called as a command from another module or from a binding/function (this value is not really useful), -I - the window context of this module if it is called from window +I - the window context of this module if it is called from window decoration bindings or window menu (the value is integer, 0 if there is no window context), and finally I that indicates the place this module was called from, like menu or window title (see the fvwm documentation). All these values may be accessed as properties of the module object, -like C<$module-E{winId}>. +like C<$module-E{win_id}>. =head1 METHODS @@ -732,52 +760,53 @@ B, B, -B, +B, B, B, B, -B, -B, -B, -B, +B, +B, +B, +B, +B, B, -B, -B, -B, -B, +B, +B, +B, +B, B, -B, -B, -B, -B. +B, +B, +B, +B. The following methods are called from other methods above, but may be useful in other situations as well: -B, +B, B, B, B, -B, -B, -B, -B, +B, +B, +B, +B, B, -B, -B, -B, -B, -B. +B, +B, +B, +B, +B. These methods deal with a received packet (event): -B +B These methods deal with configuration directories: -B, -B, -B +B, +B, +B =over 4 @@ -824,7 +853,7 @@ Returns fvwm version string I. -=item B +=item B Returns fvwm version info string, like " (from cvs)" or " (snap-YYYYMMDD)". This string is usually empty for the final version. @@ -857,10 +886,10 @@ (a subclass of B) has its own manual page, contact it for the tracker details and usage. -=item B +=item B The main event loop. A module should define some event handlers using -B before entering the event loop. When the event happens all +B before entering the event loop. When the event happens all event handlers registered on this event are called, then a module returns to the event loop awaiting for new events forever. @@ -877,25 +906,31 @@ available after this method is finished. If you need a communication before the module exits, define an I event handler. -=item B +=item B -This is automatically called (if needed) when a module enters B, +This is automatically called (if needed) when a module enters B, but sometimes you may want to tell I that the module is fully ready earlier. This only makes sence if the module was run using B command, in this case I gets locked until the module sends the "ready" notification. -=item B +=item B When an event was configured to be sent to a module synchronously using I and I, I gets locked until the module sends the "unlock" notification. This is automatically sent (if needed) when a handler is finished, but sometimes a handler should release I earlier. -=item B I [I] [I] +=item B I [I] + +A module may request I to send the same text (but possibly +interpolated) back to it using MX_REPLY event. This method sends special +command I. + +=item B I [I] [I] The same like B, but the actual command sending is postponed -until before the module enters the reading-from-fvwm phase in B. +until before the module enters the reading-from-fvwm phase in B. =item B [I] @@ -903,11 +938,11 @@ the entire event loop and to terminate only an execution of the current handler if I is set. -=item B +=item B This deletes all event handlers without exception. -=item B I +=item B I Defines a handler (that is a I subroutine) for the given I event (or several events). Usually the event type is one of the fvwm I or @@ -936,18 +971,18 @@ If several event handlers are added for the same event type, they are executed in the added order. To forbid the further propagation of the -same event, an event handler may call C<$event-EpropagationAllowed(0)>. +same event, an event handler may call C<$event-Epropagation_allowed(0)>. -The return value from B is an identifier the only purpose of -which is to be passed to B in case the newly defined handler +The return value from B is an identifier the only purpose of +which is to be passed to B in case the newly defined handler should be deleted at some point. -=item B I +=item B I Removes the handler specified by I. The return value is 1 if the handler is found and deleted, 0 otherwise. -=item B +=item B This adds the default handler for I event. This class simply prints an error message to the standard error stream, but subclasses may define @@ -962,10 +997,10 @@ debugging output of positive levels is shown. This module uses B internally (with I 2) to dump all -incoming and outgoing communication data in B and B. +incoming and outgoing communication data in B and B. Apparently this output is only seen if I is set to 2 or greater. -=item B I +=item B I Writes I to the error stream (stderr). It is supposed that the argument has no traling end of line. May be used to signal non fatal error. @@ -973,7 +1008,7 @@ Subclasses may overwrite this method and, for example, show all error messages in separate windows or in the common error window. -=item B I +=item B I Writes I to the message stream (stderr). It is supposed that the argument has no traling end of line. May be used to show a named output. @@ -981,7 +1016,7 @@ Subclasses may overwrite this method and, for example, show all messages in separate windows or in the common message window. -=item B I +=item B I Unconditionally writes I to the debug stream (stderr). It is supposed that the argument has no traling end of line. Used in B to actually @@ -990,19 +1025,19 @@ Subclasses may overwrite this method and, for example, show all debugging messages in separate windows or in the common debug window. -=item B +=item B Usually a module should be executed by I only. But to help creating GUI applications, the dummy mode is supported when the module is started from the command line. No events are received in this case, but with some effort they may be emulated: - $module->emulateEvent(M_NEW_DESK, [ 2 ]) if $module->isDummy; + $module->emulate_event(M_NEW_DESK, [ 2 ]) if $module->is_dummy; -=item B I +=item B I This may be used to end the module with the corresponding I. -For a clean module exit use B and B instead. +For a clean module exit use B and B instead. =item B [I] @@ -1025,17 +1060,17 @@ never set them explicitly (either in constructor or using these methods). The I parameter should not be usually used, it defaults to 1. If you set it to 0 then the module is informed to continue to automatically -update masks on the following B calls even after the current +update masks on the following B calls even after the current mask setting. -=item B I +=item B I Returns true if the module mask matches the given I. Good for both regular and extended event types as long as they are queried separately. -=item B [I] -=item B [I] +=item B [I] +=item B [I] The same as B and B, but sets/returns the synchronization mask of the module. @@ -1043,7 +1078,7 @@ The module is synchronized with I on all packets matching these 2 module synchronization masks (regular and extended). -=item B I +=item B I Returns true if the module synchronization mask matches the given I. Good for both regular and extended event types as long as they are queried @@ -1052,60 +1087,60 @@ =item B This method invokes I handlers if any and closes communication. -It is called automatically from B before finishing. +It is called automatically from B before finishing. It is safe to call this method more than once. This method may be called from signal handlers before Iing for the proper shutdown. -=item B I +=item B I Returns one of 3 string ids depending on the event handler I that has the same meaning as the corresponding packet type ("regular" or "extended") with an addition of "special" category for I handlers. -=item B +=item B This is a blocking method that waits until there is a packet on the communication end from I. Then it returns a list of 2 values, packet type and packet data (unpacked array of arguments). -=item B I +=item B I Dispatches the apropos event handlers with the event data. This method is called automatically, so you usually should not worry about it. -=item B [I] +=item B [I] This method constructs the event object from the packet data and calls -B with it. Prints debug info if requested. Finally calls -B if needed. +B with it. Prints debug info if requested. Finally calls +B if needed. You should not really worry about this method, it is called automatically from the event loop. -=item B I +=item B I -This method emulates the event as returned by B. The given event +This method emulates the event as returned by B. The given event is processed immediately if in the event loop, or just before the real -B otherwise. +B otherwise. -The parameters are the same as in B and the same as in +The parameters are the same as in B and the same as in L constructor. -=item B +=item B -Called from B every time before reading the packet for new data. -Subclasses should pass this method the same arguments that B +Called from B every time before reading the packet for new data. +Subclasses should pass this method the same arguments that B received for a possible future use. -=item B +=item B -Called from B just before the return. -Subclasses should pass this method the same arguments that B +Called from B just before the return. +Subclasses should pass this method the same arguments that B received for a possible future use. -=item B I +=item B I For technical reasons there are 2 categories of fvwm events, regular and extended. This is done to enable more events. With introdution of the @@ -1115,16 +1150,16 @@ together. This method returns 1 or 0 depending on whether the event I is extended or not. -=item B +=item B Returns the user data directory, usually ~/.fvwm or set by $FVWM_USERDIR. -=item B +=item B Returns the system-wide data directory, the one configured when fvwm is installed. It is also returned by `fvwm-config --fvwm-datadir`. -=item B +=item B It is a good practice for a module to search for the given configuration in one of 2 data directories, the user one and the system-wide. This method --- fvwm-2.5.27.ds.orig/perllib/FVWM/create-commands +++ fvwm-2.5.27.ds/perllib/FVWM/create-commands @@ -7,12 +7,12 @@ chdir($FindBin::Bin) || die "Can't chmod $FindBin::Bin: $!\n"; -my $functableSrc = "../../fvwm/functable.c"; -my $contentRef = loadFile($functableSrc); -die "No commands found, so Commands.pm is not generated.\n" unless $contentRef; +my $functable_src = "../../fvwm/functable.c"; +my $content_ref = load_file($functable_src); +die "No commands found, so Commands.pm is not generated.\n" unless $content_ref; -my $commandEntriesCode = ""; -foreach my $entry ($$contentRef =~ +my $command_entries_code = ""; +foreach my $entry ($$content_ref =~ m{(?:/\* )?CMD_ENT\(\s*(?:"|PRE_).*?\),(?: \*/)?.*?/\* .*?- .*? \*/}sg) { my ($name, $flags, $cursor, $name2, $descr) = $entry =~ m{ @@ -27,7 +27,7 @@ $name = $name2 if $name2; my $window = $flags =~ FUNC_NEEDS_WINDOW? 1: 0; $cursor = "" if $cursor eq "0"; - $commandEntriesCode .= + $command_entries_code .= "\t{\n\t\tname => '$name',\n\t\tcursor => '$cursor',\n" . "\t\twindow => $window,\n\t\tdescr => q{$descr},\n\t},\n"; } @@ -47,7 +47,7 @@ \$TIME = $time; \@LIST = ( -$commandEntriesCode); +$command_entries_code); 1; @@ -113,7 +113,9 @@ Example: # get command names only - \@commandNames = map { \$_->{name} } \@FVWM::Commands::LIST; + \@command_names = map { \$_->{name} } \@FVWM::Commands::LIST; + +=back =head1 AUTHOR @@ -123,14 +125,12 @@ For more information about the commands themselves, see fvwm(1). -=back - =cut ENDOUTPUT # --------------------------------- print "Creating Commands.pm\n"; -saveFile("Commands.pm", \$output); +save_file("Commands.pm", \$output); # --------------------------------- print "Testing Commands.pm\n"; @@ -149,4 +149,4 @@ # --------------------------------- print "Creating ../../docs/COMMANDS\n"; -saveFile("../../docs/COMMANDS", \$cmds); +save_file("../../docs/COMMANDS", \$cmds); --- fvwm-2.5.27.ds.orig/perllib/FVWM/Commands.pm +++ fvwm-2.5.27.ds/perllib/FVWM/Commands.pm @@ -4,8 +4,8 @@ use vars qw($VERS $TIME @LIST); -$VERS = '2.5.22 (from cvs)'; -$TIME = 1186321509; +$VERS = '2.5.28 (from cvs)'; +$TIME = 1237313570; @LIST = ( { @@ -1184,7 +1184,9 @@ Example: # get command names only - @commandNames = map { $_->{name} } @FVWM::Commands::LIST; + @command_names = map { $_->{name} } @FVWM::Commands::LIST; + +=back =head1 AUTHOR @@ -1194,6 +1196,4 @@ For more information about the commands themselves, see fvwm(1). -=back - =cut --- fvwm-2.5.27.ds.orig/perllib/FVWM/Makefile.am +++ fvwm-2.5.27.ds/perllib/FVWM/Makefile.am @@ -18,3 +18,5 @@ _Commands.pm: Makefile $(top_srcdir)/fvwm/functable.c cd $(top_builddir)/perllib/FVWM && \ (fvwm_libdir=$(top_builddir)/libs ./create-commands) + +regenerate: _Constants.pm _Commands.pm --- fvwm-2.5.27.ds.orig/perllib/FVWM/Constants.pm +++ fvwm-2.5.27.ds/perllib/FVWM/Constants.pm @@ -41,11 +41,12 @@ use constant MX_ENTER_WINDOW => ((1<<1)|M_EXTENDED_MSG); use constant MX_LEAVE_WINDOW => ((1<<2)|M_EXTENDED_MSG); use constant MX_PROPERTY_CHANGE => ((1<<3)|M_EXTENDED_MSG); +use constant MX_REPLY => ((1<<4)|M_EXTENDED_MSG); use constant MX_PROPERTY_CHANGE_NONE => 0; use constant MX_PROPERTY_CHANGE_BACKGROUND => 1; use constant MX_PROPERTY_CHANGE_SWALLOW => 2; use constant MAX_MSG_MASK => 0x7fffffff; -use constant MAX_XMSG_MASK => 0x0000000f; +use constant MAX_XMSG_MASK => 0x0000001f; use constant HEADER_SIZE => 4; use constant START_FLAG => 0xffffffff; use constant RESPONSE_READY => "NOP FINISHED STARTUP"; @@ -89,6 +90,7 @@ MX_ENTER_WINDOW MX_LEAVE_WINDOW MX_PROPERTY_CHANGE + MX_REPLY MX_PROPERTY_CHANGE_NONE MX_PROPERTY_CHANGE_BACKGROUND MX_PROPERTY_CHANGE_SWALLOW @@ -162,6 +164,7 @@ MX_ENTER_WINDOW MX_LEAVE_WINDOW MX_PROPERTY_CHANGE + MX_REPLY MX_PROPERTY_CHANGE_NONE MX_PROPERTY_CHANGE_BACKGROUND MX_PROPERTY_CHANGE_SWALLOW --- fvwm-2.5.27.ds.orig/perllib/FVWM/EventNames.pm +++ fvwm-2.5.27.ds/perllib/FVWM/EventNames.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2003, Mikhael Goikhman +# Copyright (c) 2003-2009, Mikhael Goikhman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -441,6 +441,16 @@ }, }, + &MX_REPLY => { + format => "L!3a*", + fields => [ + win_id => window, + frame_id => window, + ptr => number, + text => string, + ], + }, + "faked" => { format => "", fields => [ @@ -456,13 +466,13 @@ use vars qw(@EXPORT @ISA $EVENT_TYPES $EVENT_NAMES $EVENT_TYPE_NAMES); @EXPORT = ( @FVWM::Constants::EXPORT, - qw(eventName eventArgNames eventArgTypes eventArgValues eventArgs), - qw(eventLoopArgNames eventLoopArgTypes), - qw(eventArgAliases allEventNames allEventTypes) + qw(event_name event_arg_names event_arg_types event_arg_values event_args), + qw(event_loop_arg_names event_loop_arg_types), + qw(event_arg_aliases all_event_names all_event_types) ); @ISA = qw(Exporter); -sub allEventTypeNames () { +sub all_event_type_names () { if (!defined $EVENT_TYPE_NAMES) { $EVENT_TYPES = []; $EVENT_NAMES = []; @@ -482,177 +492,177 @@ return $EVENT_TYPE_NAMES; } -sub allEventNames () { - allEventTypeNames(); +sub all_event_names () { + all_event_type_names(); return wantarray? @$EVENT_NAMES: $EVENT_NAMES; } -sub allEventTypes () { - allEventTypeNames(); +sub all_event_types () { + all_event_type_names(); return wantarray? @$EVENT_TYPES: $EVENT_TYPES; } -sub eventName ($) { +sub event_name ($) { my $type = shift; - return allEventTypeNames()->{$type}; + return all_event_type_names()->{$type}; } -sub eventTypeToBinary ($) { +sub event_type_to_binary ($) { my $type = shift || "no-event-type"; return $type unless $type =~ /^\d+$/; return sprintf("%b", $type); } -sub eventInfo ($) { +sub event_info ($) { my $type = shift; unless (defined $EVENTS_INFO->{$type}) { die "FVWM::EventNames: Unknown event type (" . - eventTypeToBinary($type) . ")\n"; + event_type_to_binary($type) . ")\n"; } return $EVENTS_INFO->{$type}; } -sub calculateInternals ($) { +sub calculate_internals ($) { my $type = shift; - my $eventInfo = eventInfo($type); - $eventInfo->{names} = []; - $eventInfo->{types} = []; + my $event_info = event_info($type); + $event_info->{names} = []; + $event_info->{types} = []; my $i = 0; - foreach (@{$eventInfo->{fields}}) { - push @{$eventInfo->{names}}, $_ if ($i % 2) == 0; - push @{$eventInfo->{types}}, $_ if ($i % 2) == 1; + foreach (@{$event_info->{fields}}) { + push @{$event_info->{names}}, $_ if ($i % 2) == 0; + push @{$event_info->{types}}, $_ if ($i % 2) == 1; $i++; } # handle loop args if any - return unless exists $eventInfo->{loop_fields}; - $eventInfo->{loop_names} = []; - $eventInfo->{loop_types} = []; + return unless exists $event_info->{loop_fields}; + $event_info->{loop_names} = []; + $event_info->{loop_types} = []; $i = 0; - foreach (@{$eventInfo->{loop_fields}}) { - push @{$eventInfo->{loop_names}}, $_ if ($i % 2) == 0; - push @{$eventInfo->{loop_types}}, $_ if ($i % 2) == 1; + foreach (@{$event_info->{loop_fields}}) { + push @{$event_info->{loop_names}}, $_ if ($i % 2) == 0; + push @{$event_info->{loop_types}}, $_ if ($i % 2) == 1; $i++; } } -sub eventArgNames ($$) { +sub event_arg_names ($$) { my $type = shift; - my $argValues = shift; + my $arg_values = shift; - my $eventInfo = eventInfo($type); - my $argNames = $eventInfo->{names}; - return $argNames if defined $argNames; - calculateInternals($type); - return $eventInfo->{names}; + my $event_info = event_info($type); + my $arg_names = $event_info->{names}; + return $arg_names if defined $arg_names; + calculate_internals($type); + return $event_info->{names}; } -sub eventArgTypes ($$) { +sub event_arg_types ($$) { my $type = shift; - my $argValues = shift; + my $arg_values = shift; - my $eventInfo = eventInfo($type); - my $argTypes = $eventInfo->{types}; - return $argTypes if defined $argTypes; - calculateInternals($type); - return $eventInfo->{types}; + my $event_info = event_info($type); + my $arg_types = $event_info->{types}; + return $arg_types if defined $arg_types; + calculate_internals($type); + return $event_info->{types}; } -sub eventArgValues ($$) { +sub event_arg_values ($$) { my $type = shift; - my $packedStr = shift; + my $packed_str = shift; - my $eventInfo = eventInfo($type); - my @argValues = unpack($eventInfo->{format}, $packedStr); - my $argFields = $eventInfo->{fields}; - push @argValues, (undef) x ((@$argFields / 2) - @argValues); + my $event_info = event_info($type); + my @arg_values = unpack($event_info->{format}, $packed_str); + my $arg_fields = $event_info->{fields}; + push @arg_values, (undef) x ((@$arg_fields / 2) - @arg_values); # process looped args - if (@$argFields && $argFields->[@$argFields - 1] == looped) { - my @loopArgValues = (); + if (@$arg_fields && $arg_fields->[@$arg_fields - 1] == looped) { + my @loop_arg_values = (); - my $restStr = pop @argValues; - while ($restStr ne "") { - my @newArgValues = unpack($eventInfo->{loop_format}, $restStr); - die "Internal error, no loop args unpacked ($type)\n" unless @newArgValues > 1; - $restStr = pop @newArgValues; - push @loopArgValues, @newArgValues; + my $rest_str = pop @arg_values; + while ($rest_str ne "") { + my @new_arg_values = unpack($event_info->{loop_format}, $rest_str); + die "Internal error, no loop args unpacked ($type)\n" unless @new_arg_values > 1; + $rest_str = pop @new_arg_values; + push @loop_arg_values, @new_arg_values; } - push @argValues, \@loopArgValues; + push @arg_values, \@loop_arg_values; } # strip everything past the first null (or newline) if needed - if (@$argFields && $argFields->[-1] == string) { - $argValues[-1] =~ s/\n*\0.*//s; + if (@$arg_fields && $arg_fields->[-1] == string) { + $arg_values[-1] =~ s/\n*\0.*//s; } - return \@argValues; + return \@arg_values; } -sub eventLoopArgNames ($$) { +sub event_loop_arg_names ($$) { my $type = shift; - my $argValues = shift; + my $arg_values = shift; - my $eventInfo = eventInfo($type); - my $argNames = $eventInfo->{loop_names}; - return $argNames if defined $argNames; - calculateInternals($type); - return $eventInfo->{loop_names}; + my $event_info = event_info($type); + my $arg_names = $event_info->{loop_names}; + return $arg_names if defined $arg_names; + calculate_internals($type); + return $event_info->{loop_names}; } -sub eventLoopArgTypes ($$) { +sub event_loop_arg_types ($$) { my $type = shift; - my $argValues = shift; + my $arg_values = shift; - my $eventInfo = eventInfo($type); - my $argTypes = $eventInfo->{loop_types}; - return $argTypes if defined $argTypes; - calculateInternals($type); - return $eventInfo->{loop_types}; + my $event_info = event_info($type); + my $arg_types = $event_info->{loop_types}; + return $arg_types if defined $arg_types; + calculate_internals($type); + return $event_info->{loop_types}; } -sub eventArgs ($$) { +sub event_args ($$) { my $type = shift; - my $argValues = shift; + my $arg_values = shift; - my $argNames = eventArgNames($type, $argValues); + my $arg_names = event_arg_names($type, $arg_values); die sprintf "Internal error, event type %s (%d names, %d values)\n", - eventTypeToBinary($type), scalar @$argNames, scalar @$argValues - if @$argNames != @$argValues; + event_type_to_binary($type), scalar @$arg_names, scalar @$arg_values + if @$arg_names != @$arg_values; - my $loopArgNames = eventLoopArgNames($type, $argValues); + my $loop_arg_names = event_loop_arg_names($type, $arg_values); die sprintf "Internal error, event type %s (%d loop names, non array)\n", - eventTypeToBinary($type), scalar @$loopArgNames - if $loopArgNames && ref($loopArgNames) ne 'ARRAY' - && !@$loopArgNames && ref($argValues->[-1]) ne 'ARRAY'; + event_type_to_binary($type), scalar @$loop_arg_names + if $loop_arg_names && ref($loop_arg_names) ne 'ARRAY' + && !@$loop_arg_names && ref($arg_values->[-1]) ne 'ARRAY'; my $i = 0; my %args = map { my $value = $_; - $argNames->[$i++], ref($value) ne 'ARRAY'? $value: do { - my $loopValue = []; + $arg_names->[$i++], ref($value) ne 'ARRAY'? $value: do { + my $loop_value = []; my $j = 0; while ($j < @$value) { - my %loopHash = map { $_, $value->[$j++] } @$loopArgNames; - push @$loopValue, \%loopHash; + my %loop_hash = map { $_, $value->[$j++] } @$loop_arg_names; + push @$loop_value, \%loop_hash; } - $loopValue + $loop_value } - } @$argValues; + } @$arg_values; return \%args; } -sub eventArgAliases ($) { +sub event_arg_aliases ($) { my $type = shift; - return eventInfo($type)->{aliases} || {}; + return event_info($type)->{aliases} || {}; } # ---------------------------------------------------------------------------- @@ -665,14 +675,14 @@ use FVWM::EventNames; - print "All event names: ", join(", ", @{allEventNames()}), "\n"; - print "All event types: ", join(", ", @{allEventTypes()}), "\n"; + print "All event names: ", join(", ", @{all_event_names()}), "\n"; + print "All event types: ", join(", ", @{all_event_types()}), "\n"; - my $name = eventName (M_ICON_LOCATION); - my $argValues = eventArgValues(M_ICON_LOCATION, $packedStr); - my $argNames = eventArgNames (M_ICON_LOCATION, $argValues); - my $argTypes = eventArgTypes (M_ICON_LOCATION, $argValues); - my $args = eventArgs (M_ICON_LOCATION, $argValues); + my $name = event_name (M_ICON_LOCATION); + my $arg_values = event_arg_values(M_ICON_LOCATION, $packed_str); + my $arg_names = event_arg_names (M_ICON_LOCATION, $arg_values); + my $arg_types = event_arg_types (M_ICON_LOCATION, $arg_values); + my $args = event_args (M_ICON_LOCATION, $arg_values); =head1 DESCRIPTION @@ -695,67 +705,67 @@ =over 4 -=item B I +=item B I Returns the string representation of the numeric event I constant, like I or I. -=item B I I +=item B I I Constructs array ref of argument values for the event I -from the I (as received from I). +from the I (as received from I). If the last argument type of the event is string, for convenience, everything past the first null (or newline) is automatically stripped from the last argument value. -=item B I I +=item B I I Returns array ref of argument names of the event type. -I is either the real array ref of values (as returned by -B) or a number of actual values. +I is either the real array ref of values (as returned by +B) or a number of actual values. The returned array has the same number of elements. -=item B I I +=item B I I Returns array ref of argument types of the event type. -I is either the real array ref of values (as returned by -B) or a number of actual values. +I is either the real array ref of values (as returned by +B) or a number of actual values. The returned array has the same number of elements. -=item B I I +=item B I I Returns array ref of looped argument names of the event type (or undef). -=item B I I +=item B I I Returns array ref of looped argument types of the event type (or undef). -=item B I I +=item B I I Constructs hash ref of the named arguments for the event I -from the I array ref (as returned by B). +from the I array ref (as returned by B). -=item B I +=item B I This method is provided for backward compatibility when argument names are changed. For example, in the past the argument name of I was B, but now it is B. Using this method it is possible to make both names supported. Returns hash ref (old-name => new-name). -=item B +=item B Returns array ref of all known event names (strings). In the list context returns list of these names. -=item B +=item B Returns array ref of all known event types (numbers). In the list context returns list of these types. -=item B +=item B Returns hash ref of all known event names and types (type => name). --- fvwm-2.5.27.ds.orig/perllib/FVWM/Tracker/ModuleConfig.pm +++ fvwm-2.5.27.ds/perllib/FVWM/Tracker/ModuleConfig.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2003, Mikhael Goikhman +# Copyright (c) 2003-2009 Mikhael Goikhman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -33,10 +33,10 @@ my $self = $class->FVWM::Tracker::new($module); - $self->{isHash} = 1; - $self->{moduleName} = $self->{module}->name; + $self->{is_hash} = 1; + $self->{module_name} = $self->{module}->name; $self->{filter} = 'spacefree'; - $self->{defaultConfig} = {}; + $self->{default_config} = {}; return $self->init(%params); } @@ -46,13 +46,13 @@ my %params = @_; if ($params{ConfigType}) { - $self->{isHash} = $params{ConfigType} eq 'hash'; - $self->{defaultConfig} = $self->{isHash}? {}: []; + $self->{is_hash} = $params{ConfigType} eq 'hash'; + $self->{default_config} = $self->{is_hash} ? {} : []; } - $self->{moduleName} = $params{ModuleName} if $params{ModuleName}; + $self->{module_name} = $params{ModuleName} if $params{ModuleName}; $self->{filter} = $params{LineFilter} if $params{LineFilter}; - $self->{defaultConfig} = $params{DefaultConfig} - if ref($self->{defaultConfig}) eq ref($params{DefaultConfig}); + $self->{default_config} = $params{DefaultConfig} + if ref($self->{default_config}) eq ref($params{DefaultConfig}); return $self; } @@ -60,24 +60,24 @@ sub start ($) { my $self = shift; - my $default = $self->{defaultConfig}; - $self->{data} = $self->{isHash}? { %$default }: [ @$default ]; + my $default = $self->{default_config}; + $self->{data} = $self->{is_hash} ? { %$default } : [ @$default ]; - $self->addHandler(M_CONFIG_INFO, sub { + $self->add_handler(M_CONFIG_INFO, sub { my $event = $_[1]; - $self->calculateInternals($event->args); + $self->calculate_internals($event->args); }); - $self->requestConfigInfoEvents($self->{moduleName}); + $self->request_configinfo_events($self->{module_name}); my $result = $self->SUPER::start; - $self->deleteHandlers; + $self->delete_handlers; - $self->addHandler(M_CONFIG_INFO | M_SENDCONFIG, sub { + $self->add_handler(M_CONFIG_INFO | M_SENDCONFIG, sub { my $event = $_[1]; return unless $event->type == M_CONFIG_INFO; - my $info = $self->calculateInternals($event->args); + my $info = $self->calculate_internals($event->args); return unless defined $info; $self->notify("config line added", $info); }); @@ -85,21 +85,21 @@ return $result; } -sub calculateInternals ($$) { +sub calculate_internals ($$) { my $self = shift; my $args = shift; my $data = $self->{data}; my $text = $args->{text}; - $self->internalDie("No 'text' arg in M_CONFIG_INFO") + $self->internal_die("No 'text' arg in M_CONFIG_INFO") unless defined $text; - return undef unless $text =~ /^\*$self->{moduleName}(\s*[^\s].*)$/i; + return undef unless $text =~ /^\*$self->{module_name}(\s*[^\s].*)$/i; my $line = $1; $line =~ s/^\s+// unless $self->{filter} eq 'asis'; $line =~ s/\s+$// unless $self->{filter} eq 'asis'; - if ($self->{isHash}) { + if ($self->{is_hash}) { my ($key, $value) = $line =~ /([^\s]+)\s*(.*)/; $key = lc($key) if $self->{filter} eq 'lowerkeys'; $key = uc($key) if $self->{filter} eq 'upperkeys'; @@ -116,7 +116,7 @@ my $info = shift; my $data = $self->{data}; return $data unless defined $info; - return $data->{$info} if $self->{isHash}; + return $data->{$info} if $self->{is_hash}; return $data->[$info]; } @@ -125,12 +125,12 @@ my $info = shift; my $data = $self->{data}; my @infos = defined $info? ($info): - $self->{isHash}? sort keys %$data: (0 .. @$data - 1); + $self->{is_hash} ? sort keys %$data : (0 .. @$data - 1); my $string = ""; foreach (@infos) { - my $lineData = $self->{isHash}? "$_ $data->{$_}": $data->[$_]; - $string .= "\*$self->{moduleName}: $lineData\n"; + my $line_data = $self->{is_hash} ? "$_ $data->{$_}" : $data->[$_]; + $string .= "\*$self->{module_name}: $line_data\n"; } return $string; } @@ -153,15 +153,15 @@ Using B $module object: - my $configTracker = $module->track("ModuleConfig"); - my $configHash = $configTracker->data; - my $font = $configHash->{Font} || 'fixed'; + my $config_tracker = $module->track("ModuleConfig"); + my $config_hash = $config_tracker->data; + my $font = $config_hash->{Font} || 'fixed'; or: - my $configTracker = $module->track( + my $config_tracker = $module->track( "ModuleConfig", DefaultConfig => { Font => 'fixed' } ); - my $font = $configTracker->data('Font'); + my $font = $config_tracker->data('Font'); =head1 NEW METHODS --- fvwm-2.5.27.ds.orig/perllib/FVWM/Tracker/PageInfo.pm +++ fvwm-2.5.27.ds/perllib/FVWM/Tracker/PageInfo.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2003, Mikhael Goikhman +# Copyright (c) 2003-2009 Mikhael Goikhman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -32,28 +32,28 @@ my $self = shift; $self->{data} = {}; - $self->addHandler(M_NEW_PAGE, sub { + $self->add_handler(M_NEW_PAGE, sub { my $event = $_[1]; - $self->calculateInternals($event->args); + $self->calculate_internals($event->args); }); - $self->requestWindowListEvents; + $self->request_windowlist_events; my $result = $self->SUPER::start; - $self->deleteHandlers; + $self->delete_handlers; - $self->addHandler(M_NEW_PAGE | M_NEW_DESK, sub { + $self->add_handler(M_NEW_PAGE | M_NEW_DESK, sub { my $event = $_[1]; if ($event->type == M_NEW_DESK) { - my $oldDeskN = $self->{data}->{desk_n}; - my $newDeskN = $event->args->{desk_n}; - $self->{data}->{desk_n} = $newDeskN; - my $reallyChanged = $oldDeskN != $newDeskN; - $self->notify("desk only changed", $reallyChanged); - return unless $reallyChanged; + my $old_desk_n = $self->{data}->{desk_n}; + my $new_desk_n = $event->args->{desk_n}; + $self->{data}->{desk_n} = $new_desk_n; + my $really_changed = $old_desk_n != $new_desk_n; + $self->notify("desk only changed", $really_changed); + return unless $really_changed; } else { - $self->calculateInternals($event->args); + $self->calculate_internals($event->args); $self->notify("page only changed"); } $self->notify("desk/page changed"); @@ -62,7 +62,7 @@ return $result; } -sub calculateInternals ($$) { +sub calculate_internals ($$) { my $self = shift; my $args = shift; my $data = $self->{data}; @@ -102,9 +102,9 @@ Using B $module object: - my $pageTracker = $module->track("PageInfo"); - my $pageHash = $pageTracker->data; - my $currDesk = $pageHash->{'desk_n'}; + my $page_tracker = $module->track("PageInfo"); + my $page_hash = $page_tracker->data; + my $curr_desk = $page_hash->{'desk_n'}; =head1 OVERRIDDEN METHODS --- fvwm-2.5.27.ds.orig/perllib/FVWM/Tracker/Scheduler.pm +++ fvwm-2.5.27.ds/perllib/FVWM/Tracker/Scheduler.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2003, Mikhael Goikhman +# Copyright (c) 2003-2009 Mikhael Goikhman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -33,11 +33,11 @@ my $self = $class->FVWM::Tracker::new($module); - $self->{randomBaseNumber} = 8000000 + int(rand(900000)); - $self->{sentStringPrefix} = "FVWM::Tracker::Scheduler alarm "; - $self->{moduleName} = $params{ModuleName} || $self->{module}->name; - $self->{useAlarm} = (exists $params{UseAlarm}? - $params{UseAlarm}: $module->isDummy)? 1: 0; + $self->{random_base_number} = 8000000 + int(rand(900000)); + $self->{sent_string_prefix} = "FVWM::Tracker::Scheduler alarm "; + $self->{module_name} = $params{ModuleName} || $self->{module}->name; + $self->{use_alarm} = (exists $params{UseAlarm} + ? $params{UseAlarm} : $module->is_dummy) ? 1 : 0; return $self; } @@ -49,26 +49,26 @@ my $result = $self->SUPER::start; - $self->{internalObserverId} ||= $self->observe(sub { - my $scheduleId = $_[3]; - my $scheduleData = $self->data($scheduleId); - $self->{rescheduledSeconds} = -1; - - &{$scheduleData->{callback}}($scheduleData, @{$scheduleData->{params}}); - - my $newSeconds = $self->{rescheduledSeconds}; - if ($newSeconds >= 0) { - $scheduleData->{seconds} = $newSeconds if $newSeconds; - $self->sendSchedule($scheduleId); + $self->{internal_observer_id} ||= $self->observe(sub { + my $schedule_id = $_[3]; + my $schedule_data = $self->data($schedule_id); + $self->{rescheduled_seconds} = -1; + + &{$schedule_data->{callback}}($schedule_data, @{$schedule_data->{params}}); + + my $new_seconds = $self->{rescheduled_seconds}; + if ($new_seconds >= 0) { + $schedule_data->{seconds} = $new_seconds if $new_seconds; + $self->send_schedule($schedule_id); } else { - $self->deschedule($scheduleId); + $self->deschedule($schedule_id); } }); - $self->addHandler(M_STRING, sub { + $self->add_handler(M_STRING, sub { my $event = $_[1]; my $text = $event->_text; - return unless $text =~ /^$self->{sentStringPrefix}(\d+)/; + return unless $text =~ /^$self->{sent_string_prefix}(\d+)/; $self->notify("main", $1); }); @@ -79,68 +79,68 @@ my $self = shift; $self->SUPER::stop; - $self->descheduleAll; + $self->deschedule_all; } -sub sendSchedule ($$) { +sub send_schedule ($$) { my $self = shift; - my $scheduleId = shift; - my $sd = $self->{data}->{$scheduleId}; + my $schedule_id = shift; + my $sd = $self->{data}->{$schedule_id}; - my $string = "$self->{sentStringPrefix}$scheduleId"; - if ($self->{useAlarm}) { + my $string = "$self->{sent_string_prefix}$schedule_id"; + if ($self->{use_alarm}) { $SIG{ALRM} = sub { - $self->{module}->emulateEvent(M_STRING, [ 0, 0, 0, $string ]); + $self->{module}->emulate_event(M_STRING, [ 0, 0, 0, $string ]); }; alarm($sd->{seconds}); } else { - my $mSeconds = $sd->{seconds} * 1000; - $self->{module}->send("Schedule $mSeconds $sd->{fvwmId} " - . "SendToModule $self->{moduleName} $string"); + my $mseconds = $sd->{seconds} * 1000; + $self->{module}->send("Schedule $mseconds $sd->{fvwm_id} " + . "SendToModule $self->{module_name} $string"); } - $sd->{sentTime} = time(); + $sd->{time_sent} = time(); } sub schedule ($$$;$) { my $self = shift; - my $seconds = shift || $self->internalDie("schedule: no seconds"); - my $callback = shift || $self->internalDie("schedule: no callback"); + my $seconds = shift || $self->internal_die("schedule: no seconds"); + my $callback = shift || $self->internal_die("schedule: no callback"); - my $scheduleId = ++$self->{lastScheduleNum}; - my $fvwmId = $self->{randomBaseNumber} + $scheduleId; - my $scheduleData = { - sentTime => 0, - seconds => $seconds, - fvwmId => $fvwmId, - callback => $callback, - params => [ @_ ], + my $schedule_id = ++$self->{last_schedule_num}; + my $fvwm_id = $self->{random_base_number} + $schedule_id; + my $schedule_data = { + time_sent => 0, + seconds => $seconds, + fvwm_id => $fvwm_id, + callback => $callback, + params => [ @_ ], }; - $self->{data}->{$scheduleId} = $scheduleData; - $self->sendSchedule($scheduleId); + $self->{data}->{$schedule_id} = $schedule_data; + $self->send_schedule($schedule_id); - return $scheduleId; + return $schedule_id; } sub deschedule ($$) { my $self = shift; - my $scheduleId = shift; + my $schedule_id = shift; my $data = $self->{data}; - next unless exists $data->{$scheduleId}; - my $fvwmId = $data->{$scheduleId}->{fvwmId}; + next unless exists $data->{$schedule_id}; + my $fvwm_id = $data->{$schedule_id}->{fvwm_id}; - $self->{module}->send("Deschedule $fvwmId") + $self->{module}->send("Deschedule $fvwm_id") if defined $self->{module}; # ready for DESTROY - delete $data->{$scheduleId}; + delete $data->{$schedule_id}; } sub reschedule ($;$) { my $self = shift; my $seconds = shift || 0; - $self->{rescheduledSeconds} = $seconds; + $self->{rescheduled_seconds} = $seconds; } -sub descheduleAll ($) { +sub deschedule_all ($) { my $self = shift; my $data = $self->{data}; foreach (keys %$data) { @@ -148,32 +148,32 @@ } } -sub toBeDisconnected ($) { +sub to_be_disconnected ($) { my $self = shift; - $self->descheduleAll(); + $self->deschedule_all(); } sub data ($;$) { my $self = shift; - my $scheduleId = shift; + my $schedule_id = shift; my $data = $self->{data}; - return $data unless defined $scheduleId; - return $data->{$scheduleId}; + return $data unless defined $schedule_id; + return $data->{$schedule_id}; } sub dump ($;$) { my $self = shift; - my $scheduleId = shift; + my $schedule_id = shift; my $data = $self->{data}; - my @ids = $scheduleId? $scheduleId: sort { $a <=> $b } keys %$data; + my @ids = $schedule_id ? $schedule_id : sort { $a <=> $b } keys %$data; my $string = ""; foreach (@ids) { my $sd = $data->{$_}; - my $timeStr = localtime($sd->{sentTime}); - $timeStr = "$5-$2-$3 $4" if $timeStr =~ /^([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)$/; + my $time_str = localtime($sd->{time_sent}); + $time_str = "$5-$2-$3 $4" if $time_str =~ /^([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)$/; - $string .= "Schedule $_: $timeStr + $sd->{seconds} sec, use 'Deschedule $sd->{fvwmId}'\n"; + $string .= "Schedule $_: $time_str + $sd->{seconds} sec, use 'Deschedule $sd->{fvwm_id}'\n"; } return $string; } @@ -237,7 +237,7 @@ This may be useful when defining a periodical callback that should be, say, called every 10 minutes (600 seconds). -=item descheduleAll +=item deschedule_all Removes all previously scheduled callbacks. @@ -247,18 +247,18 @@ =over 4 -=item toBeDisconnected +=item to_be_disconnected -Calls B. +Calls B. =item B [I] Returns either array ref of hash refs, or one hash ref if I is given. The hash keys are: - sentTime - unix time (seconds since 1970) + time_sent - unix time (seconds since 1970) seconds - requested alarm seconds - fvwmId - internal I's Schedule id + fvwm_id - internal I's Schedule id callback - alarm callback, CODE ref params - ARRAY ref of optional callback parameters @@ -269,6 +269,8 @@ If no scheduled callbacks are active, the empty string is returned as expected. +=back + =head1 AUTHOR Mikhael Goikhman . --- fvwm-2.5.27.ds.orig/perllib/FVWM/Tracker/WindowList.pm +++ fvwm-2.5.27.ds/perllib/FVWM/Tracker/WindowList.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2004 Mikhael Goikhman, Scott Smedley +# Copyright (c) 2004-2009 Mikhael Goikhman, Scott Smedley # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,13 +20,13 @@ use FVWM::Tracker qw(base); -my $windowEvents = M_ADD_WINDOW | M_CONFIGURE_WINDOW | M_DESTROY_WINDOW | +my $window_events = M_ADD_WINDOW | M_CONFIGURE_WINDOW | M_DESTROY_WINDOW | M_ICONIFY | M_DEICONIFY; -my $nameEvents = M_RES_NAME | M_RES_CLASS | M_WINDOW_NAME | M_VISIBLE_NAME | +my $name_events = M_RES_NAME | M_RES_CLASS | M_WINDOW_NAME | M_VISIBLE_NAME | M_ICON_NAME; -my $nameXEvents = MX_VISIBLE_ICON_NAME; -my $stackEvents = M_RESTACK | M_RAISE_WINDOW | M_LOWER_WINDOW; -my $iconEvents = M_ICON_LOCATION | M_ICON_FILE | M_DEFAULTICON | M_MINI_ICON; +my $name_xevents = MX_VISIBLE_ICON_NAME; +my $stack_events = M_RESTACK | M_RAISE_WINDOW | M_LOWER_WINDOW; +my $icon_events = M_ICON_LOCATION | M_ICON_FILE | M_DEFAULTICON | M_MINI_ICON; sub observables ($) { return [ @@ -54,34 +54,34 @@ return $self; } -sub addRequestedInfoHandlers ($$) { +sub add_requested_info_handlers ($$) { my $self = shift; my $handler = shift; - my $useWInfo = 1; - my $useNames = 1; - my $useStack = 0; - my $useIcons = 0; + my $use_winfo = 1; + my $use_names = 1; + my $use_stack = 0; + my $use_icons = 0; foreach (@{$self->{options}}) { - /^(\!?)winfo$/ and $useWInfo = $1 ne '!'; - /^(\!?)names$/ and $useNames = $1 ne '!'; - /^(\!?)stack$/ and $useStack = $1 ne '!'; - /^(\!?)icons$/ and $useIcons = $1 ne '!'; + /^(\!?)winfo$/ and $use_winfo = $1 ne '!'; + /^(\!?)names$/ and $use_names = $1 ne '!'; + /^(\!?)stack$/ and $use_stack = $1 ne '!'; + /^(\!?)icons$/ and $use_icons = $1 ne '!'; } my $mask = 0; - $mask |= $windowEvents if $useWInfo; - $mask |= $nameEvents if $useNames; - $mask |= $stackEvents if $useStack; - $mask |= $iconEvents if $useIcons; + $mask |= $window_events if $use_winfo; + $mask |= $name_events if $use_names; + $mask |= $stack_events if $use_stack; + $mask |= $icon_events if $use_icons; my $xmask = 0; - $xmask |= $nameXEvents if $useNames; + $xmask |= $name_xevents if $use_names; - $self->addHandler($mask, $handler) if $mask; - $self->addHandler($xmask, $handler) if $xmask; - $self->addHandler(M_NEW_PAGE | M_NEW_DESK, sub { - $self->handlerPageInfo($_[1]); - }) if $useWInfo; + $self->add_handler($mask, $handler) if $mask; + $self->add_handler($xmask, $handler) if $xmask; + $self->add_handler(M_NEW_PAGE | M_NEW_DESK, sub { + $self->handler_page_info($_[1]); + }) if $use_winfo; } sub start ($) { @@ -89,24 +89,24 @@ $self->{data} = {}; - $self->addRequestedInfoHandlers(sub { + $self->add_requested_info_handlers(sub { my $event = $_[1]; - $self->calculateInternals($event); + $self->calculate_internals($event); }); - $self->requestWindowListEvents; + $self->request_windowlist_events; my $result = $self->SUPER::start; - $self->deleteHandlers; + $self->delete_handlers; - $self->addRequestedInfoHandlers(sub { + $self->add_requested_info_handlers(sub { my $event = $_[1]; - my ($winId, $oldHash) = $self->calculateInternals($event); - return unless defined $winId; + my ($win_id, $old_hash) = $self->calculate_internals($event); + return unless defined $win_id; my $type = $event->type(); my $observable = undef; - if ($self->{module}->isEventExtended($type)) { - if ($type & $nameXEvents) { + if ($self->{module}->is_event_extended($type)) { + if ($type & $name_xevents) { $observable = "window name updated"; } } elsif ($type & M_ADD_WINDOW) { @@ -115,17 +115,17 @@ $observable = "window properties updated"; # this observable is too broad, try to narrow - if ($oldHash) { - my $win = $self->{data}->{$winId}; + if ($old_hash) { + my $win = $self->{data}->{$win_id}; - $self->notify("window resized", $winId, $oldHash) - if $win->{width} != $oldHash->{width} - || $win->{height} != $oldHash->{height}; - - $self->notify("window moved", $winId, $oldHash) - if $win->{desk} != $oldHash->{desk} - || $win->{x} != $oldHash->{x} - || $win->{y} != $oldHash->{y}; + $self->notify("window resized", $win_id, $old_hash) + if $win->{width} != $old_hash->{width} + || $win->{height} != $old_hash->{height}; + + $self->notify("window moved", $win_id, $old_hash) + if $win->{desk} != $old_hash->{desk} + || $win->{x} != $old_hash->{x} + || $win->{y} != $old_hash->{y}; } } elsif ($type & M_DESTROY_WINDOW) { $observable = "window deleted"; @@ -133,31 +133,31 @@ $observable = "window iconified"; } elsif ($type & M_DEICONIFY) { $observable = "window deiconified"; - } elsif ($type & $nameEvents) { + } elsif ($type & $name_events) { $observable = "window name updated"; - } elsif ($type & $stackEvents) { + } elsif ($type & $stack_events) { $observable = "window stack updated"; - } elsif ($type & $iconEvents) { + } elsif ($type & $icon_events) { $observable = "window icon updated"; } - $self->notify($observable, $winId, $oldHash) if $observable; + $self->notify($observable, $win_id, $old_hash) if $observable; }); return $result; } -sub calculateInternals ($$) { +sub calculate_internals ($$) { my $self = shift; my $event = shift; my $args = $event->args; my $data = $self->{data}; - my $winId = $args->{win_id}; + my $win_id = $args->{win_id}; - my $oldHash = undef; - $oldHash = { %{$data->{$winId}} } if defined $data->{$winId}; + my $old_hash = undef; + $old_hash = { %{$data->{$win_id}} } if defined $data->{$win_id}; - my $window = $data->{$winId} ||= - bless { id => $winId, iconified => 0, _tracker => $self }, + my $window = $data->{$win_id} ||= + bless { id => $win_id, iconified => 0, _tracker => $self }, "FVWM::Window"; # There are some fields that are not unique to all events. To ensure @@ -194,20 +194,20 @@ } my $type = $event->type(); - if (!$self->{module}->isEventExtended($type)) { + if (!$self->{module}->is_event_extended($type)) { if ($type & M_DEICONIFY) { $window->{iconified} = 0; } elsif ($type & M_ICONIFY) { $window->{iconified} = 1; } elsif ($type & M_DESTROY_WINDOW) { - delete $data->{$winId}; + delete $data->{$win_id}; } } - return wantarray ? ($winId, $oldHash) : $winId; + return wantarray ? ($win_id, $old_hash) : $win_id; } -sub handlerPageInfo ($$) { +sub handler_page_info ($$) { my $self = shift; my $event = shift; my $args = $event->args; @@ -220,7 +220,7 @@ } } -sub pageInfo ($;$) { +sub page_info ($;$) { my $self = shift; my $id = shift; my $data = $self->{page_info}; @@ -271,7 +271,7 @@ if (/^iconified$/i) { return 0 unless $opposite ^ $self->{iconified}; } elsif (/^current(page|desk)$/i) { - my $page = $self->{_tracker}->pageInfo; + my $page = $self->{_tracker}->page_info; return 0 unless $opposite ^ ($self->{desk} == $page->{desk_n}); next if lc($1) eq "desk"; return 0 unless $opposite ^ ( @@ -339,9 +339,9 @@ my $tracker = $module->track("WindowList", $options); my $data = $tracker->data; - while (my ($winId, $window) = each %$data) { + while (my ($win_id, $window) = each %$data) { next unless $window->match("CurrentPage, Iconified"); - $module->send("Iconify off", $winId); + $module->send("Iconify off", $win_id); } Default $options string is: "!stack !icons names winfo" @@ -358,7 +358,7 @@ =item B [I] -Returns array ref of window hash refs. or one window hash ref if +Returns hash ref of window hash refs. or one window hash ref if I is given. =item B [I] @@ -371,7 +371,7 @@ =over 4 -=item B [I] +=item B [I] Returns hash ref of page/desk info, or actual hash value using B as a key (if specified). --- fvwm-2.5.27.ds.orig/perllib/FVWM/Tracker/GlobalConfig.pm +++ fvwm-2.5.27.ds/perllib/FVWM/Tracker/GlobalConfig.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2003, Mikhael Goikhman +# Copyright (c) 2003-2009 Mikhael Goikhman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,20 +30,20 @@ my $self = shift; $self->{data} = {}; - $self->addHandler(M_CONFIG_INFO, sub { + $self->add_handler(M_CONFIG_INFO, sub { my $event = $_[1]; - $self->calculateInternals($event->args); + $self->calculate_internals($event->args); }); - $self->requestConfigInfoEvents; + $self->request_configinfo_events; my $result = $self->SUPER::start; - $self->deleteHandlers; + $self->delete_handlers; - $self->addHandler(M_CONFIG_INFO, sub { + $self->add_handler(M_CONFIG_INFO, sub { my $event = $_[1]; - my $name = $self->calculateInternals($event->args); + my $name = $self->calculate_internals($event->args); return unless defined $name; $self->notify("value changed", $name); }); @@ -51,13 +51,13 @@ return $result; } -sub calculateInternals ($$) { +sub calculate_internals ($$) { my $self = shift; my $args = shift; my $data = $self->{data}; my $text = $args->{text}; - $self->internalDie("No 'text' arg in M_CONFIG_INFO") + $self->internal_die("No 'text' arg in M_CONFIG_INFO") unless defined $text; return undef if $text =~ /^(?:desktopsize|colorset|\*)/i; @@ -106,15 +106,15 @@ Using B $module object: - my $configTracker = $module->track("GlobalConfig"); - my $configHash = $configTracker->data; - my $xineramaInfo = $configHash->{'ImagePath'}; + my $config_tracker = $module->track("GlobalConfig"); + my $config_hash = $config_tracker->data; + my $image_path = $config_hash->{'ImagePath'}; or: - my $configTracker = $module->track("GlobalConfig"); - my $xineramaInfo = $configTracker->data('XineramaConfig'); - my $desktop2Name = $configTracker->data('DesktopName 2'); + my $config_tracker = $module->track("GlobalConfig"); + my $xinerama_info = $config_tracker->data('XineramaConfig'); + my $desktop2_name = $config_tracker->data('DesktopName 2'); =head1 OVERRIDDEN METHODS --- fvwm-2.5.27.ds.orig/perllib/FVWM/Tracker/Colorsets.pm +++ fvwm-2.5.27.ds/perllib/FVWM/Tracker/Colorsets.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2003, Mikhael Goikhman +# Copyright (c) 2003-2009 Mikhael Goikhman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,7 +19,7 @@ use strict; use FVWM::Tracker qw(base); -use General::Parse; +use General::Parse qw(get_tokens); use constant CS_FIELDS => qw( fg bg hilite shadow fgsh tint icon_tint @@ -44,58 +44,58 @@ my $self = shift; # just an extra debug service for developers - $self->{module}->emulateEvent(M_CONFIG_INFO, [ + $self->{module}->emulate_event(M_CONFIG_INFO, [ 0, 0, 0, "Colorset 0 0 00c0c0 00e0e0 00a0a0 007070 0 0 0 0 64 0 0 0 0 0 0 0 0 0 64" - ]) if $self->{module}->isDummy; + ]) if $self->{module}->is_dummy; $self->{data} = {}; - $self->addHandler(M_CONFIG_INFO, sub { + $self->add_handler(M_CONFIG_INFO, sub { my $event = $_[1]; - $self->calculateInternals($event->args); + $self->calculate_internals($event->args); }); - $self->requestConfigInfoEvents; + $self->request_configinfo_events; my $result = $self->SUPER::start; - $self->deleteHandlers; + $self->delete_handlers; - $self->addHandler(M_CONFIG_INFO, sub { + $self->add_handler(M_CONFIG_INFO, sub { my $event = $_[1]; - my ($num, $oldHash) = $self->calculateInternals($event->args); + my ($num, $old_hash) = $self->calculate_internals($event->args); return unless defined $num; - $self->notify("colorset changed", $num, $oldHash); + $self->notify("colorset changed", $num, $old_hash); }); return $result; } -sub calculateInternals ($$) { +sub calculate_internals ($$) { my $self = shift; my $args = shift; my $data = $self->{data}; my $text = $args->{text}; - $self->internalDie("No 'text' arg in M_CONFIG_INFO") + $self->internal_die("No 'text' arg in M_CONFIG_INFO") unless defined $text; return undef if $text !~ /^colorset ([\da-f]+) ([\da-f ]+)$/i; my $num = hex($1); - my @numbers = getTokens($2); + my @numbers = get_tokens($2); return undef if @numbers != CS_FIELDS; # memory used for keys may be optimized later - my $newHash = {}; + my $new_hash = {}; my $i = 0; foreach (CS_FIELDS) { - $newHash->{$_} = hex($numbers[$i++]); + $new_hash->{$_} = hex($numbers[$i++]); } - my $oldHash = $data->{$num}; - $data->{$num} = $newHash; + my $old_hash = $data->{$num}; + $data->{$num} = $new_hash; - return wantarray? ($num, $oldHash): $num; + return wantarray? ($num, $old_hash): $num; } sub data ($;$) { @@ -116,11 +116,11 @@ my $string = ""; foreach (@nums) { - my $csHash = $data->{$_}; + my $cs_hash = $data->{$_}; $string .= "Colorset $_"; my $i = 0; foreach (CS_FIELDS) { - my $value = $csHash->{$_}; + my $value = $cs_hash->{$_}; $i++; next if $i > 5 && ($value == 0 || /alpha_percent$/ && $value == 100); $value = sprintf("#%06lx", $value) if $i <= 7; @@ -152,19 +152,19 @@ Using B $module object: - my $csTracker = $module->track("Colorsets"); - my $csHash = $csTracker->data; - my $cs2_fg = $csHash->{2}->{fg} || 'black'; - my $cs5_bg = $csTracker->data(5)->{bg} || 'gray'; - - $csTracker->observe(sub { - my ($module, $tracker, $data, $num, $oldHash) = @_; - my $newHash = $data->{$num}; - - if ($oldHash->{pixmap} == 0 && $newHash->{pixmap}) { - my $pixmapType = $newHash->{pixmap_type}; - my $pixmapName = ($tracker->PIXMAP_TYPES)[$pixmapType]; - $module->debug("Colorset: $num, Pixmap type: $pixmapName"); + my $cs_tracker = $module->track("Colorsets"); + my $cs_hash = $cs_tracker->data; + my $cs2_fg = $cs_hash->{2}->{fg} || 'black'; + my $cs5_bg = $cs_tracker->data(5)->{bg} || 'gray'; + + $cs_tracker->observe(sub { + my ($module, $tracker, $data, $num, $old_hash) = @_; + my $new_hash = $data->{$num}; + + if ($old_hash->{pixmap} == 0 && $new_hash->{pixmap}) { + my $pixmap_type = $new_hash->{pixmap_type}; + my $pixmap_name = ($tracker->PIXMAP_TYPES)[$pixmap_type]; + $module->debug("Colorset: $num, Pixmap type: $pixmap_name"); } }; --- fvwm-2.5.27.ds.orig/perllib/FVWM/Module/Terminal.pm +++ fvwm-2.5.27.ds/perllib/FVWM/Module/Terminal.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2003, Mikhael Goikhman +# Copyright (c) 2003-2009 Mikhael Goikhman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ BEGIN { if ($ENV{FVWM_MODULE_TERMINAL_CLIENT}) { - my ($outFd, $inFd, $name, $prompt, $ornaments) = @ARGV; + my ($out_fd, $in_fd, $name, $prompt, $ornaments) = @ARGV; $name ||= "FVWM::Module::Terminal"; $prompt ||= ""; $ornaments ||= 0; @@ -32,10 +32,10 @@ }; die "$name: $@" if $@; - my $ostream = new IO::File ">&$outFd" - or die "Can't write to file descriptor (&$outFd)\n"; - my $istream = new IO::File "<&$inFd" - or die "Can't read from file descriptor (&$inFd)\n"; + my $ostream = new IO::File ">&$out_fd" + or die "Can't write to file descriptor (&$out_fd)\n"; + my $istream = new IO::File "<&$in_fd" + or die "Can't read from file descriptor (&$in_fd)\n"; $ostream->autoflush(1); $istream->autoflush(1); # DEBUG @@ -72,13 +72,13 @@ my $ornaments = delete $params{Ornaments} || 0; my $self = $class->SUPER::new(%params); - pipe(PARENT_IN, CHILD_OUT) || $self->internalDie("Can't pipe"); - pipe(CHILD_IN, PARENT_OUT) || $self->internalDie("Can't pipe"); + pipe(PARENT_IN, CHILD_OUT) || $self->internal_die("Can't pipe"); + pipe(CHILD_IN, PARENT_OUT) || $self->internal_die("Can't pipe"); CHILD_OUT->autoflush; PARENT_OUT->autoflush; my $pid = fork; - $self->internalDie("Can't fork: $!") unless defined $pid; + $self->internal_die("Can't fork: $!") unless defined $pid; if ($pid == 0) { close PARENT_IN; close PARENT_OUT; @@ -89,7 +89,7 @@ $ENV{FVWM_MODULE_TERMINAL_CLIENT} = 1; my @cmd = ($^X, "-w", __FILE__, $co, $ci, $self->name, $prompt, $ornaments); - unshift @cmd, getTokens($xterm); + unshift @cmd, get_tokens($xterm); # DEBUG my $ostream = new IO::File ">&$co" or die "Can't write to file descriptor (&$co)\n"; @@ -97,47 +97,47 @@ print join(", ", @cmd), "\n"; { exec {$cmd[0]} @cmd } - $self->internalDie("Can't fork $cmd[0]"); + $self->internal_die("Can't fork $cmd[0]"); close CHILD_IN; close CHILD_OUT; exit 0; } close CHILD_IN; close CHILD_OUT; - $self->{termSelect} = new IO::Select($self->{istream}, \*PARENT_IN); - $self->{termOutput} = \*PARENT_OUT; + $self->{term_select} = new IO::Select($self->{istream}, \*PARENT_IN); + $self->{term_output} = \*PARENT_OUT; return $self; } -sub waitPacket ($) { +sub wait_packet ($) { my $self = shift; while (1) { - my @handles = $self->{termSelect}->can_read(); - my ($coreInput, $termInput); + my @handles = $self->{term_select}->can_read(); + my ($core_input, $term_input); foreach (@handles) { - ($_ == $self->{istream}? $coreInput: $termInput) = $_; + ($_ == $self->{istream}? $core_input: $term_input) = $_; } - if ($termInput) { - my $line = $termInput->getline; + if ($term_input) { + my $line = $term_input->getline; unless (defined $line) { $self->debug("EOF from terminal client, terminating", 3); $self->terminate; } chomp($line); $self->debug("Got [$line] from terminal client", 4); - $self->processTermLine($line); + $self->process_term_line($line); } - last if $coreInput; + last if $core_input; } } -sub processTermLine ($$) { +sub process_term_line ($$) { my $self = shift; my $line = shift; - $self->showMessage("I got $line!"); + $self->show_message("I got $line!"); } 1; @@ -166,28 +166,28 @@ my $id = undef; $module->send('Next (TestModuleTerminal) SendToModule myid $[w.id]'); - $module->addDefaultErrorHandler; - $module->addHandler(M_STRING, sub { + $module->add_default_error_handler; + $module->add_handler(M_STRING, sub { $[1]->_text =~ /^myid (.*)$/ && $id = eval $1; }; - $module->addHandler(M_ICONIFY, sub { + $module->add_handler(M_ICONIFY, sub { return unless defined $id; my $id0 = $_[1]->_win_id; $module->send("WindowId $id Iconify off") if $id0 == $id; }); $module->track('Scheduler')->schedule(60, sub { - $module->showMessage("You run this module for 1 minute") + $module->show_message("You run this module for 1 minute") }); - $module->eventLoop; + $module->event_loop; =head1 DESCRIPTION NOTE: This class is not functional yet. The B class is a sub-class of -B that overloads the methods B, -B, B and B to manage terminal +B that overloads the methods B, +B, B and B to manage terminal functionality. This manual page details only those differences. For details on the @@ -199,28 +199,30 @@ =over 8 -=item B +=item B Listen to the terminal read-line while waiting for the packet from fvwm. -=item B I [I] +=item B<show_error> I<msg> [I<title>] Shows the error message in terminal. Useful for diagnostics of a Terminal based module. -=item B<showMessage> I<msg> [I<title>] +=item B<show_message> I<msg> [I<title>] Shows the message in terminal. Useful for notices by a Terminal based module. -=item B<showDebug> I<msg> [I<title>] +=item B<show_debug> I<msg> [I<title>] Shows the debug info in terminal. Useful for debugging a Terminal based module. +=back + =head1 BUGS Awaiting for your reporting. --- fvwm-2.5.27.ds.orig/perllib/FVWM/Module/Tk.pm +++ fvwm-2.5.27.ds/perllib/FVWM/Module/Tk.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2003, Mikhael Goikhman +# Copyright (c) 2003-2009 Mikhael Goikhman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,50 +30,50 @@ $top = delete $params{TopWindow} if exists $params{TopWindow}; my $self = $class->SUPER::new(%params); - $self->internalDie("TopWindow given in constructor is not Tk::Toplevel") + $self->internal_die("TopWindow given in constructor is not Tk::Toplevel") unless $top || UNIVERSAL::isa($top, "Tk::Toplevel"); unless ($top) { $top = MainWindow->new; $top->withdraw; } - $self->{topWindow} = $top; + $self->{top_window} = $top; return $self; } -sub eventLoop ($) { +sub event_loop ($) { my $self = shift; my @params = @_; - $self->eventLoopPrepared(@params); - my $top = $self->{topWindow}; + $self->event_loop_prepared(@params); + my $top = $self->{top_window}; $top->fileevent($self->{istream}, readable => sub { - unless ($self->processPacket($self->readPacket)) { + unless ($self->process_packet($self->read_packet)) { if ($self->{disconnected}) { # Seems like something does not want to exit - force it. # For example, a new Tk window is launched on ON_EXIT. $top->destroy if defined $top && defined $top->{Configure}; - $self->debug("Forced to exit to escape eventLoop, fix the module", 0); + $self->debug("Forced to exit to escape event_loop, fix the module", 0); exit 1; } - $self->eventLoopFinished(@params); + $self->event_loop_finished(@params); $top->destroy; } else { - $self->eventLoopPrepared(@params); + $self->event_loop_prepared(@params); } } ); MainLoop; } -sub showError ($$;$) { +sub show_error ($$;$) { my $self = shift; my $error = shift; my $title = shift || ($self->name . " Error"); - my $top = $self->{topWindow}; + my $top = $self->{top_window}; my $dialog = $top->Dialog( -title => $title, @@ -88,12 +88,12 @@ $self->send("All ('$title') Close") if $btn eq 'Close All Errors'; } -sub showMessage ($$;$) { +sub show_message ($$;$) { my $self = shift; my $msg = shift; my $title = shift || ($self->name . " Message"); - $self->{topWindow}->messageBox( + $self->{top_window}->messageBox( -icon => 'info', -type => 'ok', -title => $title, @@ -101,17 +101,17 @@ ); } -sub showDebug ($$;$) { +sub show_debug ($$;$) { my $self = shift; my $msg = shift; my $title = shift || ($self->name . " Debug"); - my $dialog = $self->{tkDebugDialog}; + my $dialog = $self->{tk_debug_dialog}; - my $top = $self->{topWindow}; + my $top = $self->{top_window}; unless (defined $top && defined $top->{Configure}) { # in the constructor (too early) or in destructor (too late) - $self->FVWM::Module::Toolkit::showDebug($msg, $title); + $self->FVWM::Module::Toolkit::show_debug($msg, $title); return; } @@ -128,42 +128,42 @@ )->pack(-expand => 1, -fill => 'both'); $dialog->protocol('WM_DELETE_WINDOW', sub { $dialog->withdraw(); }); - my @packOpts = (-side => 'left', -expand => 1, -fill => 'both'); + my @pack_opts = (-side => 'left', -expand => 1, -fill => 'both'); $bottom->Button( -text => 'Close', -command => sub { $dialog->withdraw(); }, - )->pack(@packOpts); + )->pack(@pack_opts); $bottom->Button( -text => 'Clear', -command => sub { $text->delete('0.0', 'end'); }, - )->pack(@packOpts); + )->pack(@pack_opts); $bottom->Button( -text => 'Save', -command => sub { my $file = $dialog->getSaveFile(-title => "Save $title"); return unless defined $file; if (!open(OUT, ">$file")) { - $self->showError("Couldn't save $file: $!", 'Save Error'); + $self->show_error("Couldn't save $file: $!", 'Save Error'); return; } print OUT $text->get('0.0', 'end'); close(OUT); }, - )->pack(@packOpts); + )->pack(@pack_opts); - $self->{tkDebugDialog} = $dialog; - $self->{tkDebugTextWg} = $text; + $self->{tk_debug_dialog} = $dialog; + $self->{tk_debug_text_wg} = $text; } else { $dialog->deiconify() if $dialog->state() eq 'withdrawn'; } - my $text = $self->{tkDebugTextWg}; + my $text = $self->{tk_debug_text_wg}; $text->insert('end', "$msg\n"); $text->see('end'); } -sub topWindow ($) { - return shift->{topWindow}; +sub top_window ($) { + return shift->{top_window}; } 1; @@ -196,24 +196,24 @@ -text => "Close", -command => sub { $top->destroy; } )->pack; - $module->addDefaultErrorHandler; - $module->addHandler(M_ICONIFY, sub { + $module->add_default_error_handler; + $module->add_handler(M_ICONIFY, sub { my $id0 = $_[1]->_win_id; $module->send("Iconify off", $id) if $id0 == $id; }); $module->track('Scheduler')->schedule(60, sub { - $module->showMessage("You run this module for 1 minute") + $module->show_message("You run this module for 1 minute") }); $module->send('Style "*imple Test" Sticky'); - $module->eventLoop; + $module->event_loop; =head1 DESCRIPTION The B<FVWM::Module::Tk> class is a sub-class of B<FVWM::Module::Toolkit> -that overloads the methods B<new>, B<eventLoop>, B<showMessage>, -B<showDebug> and B<showError> to manage Tk objects as well. It also adds new -method B<topWindow>. +that overloads the methods B<new>, B<event_loop>, B<show_message>, +B<show_debug> and B<show_error> to manage Tk objects as well. It also adds new +method B<top_window>. This manual page details only those differences. For details on the API itself, see L<FVWM::Module>. @@ -238,13 +238,13 @@ is created and immediately withdrawn. This top-level window is needed to create Tk dialogs. -=item B<eventLoop> +=item B<event_loop> From outward appearances, this methods operates just as the parent -B<eventLoop> does. It is worth mentioning, however, that this version +B<event_loop> does. It is worth mentioning, however, that this version enters into the Tk B<MainLoop> subroutine, ostensibly not to return. -=item B<showError> I<msg> [I<title>] +=item B<show_error> I<msg> [I<title>] This method creates a dialog box using the Tk widgets. The dialog has three buttons labeled "Close", "Close All Errors" and "Exit Module". @@ -254,13 +254,13 @@ Good for diagnostics of a Tk based module. -=item B<showMessage> I<msg> [I<title>] +=item B<show_message> I<msg> [I<title>] Creates a message window with one "Ok" button. Useful for notices by a Tk based module. -=item B<showDebug> I<msg> [I<title>] +=item B<show_debug> I<msg> [I<title>] Creates a debug window with 3 buttons "Close", "Clear" and "Save". All debug messages are added to the debug window. @@ -273,7 +273,7 @@ Useful for debugging a Tk based module. -=item B<topWindow> +=item B<top_window> Returns the Tk toplevel that this object was created with. --- fvwm-2.5.27.ds.orig/perllib/FVWM/Module/Gtk.pm +++ fvwm-2.5.27.ds/perllib/FVWM/Module/Gtk.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2003 Mikhael Goikhman +# Copyright (c) 2003-2009 Mikhael Goikhman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -21,28 +21,28 @@ use FVWM::Module::Toolkit qw(base Gtk); -sub eventLoop ($@) { +sub event_loop ($@) { my $self = shift; my @params = @_; - $self->eventLoopPrepared(@params); + $self->event_loop_prepared(@params); Gtk::Gdk->input_add( $self->{istream}->fileno, ['read'], sub ($$$) { #my ($socket, $fd, $flags) = @_; #return 0 unless $flags->{'read'}; - unless ($self->processPacket($self->readPacket)) { + unless ($self->process_packet($self->read_packet)) { Gtk->main_quit; } - $self->eventLoopPrepared(@params); + $self->event_loop_prepared(@params); return 1; } ); Gtk->main; - $self->eventLoopFinished(@params); + $self->event_loop_finished(@params); } -sub showError ($$;$) { +sub show_error ($$;$) { my $self = shift; my $msg = shift; my $title = shift || ($self->name . " Error"); @@ -70,7 +70,7 @@ $dialog->show_all; } -sub showMessage ($$;$) { +sub show_message ($$;$) { my $self = shift; my $msg = shift; my $title = shift || ($self->name . " Message"); @@ -89,24 +89,24 @@ $dialog->show_all; } -sub showDebug ($$;$) { +sub show_debug ($$;$) { my $self = shift; my $msg = shift; my $title = shift || ($self->name . " Debug"); - my $dialog = $self->{gtkDebugDialog}; + my $dialog = $self->{gtk_debug_dialog}; if (!$dialog) { - $self->{gtkDebugString} ||= ""; + $self->{gtk_debug_string} ||= ""; $dialog = new Gtk::Dialog; $dialog->set_title($title); $dialog->set_border_width(4); $dialog->set_usize(540, 400); - my $text = $self->{gtkDebugTextWg} || new Gtk::Text(undef, undef); + my $text = $self->{gtk_debug_text_wg} || new Gtk::Text(undef, undef); $text->set_editable(0); - $text->insert(undef, undef, undef, $self->{gtkDebugString}); + $text->insert(undef, undef, undef, $self->{gtk_debug_string}); $dialog->vbox->pack_start($text, 1, 1, 4); my $button = new Gtk::Button "Close"; @@ -117,44 +117,44 @@ $dialog->action_area->pack_start($button, 1, 1, 0); $button->signal_connect("clicked", sub { $text->backward_delete($text->get_length); - $self->{gtkDebugString} = ""; + $self->{gtk_debug_string} = ""; }); $button = new Gtk::Button "Save"; $dialog->action_area->pack_start($button, 1, 1, 0); $button->signal_connect("clicked", sub { - my $fileDialog = new Gtk::FileSelection("Save $title"); - my $fileName = "$ENV{FVWM_USERDIR}/"; - $fileName .= $self->name . "-debug.txt"; - $fileDialog->set_filename($fileName); - $fileDialog->ok_button->signal_connect("clicked", sub { - $fileName = $fileDialog->get_filename; + my $file_dialog = new Gtk::FileSelection("Save $title"); + my $filename = "$ENV{FVWM_USERDIR}/"; + $filename .= $self->name . "-debug.txt"; + $file_dialog->set_filename($filename); + $file_dialog->ok_button->signal_connect("clicked", sub { + $filename = $file_dialog->get_filename; require General::FileSystem; - my $text = \$self->{gtkDebugString}; - General::FileSystem::saveFile($fileName, $text) - if $fileName; - $fileDialog->destroy; + my $text = \$self->{gtk_debug_string}; + General::FileSystem::save_file($filename, $text) + if $filename; + $file_dialog->destroy; }); - $fileDialog->cancel_button->signal_connect("clicked", sub { - $fileDialog->destroy; + $file_dialog->cancel_button->signal_connect("clicked", sub { + $file_dialog->destroy; }); - $fileDialog->show; + $file_dialog->show; }); $dialog->signal_connect('destroy', sub { - $self->{gtkDebugDialog} = undef; - $self->{gtkDebugTextWg} = undef; + $self->{gtk_debug_dialog} = undef; + $self->{gtk_debug_text_wg} = undef; }); $dialog->show_all; - $self->{gtkDebugDialog} = $dialog; - $self->{gtkDebugTextWg} = $text; + $self->{gtk_debug_dialog} = $dialog; + $self->{gtk_debug_text_wg} = $text; } - my $text = $self->{gtkDebugTextWg}; + my $text = $self->{gtk_debug_text_wg}; #$text->set_point($text->get_length); $text->insert(undef, undef, undef, "$msg\n"); - $self->{gtkDebugString} .= "$msg\n"; + $self->{gtk_debug_string} .= "$msg\n"; } 1; @@ -188,23 +188,23 @@ $dialog->show_all; my $id = $dialog->window->XWINDOW(); - $module->addDefaultErrorHandler; - $module->addHandler(M_ICONIFY, sub { + $module->add_default_error_handler; + $module->add_handler(M_ICONIFY, sub { my $id0 = $_[1]->_win_id; $module->send("Iconify off", $id) if $id0 == $id; }); $module->track('Scheduler')->schedule(60, sub { - $module->showMessage("You run this module for 1 minute") + $module->show_message("You run this module for 1 minute") }); $module->send('Style "Simple Test" Sticky'); - $module->eventLoop; + $module->event_loop; =head1 DESCRIPTION The B<FVWM::Module::Gtk> class is a sub-class of B<FVWM::Module::Toolkit> -that overloads the methods B<eventLoop>, B<showError>, B<showMessage> and -B<showDebug> to manage GTK+ version 1 objects as well. +that overloads the methods B<event_loop>, B<show_error>, B<show_message> and +B<show_debug> to manage GTK+ version 1 objects as well. This manual page details only those differences. For details on the API itself, see L<FVWM::Module>. @@ -215,13 +215,13 @@ =over 8 -=item B<eventLoop> +=item B<event_loop> From outward appearances, this methods operates just as the parent -B<eventLoop> does. It is worth mentioning, however, that this version +B<event_loop> does. It is worth mentioning, however, that this version enters into the B<Gtk>->B<main> subroutine, ostensibly not to return. -=item B<showError> I<msg> [I<title>] +=item B<show_error> I<msg> [I<title>] This method creates a dialog box using the GTK+ widgets. The dialog has three buttons labeled "Close", "Close All Errors" and "Exit Module". @@ -231,13 +231,13 @@ Useful for diagnostics of a GTK+ based module. -=item B<showMessage> I<msg> [I<title>] +=item B<show_message> I<msg> [I<title>] Creates a message window with one "Close" button. Useful for notices by a GTK+ based module. -=item B<showDebug> I<msg> [I<title>] +=item B<show_debug> I<msg> [I<title>] Creates a persistent debug window with 3 buttons "Close", "Clear" and "Save". All new debug messages are added to this window (i.e. the existing debug @@ -251,6 +251,8 @@ Useful for debugging a GTK+ based module. +=back + =head1 BUGS Awaiting for your reporting. --- fvwm-2.5.27.ds.orig/perllib/FVWM/Module/Gtk2.pm +++ fvwm-2.5.27.ds/perllib/FVWM/Module/Gtk2.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2003, Mikhael Goikhman +# Copyright (c) 2003-2009, Mikhael Goikhman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -21,28 +21,28 @@ use FVWM::Module::Toolkit qw(base Gtk2 Gtk2::Helper); -sub eventLoop ($@) { +sub event_loop ($@) { my $self = shift; my @params = @_; - $self->eventLoopPrepared(@params); + $self->event_loop_prepared(@params); Gtk2::Helper->add_watch( $self->{istream}->fileno, 'in', sub ($$$) { #my ($socket, $fd, $flags) = @_; #return 0 unless $flags->{'read'}; - unless ($self->processPacket($self->readPacket)) { + unless ($self->process_packet($self->read_packet)) { Gtk2->main_quit; } - $self->eventLoopPrepared(@params); + $self->event_loop_prepared(@params); return 1; } ); Gtk2->main; - $self->eventLoopFinished(@params); + $self->event_loop_finished(@params); } -sub showError ($$;$) { +sub show_error ($$;$) { my $self = shift; my $msg = shift; my $title = shift || ($self->name . " Error"); @@ -70,7 +70,7 @@ $dialog->show_all; } -sub showMessage ($$;$) { +sub show_message ($$;$) { my $self = shift; my $msg = shift; my $title = shift || ($self->name . " Message"); @@ -89,15 +89,15 @@ $dialog->show_all; } -sub showDebug ($$;$) { +sub show_debug ($$;$) { my $self = shift; my $msg = shift; my $title = shift || ($self->name . " Debug"); - my $dialog = $self->{gtkDebugDialog}; + my $dialog = $self->{gtk_debug_dialog}; if (!$dialog) { - $self->{gtkDebugString} ||= ""; + $self->{gtk_debug_string} ||= ""; $dialog = new Gtk2::Dialog; $dialog->set_title($title); @@ -108,7 +108,7 @@ $scroll->set_policy('automatic', 'automatic'); $scroll->set_shadow_type('in'); my $text = Gtk2::TextBuffer->new(undef); - $text->insert($text->get_iter_at_offset(0), $self->{gtkDebugString}); + $text->insert($text->get_iter_at_offset(0), $self->{gtk_debug_string}); my $view = Gtk2::TextView->new; $view->set_buffer($text); $view->set_editable(0); @@ -127,43 +127,43 @@ $dialog->action_area->pack_start($button, 1, 1, 0); $button->signal_connect("clicked", sub { $text->delete($text->get_bounds); - $self->{gtkDebugString} = ""; + $self->{gtk_debug_string} = ""; }); $button = new Gtk2::Button "Save"; $dialog->action_area->pack_start($button, 1, 1, 0); $button->signal_connect("clicked", sub { - my $fileDialog = new Gtk2::FileSelection("Save $title"); - my $fileName = "$ENV{FVWM_USERDIR}/"; - $fileName .= $self->name . "-debug.txt"; - $fileDialog->set_filename($fileName); - $fileDialog->ok_button->signal_connect("clicked", sub { - $fileName = $fileDialog->get_filename; + my $file_dialog = new Gtk2::FileSelection("Save $title"); + my $filename = "$ENV{FVWM_USERDIR}/"; + $filename .= $self->name . "-debug.txt"; + $file_dialog->set_filename($filename); + $file_dialog->ok_button->signal_connect("clicked", sub { + $filename = $file_dialog->get_filename; require General::FileSystem; - my $text = \$self->{gtkDebugString}; - General::FileSystem::saveFile($fileName, $text) - if $fileName; - $fileDialog->destroy; + my $text = \$self->{gtk_debug_string}; + General::FileSystem::save_file($filename, $text) + if $filename; + $file_dialog->destroy; }); - $fileDialog->cancel_button->signal_connect("clicked", sub { - $fileDialog->destroy; + $file_dialog->cancel_button->signal_connect("clicked", sub { + $file_dialog->destroy; }); - $fileDialog->show; + $file_dialog->show; }); $dialog->signal_connect('destroy', sub { - $self->{gtkDebugDialog} = undef; - $self->{gtkDebugTextWg} = undef; + $self->{gtk_debug_dialog} = undef; + $self->{gtk_debug_text_wg} = undef; }); $dialog->show_all; - $self->{gtkDebugDialog} = $dialog; - $self->{gtkDebugTextWg} = $text; + $self->{gtk_debug_dialog} = $dialog; + $self->{gtk_debug_text_wg} = $text; } - my $text = $self->{gtkDebugTextWg}; + my $text = $self->{gtk_debug_text_wg}; $text->insert(($text->get_bounds)[1], "$msg\n"); - $self->{gtkDebugString} .= "$msg\n"; + $self->{gtk_debug_string} .= "$msg\n"; } 1; @@ -182,7 +182,7 @@ use lib `fvwm-perllib dir`; use FVWM::Module::Gtk2; - use Gtk2 -init; # preferably in this order + Gtk2->init; my $module = new FVWM::Module::Gtk2( Debug => 2, @@ -197,23 +197,23 @@ $dialog->show_all; my $id = $dialog->window->XWINDOW(); - $module->addDefaultErrorHandler; - $module->addHandler(M_ICONIFY, sub { + $module->add_default_error_handler; + $module->add_handler(M_ICONIFY, sub { my $id0 = $_[1]->_win_id; $module->send("Iconify off", $id) if $id0 == $id; }); $module->track('Scheduler')->schedule(60, sub { - $module->showMessage("You run this module for 1 minute") + $module->show_message("You run this module for 1 minute") }); $module->send('Style "Simple Test" Sticky'); - $module->eventLoop; + $module->event_loop; =head1 DESCRIPTION The B<FVWM::Module::Gtk2> class is a sub-class of B<FVWM::Module::Toolkit> -that overloads the methods B<eventLoop>, B<showError>, B<showMessage> and -B<showDebug> to manage GTK+ version 2 objects as well. +that overloads the methods B<event_loop>, B<show_error>, B<show_message> and +B<show_debug> to manage GTK+ version 2 objects as well. This manual page details only those differences. For details on the API itself, see L<FVWM::Module>. @@ -224,13 +224,13 @@ =over 8 -=item B<eventLoop> +=item B<event_loop> From outward appearances, this methods operates just as the parent -B<eventLoop> does. It is worth mentioning, however, that this version +B<event_loop> does. It is worth mentioning, however, that this version enters into the B<Gtk2>->B<main> subroutine, ostensibly not to return. -=item B<showError> I<msg> [I<title>] +=item B<show_error> I<msg> [I<title>] This method creates a dialog box using the GTK+ widgets. The dialog has three buttons labeled "Close", "Close All Errors" and "Exit Module". @@ -240,13 +240,13 @@ Useful for diagnostics of a GTK+ based module. -=item B<showMessage> I<msg> [I<title>] +=item B<show_message> I<msg> [I<title>] Creates a message window with one "Close" button. Useful for notices by a GTK+ based module. -=item B<showDebug> I<msg> [I<title>] +=item B<show_debug> I<msg> [I<title>] Creates a persistent debug window with 3 buttons "Close", "Clear" and "Save". All new debug messages are added to this window (i.e. the existing debug @@ -260,6 +260,8 @@ Useful for debugging a GTK+ based module. +=back + =head1 BUGS Awaiting for your reporting. --- fvwm-2.5.27.ds.orig/perllib/FVWM/Module/Toolkit.pm +++ fvwm-2.5.27.ds/perllib/FVWM/Module/Toolkit.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2003 Mikhael Goikhman +# Copyright (c) 2003-2009 Mikhael Goikhman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,7 +18,7 @@ use 5.004; use strict; -use vars qw($VERSION @ISA $_dialogTool); +use vars qw($VERSION @ISA $_dialog_tool); use FVWM::Module; @@ -65,47 +65,47 @@ } } if ($error) { - my $scriptName = $0; $scriptName =~ s|.*/||; - my $errorTitle = 'Fvwm Perl library error'; - my $errorMsg = "$scriptName requires Perl package $name to be installed.\n\n"; - $errorMsg .= "You may either find it as a binary package for your distribution\n"; - $errorMsg .= "or download it from CPAN, http://cpan.org/modules/by-module/ .\n"; - $class->showMessage($errorMsg, $errorTitle, 1); - print STDERR "[$errorTitle]: $errorMsg\n$@"; + my $script_name = $0; $script_name =~ s|.*/||; + my $error_title = 'FVWM Perl library error'; + my $error_msg = "$script_name requires Perl package $name to be installed.\n\n"; + $error_msg .= "You may either find it as a binary package for your distribution\n"; + $error_msg .= "or download it from CPAN, http://cpan.org/modules/by-module/ .\n"; + $class->show_message($error_msg, $error_title, 1); + print STDERR "[$error_title]: $error_msg\n$@"; exit(1); } } -sub showError ($$;$) { +sub show_error ($$;$) { my $self = shift; my $msg = shift; my $title = shift || ($self->name . " Error"); - $self->showMessage($msg, $title, 1); + $self->show_message($msg, $title, 1); print STDERR "[$title]: $msg\n"; } -sub showMessage ($$;$) { +sub show_message ($$;$) { my $self = shift; my $msg = shift; my $title = shift || ($self->name . " Message"); - my $noStderr = shift || 0; # for private usage only + my $no_stderr = shift || 0; # for private usage only - unless ($_dialogTool) { + unless ($_dialog_tool) { my @dirs = split(':', $ENV{PATH}); # kdialog is last because at least v0.9 ignores --title TOOL_CANDIDATE: - foreach (qw(gdialog Xdialog gtk-shell xmessage kdialog)) { + foreach (qw(gdialog Xdialog zenity gtk-shell xmessage kdialog)) { foreach my $dir (@dirs) { my $file = "$dir/$_"; if (-x $file) { - $_dialogTool = $_; + $_dialog_tool = $_; last TOOL_CANDIDATE; } } } } - my $tool = $_dialogTool || "xterm"; + my $tool = $_dialog_tool || "xterm"; $msg =~ s/'/'"'"'/sg; $title =~ s/'/'"'"'/sg; @@ -113,6 +113,8 @@ system("$tool --title '$title' --msgbox '$msg' 500 100 &"); } elsif ($tool eq "gtk-shell") { system("gtk-shell --size 500 100 --title '$title' --label '$msg' --button Close &"); + } elsif ($tool eq "zenity") { + system("zenity --title '$title' --info --text '$msg' --no-wrap &"); } elsif ($tool eq "xmessage") { system("xmessage -name '$title' '$msg' &"); } else { @@ -120,10 +122,10 @@ $msg =~ s/\n/\\n/sg; system("xterm -g 70x10 -T '$title' -e \"echo '$msg'; sleep 600000\" &"); } - print STDERR "[$title]: $msg\n" if $! && !$noStderr; + print STDERR "[$title]: $msg\n" if $! && !$no_stderr; } -sub showDebug ($$;$) { +sub show_debug ($$;$) { my $self = shift; my $msg = shift; my $title = shift || ($self->name . " Debug"); @@ -131,12 +133,12 @@ print STDERR "[$title]: $msg\n"; } -sub addDefaultErrorHandler ($) { +sub add_default_error_handler ($) { my $self = shift; - $self->addHandler(M_ERROR, sub { + $self->add_handler(M_ERROR, sub { my ($self, $event) = @_; - $self->showError($event->_text, "fvwm error"); + $self->show_error($event->_text, "fvwm error"); }); } @@ -160,7 +162,7 @@ There is the same syntactic sugar as in "perl -M", with an addition of ">=" being fully equivalent to "=". The ">=" form may look better for the user in the error message. If the required Perl class is absent, -FVWM::Module::Toolkit->showMessage() is used to show the dialog and the +FVWM::Module::Toolkit->show_message() is used to show the dialog and the application dies. 2) This class should be uses to implement concrete toolkit subclasses. @@ -170,7 +172,7 @@ # this automatically sets the base class and tries "use SomeToolkit;" use FVWM::Module::Toolkit qw(base SomeToolkit); - sub showError ($$;$) { + sub show_error ($$;$) { my ($self, $error, $title) = @_; $title ||= $self->name . " Error"; @@ -182,23 +184,23 @@ ); } - sub eventLoop ($$) { + sub event_loop ($$) { my $self = shift; my @params = @_; # enter the SomeToolkit event loop with hooking $self->{istream} - $self->eventLoopPrepared(@params); + $self->event_loop_prepared(@params); fileevent($self->{istream}, read => sub { - unless ($self->processPacket($self->readPacket)) { + unless ($self->process_packet($self->read_packet)) { $self->disconnect; $top->destroy; } - $self->eventLoopPrepared(@params); + $self->event_loop_prepared(@params); } ); SomeToolkit->MainLoop; - $self->eventLoopFinished(@params); + $self->event_loop_finished(@params); } =head1 DESCRIPTION @@ -209,9 +211,9 @@ widget toolkit libraries and to show an error in the external window like xmessage if the required libraries are not available. -This class overloads one method B<addDefaultErrorHandler> and expects -sub-classes to overload the methods B<showError>, B<showMessage> and -B<showDebug> to use native widgets. These 3 methods are implemented in this +This class overloads one method B<add_default_error_handler> and expects +sub-classes to overload the methods B<show_error>, B<show_message> and +B<show_debug> to use native widgets. These 3 methods are implemented in this class, they extend the superclass versions by adding a title parameter and using an external dialog tool to show error/message. @@ -224,27 +226,27 @@ =over 8 -=item B<showError> I<msg> [I<title>] +=item B<show_error> I<msg> [I<title>] This method is intended to be overridden in subclasses to create a dialog box using the corresponding widgets. The default fall back implementation is -similar to B<showMessage>, but the error message (with title) is also always +similar to B<show_message>, but the error message (with title) is also always printed to STDERR. May be good for module diagnostics or any other purpose. -=item B<showMessage> I<msg> [I<title>] +=item B<show_message> I<msg> [I<title>] This method is intended to be overridden in subclasses to create a dialog box using the corresponding widgets. The default fall back implementation is to find a system message application to show the message. The potentially -used applications are I<gdialog>, I<Xdialog>, I<gtk-shell>, I<xmessage>, -I<kdialog>, or I<xterm> as the last resort. If not given, I<title> is based -on the module name. +used applications are I<gdialog>, I<Xdialog>, I<zenity>, I<gtk-shell>, +I<xmessage>, I<kdialog>, or I<xterm> as the last resort. If not given, +I<title> is based on the module name. May be good for module debugging or any other purpose. -=item B<showDebug> I<msg> [I<title>] +=item B<show_debug> I<msg> [I<title>] This method is intended to be overridden in subclasses to create a dialog box using the corresponding widgets. The default fall back implementation is @@ -253,10 +255,10 @@ May be good for module debugging or any other purpose. -=item B<addDefaultErrorHandler> +=item B<add_default_error_handler> This methods adds a M_ERROR handler to automatically notify you that an error -has been reported by fvwm. The M_ERROR handler then calls C<showError()> +has been reported by fvwm. The M_ERROR handler then calls C<show_error()> with the received error text as a parameter to show it in a window. =back