Są to sekwencje znaków wysyłane przez twój terminal po naciśnięciu danego klawisza. Nie ma nic wspólnego z bashem lub readline per se, ale będziesz chciał wiedzieć, jaką sekwencję znaków wysyła dany klawisz lub kombinacja klawiszy, jeśli chcesz skonfigurować readline
działanie po naciśnięciu danego klawisza.
Po naciśnięciu Aklawisza generalnie terminale wysyłają a
znak (0x61). Jeśli naciśniesz <Ctrl-I>
lub <Tab>
, wtedy ogólnie wyślij ^I
znak znany również jako TAB
lub \t
(0x9). Większość klawiszy funkcyjnych i nawigacyjnych generalnie wysyła ciąg znaków rozpoczynający się od ^[
(control- [), znany również jako ESC
lub \e
(0x1b, ósemkowy 033), ale dokładna sekwencja różni się w zależności od terminalu.
Najlepszym sposobem, aby dowiedzieć się, co klawisz lub kombinacja klawiszy wysyła do terminala, jest uruchomiona sed -n l
i wpisz ją, a następnie wpisz Enterna klawiaturze. Wtedy zobaczysz coś takiego:
$ sed -n l
^[[1;5A
\033[1;5A$
Pierwsza linia jest spowodowana przez lokalny terminal echo
wykonany przez urządzenie końcowe (może nie być wiarygodny, ponieważ wpłyną na to ustawienia urządzenia końcowego).
Drugi wiersz jest wyprowadzany przez sed
. $
Nie ma być włączone, to tylko, aby pokazać, gdzie koniec linii jest.
Powyżej Oznacza to, że Ctrl-Up(co mam wciśnięty) wysłać 6 znaków ESC
, [
, 1
, ;
, 5
i A
(0x1b 0x5b 0x31 0x35 0x41 0x3b)
Baza terminfo
danych rejestruje szereg sekwencji dla wielu wspólnych kluczy dla pewnej liczby terminali (na podstawie $TERM
wartości).
Na przykład:
TERM=rxvt tput kdch1 | sed -n l
Powie Ci, jaką sekwencję ucieczki wysyła się rxvt
po naciśnięciu Deleteklawisza.
Możesz sprawdzić, który klucz odpowiada danej sekwencji z bieżącym terminalem za pomocą infocmp
(tutaj przy założeniu ncurses
infocmp):
$ infocmp -L1 | grep -F '=\E[Z'
back_tab=\E[Z,
key_btab=\E[Z,
Kombinacje klawiszy, takie jak Ctrl-Up, nie mają odpowiednich wpisów w terminfo
bazie danych, więc aby dowiedzieć się, co wysyłają, przeczytaj źródło lub dokumentację odpowiedniego terminala lub wypróbuj je za pomocą sed -n l
metody opisanej powyżej.
bind -p
.