]>
nmode's Git Repositories - Fey/blob - lib/App/Fey.pm
c137002901e2aa6dfa7cb86b83695dbd94dbbc5f
7 our @EXPORT_OK = qw(fey);
11 my ($class, $options) = @_;
12 my $config = do ($ENV{XDG_CONFIG_HOME
} // "$ENV{HOME}/.config") . '/fey/config.pl';
15 mime_query
=> $options->{mime_query
} // $config->{mime_query
} // sub {
16 open my $mime_type, '-|', 'file', '--brief', '--mime-type', $_[0];
19 contexts
=> $options->{contexts
} // $config->{contexts
} // { default => sub { 1 } },
20 targets
=> $options->{targets
} // $config->{targets
} // {}
28 my $options = ref $_[0] ? shift : {};
30 die "No files or URIs specified.\n" unless @_;
32 ARG
: for my $file_or_uri (@_) {
33 if ($options->{fork} && !$options->{single
}) {
38 $file_or_uri = $1 if ($file_or_uri =~ m
|^file
://(.+)|);
39 my $mime_or_uri = -e
$file_or_uri ? $self->{mime_query
}->($file_or_uri) : $file_or_uri;
41 for my $target (@{ $self->{targets
} }) {
42 for my $pattern (@{ $target->{patterns
} }) {
43 if ($mime_or_uri =~ /$pattern/) {
44 my $associations = $target->{associations
};
45 for my $context (keys %{ $associations }) {
46 if ($self->{contexts
}->{$context}->()) {
47 if ($options->{single
}) {
48 $associations->{$context}->(@_);
51 $associations->{$context}->($file_or_uri);
52 return if ($options->{fork});
63 App
::Fey-
>new(ref $_[0] ? $_[0] : {})->launch(@_);