#!/usr/bin/perl use strict; use warnings; # zu nutzende Temporäre Datei my $file='/tmp/test.txt'; # Typ der Datei my $file_mime='text/plain'; # Datei erzeugen und mit irgendwas füllen # echo ist einfach am kürzesten :) system("echo Das ist ein test > $file")==0 or die "Konnte \"$file\" nicht erstellen ($@)"; # es gibt module, # die zuverlässig unbenutzte temporäre Dateienamen erzeugen. # für das Beispiel hier nutze ich sie nicht... # offizielle XDG Pfade wo Daten zu finden sind my @xdg_base=grep{$_ ne ''}split(/\:/,$ENV{XDG_DATA_DIRS}); # wir brauchen nur den "applications" Ordner @xdg_base=map{$_.='applications/'}@xdg_base; # Herausfinden was der defaulteditor für diesen MimeType ist # zurück geliefert wird eine *.desktop referenz my $d_file=`xdg-mime query default $file_mime`; die $@ if($@); chomp($d_file); # Die *.desktop Datei suchen for my $path (@xdg_base) { if(-e $path.$d_file) { $d_file=$path.$d_file; last; } } die "$d_file nicht gefunden" if(!-f $d_file); my $d_exec; # Datei auslesen open(my $FH, '<', $d_file) or die "$!"; # uns interessiert nur die "Exec=" Zeile while(<$FH>){chomp; last if(($d_exec)=$_=~/^Exec=(.+)$/i); print "$_\n"} close($FH); die "executable nicht gefunden" unless($d_exec); # %F sind Pfadlisten # %f ist ein Pfad # %U sind URL Listen # %u ist eine URL # Alle kommen mit einer einfachen Datei klar $d_exec=~s/\%F|\%U/$file/gi; # Das Programm starten system($d_exec)==0 or die "$@"; # Datei wieder einlesen my $data=do{ local(@ARGV,$/)=$file; <>; } or die "$!"; # Datei löschen unlink($file) or warn "$!"; # daten ausgeben/verarbeiten print "DATA:\n$data\n";