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
.

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ć.”

- 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! ↩
- Electron i jego bękarty ↩
- Gdyby domena nie kosztowała $80 to bym zrobił sobie landingpage w bootstrapie ↩
- alt-a tworzyło nową sesję na terminalu tekstowym, logowałem się i wydawałem polecenie
kill
↩