|
> Funkcje S-Lang w slrn
> Pierwsze kroki
> O SSL
> O makrach
> Wielu użytkowników
> score
>
slrn-pl: makraslrn teamptk, 05 kwi 2002, 22:34:06Parę instrukcji na temat rozszerzania możliwości czytnika za pomocą języka makr. Spis treści 1. WstępW momencie uruchomienia slrn wczytuje plik inicjalizacyjny użytkownika
`
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:
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
` Język S-lang zawiera wiele innych, takich jak 'strcmp' i 'is_substr',
opisanych w pliku `
|
|
|