On Sunday January 23 2011 16:25:41 Rex Dieter wrote:
Dj YB wrote:
> Hello,
> I am creating a desktop file for a service menu, and can't find out how
> to use the directory from which the action was launched.
>
> this is how it looks:
>
> Exec=convert %F `kdialog --title "save PDF" --getsavefilename join.pdf`;
>
> this is how I want it to look:
>
> Exec=convert %F `kdialog --title "save PDF" --getsavefilename
> $PWD/join.pdf`;
>
> that doesn't work.
According to
http://standards.freedesktop.org/desktop-entry-spec/latest/ar01s06.html
looks like you might want %f here, and I'd bet it's a full path, so perhaps
substituting `dirname %f` for $PWD may give you want you want.
Hello, Rex
thank you for the reply.
using %f doesn't work for me, the input is several files and not a single file.
and so dirname %f returns nothing.
however I solved the problem using dirname in an external perl script that
extract the dirname from one of the parameters received.
the end result is as follows:
[Desktop Action images2pdf]
Exec=name=`perl ~/bin/lcss.pl %F`; convert %F `kdialog --title "save PDF" --
getsavefilename "$name.pdf"`;
Icon=application-pdf
Name=Single PDF
while lcss.pl was taken from somewhere online and modified to:
#! perl -slw
use strict;
sub lcss (\$\$) {
my ($needle, $haystack) = @_;
($needle, $haystack) = ($haystack, $needle)
if length $$needle > length $$haystack;
my ($longest_c, $longest) = 0;
for my $start (0..length $$needle) {
for my $len ( reverse $start+1 .. length $$needle) {
my $substr = substr($$needle, $start, $len);
length $1 > $longest_c and ($longest_c, $longest) = (length $1,
$1)
while $$haystack =~ m[($substr)]g;
}
}
return $longest;
}
my $size=@ARGV;
my $needle = $ARGV[0];
$needle=~s/[\']*//g;
my $dirname=`dirname $needle`;
chop $dirname;
my $haystack='';
for (my $i=1 ; $i<$size; $i++)
{
$haystack = $ARGV[$i];
$haystack=~s/[\']*//g;
$needle=`basename $needle`;
$haystack=`basename $haystack`;
chop $needle;
chop $haystack;
$needle=lcss($needle, $haystack);
}
print "$dirname/$needle";
--
this way the suggested file name is the longest common string from all the files
basenames and the location is the files dirname.
Regards,
YB.