File::M...cations(3)

✨ NAME ✨

okay bestie, welcome to the File::M...cations(3) page from the User Contributed Perl Documentation girlies πŸ’…. This one is File::MimeInfo::Applications β€” find programs to open a file by mimetype. Periodt.


🌈 SYNOPSIS 🌈

  use File::MimeInfo::Magic;
  use File::MimeInfo::Applications;

  my $file = '/foo/bar';
  my $mimetype = mimetype($file)
    || die "Could not find mimetype for $file\n";

  my ($default, @other) = mime_applications($mimetype);

  if (defined $default) {
    $default->system($file)
  }
  else {
    # prompt user with choice from @others
    # ...
  }

πŸ’– DESCRIPTION πŸ’–

okay so this module is literally out here trying to find applications that can open files with a certain mimetype πŸ¦‹. It does this in the way suggested by the freedesktop Desktop Entry specification, and the whole vibe is being compatible with file managers and other applications that implement that spec. Slay.

This module depends on File::DesktopEntry being installed. No cap.

To use this module effectively, you need the desktop-file-utils package from freedesktop, and you need to run update-desktop-database after installing new .desktop files. See <http://www.freedesktop.org/wiki/Software/desktop-file-utils>. That's the whole assignment πŸ’–.

At the moment of writing, this module is compatible with how Nautilus (Gnome) and Thunar (XFCE) handle applications for mimetypes. I understand KDE is still working on implementing the freedesktop mime specifications but will follow. At the very least, all perl applications using this module are using the same defaults β€” lowkey iconic πŸ‘‘.


πŸŽ€ EXPORT πŸŽ€

All methods are exported by default. You don't have to ask for them individually, bestie β€” they're already in the group chat 🫢.


πŸ¦‹ METHODS πŸ¦‹

mime_applications(MIMETYPE)

Returns an array of File::DesktopEntry objects. The first one is the default application for this mimetype, and the rest are applications that say they can handle this mimetype.

If the first result is undefined, there is no default application, and it is good practice to ask the user which application they want to use. That's your cue to give them a cute little choice menu ✨.

mime_applications_all(MIMETYPE)

Like mime_applications() but also takes into account applications that can open mimetypes from which MIMETYPE inherits. Parent mimetypes tell you something about the data format β€” all code inherits from text/plain, for example. iykyk 🧚.

mime_applications_set_default(MIMETYPE, APPLICATION)

Save a default application for this mimetype. Heads up: this action will affect other applications using the same mechanism to find a default application. It's giving shared defaults energy πŸ’….

APPLICATION can either be a File::DesktopEntry object or the basename of a .desktop file. Both are valid, no stress.

mime_applications_set_custom(MIMETYPE, COMMAND)

Save a custom shell command as the default application. It generates a DesktopEntry file on the fly and calls mime_applications_set_custom. Returns the DesktopEntry object. Yes, that's what it says, bestie 😭.

No checks are done at all on COMMAND. It should however contain at least one word. That's the whole safety briefing β€” proceed accordingly πŸ’€.

πŸ“ NOTES πŸ“

This module looks for associations files in the order specified in version 1.0 of the MIME applications specification. It will also attempt a last-resort fallback to the legacy file $XDG_DATA_HOME/applications/defaults.list. In all cases, it will only write to the recommended per-user defaults file located at $XDG_CONFIG_HOME/mimeapps.list. So it reads around, but it writes there β€” noted πŸ“.


πŸ‘‘ AUTHOR πŸ‘‘

Jaap Karssenberg <pardus@cpan.org> β€” maintained by Michiel Beijen <mb@x14.nl>. Legends, honestly 🫢.


Copyright (c) 2005, 2012 Jaap G Karssenberg. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Respect the license, bestie πŸ’œ.


⭐ SEE ALSO ⭐


mwah πŸ’‹ β€” this was perl v5.42.0, dated 2024-04-26, signing off from File::M...cations(3). byeee 🫢✨

πŸ“¦ where this page comes from