Archive of RubyForge sup-talk mailing list
 help / color / mirror / Atom feed
From: johnbent@lanl.gov (John Bent)
Subject: [sup-talk] missing run-mailcap
Date: Tue, 22 Jan 2008 15:33:22 -0700	[thread overview]
Message-ID: <1201041081-sup-6034@tangerine.lanl.gov> (raw)
In-Reply-To: <1201019996-sup-8960@tangerine.lanl.gov>

Excerpts from John Bent's message of Tue Jan 22 09:40:05 -0700 2008:
> I saw some earlier discussion in the list archives about a missing run-mailcap
> script.  I had this same problem too on my mac (10.4.11 Power PC).  It's sort
> of a kluge but I dealt with this by writing my own /usr/bin/run-mailcap which
> just does a simple hash lookup of mime type to rename the file with an
> appropriate extension and then uses the mac 'open' command.  I haven't fully
> populated the hash table yet; I'll do that lazily.  If the 'file' command
> could return an extension, I'd be tempted to use it and avoid the hash table
> but the best it can do is return the mime-type which we already know.  Or if
> there was some way to pass the mime-type to the 'open' command, that'd be
> better too.  But at least this works...
> 

Here's a cleaner version that doesn't have anything hard-coded but relies
on the 'find' command and the MIME::Types perl module:

============================================================================


#! /opt/local/bin/perl

use MIME::Types;

my ( $type, $file ) = split( /:/, $ARGV[1] );
if ( $type eq 'application/octet-stream' ) {
    $type = findType( $file );
}
my $extension = findExtension( $type );

my $newfile    = "$file.$extension";
my $command    = "open $newfile";
rename( $file, $newfile );
Log( "Extension for $type is $extension -> $command\n" );
system( $command ); 

#######################################################################

sub
findExtension {
    my $mimetypes           = MIME::Types->new;
    my MIME::Type $mimetype = $mimetypes->type($type);
    my @extensions          = $mimetype->extensions;
    return $extensions[0];
}

sub
findType {
    my $file = shift;
    my $type = `file -i -b $file`;
    chomp( $type );
    return $type;
}

my $log_fd;
sub
Log {
    if ( ! defined $log_fd ) {
        open LOG, ">>/tmp/mailcap.log" or warn "open log: $!\n";
        $log_fd = \*LOG;
    }
    #print "@_";
    print LOG "@_";
}


  reply	other threads:[~2008-01-22 22:33 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-22 16:40 John Bent
2008-01-22 22:33 ` John Bent [this message]
2008-01-24 21:40   ` John Bent
2008-01-24 23:26     ` William Morgan
2008-01-24 23:52       ` John Bent
2008-01-25  0:17         ` William Morgan
2008-01-25  0:57           ` Grant Hollingworth
2008-01-25  4:40             ` John Bent
2008-01-26  0:35               ` John Bent
2008-01-30 17:29                 ` William Morgan
2008-01-30 17:54                   ` John Bent
2008-01-30 18:26                     ` William Morgan
2008-01-30 18:35                       ` John Bent
2008-02-03  3:01                         ` William Morgan
  -- strict thread matches above, loose matches on Subject: below --
2008-01-04 23:45 Giorgio Lando
2008-01-04 23:59 ` Giorgio Lando
2008-01-05  0:13 ` William Morgan
2008-01-05  1:01   ` Giorgio Lando

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1201041081-sup-6034@tangerine.lanl.gov \
    --to=johnbent@lanl.gov \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox