PopClip estensioni scripting

PopClip è un ottimo programma di utilità che, una volta che ci si abitua, è molto difficile vivere senza. Questo tutorial mostrerà come scrivere un'estensione di scripting facendo un'estensione di esempio.

In questo tutorial ti mostrerò come creare un'estensione PopClip costruendo un'estensione che cercherà un riferimento biblico da selezionare, cercare il riferimento in inglese o in tailandese usando un'API Web e incollare il / i versetto / i appropriato / i in posizione . Imparerai a creare un'estensione PopClip che utilizza uno script PHP, un'espressione regolare per l'attivazione, l'impostazione delle preferenze che l'utente può modificare e l'utilizzo dei tasti di scelta rapida per sovrascrivere le preferenze.


Definire la tua estensione

La prima cosa che dovrebbe essere fatta è decidere cosa farà l'estensione. Dovresti sempre creare ogni estensione con una singola funzionalità in mente. Dato che sono un missionario, scrivo continuamente note sui versetti della Bibbia. Mi piacerebbe avere un'estensione che prenderà un riferimento biblico e incollerò quel verso o versi nel mio documento sia in tailandese che in inglese. Pertanto, l'estensione farà proprio questo!

Ma a volte potrei aver bisogno di una o dell'altra lingua. Pertanto, l'estensione deve avere un pannello delle preferenze e tasti di scelta rapida per sovrascrivere le preferenze. Potrebbe sembrare un sacco di lavoro, ma PopClip lo rende facile.

Ho trovato un ottimo sito web, Efesini 4:14, che consente il download di versi sia dalla Bibbia di Re Giacomo in inglese che dalla Bibbia di Re Giacomo Thai. Dato che lavoro con la lingua tailandese, queste sono le uniche Bibbie di cui ho bisogno. Hanno anche molte altre lingue. Pertanto, puoi aggiungere qualsiasi lingua possa interessarti.


Risorse di Popclip

Se hai appena installato PopClip, leggi prima la Guida per l'utente di PopClip. Il tutorial, Crea la tua estensione personalizzata per PopClip, offre un'ottima introduzione a PopClip e come creare estensioni che non richiedono alcuna programmazione. Questo tutorial si concentrerà sulle estensioni per la programmazione di script per PopClip.

Pilotmoon fornisce un elenco completo delle opzioni del file di configurazione plist. Fare sempre riferimento a questo per la documentazione aggiornata dell'interfaccia delle estensioni per PopClip.

L'estensione sarà scritta in PHP. Se non sai come programmare in PHP, puoi trovare un eccellente video corso su Tuts +: PHP Fundamentals.


La struttura del file

Ovunque lavorerai sul tuo computer, crea una directory chiamata popclipBible.popclipext. Quella directory apparirà come un normale file, ma quando si fa clic con il tasto destro su di essa e si seleziona il menu popup Mostra i contenuti del pacchetto, mostrerà il contenuto di quella directory. È necessario creare i file Config.plist, bible.php, e bible.png in questa directory.

Config.plist è il file plist descritto nella prossima sezione. bible.php conterrà lo script PHP da eseguire. bible.png è il file grafico per l'estensione. Tutti questi sono nel file di download in alto.


The Plist

Tutte le estensioni per PopClip iniziano con un file plist chiamato Config.plist. Questo file dice a PopClip come l'estensione si adatta al mondo di PopClip. Il plist completo per questa estensione è:

     Azioni   Dopo pasta-risultato File immagine bible.png Interprete di sceneggiatura / Usr / bin / php Shell Script File bible.php Titolo Bibbia   Opzioni   Identificatore di opzione biblekjv Tipo di opzione booleano Etichetta dell'opzione KJB   Identificatore di opzione biblethaikjv Tipo di opzione booleano Etichetta dell'opzione Thai KJV   Descrizione dell'estensione Cerca versetti biblici in Popclip. Identificatore di estensione com.customct.popclip.extension.bible Nome estensione Bibbia Long Running  Espressione regolare (* \ D + \. \ D + (\ - \ d +) *) Versione software richiesta 701  

Come si può vedere, si tratta di un file di dati formattato XML. Questo file di dati indica a PopClip tutto ciò che deve sapere per eseguire l'estensione.

Questo è il plist noss necessario per questa estensione. Il dizionario principale ha le chiavi Azioni e Opzioni. Queste sono le voci principali per fornire la funzionalità dell'estensione. Li descriverò in maggior dettaglio qui sotto. Le altre chiavi sono:

Descrizione dell'estensione
Questa chiave fornisce una descrizione di cosa farà l'estensione. Questo deve essere breve, ma descrittivo.

Identificatore di estensione
Questa chiave fornisce un identificativo univoco per la tua estensione. L'ho basato sul mio sito web per la completa unicità. Può con qualsiasi sequenza alfanumerica, ma qualcosa di leggibile è sempre bello.

Nome estensione
Questa chiave è il nome dell'estensione. Semplicemente lo chiamo Bibbia.

Long Running
Questa chiave è impostata su true poiché eseguirà una chiamata API Web che impiegherà un po 'di tempo per terminare a causa della velocità della rete. Questo ha semplicemente PopClip visualizzare un'icona di attesa mentre si esegue l'azione.

Se l'estensione non richiede molto tempo, dovrebbe essere falsa.

Espressione regolare
Il valore di questa chiave è un'espressione regolare che consentirà il lancio dell'estensione solo se si asserisce vero per il testo attualmente selezionato. Scrivendo un'espressione regolare che abbinerà solo un riferimento biblico, non mostrerà l'estensione della Bibbia su qualsiasi selezione di testo.

Fai buon uso di questa funzione. Mostrare con qualsiasi selezione di testo rende più difficile l'utente dell'estensione. Pensa a come qualcuno vorrebbe usare l'estensione e creare una buona espressione regolare per quel caso.

Se sei un po 'arrugginito sulla scrittura di espressioni regolari, allora dovresti leggere questo articolo su Net Tuts+.

Versione software richiesta
Questa chiave specifica la versione di PopClip di cui ha bisogno questa estensione.


Azioni

I tasti Azione servono a definire l'azione che l'estensione eseguirà. Ci sono molte possibilità, ma questo tutorial si concentrerà solo sugli elementi necessari. Sono come segue:

Dopo
Specifica l'azione da eseguire dopo aver eseguito lo script. pasta-risultato incollerà nella maggior parte delle applicazioni qualsiasi testo lo script echi.

File immagine
Questa chiave specifica l'icona utilizzata per questa estensione. Poiché l'icona si trova nella stessa area dell'estensione, è sufficiente fare riferimento al file: bible.png. Se si desidera mantenere le icone in una sottodirectory dell'estensione, si utilizzerà un riferimento relativo a quel file.

Interprete di sceneggiatura
Questa chiave definisce l'interprete che verrà utilizzato per elaborare lo script. Dato che sto facendo questo programma in PHP, ha bisogno di fare riferimento all'interprete PHP predefinito su tutti i Mac: / Usr / bin / php. È possibile posizionare il percorso completo per qualsiasi interprete che si desidera utilizzare per scrivere estensioni.

Shell Script File
Questa chiave definisce il file nella directory dell'estensione da eseguire. Il nome file è: bible.php.

Titolo
Questa chiave è il titolo dell'estensione: Bibbia.


Opzioni

Il Opzioni la chiave contiene una serie di dizionari. Un dizionario per ogni opzione nel pannello delle preferenze per l'estensione. Per questa estensione, l'utente dovrebbe avere l'opzione di incollare dalla Bibbia KJV o dalla Bibbia KJV tailandese. Dato che ho due opzioni per questa estensione, descriverò ogni chiave in Opzioni dizionario e dire cosa ho usato per ogni opzione.

Identificatore di opzione
Questa chiave conferisce a PopClip un nome univoco per l'opzione necessaria per l'estensione. Questo è usato nella variabile di ambiente che viene passata al tuo programma. Per le due opzioni, questi ID verranno utilizzati: biblekjv e biblethaikjv.

Tipo di opzione
Questa chiave definisce che tipo di opzione è. Può essere o booleano (si o no), stringa (qualsiasi stringa), o multiplo (Tu dai una lista di opzioni e l'utente può scegliere da loro). Il booleano tipo è ciò che è necessario per questa estensione.

Etichetta dell'opzione
Questa chiave definisce il testo da utilizzare nel pannello delle opzioni per l'estensione. Per questa estensione, le etichette KJB e Thai KJV funzionerà.

Con queste opzioni definite nel plist, verrà creato un pannello delle preferenze per modificare le preferenze. Questo è come sarà:

Preferenze di estensione della Bibbia

Il copione

Ora, lo script deve essere scritto. Lo script completo è:

  $ 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); ritorno $ risultato;  // // Funzione: getBibleVerse // // Descrizione: questa funzione consente di recuperare un verso della Bibbia // dal sito Web api.preachingcentral.com //. // // Input: // $ verse I versi da cercare. // $ version La versione della Bibbia da usare. // function getBibleVerse ($ verse, $ version) global $ book; $ result = ""; $ raw = urlencode ($ verse); $ 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); $ prima = 0; $ quota = 0; foreach ($ vals as $ xml_elem) if (strcmp ($ xml_elem ['tag'], "TEXT") === 0) if ($ quote == 0) $ risultato = $ risultato. '"'. $ xml_elem ['value']; $ quote = 1; else $ result = $ result." ". $ xml_elem ['value']; if (strcmp ($ xml_elem ['tag'] , "RISULTATO") === 0) if ($ first == 0) if (strcmp ($ version, "thai") === 0) // // Il sito restituisce solo i nomi dei libri in inglese. Traduceteli // in tailandese. // $ 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 // // L'inglese va bene qui // $ result = $ xml_elem ['value']; $ first = 1; else $ result = $ result. '"'. "\ n \ n". $ Xml_elem [ 'valore'];  $ quote = 0;  restituisce $ result. '"'; // // Ottieni le variabili di PopClip Environment per l'estensione //. // $ verse = trim (getenv ('POPCLIP_TEXT')); $ qKJV = getenv ('POPCLIP_OPTION_BIBLEKJV'); $ qThaiKJV = getenv ( "POPCLIP_OPTION_BIBLETHAIKJV"); $ keycode = intval (getenv ('POPCLIP_MODIFIER_FLAGS')); $ results = ""; // // Se la preferenza è impostata su KJV o la chiave di comando // viene premuta, quindi ottenere il verso dal Inglese KJV // e aggiungerlo al risultato: se si preme sia la chiave di comando // che il tasto di controllo, si ottiene anche KJV. // if (($ qKJV [0] == '1') || ( $ keycode == 1048576) || ($ keycode == 1310720)) $ results. = getBibleVerse ($ verse, "kjv"). "\ n"; // // Se la preferenza è impostata su Thai KJV oppure // il tasto di controllo è premuto, quindi recupera il versetto dal // Thai KJV e lo aggiunge al risultato.Se viene premuto // anche il tasto comando e il tasto di controllo, // ottiene anche la versione tailandese. // if (($ qThaiKJV [0] == '1') || ($ keycode == 262144) || ($ keycode == 1310720)) $ results. = getBibleVerse ($ verse, "thai"). \ n "; // // Any la cosa ripresa dallo script verrà incollata in // nella maggior parte delle applicazioni di PopClip. Se i risultati // non sono nulla, quindi restituire il verso. // if (strcmp ($ results, "") === 0) echo $ verse;  else echo $ results; ?>

La prima cosa nella sceneggiatura è una serie di nomi dei libri nella Bibbia. Questo array serve per tradurre i nomi dei libri in inglese nell'equivalente tailandese. L'API Web utilizzata dall'estensione fornisce solo riferimenti in inglese. Quindi, i nomi dei libri della Bibbia inglese devono essere tradotti in tailandese.

La prima funzione è una funzione di supporto. È una routine PHP per richiedere informazioni da un sito web usando curl e restituendo i risultati al programma chiamante. L'input è l'url della richiesta.

La seconda funzione è la funzione principale per elaborare il verso della Bibbia. Richiederà il versetto della Bibbia ed elaborerà l'XML risultante in un formato più leggibile per incollarlo nell'editor di testo o quale sia il programma attualmente attivo. I parametri sono il vero verso della Bibbia e il designatore per cui la Bibbia richiede. Per la Bibbia di Re Giacomo, lo è kjv. Per la Bibbia Thai, lo è tailandese. Puoi ottenere altri codici dal link del sito qui sopra.


Ottenere informazioni dall'ambiente

PopClip invia informazioni allo script tramite variabili d'ambiente. È un modo semplice per comunicare. Questo è il modo in cui accedi a tali informazioni.

 // // Ottieni le variabili di ambiente PopClip per l'estensione //. // $ verse = trim (getenv ('POPCLIP_TEXT')); $ qKJV = getenv ('POPCLIP_OPTION_BIBLEKJV'); $ qThaiKJV = getenv ("POPCLIP_OPTION_BIBLETHAIKJV"); $ keycode = intval (getenv ('POPCLIP_MODIFIER_FLAGS')); $ risultati = "";

La funzione PHP getenv () recupererà la variabile d'ambiente data nella stringa per la chiamata di funzione. Tutte le variabili di ambiente sono stringhe e devono essere utilizzate come tali. Le diverse variabili di ambiente sono:

POPCLIP_TEXT
Questa variabile è la selezione quando è stato richiamato PopClip. Dal momento che l'utente dell'estensione potrebbe selezionare uno spazio bianco extra, mi piace sempre usare trim () funzione per rimuovere qualsiasi spazio bianco extra.

POPCLIP_OPTION_BIBLEKJV
Questa variabile è l'opzione per ottenere il verso dalla versione di King James. È una stringa che contiene il personaggio 1 se è vero, altrimenti contiene il carattere 0.

POPCLIP_OPTION_BIBLETHAIKJV
Questa variabile è l'opzione per ottenere il verso dalla versione Thai King James. È una stringa che contiene il personaggio 1 se è vero, altrimenti contiene il carattere 0.

POPCLIP_MODIFIER_FLAGS
Questo dice di usare quali tasti sono stati premuti mentre è stata selezionata l'azione PopClip. Tutto ciò che è passato in una variabile di ambiente è una stringa. Pertanto, le stringhe devono essere tradotte in un formato facile da usare. Io uso il intval () funzione per convertire la stringa in un numero intero.

Tutti i diversi valori dei codici chiave sono mostrati nel GitHub di PopClip Extensions.

Come si può vedere, ogni opzione nelle preferenze per l'estensione ha la propria variabile d'ambiente corrispondente.

La variabile $ result è anche impostata su una stringa vuota per le prossime due sezioni da riempire.


Elaborazione delle variabili ambientali

La parte principale di qualsiasi estensione PopClip consiste nel prendere le variabili passate nell'ambiente e creare qualcosa di utile con esso.

 // // Se la preferenza è impostata su KJV o viene premuto il tasto comando //, quindi ottenere il verso dall'inglese KJV // e aggiungerlo al risultato. // if (($ qKJV [0] == '1') || ($ keycode == 1048576) || ($ keycode == 1310720)) $ results. = getBibleVerse ($ verse, "kjv"). "\ n"; 

Questa sezione di codice preleverà il versetto dalla versione di King James se è stato impostato nelle preferenze (la variabile $ qKJV) o il tasto di comando è stato premuto mentre si seleziona l'azione PopClip ($ keycode è 1048576). Lo richiederà anche se vengono premuti entrambi i tasti di controllo e di comando ($ keycode è 1310720). Poiché la variabile $ qKJV è una stringa che è 1 o 0, è possibile verificare che il primo carattere sia un carattere 1. In questo modo, non è necessario elaborare un numero. Questo può risparmiare un po 'di tempo!

Se la condizione è vera, i versi vengono recuperati usando il getBibleVerse () funzione e aggiunta alla stringa $ result.

 // // Se la preferenza è impostata su Thai KJV o // è premuto il tasto control, quindi prendi il verso da // Thai KJV e aggiungilo al risultato. // if (($ qThaiKJV [0] == '1') || ($ keycode == 262144) || ($ keycode == 1310720)) $ results. = getBibleVerse ($ verse, "thai"). "\ N"; 

Qui, è simile. Se la versione Thai King James è stata selezionata nelle preferenze ($ qThaiKJV) o il tasto di controllo è stato premuto mentre si seleziona l'azione PopClip ($ keycode è 262144), verrà richiesta la versione Thai King James. Lo richiederà anche se vengono premuti entrambi i tasti di controllo e di comando ($ keycode è 1310720).

Se la condizione è vera, i versi vengono recuperati usando il getBibleVerse () funzione e aggiunta alla stringa $ result.

 // // Qualunque eco dallo script verrà incollato in // nella maggior parte delle applicazioni di PopClip. Se i risultati // non sono nulla, quindi restituire il verso. // if (strcmp ($ results, "") === 0) echo $ verse;  else echo $ results; 

Qui, i risultati devono essere riecheggiati. Ma se il buffer dei risultati è vuoto, il verso dovrebbe essere ripetuto. Se viene echeggiata una stringa vuota, elimina effettivamente ciò che è stato selezionato. Poiché tutto è un'opzione, è possibile arrivare qui con il $ risultati variabile vuoto. Buone pratiche di programmazione ci dicono di prendere sempre in considerazione ogni possibilità.


uso

Una volta caricata l'estensione in PopClip e impostate le preferenze, l'estensione è facile da usare. Basta selezionare un testo che è un riferimento biblico.

Selezione di un verso

Quando viene visualizzata la barra PopClip, selezionare la bibbia bianca e la selezione verrà modificata nel verso. Qui sono state impostate le preferenze per la stampa delle versioni KJV e ThaiKJV.

Sostituito il verso

Se il testo non corrisponde all'espressione regolare per un riferimento biblico, l'icona della Bibbia non verrà mostrata.

Selezione non un verso

Ciò aiuta a salvare immobili sulla barra PopClip. Ogni volta che crei un'estensione, pensa a come minimizzare le apparenze non necessarie dell'estensione.


Sommario

Ora hai una piccola estensione PopClip per ottenere versi da un sito web e incollarli nella tua applicazione. Ancora meglio, ora sai come creare un pannello delle preferenze per l'estensione, ottenere le informazioni dall'estensione, manipolare il testo selezionato e incollarlo nuovamente nella maggior parte delle applicazioni. Puoi prendere questo codice ed espanderlo o usarlo come uno scheletro per la tua estensione PopClip. Fai sapere a tutti come lo si usa nei commenti!