meta::function('edit', <<'EOF');
my ($name, %options) = @_;
my $extension = extension_for($name);

die "$name is virtual or does not exist" unless exists $data{$name};

associate($name, invoke_editor_on($data{$name} // '', %options,
    attribute => $name, extension => $extension), execute => 1)});

save() unless $data{'data::edit::no-save'};
'';
EOF