Новосибирский институт органической химии им. Н.Н. Ворожцова СО РАН Лаборатория изучения механизмов органических реакций |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mldn#!/usr/bin/perl -ws our ($h,$help,$c,$g,$slow); if ($h or $help) { (my $program = $0) =~ s/.*[\/\\]//; print " Usage: $program file OR cat file | $program Зависимости: molden, linux\n Запускалка для molden'а. Запускает molden с некоторыми полезными опциями, заодно отвязывая его от терминала. Кроме того, позволяет позволяет передавать molden'у stdout через pipe. \n"; exit; } # Если интернет медленный, раскомментируйте след. строку #$slow = 1; @ARGV = map {"'$_'"} @ARGV; my $molden = $g ? `which gmolden` : `which molden`; #my $molden = $g ? 'gmolden' : 'molden'; chomp $molden; #if (@ARGV && @ARGV>1) { # $molden = `which molden47`; # chomp $molden; #} die "No molden\n" unless $molden; #print "$molden\n"; my $options = '-A -l -j 999 -c 0.2 -S -m -p 0.0 -hdmin 1.31 -hdmax 2.2 -hamin 90 -hamax 180'; if ($c) { #die "No fast_internet\n" if $slow; my ($screenX, $screenY) = `xdpyinfo | grep 'dimensions:'` =~ /(\d+)x(\d+)/; #print "$screenX, $screenY\n"; $screenX ||= 1280; $screenY ||= 1024; my $frameX = 12; my $frameY = 28; my $XY = int($screenY*7/16); my $x0 = 48; my $y0 = 0; my $COL = int($#ARGV/2); for (my $i=0; $i<@ARGV; $i++) { # xprop -name MOLDEN -set WM_NAME qwertu my ($x,$y); $y = $i%2 ? $y0+$XY+$frameY : $y0; my $col = int($i/2); if ($x0+$XY*($COL+1) <= $screenX) { $x = $x0 + ($XY+$frameX)*$col; } else { $x = $x0 + int(($screenX-$x0-$XY)/($COL||1)*$col); } system("$molden -geom ${XY}x$XY+$x+$y $options $ARGV[$i] > /dev/null 2>&1 &"); #print "$molden -geom ${XY}x$XY+$x+$y $options $ARGV[$i] > /dev/null 2>&1 &\n"; if (! $slow) { select(undef, undef, undef, 0.1); # As sleep(0.1) #sleep 1; system("xprop -name MOLDEN -set WM_NAME $ARGV[$i]"); system("xprop -name 'Molden Control' -set WM_NAME '$ARGV[$i] Control'"); #system('xprop', '-name', 'MOLDEN', '-set', 'WM_NAME', $ARGV[$i]); #system('xprop', '-name', 'Molden Control', '-set', 'WM_NAME', "$ARGV[$i] Control"); } } exit; } if (@ARGV) { print "$molden -geom 640x480 $options @ARGV > /dev/null 2>&1 &\n"; system "$molden -geom 640x480 $options @ARGV > /dev/null 2>&1 &"; if (@ARGV==1 and ! $slow) { #print "$molden -geom 640x480 $options @ARGV > /dev/null 2>&1 &\n"; sleep 1; system("xprop -name MOLDEN -set 'WM_NAME' $ARGV[0]"); } } elsif (-p STDIN) { # If pipe $tmp = '/tmp/mldn_tmp'; open TMP, "> $tmp" or die "$!\n"; print TMP while <>; close TMP; if (-s "$tmp") { exec "($molden -geom 640x480 $options $tmp > /dev/null 2>&1 &); sleep 1; rm -f $tmp"; } else { unlink $tmp; die "No input for molden found\n"; } } else { exec "($molden -geom 640x480 $options > /dev/null 2>&1 &)"; } |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||