Shift + Up nie jest rozpoznawany przez Emacsa w terminalu


15

Bardzo często używam Shift+, Up/Downaby wybrać region w Emacsie. Działa dobrze w trybie GUI, ale po emacswywołaniu z -nwopcją mogę wybierać linie tylko za pomocą Shift+ Down. Shift+ UpNie działa, wyświetla się następujący komunikat o błędzie w minibufora:

<select> is undefined

Jak mogę rozwiązać ten problem?

Odpowiedzi:


13

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 ( ?\ew 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-mapjest 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-upraczej niż select. Najpierw dowiedz się, jaka jest sekwencja ucieczki. W *scratch*buforze naciśnij Ctrl+, Qa następnie Shift+ Up. Polecenie C-qpowoduje 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;2Ado 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-mapnależ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.


Twoja odpowiedź wydaje się odpowiadać na moje pytanie tutaj - emacs.stackexchange.com/questions/33988 . Are the (define-key ...)polecenia, które powinny przejść do init.el? Czy jest gdzieś szczegółowy przykład, na który mogę spojrzeć?
vfclists

define-keyKomendy @vfclists przechodzą do pliku inicjującego. Może to być ~/.emacs.d/init.elkilka innych lokalizacji. Znajdziesz wiele przykładów zastosowań define-key, wyszukując define-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.
Gilles 'SO - przestań być zły'

Zmieniłem się na zwykłe emacsy, aby nauczyć się trybu org i udało mi się zacząć pracę input-decode-mappo znalezieniu kilku przykładów. Czy mogę przyjąć, że input-decode-mapma to zastosowanie, gdy użytkownik wprowadza tekst do bufora?
vfclists

@vfclists input-decode-mapto jedna z obowiązujących map klawiszy. Szczegółowe informacje można znaleźć w instrukcji obsługi .
Gilles 'SO - przestań być zły'

5

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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.