Czy możesz zastąpić piaskownicę aplikacji, zmusić aplikację do korzystania z katalogu roboczego?

1

Próbuję skonfigurować asymptote na moim komputerze Mac, który jest matematycznym językiem graficznym dla LaTeX. Program jest narzędziem wiersza poleceń systemu Unix. Zgodnie z instrukcjami konfiguracji na stronie http://asymptote.sourceforge.net/doc/Configuring.html możesz ustawić czytnik PDF do automatycznego otwierania za pomocą tego narzędzia. Po ustawieniu pdfviewer="/Applications/Preview.app/Contents/MacOS/Preview";(która jest ścieżką do wiersza poleceń wykonywalnego dla Preview.app), wówczas renderowanie grafiki z asymptotą powoduje następujący błąd:

2012-10-10 10:15:08.758 Preview[45884:707] PVPDFPageContainer initWithURL:out.pdf -- file://localhost/Users/username/Library/Containers/com.apple.Preview/Data/ failed, error = Error Domain=NSCocoaErrorDomain Code=260 "The file “out.pdf” couldn’t be opened because there is no such file." UserInfo=0x7f99f2c6d590 {NSFilePath=/Users/username/Library/Containers/com.apple.Preview/Data/out.pdf, NSUnderlyingError=0x7f99f2c6d500 "The operation couldn’t be completed. No such file or directory"}

Najwyraźniej Preview próbuje otworzyć dokument według nazwy pliku w lokalnym katalogu piaskownicy ~/Library/Containers/com.apple.Preview/Data/. Czy mogę w jakiś sposób nadpisać to zachowanie i zmusić Preview do szukania pliku w katalogu roboczym procesu?

zyggurizm
źródło
Jeśli nie można zmusić aplikacji Mac do otwierania plików w katalogu roboczym zamiast katalogu piaskownicy, być może zmuszenie asymptoty do przekazania pełnej nazwy ścieżki zamiast samej nazwy pliku do podglądu zadziałałoby. Jak to zrobić, to oczywiście pytanie do społeczności tex, a nie społeczności mac.
zyggurizm 10.10.12
Ogólnym rozwiązaniem może być pośredni skrypt powłoki, który tworzy bezwzględną nazwę pliku na podstawie pliku względnego do bieżącego katalogu roboczego. „readlink <nazwa pliku>” da to wyjście.
Danny Staple,

Odpowiedzi:

0

Utwórz skrypt powłoki - tj. Asympdf.sh o następującej treści:

/Applications/Preview.app/Contents/MacOS/Preview `readlink -f $1`

Jeśli umieścisz ten skrypt gdzieś, tj. W pobliżu asymptotowych plików binarnych, możesz ustawić ustawienie pdfviewer tak, aby wskazywało na ten skrypt.

Danny Staple
źródło
To dobre rozwiązanie. Dziękuję Ci. Czy możesz mi powiedzieć, co robi Commlink readlink? Nie znam tego, a strona podręcznika była trudna do zrozumienia.
zyggurizm
1
Readline jest pierwotnie przeznaczony do podążania za dowiązaniami symbolicznymi i pobierania oryginalnego pliku, ale można go również wykorzystać do uzyskania bezwzględnych ścieżek w bash. Strona man opisuje go jako „kanonizujący” - to znaczy znaleźć jeden prawdziwy plik, na który wskazują wszystkie dowiązania symboliczne (i ścieżka może mieć więcej niż jeden).
Danny Staple
Więc właściwie nie mogę tego uruchomić. readlink kończy działanie z opcją „readlink: niedozwolona opcja - f”. Jestem na lwie górskim 10.8, więc może różne wersje readlink zaakceptowały tę opcję? Również użycie „stat -f” nie działało (strona podręcznika readlink sugerowała taką alternatywę), w rzeczywistości wydaje się, że musisz dołączyć specyfikator formatu do przełącznika -f, więc spróbowałem „stat -f”% N „nazwa pliku” , ale po prostu wyświetla nazwę pliku, a nie pełną nazwę ścieżki, więc nadal nie działał.
zyggurizm
Wydaje mi się, że skoro skrypt powłoki dziedziczy mój bieżący katalog roboczy, nie muszę zadzierać z readlink ani nic takiego. Mogę tylko podać wyjściową nazwę pliku, out.pdf. Ostatecznie mój skrypt jest po prostu „open -a /Application/Preview.app out.pdf”. Bash przekazuje nazwę pliku do bieżącego katalogu roboczego i przekazuje go do Preview, czyli dokładnie tego, czego chcę.
ziggurizm
Ach, oczywiście - zapomniałem, że wersja GNU nie jest tym, co jest dostępne w OSX (readlink działa w Linuksie lub jeśli masz zainstalowane wersje GNU) - ma to alternatywę - stackoverflow.com/questions/1055671/… - ale jako mówisz, że możesz po prostu użyć pwd.
Danny Staple