SLRN - Super Page
 

> Funkcje S-Lang w slrn > Pierwsze kroki > O SSL > O makrach > Wielu użytkowników > score >
poziom wyżej

slrn-pl: makra

slrn team

ptk, 05 kwi 2002, 22:34:06


Parę instrukcji na temat rozszerzania możliwości czytnika za pomocą języka makr.

Spis treści

  1. Wstęp
  2. Definiowanie makr dla klawiszy
  3. Polecenia i obsługa zdarzeń

1. Wstęp

W momencie uruchomienia slrn wczytuje plik inicjalizacyjny użytkownika `.slrnrc'. Plik ten może zawierać jedno lub więcej poleceń `interpret', powodujących, że czytnik załaduje podany skrypt S-lang. Np:

    interpret ".slrn.sl"
    interpret "src/slrn/macros/search.sl"
 
Każdy skrypt musi być zgodny ze składnią języka S-lang. Przeczytaj dokumentację S-langu zawartą pod adresem http://www.s-lang.org, jeśli potrzebujesz więcej informacji na temat składni.

Kilka gotowych makr jest dołączonych do dystrybucji w podkatalogu 'macros', a o wiele więcej jest dostępnych w Internecie.

2. Definiowanie makr dla klawiszy

Pomimo, że można przypisać klawisze konkretnym funkcjom za pomocą wierszy postaci:

         setkey group "refresh_groups"  "G"
 
w pliku '.slrnrc', nie jest możliwe definiowanie bardziej złożonych działań w ten sposób. Jednakże używając S-langu, można definiować makra. Na przykład wewnętrzna funkcja 'refresh_groups' odświeża listę grup, ale nie przemieszcza kursora na początek tej listy. Z kolei wewnętrzna funkcja 'bob' przesuwa kursor na początek listy grup, ale nie odświeża jej. Można zdefiniować funkcję w S-langu wykonującą obie te akcje:
         define refresh_groups_bob ()
         {
             call ("refresh_groups");
             call ("bob");
         }
 
i przypisać jej klawisz:
         definekey ("refresh_groups_bob", "g", "group");
 
Funkcja 'definekey' pobiera 3 argumenty:
  1. nazwa funkcji,
  2. przypisanie klawisza,
  3. nazwa mapy klawiszy ("article" lub "group").

Oto inne makro, które można użyć w trybie artykułów. Poszukuje ono określonego wyrażenia regularnego w tematach artykułów.

        variable Last_Search_Str = "";
        define re_subject_search_forward ()
        {
           variable str;

           ERROR_BLOCK
             {
               () = header_up (1);
             }

           !if (header_down (1)) return;

           str = read_mini ("Subject re-search fwd", Last_Search_Str, "");

           !if (strlen (str))
             return;

           Last_Search_Str = str;
           !if (re_fsearch_subject (str))
             error ("Not found.");
        }
 
Aby przypisać mu klawisz, np. 's', użyjemy:
        definekey ("re_subject_search_forward", "s", "article");
 
Niektóre funkcje klawiaturowe programu slrn wymagają podania ,,argumentu prefiksowego''. Wielu użytkowników uważa koncepcję argumentu prefiksowego za egzotyczną. Na przykład, zamiast pisać: 'ESC 1 ESC p' aby zrekonstruować wątek, można by po prostu użyć funkcji:
        define my_recreate_thread ()
        {
            set_prefix_argument (1);
            call ("get_parent_header");
        }
 
Oto funkcja, która przesyła bieżący artykuł potokiem do polecenia 'most' (przeglądarka plików podobna do more, czy less):
        define pipe_to_most ()
        {
            pipe_article ("most");
        }
        definekey ("pipe_to_most", "&", "article");
 
Tutaj funkcja została związana z klawiszem '&'. Najprawdopodobniej użytkownik będzie wolał przesłać artykuł do skryptu powłoki w celu dalszego przetwarzania.

Niektóre wbudowane funkcje będą pytać o ciąg znaków. Na przykład, w trybie artykułów naciśnięcie ':' spowoduje zapytanie użytkownika o nazwę pliku. Funkcja 'set_input_string' może zostać użyta do dostarczenia odpowiedzi na takie pytanie, np:

      % Polecenie ':' zapyta o nazwę pliku.
      set_input_string ("/tmp/decoded");
      call ("decode");
 
Podobnie, dla funkcji, które pytają o pojedynczy znak, jak np:
      Czy na pewno chcesz zakończyć [T]ak Nie
 
funkcja wewnętrzna 'set_input_chars' może zostać użyta w celu dostarczenia odpowiedzi.

3. Polecenia i obsługa zdarzeń

Przykłady umieszczone powyżej używają "wewnętrznych" funkcji takich jak `call', 'set_integer_variable', itd. Opis wszystkich wewnętrznych funkcji, które są używane przez interpreter, jest umieszczony w pliku `slrnfuns.txt'. Pełna lista funkcji obsługujących zdarzenia jest teraz umieszczona w tym pliku.

Język S-lang zawiera wiele innych, takich jak 'strcmp' i 'is_substr', opisanych w pliku `slangfun.txt', które są zawarte w samym języku.


projekt www: loop Piotr Gogolin
[ strona wygenerowana z CVS: 07.06.2002 20:25 ]