PopClip scriptingextensies

PopClip is een geweldig hulpprogramma dat, als je er eenmaal aan gewend bent, heel moeilijk is om zonder te leven. Deze zelfstudie laat zien hoe een scripting-extensie kan worden geschreven door een voorbeeldextensie te maken.

In deze tutorial zal ik je laten zien hoe je een PopClip-extensie kunt maken door een extensie te bouwen die naar een bijbelverwijzing zoekt die moet worden geselecteerd, de referentie in het Engels of Thais opzoekt met een web-API, en de juiste couplet (en) op zijn plaats plakt . Je leert een PopClip-extensie te maken die een PHP-script gebruikt, een reguliere expressie voor activering, instellingsvoorkeuren die de gebruiker kan bewerken en het gebruik van sneltoetsen om de voorkeuren te overschrijven.


Uw extensie definiëren

Het eerste dat moet worden gedaan, is beslissen wat de extensie gaat doen. Maak altijd elke extensie met een enkele functionaliteit in gedachten. Omdat ik een zendeling ben, schrijf ik voortdurend aantekeningen over bijbelverzen. Ik zou graag een extensie hebben die een bijbelverwijzing zal bevatten en die verzen of verzen in mijn document in zowel het Thais als het Engels zal plakken. Daarom zal de extensie precies dat doen!

Maar soms heb ik misschien de ene of de andere taal nodig. Daarom moet de extensie beschikken over een voorkeurenpaneel en sneltoetsen om de voorkeuren te overschrijven. Dat klinkt misschien als een hoop werk, maar PopClip maakt het gemakkelijk.

Ik vond een geweldige website, Efeziërs 4:14, die het downloaden van verzen uit zowel de King James Bible in het Engels als de Thaise King James Bible mogelijk maakt. Omdat ik met de Thaise taal werk, zijn dit de enige bijbels die ik nodig heb. Ze hebben ook veel andere talen. Daarom kunt u toevoegen welke taal u ook interesseert.


Popclip-bronnen

Als u onlangs PopClip hebt geïnstalleerd, leest u eerst de gebruikershandleiding van PopClip. De tutorial, Create Your Own Custom Extension voor PopClip, geeft een geweldige introductie tot PopClip en hoe extensies te maken die geen programmering vereisen. Deze tutorial zal zich richten op script-programmeer-uitbreidingen voor PopClip.

Pilotmoon geeft een volledige lijst met opties voor plist-configuratiebestanden. Raadpleeg dit altijd voor de nieuwste documentatie van de uitbreidingsinterface voor PopClip.

De extensie wordt geschreven in PHP. Als je niet weet hoe je in PHP moet programmeren, kun je een uitstekende videocursus vinden op Tuts +: PHP Fundamentals.


De bestandsstructuur

Waar u ook op uw computer zult werken, maak een map aan met de naam popclipBible.popclipext. Die map zal er als een normaal bestand uitzien, maar als je er met de rechtermuisknop op klikt en het pop-upmenu selecteert Toon Inhoud van de verpakking, het zal de inhoud van die map tonen. U moet de bestanden maken Config.plist, bible.php, en bible.png in deze map.

Config.plist is het plist-bestand dat in de volgende sectie wordt beschreven. bible.php bevat het PHP-script dat moet worden uitgevoerd. bible.png is het grafische bestand voor de extensie. Al deze bevinden zich bovenaan in het downloadbestand.


De Plist

Alle extensies voor PopClip starten met een plist-bestand genaamd Config.plist. Dit bestand vertelt PopClip hoe de extensie past in de wereld van PopClip. De volledige plist voor deze extensie is:

     acties   Na pasta-resultaat Beeldbestand bible.png Script-tolk / Usr / bin / php Shell-scriptbestand bible.php Titel Bijbel   opties   Optie-ID biblekjv Optie Type boolean Optie label KJB   Optie-ID biblethaikjv Optie Type boolean Optie label Thaise KJV   Extensiebeschrijving Zoek Bijbelverzen op in Popclip. Extension Identifier com.customct.popclip.extension.bible Extensienaam Bijbel Langdurig  Reguliere expressie (* \ D + \. \ D + (\ - \ + d) *) Vereiste softwareversie 701  

Zoals te zien is het een XML-geformatteerd gegevensbestand. Dit gegevensbestand vertelt PopClip alles wat het moet weten om de extensie uit te voeren.

Dit is de minimale vereiste voor deze extensie. Het hoofdwoordenboek heeft de toetsen acties en opties. Dit zijn de belangrijkste vermeldingen voor het bieden van de functionaliteit van de extensie. Ik zal ze hieronder in meer detail beschrijven. De andere toetsen zijn:

Extensiebeschrijving
Deze sleutel geeft een beschrijving van wat de extensie zal doen. Dit moet kort maar beschrijvend zijn.

Extension Identifier
Deze sleutel geeft een unieke ID voor uw extensie. Ik baseerde het op mijn website voor volledige uniciteit. Het kan met elk alfanumeriek vervolg, maar iets leesbaars is altijd leuk.

Extensienaam
Deze sleutel is de naam van de extensie. Ik noem het gewoon Bijbel.

Langdurig
Deze sleutel is ingesteld op true, omdat er een Web API-aanroep wordt uitgevoerd die even duurt om te voltooien vanwege de netwerksnelheid. Dit heeft gewoon PopClip een wacht-pictogram laten zien tijdens het uitvoeren van de actie.

Als de verlenging niet lang duurt, moet deze onjuist zijn.

Reguliere expressie
De waarde van deze sleutel is een reguliere expressie die het starten van de extensie alleen toestaat als true wordt beweerd voor de momenteel geselecteerde tekst. Door een reguliere expressie te schrijven die alleen overeenkomt met een bijbelverwijzing, wordt de bijbelextensie niet bij elke tekstselectie weergegeven.

Maak goed gebruik van deze functie. Als u met een willekeurige tekstselectie wordt weergegeven, wordt het moeilijker voor de gebruiker van de extensie. Bedenk hoe iemand de extensie wil gebruiken en maak een goede reguliere expressie voor die kwestie.

Als je een beetje roestig bent bij het schrijven van reguliere expressies, zou je dit artikel over Net Tuts moeten lezen+.

Vereiste softwareversie
Deze sleutel geeft de versie van PopClip aan die deze extensie nodig heeft.


acties

De actietoetsen dienen voor het definiëren van de actie die de extensie zal uitvoeren. Er zijn veel mogelijkheden, maar deze tutorial zal zich alleen richten op de benodigde items. Ze zijn als volgt:

Na
Dit specificeert de actie die moet worden ondernomen na het uitvoeren van het script. pasta-resultaat zal in de bovenste applicatie plakken, ongeacht in welke tekst het script echoot.

Beeldbestand
Deze sleutel geeft het pictogram aan dat voor deze extensie wordt gebruikt. Omdat het pictogram in hetzelfde gebied als de extensie staat, kunt u eenvoudig naar het bestand verwijzen: bible.png. Als u de pictogrammen in een subdirectory van de extensie wilt behouden, gebruikt u een relatieve verwijzing naar dat bestand.

Script-tolk
Deze sleutel definieert de interpreter voor het verwerken van het script. Aangezien ik dit programma in PHP aan het doen ben, moet het verwijzen naar de standaard PHP-interpreter op alle Macs: / Usr / bin / php. U kunt het volledige pad plaatsen naar elke tolk die u wilt gebruiken om extensies te schrijven.

Shell-scriptbestand
Deze sleutel definieert het bestand in de map van de extensie die moet worden uitgevoerd. De bestandsnaam is: bible.php.

Titel
Deze sleutel is de titel van de extensie: Bijbel.


opties

De opties sleutel bevat een reeks woordenboeken. Eén woordenboek voor elke optie in het voorkeurenpaneel voor de extensie. Voor deze extensie moet de gebruiker de mogelijkheid hebben om te plakken in de KJV-Bijbel of de Thaise KJV-Bijbel. Omdat ik twee opties voor deze extensie heb, zal ik elke sleutel in de opties woordenboek en vertel wat ik voor elke optie heb gebruikt.

Optie-ID
Deze sleutel geeft PopClip een unieke naam voor de optie die u nodig hebt voor uw extensie. Dit wordt gebruikt in de omgevingsvariabele die aan uw programma wordt doorgegeven. Voor de twee opties worden deze id's gebruikt: biblekjv en biblethaikjv.

Optie Type
Deze sleutel definieert wat voor soort optie het is. Het kan een van beide zijn boolean (Ja of nee), draad (elke tekenreeks), of meerdere (U geeft een lijst met opties op en de gebruiker kan er uit kiezen). De boolean type is wat nodig is voor deze extensie.

Optie label
Deze sleutel definieert de tekst die moet worden gebruikt in het optiepaneel voor de extensie. Voor deze extensie, de labels KJB en Thaise KJV zal werken.

Met deze opties die zijn gedefinieerd in de plist, wordt een voorkeurenpaneel gemaakt voor het bewerken van de voorkeuren. Dit is hoe het eruit zal zien:

Bijbelse voorkeuren

Het script

Nu moet het script worden geschreven. Het volledige script is:

  $ url, CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_TIMEOUT => 4); $ ch = curl_init (); curl_setopt_array ($ ch, ($ options + $ defaults)); if (! $ result = curl_exec ($ ch)) trigger_error (curl_error ($ ch));  curl_close ($ ch); return $ resultaat;  // // Functie: getBibleVerse // // Beschrijving: deze functie is voor het ophalen van een Bijbel // -vers van de api.preachingcentral.com // website. // // Inputs: // $ verse De verzen waarnaar moet worden gezocht. // $ version De versie van de bijbel om te gebruiken. // functie getBibleVerse ($ verse, $ version) global $ book; $ result = ""; $ raw = urlencode ($ couplet); $ xml = curl_get ("http://api.preachingcentral.com/bible.php?passage=$raw&version=$version"); $ xml_parser = xml_parser_create (); xml_parse_into_struct ($ xml_parser, $ xml, $ vals, $ index); xml_parser_free ($ xml_parser); $ eerst = 0; $ quote = 0; foreach ($ vals als $ xml_elem) if (strcmp ($ xml_elem ['tag'], "TEXT") === 0) if ($ quote == 0) $ result = $ result. '' '. $ xml_elem [' waarde ']; $ quote = 1; else $ result = $ result. ".. $ xml_elem [' value ']; if (strcmp ($ xml_elem [' tag '] , "RESULT") === 0) if ($ first == 0) if (strcmp ($ version, "thai") === 0) // // De site retourneert alleen boeknamen in het Engels. Vertaal ze // naar Thai. // $ blist = explode ("", $ xml_elem ['value']); $ bname = "; $ bver = "; if (count ($ blist) == 3) $ bname = $ blist [0]. $ blist [1]; $ bver = $ blist [2]; elseif (count ($ blist) = = 4) $ bname = $ blist [0]. $ Blist [1]. $ Blist [2]; $ bver = $ blist [3]; else $ bname = $ blist [0]; $ bver = $ blist [1]; $ result = $ book [$ bname]. "". $ bver; else // // English is prima hier. // $ result = $ xml_elem ['value']; $ eerst = 1; else $ result = $ result. '"'. "\ n \ n". $ Xml_elem [ 'value'];  $ quote = 0;  return $ resultaat. '";; // // Download de PopClip-omgevingsvariabelen voor de // extensie. // $ verse = trim (getenv (' POPCLIP_TEXT ')); $ qKJV = getenv (' POPCLIP_OPTION_BIBLEKJV '); $ qThaiKJV = getenv ( "POPCLIP_OPTION_BIBLETHAIKJV"); $ keycode = intval (getenv ('POPCLIP_MODIFIER_FLAGS')); $ results = ""; // // Als de voorkeur is ingesteld op KJV of de opdrachttoets // is ingedrukt, haalt u het vers uit de Engelse KJV // en voeg het toe aan het resultaat Als zowel de commandotoets // en de control-toets wordt ingedrukt, haal dan ook de KJV. // if (($ qKJV [0] == '1') || ( $ keycode == 1048576) || ($ keycode == 1310720)) $ results. = getBibleVerse ($ verse, "kjv"). "\ n"; // // Als de voorkeur is ingesteld op de Thaise KJV of de // -toets is ingedrukt, haal dan het vers uit de // Thai KJV en voeg het toe aan het resultaat.Als zowel de // -opdrachtentoets als de bedieningstoets wordt ingedrukt, // haal dan ook de Thaise versie. if (($ qThaiKJV [0] == '1') || ($ keycode == 262144) || ($ keycode == 1310720)) $ results. = getBibleVerse ($ verse, "thai"). "\ n "; // // Alle ding dat uit het script komt zal in // worden geplakt tot de top applicatie van PopClip. Als de resultaten // niets is, retourneert u het couplet. // if (strcmp ($ results, "") === 0) echo $ verse;  else echo $ resultaten; ?>

Het eerste ding in het script is een reeks van de namen van de boeken in de Bijbel. Deze array is voor het vertalen van de Engelse boeknamen naar hun Thaise equivalent. De web-API die door de extensie wordt gebruikt, geeft alleen referenties in het Engels. De namen van de Engelse Bijbelboeken moeten dus worden vertaald in het Thais.

De eerste functie is een hulpfunctie. Het is een PHP-routine voor het aanvragen van informatie van een website met behulp van krullen en het retourneren van de resultaten naar het oproepende programma. De invoer is de URL van het verzoek.

De tweede functie is de hoofdfunctie voor het verwerken van het bijbelvers. Het zal de bijbelvers opvragen en de resulterende XML verwerken tot een beter leesbaar formaat om in de teksteditor te plakken of welk programma ooit actief is. De parameters zijn het eigenlijke Bijbelvers en de aanduiding waarvoor de Bijbel het vraagt. Voor de King James Bijbel is dat zo kjv. Voor de Thaise Bijbel is dat zo Thais. U kunt andere codes verkrijgen via de bovenstaande sitekoppeling.


Informatie verkrijgen uit de omgeving

PopClip stuurt informatie naar het script via omgevingsvariabelen. Het is een eenvoudige manier om te communiceren. Dit is hoe je toegang krijgt tot die informatie.

 // // Haal de PopClip-omgevingsvariabelen op voor de // -extensie. // $ verse = trim (getenv ('POPCLIP_TEXT')); $ qKJV = getenv ('POPCLIP_OPTION_BIBLEKJV'); $ qThaiKJV = getenv ("POPCLIP_OPTION_BIBLETHAIKJV"); $ keycode = intval (getenv ('POPCLIP_MODIFIER_FLAGS')); $ results = "";

De PHP-functie getenv () zal de omgevingsvariabele ophalen die is gegeven in de reeks voor de functieaanroep. Alle omgevingsvariabelen zijn tekenreeksen en moeten als zodanig worden gebruikt. De verschillende omgevingsvariabelen zijn:

POPCLIP_TEXT
Deze variabele is de selectie wanneer PopClip is aangeroepen. Omdat de gebruiker van de extensie extra witruimte kan selecteren, gebruik ik altijd het trimmen () functie om extra witte ruimte te verwijderen.

POPCLIP_OPTION_BIBLEKJV
Deze variabele is de optie om het vers uit de King James-versie te krijgen. Het is een string die het karakter bevat 1 indien waar, anders bevat het het karakter 0.

POPCLIP_OPTION_BIBLETHAIKJV
Deze variabele is de optie om het couplet uit de Thaise King James-versie te krijgen. Het is een string die het karakter bevat 1 indien waar, anders bevat het het karakter 0.

POPCLIP_MODIFIER_FLAGS
Dit vertelt het gebruik van welke toetsen werden ingedrukt terwijl de PopClip-actie was geselecteerd. Alles dat wordt doorgegeven in een omgevingsvariabele is een tekenreeks. Daarom moeten de tekenreeksen ook worden vertaald in een gemakkelijk te gebruiken indeling. ik gebruik de intval () functie om de string naar een geheel getal te converteren.

Alle verschillende sleutelcodewaarden worden getoond in de PopClip Extensions GitHub.

Zoals te zien is, heeft elke optie in de voorkeuren voor de extensie zijn eigen overeenkomstige omgevingsvariabele.

De resultaatvariabele $ is ook ingesteld op een lege reeks om de volgende twee secties te vullen.


Verwerking van de omgevingsvariabelen

Het belangrijkste onderdeel van elke PopClip-extensie is om de variabelen in de omgeving door te nemen en er iets nuttigs mee te doen.

 // // Als de voorkeur is ingesteld op KJV of de opdrachttoets // is ingedrukt, haalt u het vers uit de Engelse KJV // en voegt u het aan het resultaat toe. // if (($ qKJV [0] == '1') || ($ keycode == 1048576) || ($ keycode == 1310720)) $ results. = getBibleVerse ($ verse, "kjv"). "\ n"; 

Dit gedeelte van de code haalt het vers uit de King James-versie als het was ingesteld in de voorkeuren (de variabele $ qKJV) of de opdrachttoets werd ingedrukt tijdens het selecteren van de actie PopClip ($ keycode is 1048576). Hij zal het ook vragen als zowel de bedieningstoetsen als de opdrachttoetsen worden ingedrukt ($ keycode is 1310720). Aangezien de variabele $ qKJV een tekenreeks is die 1 of 0 is, kunt u controleren of het eerste teken een teken 1 is. Op die manier hoeft het niet naar een getal te worden verwerkt. Dat kan wat tijd besparen!

Als de voorwaarde waar is, worden de verzen opgehaald met behulp van de getBibleVerse () functie en toegevoegd aan de $ result string.

 // // Als de voorkeur is ingesteld op de Thaise KJV of de // -toets is ingedrukt, haalt u het vers uit de // Thai KJV en voegt u het toe aan het resultaat. // if (($ qThaiKJV [0] == '1') || ($ keycode == 262144) || ($ keycode == 1310720)) $ results. = getBibleVerse ($ verse, "thai"). "\ N"; 

Hier is het vergelijkbaar. Als de Thaise King James-versie was geselecteerd in de voorkeuren ($ qThaiKJV) of de bedieningstoets werd ingedrukt tijdens het selecteren van de PopClip-actie ($ keycode is 262144), zal de Thaise King James-versie worden aangevraagd. Hij zal het ook vragen als zowel de bedieningstoetsen als de opdrachttoetsen worden ingedrukt ($ keycode is 1310720).

Als de voorwaarde waar is, worden de verzen opgehaald met behulp van de getBibleVerse () functie en toegevoegd aan de $ result string.

 // // Alle echo's van het script worden geplakt in // naar de top van de applicatie van PopClip. Als de resultaten // niets is, retourneert u het couplet. // if (strcmp ($ results, "") === 0) echo $ verse;  else echo $ resultaten; 

Hier moeten de resultaten worden herhaald. Maar als de resultatenbuffer leeg is, moet het couplet worden herhaald. Als een lege tekenreeks wordt herhaald, verwijdert deze effectief wat is geselecteerd. Omdat alles een optie is, is het mogelijk om hier te komen met de $ resultaten variabele leeg. Goede programmeerpraktijken vertellen ons om altijd rekening te houden met elke mogelijkheid.


Gebruik

Zodra de extensie in PopClip is geladen en de voorkeuren zijn ingesteld, is de extensie eenvoudig te gebruiken. Selecteer gewoon een tekst die een bijbelverwijzing is.

Een couplet selecteren

Wanneer de popClip-balk verschijnt, selecteert u de witte bijbel en de selectie zal in het couplet worden veranderd. Hier werden de voorkeuren ingesteld voor het afdrukken van zowel KJV- als ThaiKJV-versies.

Vers vervangen

Als de tekst niet overeenkomt met de reguliere expressie voor een bijbelverwijzing, wordt het bijbelpictogram niet weergegeven.

Selectie geen vers

Dit helpt bij het besparen van onroerend goed op de PopClip-balk. Telkens wanneer u een extensie maakt, moet u nadenken over het minimaliseren van onnodige verschijningen van uw extensie.


Samenvatting

Nu heb je een leuke kleine PopClip-extensie om verzen van een website te krijgen en in je applicatie te plakken. Zelfs beter dan dat, weet u nu hoe u een voorkeurenpaneel voor uw extensie kunt maken, naar die informatie van uw extensie kunt gaan, de geselecteerde tekst kunt manipuleren en deze in de top van de applicatie kunt plakken. Je kunt deze code nemen en uitbreiden of gebruiken als een skelet voor je eigen PopClip-extensie. Laat iedereen weten hoe je het gebruikt in de reacties!