Próbuję utworzyć polecenie powłoki oparte na Applescript, które nakazuje aplikacji Preview z Mac OS X zamknięcie określonego okna.
#!/bin/sh
osascript <<EOF
tell application "Preview"
close "$1"
end tell
EOF
Ale to nie działa: pojawia się komunikat o błędzie
25:52: execution error: Preview got an error: "musixdoc.pdf" doesn’t understand the close message. (-1708)
Powiązane pytanie: Jak zamknąć aplikację OS X z wiersza poleceń przy użyciu aliasu zdefiniowanego w moim pliku .bash_profile?
macos
shell-script
applescript
Ewan Delanoy
źródło
źródło
Odpowiedzi:
Pobieranie Preview.app do akceptowania poleceń AppleScript
Domyślnie podgląd AppleScripting nie działa, ponieważ podglądowi brakuje niezbędnego słownika. Aby to naprawić, sprawdź odpowiedź Lauriego tutaj , która wyjaśnia ustawienie
NSAppleScriptEnabled
Preview.app.Zamknij Preview.app, otwórz terminal i wprowadź:
Zamykanie okna z aplikacji
1) Według indeksu lub nazwy okna
Polecenie zamknięcia okna dowolnej nazwanej aplikacji wyglądałoby mniej więcej tak:
… Lub jeśli chcesz zamknąć okno nazwanego dokumentu, np .
foo.jpg
:W skrypcie powłoki byłoby to:
Tutaj pierwszym argumentem przekazanym do skryptu jest nazwa okna, które chcesz zamknąć, np
./quit.sh foo.jpg
. Pamiętaj, że jeśli plik zawiera spacje, musisz podać nazwę pliku, np./quit.sh "foo bar.jpg"
.Lub jeśli chcesz zamknąć dowolne okna z dowolnej aplikacji, użyj tego:
Tutaj użyłbyś
./quit.sh Preview foo.jpg
na przykład.2) Według nazwy pliku
Jeśli chcesz zamknąć okno należące do określonego dokumentu, ale podając nazwę pliku, potrzebujesz czegoś innego. Wynika to z faktu, że wielostronicowy plik PDF może być wyświetlany jako
foo.pdf (Page 1 of 42)
, ale użytkownik chce po prostu przejśćfoo.pdf
do AppleScript.Tutaj iterujemy przez okna i porównujemy nazwy plików z argumentem przekazanym do skryptu:
Teraz możesz po prostu zadzwonić
./quit.sh foo.pdf
. W uogólniony sposób dla wszystkich aplikacji z nazwanymi oknami dokumentów będą to:Zastrzeżenie: automatyczne zamykanie Preview.app
Preview.app to jedna z tych aplikacji, która automatycznie zamyka się po zamknięciu ostatniego okna dokumentu. Robi to w celu oszczędzania pamięci i „czyszczenia”. Aby wyłączyć to zachowanie, uruchom następujące polecenie:
Oczywiście, aby to cofnąć, zmień
TRUE
naFALSE
.Używanie funkcji zamiast skryptów
Na koniec sugeruję włączenie skryptów w funkcję, która jest zawsze dostępna w twojej powłoce. Aby to zrobić, dodaj skrypty do swojego
~/.bash_profile
. Utwórz ten plik, jeśli nie istnieje.Po zapisaniu profilu bash i zrestartowaniu powłoki możesz dzwonić
cw Preview foo.pdf
z dowolnego miejsca.źródło
tell application "Preview" to windows
, czy to daje jakieś wyniki? Jaki dokładnie skrypt uruchamiasz?Odpowiedź slhck wygląda dobrze i dokładnie. Uwaga, wykonanie trzeciej linii kodu :
„wydaje się” powodować awarię Preview przy każdym uruchomieniu z następującymi przyczynami:
Zgodnie z instrukcją
-f
do podpisywania znaków wymusza to „zastąpienie i zastąpienie istniejącego podpisu kodem” oraz-s
„podpisanie kodu podaną ścieżką”… w tym przypadku-
Najwyraźniej Preview jest teraz nieprawidłowo podpisana i nie nadaje się do użytku. :(
źródło