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.
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!
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.
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
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.
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?
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.
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.
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 op de kleine plusknop linksonder in het venster. Dat zou een menu moeten openen met de verschillende soorten extensies die u kunt maken:
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!
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.
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.
Vervolgens moet u de titel, beschrijving en het trefwoord van de extensie invoeren.
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.
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.
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.
Zodra u klaar bent met die stap, drukt u op de knop Opslaan. Dat is het! Je bent helemaal klaar.
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.
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.
Als het werkt, ben je klaar. De volgende stappen zijn volledig optioneel. Als je klaar bent voor een uitdaging, ga dan verder!
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.
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:
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.
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 '
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
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.
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.