Alfred Workflows pour les utilisateurs avancés

Eh bien, vous avez réussi le tutoriel avancé. Bien joué! Maintenant pour le vrai travail. Alfred peut être utilisé pour faire des choses compliquées, y compris la programmation récursive! Les concepts ici ne sont pas faciles et pas pour le programmeur inexpérimenté.

Filtres de script

Filtre de script est le dernier type de bloc à discuter. Comme le Filtre de fichier, une Filtre de script donne à l'utilisateur une liste d'options parmi lesquelles sélectionner. La différence étant, un Filtre de script permet au programmeur de créer la liste des options avec un script.

Une simple sélection de choix pour la création d'un projet dans le dossier du projet montrera l'utilisation d'un Filtre de script. Tout d'abord, ajoutez un Filtre de script au Flux de travail du chef de projet du tutoriel intermédiaire.


Filtres de script: Écran de configuration

Met le Mot-clé à pm: créer, vérifier la avec de l'espace case à cocher, définissez le type d'argument sur Argument optionnel, la Titre de l'espace réservé à Créer un projet, la Placeholder Subtext à Chef de projet, la "Veuillez patienter" à Options de chargement… . La plupart de ces options sont les mêmes que dans les autres cases..

le avec de l'espace La case à cocher indique à Alfred d'attendre un espace avant l'argument optionnel. Par conséquent, il supprimera l'espace de gauche avant de passer l'argument au script. Sinon, il faudra tout simplement passer après le Mot-clé au script pour ce bloc.

le Type d'argument Le sélecteur a trois valeurs: Argument requis, Argument optionnel, et Pas d'argument. le Argument requis n'acceptera pas un retour à la ligne tant qu'un argument n'est pas fourni après le mot clé. Il passera tout au script au fur et à mesure que l'utilisateur tape. le Argument optionnel permettra à l'utilisateur d'appuyer sur Entrée sans argument. le Pas d'argument passera au prochain mot clé correspondant si l'utilisateur commence à donner un argument. Sinon, la recherche par défaut est abandonnée.

le "Veuillez patienter" vous permet de donner un sous-texte à l'utilisateur pendant que le script de la Filtre de script est en cours d'exécution. Cela permet à l'utilisateur du script de savoir si tous les choix sont disponibles ou non..

La zone de script est comme un Script de lancement bloc. Vous sélectionnez le langage de programmation que vous souhaitez, les options d'échappement dont vous avez besoin et le script lui-même. Réglez-le sur / usr / bin / php, tous échappés, et le script suivant:

 écho <<   Site HTML de base Chef de projet icon.png   Site HTML dorsal Chef de projet icon.png   EOF;

Ce script PHP reprend simplement le code XML pour les résultats du script. UNE Filtre de script attend du script qu'il génère une instruction XML valide contenant un tableau d'éléments: un pour chaque option disponible pour l'utilisateur.

Chaque article a un uid, se disputer, valide, et autocomplete options. le uid est un numéro ou un nom unique pour cet article. S'il s'agit toujours du même nom unique pour cet élément, plus un utilisateur le sélectionne, plus il sera placé en haut de la liste. le se disputer est ce que le prochain bloc recevra si cet élément est sélectionné. le valide l'argument ne peut être Oui ou non. Si non, alors cet élément ne peut pas être sélectionné, mais le autocomplete la valeur sera placée dans le Alfred invite avec le mot clé. Si Oui, alors il acceptera une entrée pour envoyer l'argument au bloc suivant et au autocomplete la valeur est ignorée.

le Titre, Sous-titre, et icône Les enfants de chaque élément permettent au script de définir le titre, le sous-titre et l'icône utilisés pour afficher les résultats à l'utilisateur. Par conséquent, chaque élément peut avoir une icône différente. Si vous avez un sous-répertoire dans votre zone de flux de travail appelé des icônes, vous pouvez utiliser le icons / day.png chemin pour faire référence à une image appelée jour.png dans ce sous-dossier. Cela vous permet de personnaliser vos résultats pour faciliter la sélection..


Filtres de script: Affichage

Maintenant, quand le Filtre de script est activé, les images ci-dessus montrent les résultats. Il n’exécutera toujours rien à part envoyer la sélection à Alfred.


Filtres de script: Ajout d'un Script de lancement Bloc

Pour faire quelque chose en fonction de la sélection, vous devrez ajouter un Script de lancement bloquer ensuite et le remplir comme un script bash sans s'échapper. La zone de script peut être remplie avec le script suivant:

 ########################### # Contants. ######################### VPREFS = "$ HOME /Library/Caches/com.runningwithcrayons.Alfred-2/Workflow Data /" NVPREFS = "$ HOME / Bibliothèque / Application Support / Alfred 2 / Données de flux de travail /" ############################## ################################################ # Lis le bundleid de info.plist du flux de travail ######################################### #################################### getBundleId () / usr / libexec / PlistBuddy -c " Print: bundleid "" info.plist " ####################################### ####################################### # Obtenir les données du flux de travail dir ##### ################################################# ####################### get getDir () BUNDLEID local = $ (getBundleId) echo "$ NVPREFS $ BUNDLEID" si [! -d "$ (getDataDir)"]; puis mkdir -p "$ (getDataDir)"; touchez "$ (getDataDir) /projectDir.txt"; fi projD = "cat" $ (getDataDir) /projectDir.txt ""; si [ ! -d "$ projD"]; puis mkdir -p "$ projD"; fi cd "$ projD"; type = "requête"; case "$ type" en basique) echo "Basic"; curl -o tmp.zip -L "https://codeload.github.com/h5bp/html5-boilerplate/zip/v4.3.0"; décompressez tmp.zip >> / dev / null; mv html5-boilerplate-4.3.0 / *. ; rm -Rf "html5-boilerplate-4.3.0 /"; rm -Rf "tmp.zip"; echo "Boilerplate HTML5 en place."; ;; colonne vertébrale) echo "BackBone"; curl -o tmp.zip -L "https://codeload.github.com/h5bp/html5-boilerplate/zip/v4.3.0"; décompressez tmp.zip >> / dev / null; mv html5-boilerplate-4.3.0 / *. ; rm -Rf "html5-boilerplate-4.3.0 /"; rm -Rf "tmp.zip"; curl -o js / vendor / backbone-min.js -L "http://backbonejs.org/backbone-min.js"; echo "Boilerplate HTML5 avec Backbone.js en place."; ;; esac

Ce script crée simplement le type de projet dans le répertoire défini comme répertoire du projet. La première partie du script est semblable aux scripts utilisés dans le didacticiel intermédiaire pour accéder aux deux emplacements où les données peuvent être stockées. le répertoire de données et le répertoire cache. Ici, seul le répertoire de données est utilisé pour obtenir l'emplacement du répertoire de projet.

Le reste du script se déplacera dans le répertoire du projet et le complétera en fonction du type de projet sélectionné. Un projet HTML de base téléchargera le modèle Boilerplate HTML5 et l’installera dans le répertoire du projet. Un projet Backbone va installer le modèle HTML5 Boilerplate Template et la bibliothèque JavaScript Backbone.js. Cela peut facilement être amélioré en utilisant Yeoman pour installer les composants du projet, mais cela irait au-delà de la portée de ce tutoriel..

Le problème avec la façon dont cela Filtre de script a été écrit est qu'il est difficile d'étendre et de maintenir. Il serait beaucoup plus facile d'appeler une fonction qui créera le code XML selon les besoins. De plus, en utilisant cette approche du programme, l'utilisateur ne peut pas restreindre la liste des actions possibles en le saisissant. Il leur suffit de descendre dans la liste ou d'appuyer sur une touche de raccourci pour cet élément..

Puisque Alfred cherche avant tout à faciliter la recherche et la sélection d’options, il doit exister un moyen de rendre cela possible. Merci à tous les programmeurs dévoués qui ont aidé Alfred, quelques bibliothèques ont été écrites pour faciliter ce processus..

Bibliothèques de fonctions auxiliaires

L’un des avantages de l’écosystème Alfred est que de nombreuses personnes conçoivent des bibliothèques pour leur langage de script favori afin de faciliter la programmation d’Alfred. La liste complète des bibliothèques Alfred est disponible sur le forum Alfred. Il y a des bibliothèques pour Bash / Zsh (des morceaux que j'ai utilisés dans ces scripts), Python, PHP, Ruby, AppleScript et Go (il s'agit d'une bibliothèque AppleScript, mais c'est le langage de programmation utilisé par Google).!

Pour utiliser la bibliothèque pour PHP, vous devez télécharger le fichier workflows.php à partir de ce site par David Ferguson. Placez ceci dans le dossier du workflow. Maintenant, ce script doit être chargé dans le code PHP pour le Filtre de script. Changez ce code en:

 // // Charge la bibliothèque de flux de travail PHP. // include_once ("workflows.php"); // // Crée l'objet de workflow à utiliser. // $ wf = new Workflows (); // // Récupère la requête brute et la stocke pour utilisation. // $ clean = trim ("requête"); // // Définit les options. // $ wf-> result ("1PM", "de base", "Site HTML de base", "Chef de projet", "icon.png", "oui"); $ wf-> result ("2PM", "Backbone", "Site HTML Backbone", "Chef de projet", "icon.png", "oui"); // // Écho le xml des choix. // echo $ wf-> toxml ();

C'est beaucoup plus facile à lire et à comprendre. Des commentaires peuvent facilement être ajoutés pour aider à expliquer le code pour référence future. Cela donnera exactement les mêmes résultats que la liste XML nue, mais maintenant sous une forme qui facilitera l'expansion.

Ce script se charge maintenant dans la bibliothèque et initialise une variable de classe, $ wf, du Flux de travail () classe de la bibliothèque. le résultat() La fonction membre est utilisée pour créer le code XML avec les options. Les options par ordre sont les suivantes: nombre, argument, titre, sous-titre, fichier d'icônes et valide. le toxml () la fonction membre renvoie simplement le code XML final qui est répercuté.

Maintenant, pour faire le Filtre de script avoir l'air mieux. Prenez les deux fichiers image dans le fichier de téléchargement pour ce tutoriel et ajoutez-les à votre répertoire de flux de travail. Puis changez le Définir les options section dans le Filtre de script code à:

 // // Définit les options. // $ wf-> result ("1PM", "de base", "Site HTML de base", "Chef de projet", "html5BP.jpeg", "oui"); $ wf-> result ("2PM", "backbone", "site HTML du backbone", "gestionnaire de projet", "backbone.png", "oui");

L'icône utilisée pour chaque choix représente maintenant le choix. Une interface utilisateur bien meilleure. Alfred peut prendre des fichiers graphiques au format jpeg ou png pour les icônes. Il redimensionne également les icônes selon les besoins. Les résultats sont montrés plus bas:


Créer un projet avec des icônes

Comme on peut le constater, la deuxième option est affichée en premier. C'est parce que je l'ai utilisé le plus lors des tests. Alfred se souvient du choix le plus utilisé et essaye de classer la liste en conséquence. Ceci est utile pour les commandes utilisées plus fréquemment.

Mais, la liste ne peut pas être réduite en tapant une partie du nom. C’est un impératif pour pouvoir choisir entre de nombreux choix. Malheureusement, cette bibliothèque PHP n'a pas de fonction pour cela. Par conséquent, une nouvelle fonction doit être définie. Modifiez la zone d'options en ceci:

 // // Définit les options. // $ added = buildResult ($ wf, "$ clean", "1PM", "de base", "Site HTML de base", "Chef de projet", "html5BP.jpeg", "oui"); $ added + = buildResult ($ wf, "$ clean", "2PM", "Backbone", "Site HTML backbone", "Chef de projet", "backbone.png", "oui"); if ($ added == 0) $ wf-> result ("999", "", "Aucun type de projet ne correspond à $ clean!", "Gestionnaire de projet", "icon.png", "non"); 

le buildResult () la fonction prend tout ce que le résultat() fonction a, mais a également deux nouveaux paramètres: le Flux de travail () variable d'objet et texte correspondant à la commande.

Ajoutez maintenant la définition de la nouvelle fonction juste après la bibliothèque:

 fonction buildResult ($ wf, $ input, $ count, $ arg, $ title, $ subtitle, $ icon, $ valid) $ result = 0; if (preg_match ("/.*$ input / i", "$ arg") === 1) $ wf-> résultat ($ count, $ arg, $ title, $ subtitle, $ icon, $ valid); $ result = 1;  return ($ result); 

Cette fonction utilise le preg_match () Fonction PHP permettant de faire correspondre l'expression régulière de la chaîne avec un caractère générique ajouté à la chaîne d'entrée. Si ce que l'utilisateur tape ne correspond pas, le résultat ne sera pas ajouté. Si un résultat a été ajouté, il en retournera un. Sinon, il retournera un 0.

Avez-vous remarqué l'ajout de code supplémentaire? C'était pour voir si quelque chose avait été ajouté aux résultats. Si rien ne réussit le test à inclure, un résultat par défaut est ajouté pour indiquer qu'il ne peut rien trouver. Avec le valide paramètre réglé sur non, l'utilisateur ne peut pas appuyer sur retour sur elle. Cela empêche votre flux de travail de transférer l'utilisateur à la recherche par défaut avec tout ce qu'il contient. Alfred invite ou d'envoyer de la malbouffe au prochain script pour comprendre.


Type de projet introuvable Erreur

Avec cette petite erreur de vérification, le flux de travail indique maintenant gracieusement à l'utilisateur qu'il existe un problème sans provoquer de vidage de la recherche par défaut. Vous devez toujours penser à la gestion des erreurs dans les flux de travail. C'est important pour un look professionnel.

Programmation récursive dans Alfred

Depuis le Filtre de script block continue à appeler le script pour chaque lettre tapée par l'utilisateur, ce qui en fait un endroit idéal pour faire de la programmation récursive. Le plus souvent, la programmation récursive est mentionnée lorsqu'une routine s'appelle toute seule. C'est la récursion directe. Ce qui se fait chez Alfred Filtre de script serait appelé récursion indirecte.

Workflows de la machine d'état

Le premier type de récursivité à étudier est la machine à états. Une machine à états est un programme contrôlé par une variable qui détermine l'état ou le niveau d'exécution du programme..


Récursion: filtre de script de projets de liste

le Flux de travail du chef de projet besoin d'un moyen de suivre les projets et d'effectuer certaines actions sur ces projets. Pour le démarrer, créez un Filtre de script bloquer comme ci-dessus. Ajoutez ensuite ce script au Scénario surface:

 // // Charge la bibliothèque de flux de travail PHP. // include_once ("workflows.php"); // // Fonction: buildResult // // Description: Génère de manière conditionnelle le résultat XML si l'entrée // contient l'argument. // fonction buildResult ($ wf, $ entrée, $ compte, $ arg, $ titre, $ sous-titre, $ icône, $ valide, $ ret) $ result = 0; $ parts = explode ("|", $ arg); if (count ($ parts)> 0) $ arg = $ parts [0];  if (preg_match ("/.*$ input / i", "$ arg") === 1) $ wf-> résultat ($ count, $ arg, $ title, $ subtitle, $ icon, $ valide, $ ret); $ result = 1;  return ($ result);  // // Crée l'objet de workflow à utiliser. // $ wf = new Workflows (); // // Récupère la requête brute et la stocke pour utilisation. // $ clean = trim ("requête"); // // Figure l'état par les éléments quey. // $ parts = explode ("|", $ clean); $ pcount = count ($ parts); $ returncount = 0; switch ($ pcount) case 1: // // Ceci est l'état de base. Ici, une liste de projets et // la possibilité de créer un nouveau projet sont listés. // // // Récupère et répertorie les projets. // $ count = 0; $ filename = $ wf-> data (). "/projects.txt"; if (file_exists ($ filename)) $ projs = explode ("\ n", file_get_contents ($ filename)); foreach ($ projs en tant que $ proj) $ projparts = explode (":", $ proj); if (strcmp ($ projparts [0], "")! = 0) $ returncount + = buildResult ($ wf, $ parts [0], $ count, "$ projparts [0] |", "Projet: $ projparts [0] "," Gestionnaire de projet ", 'icon.png'," non "," $ projparts [0] | "); $ count + = 1;  // // Donne une option pour un nouveau projet. // $ wf-> resultat ("999", "nouveau |", "ajouter un nouveau projet", "gestionnaire de projet", "icon.png", "non", "nouveau |"); $ returncount + = 1; Pause; cas 2: // // Deux domaines possibles: action sur un projet particulier ou // création d'un nouveau projet. // if (strcmp ($ parts [0], "new") === 0) // // Créez un nouveau projet. Obtenez le nom. // $ wf-> resultat ("999", "nouveau | $ parts [1]", "nom du projet: $ parts [1]", "gestionnaire de projet", "icon.png", "oui ', "new | $ parts [1]"); $ returncount + = 1;  else // // Maintenant, pour effectuer des actions sur un projet. // $ count = 1; $ returncount + = buildResult ($ wf, "$ parts [1]", $ count ++. "pml", "remove | $ parts [0]", "supprimer le projet: $ parts [0]" "Gestionnaire de projet", "icon.png", "oui", ""); $ returncount + = buildResult ($ wf, "$ parts [1]", $ count ++. "pml", "pow | $ parts [0]", "Ajouter à Pow: $ parts [0] "," Project Manager ", 'icon.png'," oui "," "); $ returncount + = buildResult ($ wf, "$ parts [1]", $ count ++. "pml", "alfred | $ parts [0]", "vue dans Alfred: $ parts [0] "," Project Manager ", 'icon.png'," oui "," "); $ returncount + = buildResult ($ wf, "$ parts [1]", $ count ++. "pml", "current | $ parts [0]", "Construire le projet actuel: $ parts [0] "," Project Manager ", 'icon.png'," oui "," "); $ returncount + = buildResult ($ wf, "$ parts [1]", $ count ++. "pml", "serve | $ parts [0]", "Lancer le serveur dans le projet: $ parts [0]  "," Project Manager ", 'icon.png'," oui "," ");  Pause;  Si ($ returncount < 1)  $wf->result ("999", "", "Etat invalide! Veuillez recommencer.", "Gestionnaire de projet", 'icon.png', 'non', "");  // // Écho le xml des choix. // echo $ wf-> toxml ();

Le début du script est exactement comme le dernier script. La logique a été ajoutée pour conserver la première partie d'une multi-partie $ arg (En d’autres termes, une chaîne donnée dans le $ arg paramètre qui a le | symbole.) au buildResult () une fonction.

Juste après avoir nettoyé l’entrée d’Alfred, l’entrée est divisée en fonction de la | caractère et le nombre de pièces est calculé. Cette information donne l'état de la machine à états. le commutateur… cas La déclaration agit sur les différents états de la machine à états. Dans ce cas, la machine à états n'a que deux états.

Le premier état répertorie les noms de projet à partir d'une liste de projets et donne à l'utilisateur la possibilité d'ajouter un nouveau projet. La liste des projets est créée à partir du fichier projets.txt dans le répertoire de données des flux de travail. Notez que beaucoup de soin est pris pour voir si le fichier existe et s'il y a des projets dans le fichier. Je voulais m'assurer que le flux de travail ne bombarde jamais la recherche par défaut.

Le deuxième état vérifie la Nouveau commande dans la ligne de saisie. Ce que l’utilisateur saisira alors sera un nouveau nom de projet. Si ce n'est pas un Nouveau commande, alors il est supposé être le nom d’un projet. Il créera ensuite une liste d'actions pouvant être entreprises sur le projet..


Récursion: liste des projets en action

Avec les états définis comme ceci, l'image ci-dessus est la liste des projets avec l'ajout d'un nouveau projet.


Récursion: liste des projets: ajout d'un nouveau projet

Cette image montre le nouveau projet en donnant un nouveau nom.


Récursion: Liste des projets: Actions pour les projets

Une fois les projets définis, vous pouvez sélectionner un projet et afficher une liste des actions pouvant être entreprises. Lorsque cette option est sélectionnée, le script envoie la commande d'action avec le nom du projet..

Flux de travail utilisant d'autres flux de travail

Maintenant que les informations sont en cours, il faut prendre des mesures. Ajouter un Script de lancement bloquer le droit Filtre de script bloquer pour jouer avec une nouvelle forme de récursivité: appeler d'autres flux de travail!


Récursion: Action du projet

Ce Script de lancement block est un script PHP avec les paramètres indiqués ci-dessus. Ensuite, vous devez mettre cela dans le Scénario surface:

 // // Charge la bibliothèque de flux de travail PHP. // include_once ("workflows.php"); // // Fonction: getProjDirectory // // Description: Cette fonction est utilisée pour obtenir le répertoire associé // au projet donné. // // Entrées: // $ nom_projet Nom du projet. // function getProjDirectory ($ wf, $ nom_projet) // // Récupère le répertoire du projet à partir de la liste de projets de la liste projects.txt. // $ pdir = ""; $ projs = explode ("\ n", file_get_contents ($ wf-> data (). "/projects.txt")); foreach ($ projs en tant que $ proj) $ projparts = explode (":", $ proj); if (strcmp ($ projparts [0], $ nomprojet) === 0) // Ceci est le nom du projet, enregistrez le répertoire. // $ pdir = $ projparts [1];  return ($ pdir);  // // Crée l'objet de workflow à utiliser. // $ wf = new Workflows (); // // Récupère la requête brute et la stocke pour utilisation. // $ clean = trim ("requête"); // // Figure l'état par les éléments de la requête. // $ parts = explode ("|", $ clean); $ pcount = count ($ parts); switch ($ parts [0]) case "new": // // Crée une nouvelle liste de projets. // fichier_put_contents ($ wf-> data (). "/ nomProjet.txt", $ parts [1]); // // Récupère le répertoire en appelant Alfred. // system ("osascript -e 'tell app app" "Alfred 2.app \" pour rechercher \ "pm: setprojectdirectory \"' "); Pause; case "pow": // // Récupère le répertoire Project de la liste de projets projects.txt. // $ pdir = getProjDirectory ($ wf, $ parts [1]); // // Crée le lien logiciel dans le répertoire ~ / .pow. // $ home = getenv ("HOME"); if (lien symbolique ($ pdir, "$ home / .pow / $ parts [1]")) // // Dites-le à l'utilisateur. // echo "Added $ parts [1] to POW.";  else // // Quelque chose n'a pas fonctionné. // echo "Impossible de créer le lien symbolique vers $ pdir!";  Pause; case "remove": // // Récupère la liste de tous les projets et vérifie chacun d'eux. // $ projs = explode ("\ n", fichier_get_contents ($ wf-> data (). "/projects.txt")); $ lignes [] = ""; foreach ($ projs en tant que $ proj) $ projparts = explode (":", $ proj); if (strcmp ($ projparts [0], $ parts [1])!! = 0) // // Ce n'est pas le projet en cours de suppression. Rajoute-le. // $ lines [] = $ proj;  // // Enregistrez tous les projets sauf celui supprimé. // file_put_contents ($ wf-> data (). "/projects.txt",implode("\n",$lines)); // // Dites à l'utilisateur. // echo "Suppression du projet $ parts [1]."; Pause; case "serve": // // Appelez le flux de travail POW pour le visualiser. // system ("osascript -e 'tell app app" "Alfred 2.app \" pour rechercher \ "pow parcourir $ parts [1] \"' "); Pause; case "alfred": // // Récupère le répertoire Project de la liste de projets projects.txt. // $ pdir = getProjDirectory ($ wf, $ parts [1]); // // Récupère le répertoire en appelant Alfred. // system ("osascript -e 'tell app \" Alfred 2.app \ "pour rechercher \" $ pdir \ "'"); Pause; case "current": // // Récupère le répertoire Project de la liste de projets projects.txt. // $ pdir = getProjDirectory ($ wf, $ parts [1]); // // Définissez le répertoire en appelant Alfred. // file_put_contents ($ wf-> data (). "/projectDir.txt",$pdir); echo "$ parts [1] est maintenant le projet actuel."; Pause; 

Juste après le chargement de la bibliothèque Alfred PHP Workflow, il existe une définition pour la fonction getProjDirectory (). Cette fonction prend le nom du projet et renvoie le répertoire de ce projet tel qu’il est stocké dans le répertoire. projets.txt fichier dans le répertoire de données des flux de travail. Puisque ce morceau de code est souvent utilisé, cela vaut la peine d’être inséré dans une fonction.

Le reste du code suit exactement les Filtre de script, sauf pour le contenu de la commutateur… cas déclaration. Il s’agit toujours d’un type de machine à états, la ligne d’entrée donne l’état à traiter. Ici, les différents états sont: nouveau, pow, enlever, servir, alfred et actuel. Chaque état correspond à une action à entreprendre sur un projet comme indiqué dans le Filtre de script.

État neuf

le nouvel état est pour créer de nouveaux projets dans la liste des projets. Il ne crée rien mais met un lien dans la projets.txt fichier dans le répertoire de données. Ceci est fait en enregistrant le nom du projet dans le répertoire nomprojet.txt fichier dans le répertoire de données et en appelant le pm: setprojectdirectory dans Alfred pour rechercher le répertoire à associer au nom du projet. Il s'agit d'un type de retour d'état dans lequel le script appelle de manière récursive Alfred dans un nouvel état (recherche sur un nouveau jeton)..

Remarquez comment s'appelle Alfred: le code PHP appelle le programme osascript pour le dire Alfred 2.app rechercher pm: setprojectdirectory. Cette technique est le moyen le plus simple de demander quelque chose à Alfred et peut être implémentée dans n'importe quel langage de script..

La fin du script en Script de lancement pour le pm: setprojectdirectory Script de lancement le bloc doit être changé en:

 if [-f "$ (getDataDir) /projectName.txt"]; then currentName = "cat" $ (getDataDir) /projectName.txt ""; echo "$ currentName: query" >> "$ (getDataDir) /projects.txt"; rm "$ (getDataDir) /projectName.txt"; fi echo "query"> "$ (getDataDir) /projectDir.txt"; echo "Le répertoire du projet est: requête";

Ce que cela fait maintenant, c'est de vérifier l'existence du nomprojet.txt fichier lorsque ce script est appelé. S'il existe, le répertoire et le nom du projet donnés sont ajoutés à la liste des projets de la liste. projets.txt fichier et le nomprojet.txt le fichier est supprimé. Encore une fois, c’est un type de machine à états où l’existence de la nomprojet.txt fichier définit un nouvel état d'action pour ce script.

État de pow

le pow State utilise le flux de travail POW Alfred pour interagir avec le programme POW. Ces deux éléments devront être installés sur le système exécutant ce flux de travail. Cet état prend simplement le répertoire et le nom du projet et crée un lien symbolique dans le ~ / .pow annuaire. Avec le lien symbolique ici, le flux de travail du prisonnier de guerre pourra le parcourir et redémarrer le serveur..

Supprimer l'état

le retirer l'État prend le nom du projet et le supprime de la liste des projets. Il appartient à l'utilisateur de supprimer le répertoire.

État de service

le servir l'Etat appelle récursivement Alfred pour utiliser le Flux de travail POW Alfred pour voir le serveur. le Prisonnier de guerre programme vérifie si le serveur fonctionne correctement avant de transmettre l'emplacement à afficher dans le navigateur.

Alfred State

le Alfred State appelle récursivement Alfred avec le répertoire du projet. Si Alfred est appelé avec un chemin de répertoire absolu, il affichera ce répertoire dans le navigateur Alfred..

Etat actuel

le Etat actuel fait du répertoire de projet le projet en cours pour la fonction de déplacement de fichiers créée dans le tutoriel intermédiaire.

Avec tous les états définis de cette manière, il est facile d'ajouter de nouvelles actions pour étendre les fonctionnalités de ce flux de travail. Ajoutez simplement l'état à la Filtre de script et l'action pour l'état dans le Script de lancement bloc.

Conclusion

Wow, c'était beaucoup à couvrir. Maintenant le Chef de projet le flux de travail est utile et peut être facilement étendu. Votre devoir est de prendre cette base et d’ajouter plus de fonctions! Si vous ajoutez des éléments au flux de travail, veuillez poster votre travail ci-dessous dans les commentaires. Partager des flux de travail est très amusant et aide les autres à apprendre de ce que vous avez fait..