dlaczego emacs nie obsługuje kluczowych zdarzeń góra / dół

9

AFAIK emacs nie obsługuje keyup/keydowntylko zdarzeń keypressed. Przykładem konsekwencji jest to, że gdy chcemy oznaczyć region, musimy najpierw ustawić znak, set-mark-commanda następnie możemy zaznaczyć region, poruszając się wokół punktu. Chociaż jest to naprawdę interesująca funkcja, ponieważ nie trzeba przytrzymywać wciśniętego klawisza Shift podczas zaznaczania tekstu, czasem pożądane byłoby zachowanie takiego samego zachowania, jak w innych edytorach. To pytanie dotyczy zrozumienia, dlaczego emacs nie obsługuje tej funkcji i dlaczego uważa się ją za lepszą . Czy istnieje również ideologiczne podejście, w jaki sposób możemy rozwiązać ten problem w emacs?

wał
źródło
6
Emacs działa również w terminalu, a kluczowe zdarzenia góra / dół nie mają sensu w tym środowisku. Całkiem prawdopodobne, że jest to przynajmniej historyczny powód, dla którego te zdarzenia nie są obsługiwane. To nie znaczy, że nie można było ich wspierać. Podejrzewam, że nikt nie widział wystarczająco pilnej potrzeby zawracania sobie tym głowy.
Harald Hanche-Olsen
1
Okej, to jest poprawny argument, chociaż w emacsie są inne funkcje, które działają tylko w środowisku graficznym (czcionki, zdarzenia myszy itp.)
wał
3
Napisałem trochę kodu, który symuluje zdarzenia w górę / w dół, aby wyświetlić podgląd pliku po naciśnięciu klawisza, a następnie zamknąć bufor podglądu po naciśnięciu klawisza, tak jak odpowiedź mówi, że jest to hack, ale może można go uformować w coś stabilnego. emacs.stackexchange.com/questions/275/…
Jordon Biondo
3
Do jakiego „zachowania zachowujesz się jak w innych edytorach”, o którym mówisz [Nie używam tych innych edytorów tekstu]? Reszta tekstu wydaje się wskazywać na „shift + ruch, aby zaznaczyć”, ale jest to już obsługiwane w Emacsie.
Stefan
4
Choć masz rację te kluczowe wydarzenia nie istnieją w Emacs, należy wiedzieć, że Emacs ma wybór shift wsparcie (jeśli to, co zainspirowało zapytanie).
Malabarba

Odpowiedzi:

2

Jak wynika z komentarzy z przyczyn historycznych, Emacs działa w terminalach, a urządzenia te są zorientowane na znaki - sekwencja bajtów nie jest gwarantowana, gdy dzieje się to na klawiaturze.

Dyskusje wskazują również, że można to zaimplementować w środowisku graficznym. Ale nikt tego nie interesował.

Należy pamiętać, że niektóre programy, takie jak gry lub oprogramowanie muzyczne, mogą używać szczegółowych informacji o tym, kiedy klawisz został naciśnięty, jak długo i kiedy jest zwolniony, ale edycja tekstu nie ma z nimi nic wspólnego.

Z instrukcji (info "(elisp)Mouse Events"):

Emacs supports four kinds of mouse events:
click events, drag events, button-down events, and motion events.

Zdarzenie zawisu może być emulowane przez bezczynny licznik czasu - analizując rzecz w punkcie po opóźnieniu.

gavenkoa
źródło