Mastodon

Mój Alfred – nowy dokument Byword

6
Dodane: 11 lat temu

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 komendy whoami). Drugą natomiast poprzez zastosowanie całej komendy ls, która normalnie wyświetla całą zawartość katalogu Mobile Documents, ale ograniczyłem ją do odnalezienia katalogu mającego w nazwie wyrażenie „byword” narzędziem grep. 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 poleceniem touch 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.

Nazwa: Nowy dokument Byword
Pobieranie: link

Wszystkie artykuły z serii Mój Alfred
możecie znaleźć pod tym linkiem.

Maciej Skrzypczak

Użytkownik sprzętu z nadgryzionym jabłkiem, grafik komputerowy, Redaktor iMagazine.pl. Mastodon: mcskrzypczak@c.im

Zapraszamy do dalszej dyskusji na Mastodonie lub Twitterze .

Komentarze: 6

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 ;)