Re: FVWM: Module.pm to write module in perl.. documentation?

From: Mikhael Goikhman <migo_at_homemail.com>
Date: Fri, 24 May 2002 20:11:32 +0000

On 24 May 2002 01:36:45 +0200, Riswick, J.G.A. van wrote:
>
> In my fvwm setup I use a perl script that interacts with fvwm
> using FvwmCommand. For instance, when the root menu pops up,
> I use a perl script to insert some items dynamically, like an
> entry 'Close connection' that kills wvdial when it is running. Now,
> sometimes, especially when a lot of applications are running,
> this makes popping up the root menu rather slow.
>
> So I was wondering if it is any faster when I'd convert
> the perl script into a fvwm module.

It depends on the implementation. You may do it in many ways. Using
PipeRead, FvwmCommand, using FvwmPerl (3 ways: eval, load and preprocess).
Even if you decide to create your own module you may do it differently.

(1) A module that creates a menu after receiving a request message.
(2) A module that watches a network and updates a menu when needed.

In (1) you don't spend time on watching network, but spend time when
opening a menu. In (2) you open a menu immediately, but the module works.

Anyway, if you have a persistent module you don't spend time to create
processes and initiate pipes on every menu change, this is done once.

> I stumbeled upon Module.pm. Is this meant to write fvwm
> modules in perl? Unfortunately, I can't find the documentation
> for this interface. Where can I find this?

Documentation will be available once the perl library API is finalized.
For example, I want to add the colorset structure and more.

Currently see the source of FvwmPerl and 4 example modules in perl at:
  ftp://ftp.fvwm.org/pub/fvwm/devel/sources/tests/perl/


--------------------------------------------------------------
Here is an implementation of your module using the method (1).

#!/usr/bin/perl -w
#
# Usage: run this module from StartFunction, then at any time execute:
# SendToModule /path/to/MyMenuCreator create-menu

use lib `fvwm-config -p | tr -d '\n'`;
use FVWM::Module;

my $module = new FVWM::Module(
        Mask => M_STRING,
# SyncMask => M_STRING, # needed to process message synchronously
# Name => "MyMenuCreator", # needed for *MyMenuCreator: config value
# EnableOptions => { q => sub { die "-q is not implemented yet" } },
);

$module->addHandler(M_STRING, sub {
        my $menuName = "MyRootMenu";
        $module->sendText("DestroyMenu $menuName");
        $module->sendText("AddToMenu $menuName bla-bla Title");
        $module->sendText("+ 'Close connection' Exec killall wvdial")
                if grep "ppp0", `cat /proc/net/dev`;
});
$module->eventLoop;


--------------------------------------------------------------
Here is an implementation of your module using the method (2).

#!/usr/bin/perl -w

use lib `fvwm-config -p | tr -d '\n'`;
use FVWM::Module;

my $module = new FVWM::Module;

local $SIG{ALRM} = \&checkNetwork;
alarm(10); # check every 10 seconds

sub checkNetwork {
        if (grep "ppp0", `cat /proc/net/dev`) {
                my $menuName = "MyRootMenu";
                $module->sendText("Beep");
        }
        alarm(10);
}
$module->eventLoop;


Regards,
Mikhael.
--
Visit the official FVWM web page at <URL: http://www.fvwm.org/>.
To unsubscribe from the list, send "unsubscribe fvwm" in the body of a
message to majordomo_at_fvwm.org.
To report problems, send mail to fvwm-owner_at_fvwm.org.
Received on Fri May 24 2002 - 15:12:21 BST

This archive was generated by hypermail 2.3.0 : Mon Aug 29 2016 - 19:37:53 BST