Mastodon

Keyboard Maestro i wstawianie linków zamiast znaczników

1
Dodane: 10 lat temu

W tytule mógłbym zawrzeć słowo #nerdalert, bo niniejszy wpis będzie zapewne bardzo niszowy, bo dotyczy osobistego problemu – jeszcze szybszego publikowania tekstów. Ale mam nadzieję, że przynajmniej paru osobom podane rozwiązania kiedyś się przydadzą, a być może ktoś z Was podpowie jeszcze, jak to wszystko można bardziej usprawnić.

Problem

Swoje wpisy przygotowuję w sposób oddany na poniższym przykładowym zrzucie:

Są tu teksty oraz znaczniki <!--photo--> przeznaczone do wstawienia w ich miejsce linków do zdjęć. Linki będą w postaci kodu HTML, a całość opublikowana bezpośrednio z Byword na iMagazine.

Do tej pory ręcznie wstawiałem linki za każdy ze znaczników. Postanowiłem jednak, że sobie to ułatwię i zaprzęgnę jakąś aplikację, która mogłaby jak najbardziej zautomatyzować ten proces.

Rozwiązanie

Problem udało się rozwiązać przy pomocy Keyboard Maestro, skryptu Bash oraz Pythona, a całe makro (jego najważniejsza część) przedstawia się następująco:

Po kolei objaśnię:

Tu odbywa się cała „magia”, która jednak nie jest przedmiotem tego wpisu – tworzony jest link do każdego z plików graficznych. Żeby jednak rzucić trochę światła na sprawę, każdy link przedstawia się w postaci:

<a href="http://AdresSerweraNaKtorymUmieszczonyJest/oryginalnyPlik.roz"><img src="http://AdresSerweraNaKtorymUmieszczonyJest/MiniaturaOryginalnegoPliku-Szerokosc-x-Wysokosc.roz" alt="" width="Wysokosc" height="Szerokosc" /></a>

Skrypt przy pomocy narzędzia sips wydobywa, a potem składa do „kupy” wszystkie niezbędne informacje, na podstawie których powstaje link według powyższego schematu. Tak dzieje się z każdym plikiem, który był zaznaczony w chwili wywołania makra. Linki są zapisywane do pliku links, który tworzony jest w katalogu /tmp, na zasadzie dopisywania. Tyle ile było zaznaczonych plików, tyle będzie linków. Dlatego też na początku makra znajduje się akcja, która kasuje ten plik, żeby móc zacząć „na czysto”.


Ostatni element odpowiedzialny jest za właściwe podstawianie linków w miejsce znaczników <!--photo-->.

Objaśnienie kodu:

DOCS="/Users/$USER/Desktop/" – wskazanie folderu z tworzonymi dokumentami (testowo jest to Biurko).

LAST=$(ls -t $DOCS | awk '{printf("%s",$0);exit}')1 – odnalezienie w katalogu ostatnio modyfikowanego pliku. Nie stanowi to dużego problemu, bo w folderze, w którym tworzę tylko dokumenty do wpisów ten ostatni w 99% przypadków jest właśnie tym, nad którym pracuję. A zawsze mogę go jeszcze zmodyfikować i zapisać, gdybym pracował jednak nad dwoma.

PLIK="$DOCS$LAST" – połączenie ścieżki do katalogu i nazwy pliku w celu otrzymania pełnych „namiarów” na dokument.

LINKI="/tmp/links" – zmienna określająca miejsce zapisanych linków.

python << EOF … – właściwe podmienianie. Plik dokumentu otwierany jest dwukrotnie jako inputoutput, ponieważ w nim będziemy szukać i do niego zapisywać zmiany. Z kolei plik z linkami dzięki zastosowaniu pętli idzie linia po linii wypełniając polecenie podmiany: input = input.replace('<!--photo-->', line, 1). Jedynka na samym końcu wymusza podmianę tylko na pierwszym rezultacie (odnalezionym znaczniku <!--photo-->). Następnie przechodzimy do drugiej linii pliku z linkami i sytuacja się powtarza. Pętla kończy się w momencie braku linków bądź znaczników <!--photo-->.2

Początkowo chciałem trzymać się tylko Bash’a i skorzystać z narzędzia sed. O ile jednak działało prawidłowo z pojedynczymi słowami w czasie testów, o tyle z utworzonymi linkami nie radziło sobie w ogóle.3

Wynik

Wynikiem jest tekst uzupełniony o linki. :)


Zapewne wprawne oko osoby obytej z Bash’em i Pythonem (a może nawet z Keyboard Maestro) wychwyci tu parę błędów, czy rzeczy, które można lub nawet trzeba poprawić. Nieźle się namęczyłem zanim w końcu osiągnąłem pożądany rezultat, ale jak się pewnie domyślacie, rozwiązanie dało ogromną satysfakcję tym bardziej, że nie zajmuję się „programowaniem” na codzień, a tylko hobbystycznie.

P.S.: Stack Overflow i inne jemu podobne strony to taka ściąga.pl dla geeków. ;)

P.P.S.: Niniejszy wpis jest „żywym” przykładem prawidłowego działania całego makra. Z jednym wyjątkiem, w skrypcie z kawałkiem Pythona, zaraz za jego wywołaniem python << EOF w następnej linijce zabrakło zapisu kodowania # coding=utf-8. :)

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 .