help (was: Templates in FHEM)

Begonnen von rudolfkoenig, 12 März 2017, 10:33:00

Vorheriges Thema - Nächstes Thema

betateilchen

#15
Zitat von: betateilchen am 12 März 2017, 19:11:05
Wenn alle Command-Module nämlich intern als solche gekennzeichnet sind, läßt sich auch für "help" ohne Parameter eine entsprechende Liste erzeugen (so wie es commandref_join ja auch tut)

Ich bin jetzt testweise einen anderen Weg gegangen. Eben habe ich eine Modulversion von 98_help.pm eingecheckt, die commands zumindest in der Liste aufführt, auch wenn das Modul selbst noch nicht geladen ist. In diesem Fall erscheint ein Hinweis, dass mit "help <name>" mehr Infos zu bekommen sind.
(siehe screenshot). Sobald der Befehl dann einmal ausgeführt wurde, wird in der Liste auch der Hilfetext aus der Moduldatei angezeigt.

Wenn man die hierfür in 98_help.pm neu eingebaute Funktion cref_fill_list() (die weitgehend aus commandref_join.pl kopiert wurde) in die fhem.pl übernehmen und beim Systemstart aufrufen würde, wäre der erste Aufruf von "help" erheblich schneller (und nicht blockierend).


sub cref_fill_list(){

  my %mods;
  my %modIdx;
  my @modDir = ("FHEM");

  foreach my $modDir (@modDir) {
    opendir(DH, $modDir) || die "Cant open $modDir: $!\n";
    while(my $l = readdir DH) {
      next if($l !~ m/^\d\d_.*\.pm$/);
      my $of = $l;
      $l =~ s/.pm$//;
      $l =~ s/^[0-9][0-9]_//;
      $mods{$l} = "$modDir/$of";
      $modIdx{$l} = "device";
      open(MOD, "$modDir/$of") || die("Cant open $modDir/$l");
      while(my $cl = <MOD>) {
        if($cl =~ m/^=item\s+(helper|command|device)/) {
          $modIdx{$l} = $1;
          last;
        }
      }
      close(MOD);
    }
  }

  foreach my $mod (sort keys %mods) {
    my %h = (  Fn => undef,
      Hlp => "Command $mod not loaded. Use \"help $mod\" for more help" );
    $cmds{$mod} = \%h if ( ($modIdx{$mod} eq "command") && !(defined($cmds{$mod})) );
  }
}


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!