Béton brut

focu.sh

2022-01-29

Mody przychodzą i odchodzą. To dowód na to, że moda jest rzeczą fatalną. Nic dobrego nie psuje się kompletnie w miesiące, aż do momentu w którym trzeba całość wyrzucić. W świecie edytorów tekstowych dla pisarzy najnowsze mody sugerują, że jeśli nie możesz użyć maszyny do pisania, powinieneś przynajmniej naśladować jej zachowania: pozbyć się klawisza delete co uniemożliwi poprawianie tekstu na bieżąco, to samo z podróżowaniem pomiędzy paragrafami przy użyciu klawiszy kursora. Najlepiej też nie pokazywać tekstu poza obecnie pisanym kawałkiem, zaciemniając go lub nie wyświetlając go w ogóle.

Wszystko to ma jeden cel: nie kraść uwagi pisarza poprzednimi bohomazami i skierować go na jedną, słuszną drogę: drogę wiodącą do przodu.1

Będąc autorem amatorskim, o suchym pysku, pustej stronicy i drżących rękach, pomyślałem, że dam sobie szansę dołączyć do ludzi aktywnych pisarsko. Pobrałem taki i siaki edytor (słowa kluczowe “minimalism”, “markdown”, “focus”), większość nie ma wersji na Linuksa, a te, wydane dzięki technologii przeglądarka-vm2 zwykle nie przeżywają zetknięcia ze skąpymi w cykle procesora komputerami na których pracuję.

Przetestowałem też aplikacje mobilne. Tu jakościowo było znacznie lepiej, powstał jednak problem poboczny: część z tych edytorów domaga się comiesięcznej opłaty subskrypcyjnej. Jestem moralnie przeciwny takiej formie finansowania oprogramowania, co raczej nie powinno nikogo dziwić.

Zrobiłem więc następną dobrą rzecz: napisałem najbardziej hipsterski edytor dla prawdziwych artisanów, focu.sh3 — kilka linii w Bashu. Minimalistyczny edytor minimalistycznym nakładem sił.

focu.sh

Edytor składa się zasadniczo z jednego elementu: czytaniu stdin przy użyciu read i przekierowaniu (przez dopisanie) pobranej wartości do jakiegoś pliku wybranego przez użytkownika.

Wersja tylko fakty wyglądałaby tak:

while :
do
    read line
    echo $line >> "$1"
done

Już minimalistyczne, ale jeszcze nie hipsterskie. Musimy usunąć z ekranu wpisaną wcześniej treść i pokonać wewnętrznego Narcyza, zakochanego w już popełnionej prozie. Moglibyśmy wywołać clear, ale to zbyt agresywne i nieestetyczne. Musi być symetria jak u Kubrika i Wesa.

clear_and_align() {
    lines=`tput lines`
    half=`echo $lines/2-1 | bc`
    tput clear
    for i in $(seq 1 $half);
    do
        echo
    done
}

Dodałem funkcję clear_and_align() powodującą, że kursor jest zaparkowany na środku ekranu. Białe litery pośród morza ciemności, pięknie. Aby uzyskać ten efekt odczytuję ilość linii obecnego terminala używając tput, tnę je na pół używając kalkulatora bc, czyszczę ekran, a następnie „spuszczam” kursor odpowiednią głębokość kręcąc się po sekwencji 1…ekran/2. Całość wystarczy dodać do naszej głównej pętli while…do…done.

W pisaniu najważniejsza jest motywacja. Dobrze byłoby wyświetlić wiadomość pożegnalną wraz z ilością linii dodanych podczas sesji.

trap goodbye SIGINT
goodbye() {
    clear_and_align
    echo "W R I T I N G   S E S S I O N   T E R M I N A T E D."
    echo
    echo "$lines_added   L I N E S   A D D E D"
    exit
}

Dzięki użyciu trap możemy załapać sygnał SIGINT (wciśnięcie ^c) i wskazać funkcję do wywołania bezpośrednio po jego nadejściu. W funkcji wyświetlimy zmienną globalną lines_added, wartość której podbijamy oczywiście w głównej pętli. I proszę, po strachu.

I chciałbym móc Wam skłamać, że to właśnie ten cudowny edytor jest powodem mojej obecnej aktywności. Niestety, użyłem go raz i nie sprawiło mi to wielkiej przyjemności. Odkąd nauczyłem się wychodzić z Vima4 robię w nim wszystko. Nie napisałem może nowego edytora, ale za to mamy praktyczny przykład użycia „nieskończonego” while, seq, tput i trap.

Edytor w działaniu.

Wersja „finalna” w repozytorium.

Runda dodatkowa

Wymyśliłem, że mógłbym przypudrować nieco nosa funkcji goodbye. Moją wizję nazwałem „poprzeczny Matriks”: weźmiemy ciąg znaków i będziemy go wypisywali literka po literce używając pary kolorów (czy też własności: jak jasność i pogrubienie) wybieranych losowo zasymulujemy wyłanianie się napisu z mroku do maksymalnej jasności i wspak.

Byłem pewny i spokojny, a w mojej głowie odgrywało się jak to wszystko będzie wyglądać. Po godzinie z kawałkiem popatrzyłem na efekt i otrzepując ręce powiedziałem pod nosem „Jebać. I tak nie chciałem tego robić.”

END OF TRASMISSION

  1. próbując edytować to w kawiarni naszła mnie nagle przerażająca myśl. To wszystko jest log typu append-only. Czy jestem pierwszym człowiekiem, który wymyślił blokczejn-teknolodżi z zastosowaniem? TołstojPiniondż niedługo na rynku!
  2. Electron i jego bękarty
  3. Gdyby domena nie kosztowała $80 to bym zrobił sobie landingpage w bootstrapie
  4. alt-a tworzyło nową sesję na terminalu tekstowym, logowałem się i wydawałem polecenie kill
QR for focu.sh