Mac OS X K vašim službám... Jak jsme si slíbili minule, dnes se podrobněji podíváme na systém služeb - Services. Jde o univerzální systém pro vzájemnou integraci služeb mezi aplikacemi, která, zhruba řečeno, umožňuje využití možností kterékoli aplikace z libovolné jiné. Mimochodem, Mac OS X 10.1 už je k dispozici a Services skutečně podporuje i v Carbonu. Je tu ale stále jeden problém - Carbon není moderní API, umožňující vývojářům prostě přebírat plně funkční objekty z knihoven jako Cocoa; cokoli má v Carbonu fungovat, o to se musí programátor aplikace explicitně postarat. Jelikož o Services se dosud "kamenouhelní" programátoři nepostarali - dokonce ani ti applovští, kteří pracují na Finderu -, jsou Services v carbonovských aplikacích sice k dispozici, ale nefungují... Inu, jak už jsem mnohokrát psal, Carbon nám byl čert dlužen. Následující text se proto bude týkat všech aplikací Cocoa a těch mála carbonovských, jejichž programátoři se obtěžovali podporu Services do svých aplikací přidat. O co vlastně jde... Jde vlastně o promyšlené a šikovné rozšíření standardního systému copy/paste: představte si, že máte k dispozici aplikaci, která snímá data z obrazovky. Pak je samozřejmé, že do ní můžete kdykoli přepnout, sejmout požadovaný snímek, uložit jej do schránky, přepnout zpět do aplikace, ve které snímek potřebujete, a získat jej příkazem Paste. To je standardní postup. Je ale zbytečně nepohodlný a systém Services umožňuje jeho výrazné zjednodušení - prostě otevřeme menu Services/Grab a vybereme třeba Selection (obr. 1). To nám umožní označit požadovaný obdélník na obrazovce, a jakmile s označováním skončíme, jeho obsah se vloží na místo kurzoru do textu, který právě píšeme. Samozřejmě že nejde o novou, až dosud utajenou službu aplikace TextEdit: označování a snímání obrazovky ve skutečnosti zajistila aplikace Grab, jejíž službu jsme si - prostřednictvím TextEditu a systému Services - vyžádali. Co se tedy vlastně dělo? * Hned při loginu systém zjistil, že (mj.) aplikace Grab nabízí (mj.) službu Selection, a to komukoli, kdo je schopen zpracovávat obrázky. * Při běhu aplikace TextEdit dala systému na vědomí, že na místo kurzoru lze (mj.) vložit obrázek. * Na základě toho systém zajistil, že v menu Services aplikace TextEdit je k dispozici položka Grab/Selection. * Pokud tuto položku vybereme, systém předá požadavek Selection aplikaci Grab (pokud aplikace neběží, systém ji automaticky spustí na pozadí). * Aplikace Grab zpracuje požadavek (tím, že nám umožní označit obdélník na obrazovce, a sejmutím jeho obsahu) a výsledná data předá systému. * Ten data (tj. obrázek) předá aplikaci TextEdit, která službu vyvolala; aplikace obrázek vloží na místo kurzoru. Podstatné je to, že jde o naprosto obecný systém, který není nijak vázán na speciální systémové triky (jako snímání obrazovky a la Classic): přesně stejným způsobem může libovolná aplikace nabízet libovolnou službu libovolné jiné aplikaci. Umožňuje-li tedy například aplikace Mail odeslání textu elektronickou poštou, budeme mít její nabídku k dispozici kdykoli, když budeme zpracovávat text: v Editu, v DTP programu nebo třeba ve Finderu při přejmenovávání souboru (jakmile bude mít Apple dost rozumu na to, aby Finder přepsal do API Cocoa). Aplikace Grab dokáže snímat data z obrazovky a nabízet je ve formátu TIFF; pracujeme-li s libovolnou aplikací, která dokáže přijmout formát TIFF, můžeme si z ní prostřednictvím aplikace Grab vyžádat sejmutí obrazovky zcela stejně, jako jsme to před chvílí udělali v TextEditu. Podívejme se zběžně na služby, které nabízejí aplikace standardně dodávané se systémem Mac OS X 10.1. Služby pro práci s textem Text dokáže zpracovávat nejvíc aplikací: * Disk Copy umí připojit diskový image zadaného jména (Disk Copy/Mount Image). * Mail dokáže zkonstruovat zprávu, která zadaný text použije buď jako adresu příjemce (Mail/Mail To), nebo jako obsah zprávy (Mail/Mail Text). * Stickies umí vytvořit novou "nálepku", obsahující označený text (Make Sticky). * TextEdit umí otevřít soubor zadaného jména (TextEdit/Open File), nebo vytvořit nový dokument, obsahující označený text (TextEdit/Open Selection). * Programátorská aplikace JavaBrowser dokáže také převzít a zpracovat text. Navíc je zde trochu záhadná aplikace Summary Service, která dokáže označený text jakýmsi způsobem sumarizovat: něco nechá (zřejmě by to mělo být to podstatné), něco vypustí (zřejmě by to mělo být to nedůležité). Musím se ale přiznat, že se mi logiku její práce dosud nepodařilo pochopit, ani jsem v OS X nenašel její dokumentaci. Služby pro práci s grafikou V současné verzi OS X nabízí služby pro práci s grafikou jen jediná ze standardních aplikací: již známá aplikace Grab, která umí získat snímek obrazovky a předat jej jako obrázek volající aplikaci. Služby pro práci se soubory Označit můžeme ledacos - nejen text nebo grafiku, ale také soubor nebo soubory. Už od dob NeXTStepu proto existovala i řada Services, jež dokázaly pracovat s označenými soubory - například komprimační aplikace a podobně. (Samozřejmě že u carbonovského Stuffitu to nehrozí; slušný OpenUp napsaný v Cocoa však tyto služby pochopitelně nabízí. Podobně jako OmniWeb ani OpenUp už Apple do systému bohužel nezahrnuje. OpenUp je ale k dispozici prostřednictvím Softraku na www.stepwise.com.) V současné verzi OS X je však s těmito službami problém: je zřejmé, že základní aplikací, ze které služby pracující se soubory vyvoláváme, by měl být Finder (možná ještě ProjectBuilder při zobrazování obsahu projektu). Bohužel, Finder je napsán v Carbonu a Services nepodporuje vůbec a ProjectBuilder je napsán jakýmsi ne zcela standardním způsobem (ignoruje např. řadu systémových nastavení) a služby nad označenými soubory také nepodporuje. Ačkoli tedy služby nad soubory a složkami nabízejí dvě standardní aplikace - Mail dokáže pomocí služby Mail/Mail Document odeslat zvolený soubor; vývojářská aplikace FileMerge umí porovnat obsah dvou označených souborů (FileMerge/Compare Files), nebo jednoho souboru proti vybranému základnímu souboru (FileMerge/Compare To Master) a zobrazit rozdíly -, je nám to v praxi málo platné, protože ve standardní instalaci OS X není žádná aplikace, ze které by bylo možné tyto služby využívat! Co můžeme mít k dispozici? Jakkoli jsou služby nabízené současnými standardními aplikacemi OS X poměrně omezené, aplikace třetích firem mohou nabídnout nesmírně bohatou paletu služeb. Jakmile se o implementaci služeb začnou starat i programátoři carbonovských aplikací, bude to ještě lepší. Již dnes například můžeme používat poměrně velmi slušný program na prohledávání disku MTLibrarian (ačkoli ani zdaleka nedosahuje kvalit Digital Librarianu, který Apple bohužel nepřevzal z NeXTStepu, je nesrovnatelně lepší než cokoli jiného, co je zatím pro OS X k dispozici; naleznete jej v Softraku na www.stepwise.com). MTLibrarian nabízí vyhledání libovolného textu: označíte text, použijete službu a MTLibrarian hned zobrazí nalezené výskyty. Webový prohlížeč OmniWeb, který Apple jako součást systému již bohužel nedodává (namísto něj je standardní součástí OS X Microsoft Explorer), dokáže otevřít libovolné URL, označené v kterékoli aplikaci jako text. Podívejte se také na obr. 2: na něm je seznam všech služeb všech aplikací, jež jsem používal v NeXTStepu - existovalo jich samozřejmě ještě více, ale NeXTStep na rozdíl od OS X umožňoval uživateli nepoužívané služby skrýt, aby se v nabídkách zbytečně nepletly. Můžeme se těšit, že časem bude pro Mac OS X k dispozici přinejmenším stejně bohatá nabídka; zatím si však musíme ještě chvíli počkat. Ondřej Čada