Jak działa schowek w macOS Tahoe

Jak działa schowek w macOS Tahoe

Krótka odpowiedź: Schowek w macOS to ogólnosystemowa usługa zwana pasteboard. Gdy kopiujesz, aplikacja źródłowa przekazuje systemowi jedną lub kilka reprezentacji tej samej treści (zwykły tekst, tekst sformatowany, obraz, odwołanie do pliku), a licznik zmian rośnie o jeden. Gdy wklejasz, aplikacja docelowa wybiera najbogatszy format, jaki rozumie. Tahoe zachowuje ten model, dodaje wbudowaną historię schowka w Spotlight i dalej zaostrza ochronę prywatności w kontekście aplikacji czytających schowek w tle.

Skrót ⌘C naciskasz czterdzieści razy dziennie. Prześledźmy jedno takie naciśnięcie od początku do końca, bo prawie każda dziwna sytuacja ze schowkiem (tekst wklejony w złej czcionce, obraz, który wylądował jako plik, hasło pojawiające się w aplikacji z historią) wynika z któregoś kroku tej drogi.

Czym jest schowek w macOS?

Schowek to technicznie general pasteboard, czyli współdzielona usługa systemowa, do której aplikacje docierają przez API NSPasteboard. Nie jest to plik ani widoczna aplikacja. Przechowuje naraz jeden aktualny zestaw elementów, a kolejne kopiowanie go zastępuje. To właśnie od słowa „pasteboard» pochodzi przedrostek pb w narzędziach terminala, takich jak pbcopy i pbpaste.

Dwa szczegóły mają znaczenie dla wszystkiego, co opisuję dalej:

  • Schowek trzyma jedną rzecz naraz. macOS nigdy nie miał natywnej wieloelementowej historii ogólnego schowka w stylu ⊞V z Windowsa. Historia to dodatek budowany na wierzchu. Funkcja w Spotlight z Tahoe to pierwsze systemowe podejście Apple do tego tematu (więcej niżej).
  • Jedna kopia to w rzeczywistości kilka kopii. Pojedyncze ⌘C może umieścić w schowku wiele reprezentacji tej samej treści jednocześnie.

Co się dzieje po naciśnięciu ⌘C?

  1. Aplikacja przejmuje schowek. Czyści starą zawartość i deklaruje, co dostarczy. W tym momencie change count schowka (liczba całkowita) rośnie o jeden.
  2. Aplikacja oferuje wiele typów. Każdy z nich identyfikuje Uniform Type Identifier (UTI), ten sam mechanizm, który rozpoznaje typy plików.
  3. Dane mogą być dostarczane leniwie. Aplikacja może obiecać dany format, a bajty wytworzyć dopiero wtedy, gdy ktoś faktycznie wklei. Dzięki temu duże kopie (spory obraz, zakres komórek arkusza) nic nie kosztują, dopóki nie są potrzebne.

Dlaczego wklejanie do różnych aplikacji daje różne wyniki?

Bo wybiera aplikacja docelowa. Skopiuj sformatowany akapit z Safari, a w schowku może jednocześnie znaleźć się kilka wersji:

Reprezentacja Typowy identyfikator typu Kto ją wybiera
Zwykły tekst public.utf8-plain-text Terminale, edytory kodu, pola wyszukiwania
Tekst sformatowany (RTF) public.rtf TextEdit, Pages, Mail
HTML public.html Edytory webowe, Notatki, pola z formatowaniem
Obraz public.png / public.tiff Podgląd, Keynote, narzędzia graficzne
Odwołanie do pliku public.file-url Finder, załączniki w Mailu, komunikatory

Edytor kodu bierze zwykły tekst i ignoruje HTML, więc stylowanie znika. Notatki biorą HTML i zachowują formatowanie. Żadne z tych zachowań nie jest błędem. Stąd też istnieje skrót ⌥⇧⌘V (Wklej i dopasuj styl): prosi aplikację docelową o preferowanie wersji w zwykłym tekście i zastosowanie lokalnego formatowania.

Zobacz to na własne oczy w Terminalu

Nie musisz wierzyć na słowo. Skopiuj cokolwiek i uruchom:

osascript -e 'clipboard info'

Polecenie wypisze każdy typ aktualnie znajdujący się w schowku wraz z rozmiarem w bajtach. Skopiuj zakres komórek z Numbers, potem akapit ze strony internetowej i porównaj obie listy. Ta różnica to cała historia tego, dlaczego wklejanie zachowuje się inaczej w różnych aplikacjach. Wersję tekstową wypisze pbpaste, a echo "hello" | pbcopy zapisuje coś do schowka.

Skąd Mac wie, że schowek się zmienił?

W zasadzie nikomu tego nie komunikuje. O ile wiadomo z publicznie udokumentowanych API, NSPasteboard nie oferuje powiadomienia typu „schowek się zmienił». Aplikacje, którym na tym zależy, czyli każdy menedżer schowka, odpytują change count w krótkim interwale i czytają zawartość tylko wtedy, gdy liczba się zmieni. Jest to tanie, bo odczyt liczby całkowitej kosztuje praktycznie nic.

Ma to praktyczne konsekwencje:

  • Aplikacja z historią nie zobaczy niczego, co skopiowałeś, gdy nie była uruchomiona.
  • Jeśli dwie kopie nastąpią szybciej niż interwał odpytywania, pierwsza może zostać pominięta. Interwał odpytywania w Maccy da się regulować w ustawieniach .
  • Change count rośnie również wtedy, gdy aplikacja ponownie zapisuje tę samą treść, dlatego narzędzie z historią potrzebuje własnej deduplikacji.

Co nowego w Tahoe?

Historia schowka w Spotlight

Najważniejsza zmiana Tahoe w tym temacie to nowy widok Schowek w Spotlight. Otwierasz Spotlight, przełączasz się na niego (w zestawie skrótów Apple dla nowych kategorii Spotlight schowek ma przypisane ⌘4 ) i możesz przeglądać ostatnie kopie oraz wkleić którąś z powrotem. Apple opisuje tę historię jako krótkotrwałą, sięgającą wstecz tylko około ośmiu godzin .

To czyni ze Spotlight przyzwoitą siatkę bezpieczeństwa na okoliczność „skopiowałem to godzinę temu». Nie jest natomiast, według deklarowanych założeń, archiwum długoterminowym: bez tygodniowych snippetów, bez przypiętych ulubionych i bez reguł ignorowania per aplikacja, jakie oferują wyspecjalizowane narzędzia .

Ostrzejsza ochrona prywatności przy odczycie schowka

Apple zmierza w stronę uwidaczniania użytkownikowi programowych odczytów schowka. Podwaliny pojawiły się jako nowe API zachowań dostępu do pasteboard dla deweloperów, a kierunek to komunikat w stylu iOS, gdy aplikacja czyta schowek bez wklejenia wykonanego przez użytkownika. Jak ściśle Tahoe egzekwuje to wobec zwykłych aplikacji firm trzecich i jakie ustawienie widzi użytkownik, warto sprawdzić na maszynie z Tahoe, zanim zaczniesz na tym polegać . Ma to znaczenie dla menedżerów schowka, bo ich zadaniem jest właśnie czytanie schowka w tle, więc sprawdź w dokumentacji każdej aplikacji, jak wygląda sytuacja z uprawnieniami w Tahoe.

Czy schowek synchronizuje się między Makiem a iPhone’em?

Tak, przez Uniwersalny schowek (Universal Clipboard). To element Continuity: zaloguj się na to samo konto Apple na obu urządzeniach, włącz Handoff, miej włączone Bluetooth i Wi-Fi i trzymaj urządzenia blisko siebie. Kopiujesz na jednym, wklejasz na drugim. Przesłana treść jest dostępna tylko przez krótki czas, więc działa to jak przekazanie (handoff), a nie zsynchronizowana historia. Jest też jednoelementowy: każda nowa kopia zastępuje poprzednią.

Jeśli przestaje działać, zwykle winne jest wyłączone Handoff, wyłączony Bluetooth albo urządzenia zalogowane na różne konta Apple. Klasyczna pierwsza pomoc to wyłączenie i ponowne włączenie Handoff.

Co pozostaje prywatne, a co nie?

Schowek może odczytać każda aplikacja, której na to pozwolono. Nie ma szyfrowania pojedynczych kopii. Społeczność wypracowała więc konwencję: aplikacje kopiujące dane wrażliwe oznaczają je specjalnymi typami pasteboard, opisanymi na nspasteboard.org, takimi jak org.nspasteboard.ConcealedType (hasła) i org.nspasteboard.TransientType (treści krótkotrwałe). Menedżery haseł zwykle je ustawiają, a dobrze zachowujące się menedżery schowka pomijają wszystko, co je niesie.

Maccy przestrzega tej konwencji. W ustawieniach, w sekcji Ignore, możesz przeglądać i edytować listę ignorowanych typów pasteboard oraz całkowicie ignorować wybrane aplikacje . Dwa zastrzeżenia, uczciwie: znaczniki to konwencja, a nie mechanizm wymuszający, więc aplikacja, która ich nie ustawia, zostawia swoje dane odsłonięte, a wszystko, co skopiujesz, jest widoczne dla każdej aplikacji uprawnionej do odczytu schowka, dopóki nie zostanie nadpisane.

Wbudowany schowek a menedżer schowka

Wbudowany schowek (pasteboard) Historia w Spotlight (Tahoe) Dedykowany menedżer (np. Maccy)
Liczba przechowywanych elementów Jeden Tylko niedawne, mniej więcej godziny Konfigurowalna historia
Wyszukiwanie Nie Przez Spotlight Tak, wpisujesz, by filtrować
Ignorowanie wrażliwych aplikacji/typów Nie dotyczy Tak
Zapis na dysku Nie Lokalnie na Twoim Macu
Koszt W cenie systemu W cenie systemu Maccy: darmowy i open source

Jeśli tylko od czasu do czasu potrzebujesz odzyskać niedawną kopię, historia w Spotlight może w zupełności wystarczyć. Jeśli codziennie wklejasz z tego samego zestawu snippetów albo chcesz wykluczeń wrażliwych aplikacji i dłuższej historii, dedykowany menedżer ma swoje uzasadnienie. Maccy App działa z paska menu, domyślnie otwiera się skrótem ⇧⌘C i jest zbudowany wokół filtrowania z klawiatury . Którąkolwiek drogę wybierzesz, wszystko powyżej nadal obowiązuje, bo każde narzędzie siedzi na tym samym pasteboard.

Rozwiązywanie problemów: gdy schowek szwankuje

  • Wklejanie nic nie robi albo wkleja stare dane. Skopiuj coś banalnego z pola zwykłego tekstu, żeby zresetować stan, i spróbuj ponownie. Jeśli problem wraca, uruchom ponownie aplikację, do której wklejasz.
  • Formatowanie ciągnie się za Tobą. Używaj Wklej i dopasuj styl (⌥⇧⌘V).
  • Skopiowałeś plik, a wkleiła się jego ścieżka (lub odwrotnie). Aplikacja wybiera inną reprezentację, niż się spodziewałeś. Sprawdź, co jest w schowku, poleceniem osascript -e 'clipboard info'.
  • Uniwersalny schowek działa kapryśnie. Upewnij się, że to samo konto Apple, Handoff, Bluetooth i Wi-Fi są włączone.
  • Ostateczność. Wyloguj się i zaloguj ponownie albo zrestartuj Maca. Usługa pasteboard jest zarządzana przez system i startuje na nowo wraz z Twoją sesją.

Model mentalny, który warto zapamiętać

Kopiowanie publikuje paczkę formatów i podbija licznik. Wklejanie to wybór aplikacji docelowej z tej paczki. Cała reszta, czyli historia, synchronizacja i prywatność, jest zbudowana na tym prostym fundamencie. Gdy zobaczysz paczkę za pomocą clipboard info, większość zagadek ze schowkiem przestaje być zagadkami.

Która wpadka przy wklejaniu irytuje Cię najbardziej: gubione formatowanie, brak historii, a może coś innego? Daj znać, a być może stanie się tematem kolejnego poradnika.



Игорь Балькин
Автор: Игорь Балькин. Веб-разработчик с 2001 года. Разработчик сайтов на WordPress, CRM и веб-приложений. Минск, Беларусь. Контактная информация.