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ź:
sudo defaults write /Applications/Preview.app/Contents/Info NSAppleScriptEnabled -bool true
sudo chmod 644 /Applications/Preview.app/Contents/Info.plist
sudo codesign -f -s - /Applications/Preview.app
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:
tell application "Preview" to close window 1
… Lub jeśli chcesz zamknąć okno nazwanego dokumentu, np . foo.jpg
:
powiedz aplikacji „Preview”, aby zamknęła (każde okno o nazwie „ foo.jpg ”)
W skrypcie powłoki byłoby to:
#!/bin/sh
osascript <<EOF
tell application "Preview"
close (every window whose name is "$1")
end tell
EOF
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:
#!/bin/sh
osascript <<EOF
tell application "$1"
close (every window whose name is "$2")
end tell
EOF
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:
osascript <<EOF
tell application "Preview"
set windowCount to number of windows
repeat with x from 1 to windowCount
set docName to (name of document of window x)
if (docName is equal to "$1") then
close window x
end if
end repeat
end tell
EOF
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:
osascript <<EOF
tell application "$1"
set windowCount to number of windows
repeat with x from 1 to windowCount
set docName to (name of document of window x)
if (docName is equal to "$2") then
close window x
end if
end repeat
end tell
EOF
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:
defaults write -g NSDisableAutomaticTermination -bool TRUE
Oczywiście, aby to cofnąć, zmień TRUE
na FALSE
.
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.
cw() {
osascript <<EOF
tell application "$1"
set windowCount to number of windows
repeat with x from 1 to windowCount
set docName to (name of document of window x)
if (docName is equal to "$2") then
close window x
end if
end repeat
end tell
EOF
}
Po zapisaniu profilu bash i zrestartowaniu powłoki możesz dzwonić cw Preview foo.pdf
z dowolnego miejsca.