[Mew-dist 04122] Re: IM-86: IM::Config does not consider which selectors are defined?
Makoto MATSUSHITA ( まつしたまこと )
matusita at example.com
1998年 3月 7日 (土) 18:18:04 JST
matusita> というわけで,このままじゃ辛いのでなんとなく Config.pm を触
matusita> りたいと思っているのですが,
というわけでなんとなく触ってみました.やったことは以下の通りです.
・case X 時に定義される値は $DEFSELECTORS{'X'} で示される hash にはいっ
てることにする
・&used_selectors と同様な &defined_selectors を作ってこいつで値を戻す
手元で動かしてみて,一応期待した通りに動いていることを確認しています.
この後 impath を触ろうと一瞬思ったのですが「それは impath の仕事じゃな
い」と思ったのでまずこれはやめました.触るならば,impath の一部機能ま
で含めて imsetup にくっつけてしまえばいいんじゃねえのか? と次に思った
のですが(FreeBSD の sysinstall は,install する時以外にも使いますし:-),
imsetup とは別に impath が単独で存在している意味を知らないのでやめました.
-- -
Makoto `MAR' MATSUSHITA
これさえあれば,あとは 3 statements の perl program ですぐにできる.
*** Config.pm.in.orig Tue Feb 10 13:45:34 1998
--- Config.pm.in Sat Mar 7 18:03:17 1998
***************
*** 31,37 ****
read_cfg_selector
init_opt
read_env read_cfg read_opt
! set_selector used_selectors
sanity_check
help
home_dir conf_dir
--- 31,37 ----
read_cfg_selector
init_opt
read_env read_cfg read_opt
! set_selector defined_selectors used_selectors
sanity_check
help
home_dir conf_dir
***************
*** 57,63 ****
@O_IORD %O_DESC %O_VNAM %O_FULL %O_ABBR %O_HELP
$O_FOPT %C_DESC %C_VNAM
%WHO_SET
! @SELECTORS);
$CURRENT_DIR = $ENV{'PWD'} || eval { use Cwd; fastcwd(); } ||
im_die("can't get your current directory\n");
--- 57,63 ----
@O_IORD %O_DESC %O_VNAM %O_FULL %O_ABBR %O_HELP
$O_FOPT %C_DESC %C_VNAM
%WHO_SET
! %DEFSELECTORS @SELECTORS);
$CURRENT_DIR = $ENV{'PWD'} || eval { use Cwd; fastcwd(); } ||
im_die("can't get your current directory\n");
***************
*** 318,327 ****
s/\s*$//;
if (/^case\s*(.*)/) {
($case = $1) =~ s/\s*//g;
! # make sure defined(%{$case}) is true
foreach (split(',', $case)) {
! $_->{0} = '';
! delete $_->{0};
}
next;
}
--- 318,327 ----
s/\s*$//;
if (/^case\s*(.*)/) {
($case = $1) =~ s/\s*//g;
! # make sure defined(%{$DEFSELECTORS{$case}}) is true
foreach (split(',', $case)) {
! $DEFSELECTORS{$_}->{0} = '';
! delete $DEFSELECTORS{$_}->{0};
}
next;
}
***************
*** 431,449 ****
foreach $s (split(',', lc($selector))) {
next if ($s eq 'default');
! unless (defined(%{$s})) {
im_err("no 'case $s' in config file.\n");
return -1;
} else {
push(@SELECTORS, $s);
! foreach (keys(%{$s})){
! ${$_} = $s->{$_};
}
}
}
return 0;
}
sub used_selectors () {
return join(',', @SELECTORS);
}
--- 431,453 ----
foreach $s (split(',', lc($selector))) {
next if ($s eq 'default');
! unless (defined(%{$DEFSELECTORS{$s}})) {
im_err("no 'case $s' in config file.\n");
return -1;
} else {
push(@SELECTORS, $s);
! foreach (keys(%{$DEFSELECTORS{$s}})){
! ${$_} = $DEFSELECTORS{$s}->{$_};
}
}
}
return 0;
}
+ sub defined_selectors() {
+ return join(',', sort keys %DEFSELECTORS);
+ }
+
sub used_selectors () {
return join(',', @SELECTORS);
}
***************
*** 613,631 ****
if ($desc =~ /[bB]/) {
if ($val =~ /^(yes|on|true|1)$/i) {
! $case->{$vnam} = 1;
} else {
! $case->{$vnam} = 0;
}
} elsif ($desc =~ /F/) { # xxx how about f
# +inbox -> + inbox -> --src +inbox
if ($val =~ /^[+\-=%]/) {
! $case->{$vnam} = $val;
} else {
! $case->{$vnam} = "+$val";
}
} else {
! $case->{$vnam} = $val;
}
return 1;
--- 617,635 ----
if ($desc =~ /[bB]/) {
if ($val =~ /^(yes|on|true|1)$/i) {
! $DEFSELECTORS{$case}->{$vnam} = 1;
} else {
! $DEFSELECTORS{$case}->{$vnam} = 0;
}
} elsif ($desc =~ /F/) { # xxx how about f
# +inbox -> + inbox -> --src +inbox
if ($val =~ /^[+\-=%]/) {
! $DEFSELECTORS{$case}->{$vnam} = $val;
} else {
! $DEFSELECTORS{$case}->{$vnam} = "+$val";
}
} else {
! $DEFSELECTORS{$case}->{$vnam} = $val;
}
return 1;
Mew-dist メーリングリストの案内