Tao-multishell
08.09.2015 18:52
Jest to kolejny, raczej amatorski projekt, napisany w libgreattao. No cóż. Libgreattao jest przeznaczone po to, by uprościć pisanie prostych rzeczy i dać im kopa.
O czym mowa
Tao‑multishell jest powłoką tekstowo/graficzną, napisaną w libgreattao. Powstało wiele powłok tekstowo-graficznych(nazw nie pamiętam), jednak żadna nie odniosła sukcesu. Tao‑multishell ma to do siebie, że może pracować wyłącznie w trybie tekstowym(bez grafiki, a w postaci "kontrolek" w trybie tekstowym lub shellu). Ważne jest jednak przeznaczenie. Tao‑multishell, choć przystosowany do uruchamiania normalnych poleceń tekstowych, został stworzony do uruchamiania programów napisanych w libgreattao.
Jak to działa?
Tak na poważnie, to tao‑multishell wewnętrznie korzysta z Sh, a jest prawdziwą powłoką jedynie dla programów napisanych w libgreattao. Dla pozostałych jest ubogim emulatorem terminala.
Program tworzy pseudoterminal dla każdego uruchamianego zadania(a dla każdego zadania uruchamiana jest nowa sesja), a dodatkowo otwiera port do nasłuchu dla każdego uruchamianego zadania, by obsługiwać programy napisane w libgreattao. Pozwala to np. na zatrzymanie przetwarzania w stylu podobnym do DBus-a. Po prostu można wywołać zadania, np. przerwij przetwarzanie lub odpowiedzieć na komunikat błędu programu napisanym w libgreattao.
Taki podgląd dostarczanych interfejsów przez aplikację napisaną w libgreattao, pozwala łatwe testowanie aplikacji - możemy odkryć czy np. błąd jest w programie czy backendzie libgreattao. Nie jesteśmy też przybici interfejsem graficznym - mamy tylko wykaz opcji.
Skryptujemy!
Największą radością jest jednak oskryptować tao‑multishell za pomocą skryptów libgreattao. Skrypty libgreattao pozwalają sterować programem napisanym w libgreattao. Podkreślam, że chodzi o sterowanie jednym programem przy użyciu jednego skryptu. Tao‑multishell rozwiązuje ten "problem", który został wprowadzony m.in ze względów bezpieczeństwa.
Oto przykład, jak uruchomić polecenie, wkleić dane do niego, i pobrać wynik:
setinput /Objects/Atributes[1] /attribute/command cat run /Objects/Atributes[1] /attribute/command setinput /app/chat[1] /target/task/text/input "Witaj świecie\n" run /app/chat[1] /actions/input/send run /app/chat[1] /actions/input/close =getoutput wynik /app/chat[1] /target/task/text/output
Tak wysłaliśmy napis "Witaj świecie" z przejściem do nowej linii na końcu, a następnie pobraiśmy wynik polecenia cat, które uruchomiliśmy na samym początku. Teraz możemy uruchomić kolejne polecenie i wkleić do niego wynik naszego. Tak wygląda cytowanie poleceń - obecnie trudniejsze niż w bash-u, ale powłoka nadal się rozwija, więc nic nie przeszkodzi w dodaniu nowych funkcji.
Możemy jednak się wysilić bardziej, i posterować programem tak, by np. wkleić ścieżkę do menadżera plików:
starttimers setinput /Objects/Attributes[1] /attributes/command /ścieżka/do/tao-manager run /Objects/Attributes[1] /attributes/command =window main /Objects/MultipleObjects[1] run $main /list/items/0/selected run $main /actions/show_command_information =window a /system/task_information[1] run $a /list/items/0/selected =window b /Objects/MultipleObjects[2] run $b /list/items/0/selected =window c /Objects/MultipleObjects[3] =text i 0 block find_left_path : .false scopelevel -1 =add i $i 1 =cat path /list/items/ $i =cat path $path /data/path =getlabel label $c $path ifstreq /fileviews/left/path_edit $label endblock =cat path /list/items/ $i =cat path $path /selected setinput $c $path /etc/ run $c $path
To wszystko w tym temacie!
Przyszłość
W przyszłości planuję dopisać możliwość wyświetlania okien aplikacji libgreattao. Obecnie poszukuje osoby chętne do pomocy, by stworzyć najlepszy "emulator terminala" i "powłokę" graficzno-tekstową, jaka tylko mogłaby powstać.