Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Tao-multishell

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

linux oprogramowanie programowanie

Komentarze

0 nowych
dhor   9 #1 09.09.2015 15:34

Gigantyczna rzecz.

  #2 09.09.2015 18:22

Po co to wszystko ? , w znaczeniu jak byś mógł przekonać po co te wysiłki i czemu służyć mają

nintyfan   11 #3 10.09.2015 07:07

@Anonim (niezalogowany): Po to, by móc:
1) Pisać skrypty obsługujące wiele aplikacji pisanych w libgreattao
2) Mieć pół tekstowego/półgraficznego shell-a - mój shell oddziela wejście/wyjście i wyjście błędów, powoduje, że zadania piszą do innych terminali, itd. W przyszłości planuję dodać kolejne funkcje, jak choćby menu z historią ostatnich poleceń, menu z sygnałami do wysłania, itd.
3) Dzięki tao-multishell możesz uczynić jakby daemonem każdy program libgreattao i komunikować się z nim w inny sposób niż za pomocą okien - jest to ważne np. przy debugowaniu, itd.

Autor edytował komentarz.
nintyfan   11 #4 10.09.2015 07:08

@dhor: To nie jest taka gigantyczna rzecz. Najwięcej problemów miałem z błahostkami, a kod został częściowo skopiowany(a następnie okrojony) z tao-network-client. Co do wielkości okien, to są to wycinki ekranu, a nie cały ekran komputera, a więc okna są mniejsze.

smieszek07   3 #5 10.09.2015 19:02

@nintyfan: A libgreattao czym w ogóle jest , językiem powłoką czy czym?

nintyfan   11 #6 10.09.2015 20:19

@smieszek07: Libgreattao to nowość. Jest tym samym, czym MVC dla webu i rozdzielenie treści, wyglądu i zachowania dla WWW. Po prostu odciąża programistę od wykonywania zbędnych czynności, pozwalając używać przygotowanych szablonów klas(np. okien). W dodatku szablony mogą być przekształcane przez użytkownika, twórców środowiska graficznego lub twórców systemu. Aplikacja może dostarczać własne szablony, jednak mają one najniższy priorytet.

Libgreattao to nie jest biblioteka interfejsów użytkownika. Jest to biblioteka interfejsów z możliwością generowania interfejsu użytkownika w locie. Można komunikować się z programem w trybie graficznym, tekstowo-graficznym lub za pomocą interpretatora poleceń z możliwością wykonywania skryptów, a co bardzo ważne - można korzystać z takiej aplikacji przez sieć. Mógłbym się rozpisywać. Aplikacja, dzięki libgreattao, staje się mniejsza, bo za nic nie odpowiada, a jedynie za dostarczenie algorytmów - takie jest założenie. Ma to zniwelować istnienie wielu bytów, które odpowiadają za to samo, ale różnią się tylko środowiskiem pracy lub sposobem interakcji z użytkownikiem. Możesz przeczytać moje poprzednie wpisy na ten temat.

Autor edytował komentarz.
nintyfan   11 #7 10.09.2015 20:26

@smieszek07: Libgreattao tak naprawdę nie ma powłoki- użyłem uproszczenia. Posiada interpreter poleceń. "Powłoka" libgreattao implementuje język, którego jeszcze nie nazwałem. Libgreattao, to biblioteka interfejsów. Pozwala ona, by okno komunikatu miało tytuł i opis, a okno zapytania dodatkowo dowolne akcje, by okno komunikacji miało jedno lub więcej pól tekstowych, by okno pozwalające zmienić atrybuty tekstowe miały wiele pól tekstowych, by okno wyboru miało wiele pozycji do wyboru. Co do ostatniego sposób prezentacji i wyboru pozycji jest związany z tzw. wzornictwem(design-em), z którym program został uruchomiony. To samo dotyczy każdego okna. Jeżeli program nie działa w trybie normalnym(okienkowym), tylko sieciowym lub powłoki, to klasy okien nie są brane pod uwagę, lecz program działa w sposób niezmieniony.

smieszek07   3 #8 11.09.2015 18:36

@nintyfan: A czy to co prezentujesz potrafi interaktywnie pobierać info , w znaczeniu pole tekstowe , z którego pobiera dane , bądź pole listy? . Jak się ma sprawa z przenoszeniem i instalacją na różnych dystrybucjach ?

nintyfan   11 #9 11.09.2015 18:42

@smieszek07: Przetestuj mój instalator, dostępny na sourceforge.net. Dla OpenSUJSE i Fedory są paczki, ale są za stare. Następnie pobierasz źródła tao-multishell, i musisz wynkonać make. Jedyne, czego potrzebujesz, to GNUmake, gcc i zainstalowane libgreattao.

nintyfan   11 #10 20.09.2015 09:01

Jakie wrażenia z użytkowania? Zauważyłem, że 32-bitowy instalator nie działa pod Ubuntu. Zapomniałem dodać, że moja biblioteka wymaga także libsell, którego nie dołączyłem do obrazu plików do wgrania - jest tylko w obrazie instalatora. Wirtualizacja/konteneryzacja może dużo pomóc.

winfirst   6 #11 03.11.2015 17:12

Fajne! Muszę przetestować ;).