Schrijf een Alfred-extensie om bestanden on the fly te maken

Onlangs hebben we bekeken hoe je Terminal kunt gebruiken om snel bestanden te maken. Vandaag gaan we deze kennis beoordelen en toepassen om onze eigen Alfred-extensie te maken die in een oogwenk een nieuwe directory met bestanden maakt. We zullen onderweg zelfs wat AppleScript gebruiken, zodat je echt je dosis geeky goedheid kunt krijgen.


Wat we bouwen

Als ontwikkelaar, wanneer ik met een nieuw project begin, doorloop ik meestal hetzelfde proces. Eerst moet ik een map maken en deze een naam geven. Vervolgens moet ik een teksteditor openen en elk bestand afzonderlijk maken dat ik wil opnemen (index.html, style.css, etc.).

Uiteraard is dit een pijn, dus ik heb een heleboel dingen geprobeerd om er omheen te komen. Ik heb geprobeerd een blanco project bij de hand te houden dat ik gewoon kan verslepen en kopiëren, met behulp van Terminal om de bestanden handmatig te maken, het werk.

Mijn huidige favoriete methode is echter om Alfred op te roepen, typ de naam van de map die ik wil maken en hit terugkeer. Dat is het! Alle andere stappen zijn volledig geautomatiseerd, waardoor ik in een bepaalde week veel tijd kan besparen.

Vanzelfsprekend komt deze functionaliteit niet met Alfred uit de doos, dus we zullen het moeten inbouwen. Gelukkig is dat vrij eenvoudig!

Tip: Deze tutorial is niet alleen voor ontwikkelaars. Volg en tweak het om bestanden van elk type te maken!


Terminal Huiswerk

Zoals ik al zei in de inleiding, heb ik de basisbegrippen voor het maken van Terminal-bestanden besproken in een vorig artikel, maar ze zijn het waard om hier nogmaals te vermelden, dus we staan ​​allemaal op dezelfde pagina.

Er zijn drie basisscascriptopdrachten die we vandaag zullen gebruiken: cd, mkdir en touch. Laten we eens kijken hoe elk werkt.

Uw directory wijzigen

Wanneer je Terminal opent, zou je standaard moeten beginnen in de thuismap van je Mac. Dit zal dienen als startpunt voor alle opdrachten waarvoor een locatie vereist is. Als u die locatie wilt wijzigen, gebruikt u de CD commando.

cd Desktop /

Dit vertelt de Terminal dat u de huidige map wilt wijzigen in 'Desktop'. Later als we dit van Alfred doen, moeten we iets specifieker zijn:

/ Users / MacBookPrime / Desktop

Hier heb ik het volledige pad naar mijn bureaubladmap opgenomen. Het is uiterst belangrijk dat u dit specifieke fragment aanpast voor uw eigen computer. Om dat te doen, vervangt u mijn gebruikersnaam door uw eigen naam. Voer uw gebruikersnaam in tussen "Gebruikers /" en "Desktop /" in het onderstaande fragment:

/ Users / YourUserNameGoesHere / Desktop

Een nieuwe map maken

Zodra we mappen hebben gewijzigd, moeten we een nieuwe map (map) maken. Om dit te doen, gebruiken we de mkdir commando.

mkdir mySite

Hiermee wordt een nieuwe map met de naam "mySite" in de huidige map gemaakt. In ons geval zal dit het bureaublad zijn.

Een nieuw bestand maken

Nu komt het beste: hoe een nieuw bestand te maken. Om welke reden dan ook, het lijkt mij dom dat ik een app moet openen om een ​​bestand te maken. Ik zou lege bestanden, met elke extensie die ik wil, gewoon kunnen uithollen, puur naar believen. Met de aanraken opdracht, we kunnen precies dat doen:

raak textFile.txt aan

Hiermee wordt een nieuw gewoon tekstbestand in de huidige map gemaakt met de naam "textFile.txt". Makkelijk goed?

Voeg alles samen

Nu hebben we alle kennis die we nodig hebben om van ons shellscript te komen. Zo ziet het eruit wanneer we deze opdrachten combineren (ga naar rechts om het volledige fragment te bekijken).

cd / Gebruikers / MacBookPrime / Desktop; mkdir mySite; cd mySite; raak index.html style.css script.js aan

Merk op dat verschillende commando's worden gescheiden door een puntkomma en dat ook aanraakopdrachten aan elkaar kunnen worden gekoppeld met alleen een spatie tussen de verschillende bestandsnamen.

Een Alfred-extensie maken

Nu we ons basishulscript hebben bedacht, is het tijd om de Alfred-extensie daadwerkelijk te maken. Gelukkig hebben we hiervoor geen speciale ontwikkeltools nodig, alleen Alfred! Je hebt de Powerpack wel nodig, de premiumversie van Alfred.

Stap 1. Maak een nieuwe extensie

Om te beginnen, vuur Alfred op en klik op de kleine versnelling in de rechterbovenhoek om de voorkeuren op te roepen. Klik vanaf hier op het tabblad "Extensies". Mogelijk hebt u hier al een aantal extensies van derden.


Klik op het tabblad Extensies

Klik op het tabblad Extensies op de kleine plusknop linksonder in het venster. Dat zou een menu moeten openen met de verschillende soorten extensies die u kunt maken:


Kies 'Shell Script'

Kies hier 'Shell Script'. Maak je geen zorgen als je geen idee hebt hoe je een shellscript moet schrijven, we hebben er al een geschreven!

Stap 2. Naam en andere details

Wanneer u een nieuwe extensie maakt, kunt u deze een naam geven en uw informatie invoegen voor het geval u de extensie gaat distribueren. Op deze manier kunnen mensen zien van wie het is.


Voer de kredietinformatie in en druk op Opslaan

Bovendien kunt u het pictogram aanpassen. Ik denk dat het Terminal-pictogram prima is voor onze doeleinden, maar voel je vrij om je eigen afbeelding te verslepen.

Stap 3. Ga naar Alfred Details

Vervolgens moet u de titel, beschrijving en het trefwoord van de extensie invoeren.


Vul hier de gegevens voor Alfred in

Dit lijkt misschien een beetje overbodig met het vorige venster, maar dat is het niet. Het vorige scherm diende alleen voor creditdoeleinden, dit bepaalt welke informatie Alfred daadwerkelijk laat zien wanneer u de extensie opent.


Alfred toont de gegevens die u hebt ingevoerd wanneer u de extensie belt

Merk op dat ik "nw" als sneltoets heb ingesteld, dus wanneer ik dit in Alfred typ, toont de eerste optie die verschijnt de titel en beschrijving die ik heb ingevoerd.

Stap 4. Voer het script in

Nu is het tijd om de shell-commando's in te voeren die we eerder hebben geschreven, met een beetje maatwerk. Hier is het fragment van voor:

cd / Gebruikers / MacBookPrime / Desktop; mkdir mySite; cd mySite; raak index.html style.css script.js aan

Laten we nu, in plaats van elke keer een map met de naam "mySite" te maken, de tekst gebruiken waarin de gebruiker Alfred invoert. Dit doen we door te vervangen mijn website met Zoekopdracht.

 cd / Gebruikers / MacBookPrime / Desktop; mkdir query; cd query; raak index.html style.css script.js aan

Voor deze instelling is invoer van de gebruiker vereist, dus zorg ervoor dat u de instelling "Parameter" instelt op "Vereiste parameter". Vergeet ook niet om het pad naar uw bureaublad aan te passen.


Voer het script in het veld Opdracht in

Zodra u klaar bent met die stap, drukt u op de knop Opslaan. Dat is het! Je bent helemaal klaar.

Test de extensie

Om ervoor te zorgen dat alles naar behoren werkt, verlaat je het venster Voorkeuren en start je Alfred opnieuw. Typ 'nw' voor de snelkoppeling gevolgd door de naam van de map die u wilt maken.


De nieuwe extensie proberen

Het resultaat van de extensie moet een map zijn met de naam die u hebt gekozen vol met de bestanden die u hebt gemaakt met de aanraken commando.


Het resultaat van de extensie

Als het werkt, ben je klaar. De volgende stappen zijn volledig optioneel. Als je klaar bent voor een uitdaging, ga dan verder!

Geavanceerd: Laat het werken in elke map

De bovenstaande methode creëert altijd een nieuwe map op uw bureaublad. In werkelijkheid is dit hoe veel mensen werken, maar ik raad dergelijke rommelige praktijken nooit aan. Ik ben een groot voorstander van het schoonhouden van je Desktop, dus ik wilde het script beter maken.

Wat we willen doen is de Finder bevragen en het pad van het voorste venster pakken. Als er geen venster bestaat, zouden we standaard naar het bureaublad moeten gaan. Later, wanneer we de bestanden maken, gebruiken we het pad vanaf de eerste stap. In de praktijk kunt u naar een map op uw schijf navigeren, vervolgens de Alfred-extensie uitvoeren en snel een nieuwe map vol bestanden maken.

Stap 1. AppleScript to the Rescue

Het is duidelijk dat het lastig is om hier een shellscript te krijgen om automatisch op elk gewenst moment het voorste Finder-venster te vinden. Het blijkt dat de eenvoudigste manier om een ​​Finder-venster te inspecteren AppleScript is. Voor dubbele nerd-punten kun je een AppleScript in een shellscript wikkelen, en omgekeerd.

Het script dat we nodig hebben, zal een paar basisstappen hebben:

  1. Probeer het pad van het voorste Finder-venster te vinden
  2. Als het proberen gelukt is, retourneert u het pad van dat venster
  3. Als het proberen mislukt (er bestaat geen Finder-venster), retourneer dan het pad van Desktop

Een verkeersdrempel die we tegenkomen op deze reis is dat AppleScript standaard een ander formaat gebruikt voor bestandspaden dan shell-scripts. In plaats van de voorwaartse slash die u waarschijnlijk gewend bent (Gebruikers / Gebruikersnaam / Bureaublad), gebruikt AppleScript dubbele punten om mappen te scheiden (Gebruikers: Gebruikersnaam: Bureaublad).

Dit is echter gemakkelijk genoeg om te verwerken. We moeten alleen zeker zijn om naar het POSIX-pad in ons script te verwijzen. Dit is hoe het eindproduct eruit ziet.

[Applescript]
proberen
vertel de applicatie "Finder"
stel this_folder in op (het doelwit van het voorvenster) als alias
stel this_folder in op POSIX-pad van this_folder
retourneer this_folder
einde vertellen
einde proberen

stel this_folder in op POSIX-pad van (pad naar desktop)
retourneer this_folder
[/ Applescript]

Zoals je kunt zien, liepen we gewoon door elk van de stappen die we hierboven schetsten. Het resultaat van dit script is altijd een bestandspad. In de volgende paar stappen zullen we zien hoe we dat pad in ons shellscript kunnen gebruiken.

Stap 2. Het script opnieuw formatteren

Onze volgende taak is om de AppleScript die we zojuist hebben geschreven in ons shellscript te integreren. Om dit te doen, gebruiken we de volgende syntaxis:

 osascript -e 'AppleScript goes here'

Zoals je ziet gebruiken we "osascript" om te beginnen met AppleScript-embed. Het volgende stuk, "-e" wordt gebruikt om verschillende regels te scheiden, die elk zijn ingesloten in enkele aanhalingstekens. Dus als we meerdere regels AppleScript willen insluiten, ziet het er als volgt uit:

 osascript -e 'vertel applicatie "Finder"' -e 'activeer' -e 'end tell'

Dit is een heel basaal drielijnscript dat is opgesplitst door -e-switches. Met deze kennis in gedachten, moeten we ons bovenstaande script opnieuw formatteren. Dit kan een beetje verwarrend zijn, dus ik volg graag een heel specifiek patroon. Verwijder eerst de inspringing en extra witruimte.

 vertel de toepassing "Finder" stel deze map in op (het doel van het voorvenster) als alias stel deze_map in op POSIX-pad van this_folder return this_folder end tell end probeer set this_folder naar POSIX-pad van (pad naar desktop) return this_folder

Wikkel vervolgens elke regel in een enkel aanhalingsteken en ga daar met -e voor staan ​​zodat het shellscript de verschillende regels kan analyseren.

 -e 'try' -e 'vertel applicatie "Finder"' -e 'zet this_folder op (het doelwit van het frontvenster) als alias' -e 'zet this_folder naar POSIX path van this_folder' -e 'return this_folder' -e ' einde vertel '-e' einde probeer '-e' zet this_folder naar POSIX path of (pad naar desktop) '-e' return this_folder '

Verwijder tot slot alle regeleinden en plaats de regeleinden osascript commando aan het begin.

 osascript -e 'try' -e 'vertel applicatie "Finder"' -e 'zet this_folder op (het doelwit van het front-venster) als alias' -e 'zet this_folder naar POSIX path van this_folder' -e 'return this_folder' - e end end '-e' end try '-e' zet this_folder naar POSIX path of (path to desktop) '-e' return this_folder '

Stap 3. Gooi het allemaal samen

Voor onze laatste slag gaan we het pad gebruiken dat is teruggegeven door AppleScript als startpunt voor ons shellscript dat de bestanden maakt. Om dit te doen, moeten we het resultaat van het script in een variabele gooien en vervolgens die variabele aanroepen wanneer we een startpad nodig hebben.

Voordat we naar het voltooide shell-script kijken, laten we de syntaxis bekijken voor het toewijzen van de variabele:

 myPath = $ (osascript -e 'AppleScript gaat hier')

Hier hebben we een variabele gemaakt met de naam "myPath" en vervolgens ingesteld op een AppleScript. Aangezien dit een pad zal teruggeven, kunnen we deze variabele gebruiken in plaats van een pad.

 cd $ myPath;

Dat is alles wat er is. Laten we nu al dit soort dingen samengooien tot één gigantisch commando.

 myPath = $ (osascript -e 'try' -e 'vertel toepassing "Finder"' -e 'zet this_folder op (het doelwit van het frontvenster) als alias' -e 'zet this_folder naar POSIX-pad van this_folder' -e ' return this_folder '-e' end tell '-e' end try '-e' zet this_folder naar POSIX path of (path to desktop) '-e' return this_folder '); cd $ myPath; mkdir query; cd query; raak index.html style.css script.js aan

Succes!

Het commando zou nu volledig functioneel moeten zijn. Plak het in Alfred en geef het een proefrit met hetzelfde voorvoegsel "nw" als hiervoor. Het resultaat zou een nieuwe map moeten zijn in uw huidige Finder-venster met de naam die u hebt doorgegeven als een parameter.


Plak het voltooide script in het veld Opdracht

Maak je eigen

Als je helemaal door deze zelfstudie bent gekomen, gefeliciteerd, was dat een hele uitdaging! Je hebt nu je eerste Alfred-extensie gecodeerd met de hand. Met je nieuwe kennis over het combineren van shell-scripts en AppleScripts zou je in staat moeten zijn om een ​​aantal fantastische uitbreidingen te maken.

Heb je ideeën voor nieuwe extensies of heb je er zelf een gemaakt, laat dan hieronder een reactie achter en laat het ons weten.