Mój Alfred – nowy dokument Byword
W dzisiejszym wpisie odnośnie używanych przeze mnie workflows napiszę o czymś bardziej pożytecznym dla większego kręgu użytkowników Alfreda (mam przynajmniej taką nadzieję).
Jako podstawowy edytor tekstowy używam aplikację Byword. Korzystam przy tym z iCloud, w którym trzymam wszystkie „surowe” teksty ukazujące się zarówno tutaj, na stronie, jak i w magazynie. Jak się pewnie domyślacie, pisząc w Byword posługuję się znacznikami Markdown. Tytuł artykułu, który jest również nazwą pliku, zawsze rozpoczynam od nagłówka H1 (zapisanego w postaci #
).
Przejdźmy teraz do „problemu”.
Metoda tradycyjna
Aby utworzyć nowy dokument w sposób tradycyjny, muszę uruchomić Byword. Pojawi się wtedy okno z dokumentami przechowywanymi w iCloud, gdzie muszę kliknąć przycisk New Document, bądź skorzystać ze skrótu klawiszowego Cmd
+N
. Zostanie otwarty pusty dokument, do którego wpisuję tytuł i zapisuję go (na szczęście Byword od razu oferuje nazwanie pliku na podstawie pierwszej linii tekstu).
Trochę długo, prawda? Dlatego stworzyłem workflow w Alfredzie, który znacznie przyspiesza powyższy proces.
Tworzenie dokumentu Byword za pomocą Alfreda
Jak to działa?
- Wywołuję Alfreda,
- wpisuję słowo kluczowe
by
- po spacji wpisuję tytuł/nazwę dokumentu i zatwierdzam,
- otwiera się Byword z utworzonym plikiem o powyższej nazwie i z wpisanym tytułem.
Cały proces jest błyskawiczny. „Rozbierzmy” go więc na czynniki pierwsze.
Wejście
Jako wejście mojego workflow służy Keyword, w którym wskazuję, jakie słowo kluczowe wywoła dalsze akcje. W tym przypadku jest to słowo by
. Ponieważ zaraz po nim podaję nazwę pliku, musi być zaznaczona opcja with space, a także Argument Required.
Akcja
„Sercem” mojego workflow jest poniższy skrypt Shell Script:
BYW=`ls -a /Users/$USER/Library/Mobile\ Documents/ | grep -i "byword"`
touch /Users/$USER/Library/Mobile\ Documents/$BYW/Documents/{query}.md
open -a /Applications/Byword.app /Users/$USER/Library/Mobile\ Documents/$BYW/Documents/{query}.md
osascript -e 'tell application "Terminal" to delay 1'
echo -n {query}
Poniżej wyjaśnienie kodu:
BYW=`ls -a /Users/$USER/Library/Mobile\ Documents/ | grep -i “byword”`
– wiadomo, że aplikacje korzystające z iCloud przechowują swoje pliki między innymi na naszym komputerze w katalogu~/Library/Mobile Documents/
. Workflow musi zdobyć najpierw dwie informacje: jaka jest nazwa użytkownika oraz jak nazywa się folder z Byword’em. Pierwszą zdobywamy za pomocą globalnej zmiennej$USER
(można to było również zrobić przy użyciu komendywhoami
). Drugą natomiast poprzez zastosowanie całej komendyls
, która normalnie wyświetla całą zawartość kataloguMobile Documents
, ale ograniczyłem ją do odnalezienia katalogu mającego w nazwie wyrażenie „byword” narzędziemgrep
. Nazwa tego katalogu jest przypisana do zmiennej$BYW
.touch /Users/$USER/Library/Mobile\ Documents/$BYW/Documents/{query}.md
– na podstawie powyższych informacji mogę stworzyć nowy plik poleceniemtouch
o nazwie podanej przez nas, a zapisywanej jako{query}
.open -a /Applications/Byword.app /Users/$USER/Library/Mobile\ Documents/$BYW/Documents/{query}.md
– ta komenda z kolei otwiera utworzony przed chwilą plik za pomocą aplikacji Byword.osascript -e 'tell application "Terminal" to delay 1’
– kawałek AppleScript mający za zadanie wstrzymać na chwilę całą operację, żeby Byword zdążył otworzyć nasz plik (jeśli jako główny dysk macie SSD, to spokojnie można wartość1
zmniejszyć posługując się wartościami dziesiętnymi, pamiętając jednakże o tym, żeby rozdzielać je kropką a nie przecinkiem).echo -n {query}
– ostatnie polecenie to „przesłanie” wpisanej przez nas nazwy dalej. Posłuży ona do wklejenia do nowo utworzonego dokumentu. Dodatkowa opcja -n powstrzymuje wstawienie nowej linii.
Powyższy kod dość łatwo zmodyfikować pod siebie, by korzystał z innej aplikacji i zapisywał w innym miejscu (nie tylko iCloud).
Wyjście
Ostatnim elementem mojej akcji jest wklejenie tytułu do otwartego już dokumentu za pomocą Copy to Clipboard, gdzie w polu tekstowym wpisałem # {query}
, czyli znacznik H1 i nazwę. Dodatkowo zaznaczona jest opcja Automatucally paste to front most app. Właśnie ze wzlgędu na nią musiałem wstrzymać na chwilę działanie skryptu, bo inaczej Alfred próbowałby wkleić tytuł zanim otworzyłby się dokument.
Całkowicie opcjonalne jest dodanie powiadomienia o utworzonym dokumencie za pomocą Post Notification.
Tak przedstawia się mój workflow, który ma za zadanie stworzyć nowy dokument w Byword, gotowy do zapełnienia słowami.
Komentarze: 6
“bardziej pożyteczniejszym” troszkę razi ale sam workflow bardzo przydatny :)
Dzięki, poprawione. I cieszę się, że komuś to się przydało. ;)
Może pomyślisz że się czepiam ale trochę nadmiarowe się to wydaje. Taki wielki skrypt tylko po to by plik miał gotową nazwę ..wtf
5 linijek kodu to od razu wielki skrypt? ;) Nie chciałbyś widzieć w takim razie, jak miałem to zrobione wcześniej w AppleScript. ;P
A tak na poważnie, jeśli masz sugestię, jak to jeszcze bardziej zoptymalizować, to ja chętnie to zrobię. Nie jestem programistą, codziennie odkrywam nowe możliwości zarówno w Shell Scripcie, jak i AppleScript. Więc proszę o wyrozumiałość i ewentualną pomoc.
No postaram się pomyśleć. Nie wiem czy bardziej efektywne nie było by makro w Keyboard Maestro. Też co rusz coś odkrywam nowego ;)