Terminal tekstowy przesyła tylko znaki (a dokładniej bajty), a nie klucze. Klucze i klucze (klucze z modyfikatorami) są kodowane jako sekwencje znaków. Klawisze wstawiające znaki drukowalne są wysyłane jako one same; klawisze funkcyjne są wysyłane jako sekwencje specjalne. Większość sekwencji ucieczki składa się ze znaku Escape ( ?\e
w składni Emacsa), po którym następują dwa lub więcej znaków do wydrukowania. Zobacz Klawisze sterowania i klawisze góra / dół w terminalu do użytku przez emacsa i Jak działają wprowadzanie za pomocą klawiatury i tekst? po więcej informacji.
Emacs ma mechanizm do tłumaczenia sekwencji ucieczki na własne pojęcie kluczy. Tabela translacji input-decode-map
jest inicjowana przy uruchomieniu Emacsa (a ściślej, gdy otwarta jest nowa ramka: ta zmienna ma inną wartość na każdym terminalu). Czasami Emacs nie zna wszystkich sekwencji ucieczki wysłanych przez terminal.
W twoim przypadku wydaje się, że Emacs ma niewłaściwą interpretację sekwencji ucieczki wysłanej przez Shift+ Up. Musisz to powiedzieć, aby interpretować to S-up
raczej niż select
. Najpierw dowiedz się, jaka jest sekwencja ucieczki. W *scratch*
buforze naciśnij Ctrl+, Qa następnie Shift+ Up. Polecenie C-q
powoduje dosłowne wstawienie następnego znaku, którym jest znak zmiany znaczenia, po którym następuje reszta sekwencji zmiany znaczenia. Powiedzmy, że Shift+ Upwysyła \e[1;2A
do naszego systemu, wtedy musisz ponownie zdefiniować odpowiedni wpis w input-mode-map
:
(define-key input-decode-map "\e[1;2A" [S-up])
Zasadniczo input-decode-map
należy ustawić na terminal. W praktyce bardzo rzadko mają dwa terminale, w których ta sama sekwencja ucieczki koduje różne klucze, więc ustawienie globalne będzie działać dobrze.
Are the (define-key ...)
polecenia, które powinny przejść do init.el? Czy jest gdzieś szczegółowy przykład, na który mogę spojrzeć?define-key
Komendy @vfclists przechodzą do pliku inicjującego. Może to być~/.emacs.d/init.el
kilka innych lokalizacji. Znajdziesz wiele przykładów zastosowańdefine-key
, wyszukującdefine-key
, ale znalezienie mapy do powiązania to inna sprawa. Kilka mapy są zaangażowane:global-map
,input-decode-map
,function-key-map
,keyboard-translate-map
. Nie wiem jak odpowiedzieć na twoje pytanie, ponieważ nie znam Spacemacs. Nie polecam używania pakietów takich jak Spacemacs, które niechlujnie redefiniują standardowe interfejsy.input-decode-map
po znalezieniu kilku przykładów. Czy mogę przyjąć, żeinput-decode-map
ma to zastosowanie, gdy użytkownik wprowadza tekst do bufora?input-decode-map
to jedna z obowiązujących map klawiszy. Szczegółowe informacje można znaleźć w instrukcji obsługi .W emacs region jest ograniczony przez punkt (kursor) i znak (niektóre wcześniejsze pozycje kursora, które zostały „oznaczone”).
Tak więc, aby „wybrać region”, musisz umieścić ten znak, a następnie przesunąć punkt.
Najłatwiejszym sposobem na umieszczenie znaku jest naciśnięcie
C-SPC
. Następnie przesuń kursor, a zobaczysz, że „region” się rozszerza.Aby „odznaczyć region”, możesz nacisnąć
C-SPC
ponownie.Ponieważ „shift + ruch” jest powszechnym skrótem klawiszowym w innym oprogramowaniu, domyślnie emuluje to zachowanie „wybierz region”. Jednak nie działa w terminalu, ponieważ shift nie może być wysłany do emacsa jako klawisz modyfikujący.
Zauważ, że ogólnie
C-SPC
metoda jest znacznie bardziej wydajna niż inne metody wyboru regionu: nie jesteś ograniczony do ruchu w górę / w dół / w lewo / w prawo (możesz na przykład użyć wyszukiwania ...) i nie wymaga utrzymujesz przez długi czas niewygodną kombinację klawiszy.źródło