почему emacs не поддерживает ключевые события вверх / вниз

9

AFAIK emacs не поддерживает keyup/keydownтолько события keypressed. Примером следствия является то, что когда мы хотим пометить область, мы должны сначала установить метку, set-mark-commandа затем можем пометить область, перемещаясь вокруг точки. Хотя это действительно интересная функция, поскольку вам не нужно держать нажатой клавишу Shift при выделении текста, иногда было бы желательно иметь такое же поведение, как в других редакторах. Этот вопрос состоит в том, чтобы понять, почему emacs не поддерживает эту функцию и почему это считается лучше . И есть ли идеоматический подход, как мы могли бы решить это в Emacs?

вал
источник
6
Emacs также работает в терминале, и события клавиш вверх / вниз не имеют смысла в этой среде. Вполне вероятно, что это как минимум историческая причина, по которой эти события не поддерживаются. Это не значит, что они не могут быть поддержаны, хотя. Я подозреваю, что никто не видел достаточно насущной необходимости беспокоиться об этом.
Харальд Ханче-Олсен
1
Хорошо, это правильный аргумент, хотя в emacs есть и другие функции, которые работают только в графической среде (шрифты, события мыши и т. Д.)
вал
3
Я написал некоторый код, который имитирует события нажатия клавиш вверх / вниз для предварительного просмотра файла при нажатии клавиш, а затем закрывает буфер предварительного просмотра при нажатии клавиш вверх, как в ответе говорится, что он взломан, но, возможно, он может быть преобразован во что-то стабильное. emacs.stackexchange.com/questions/275/…
Джордон Биондо
3
Какое «то же поведение, что и в других редакторах» вы имеете в виду [я не использую эти другие текстовые редакторы]? Кажется, остальная часть текста намекает на «shift + движение для выбора», но это уже поддерживается в Emacs.
Стефан
4
Хотя вы правы эти ключевые события не существует в Emacs, вы должны знать , что Emacs делает выбор поддержка переключения передач (если это то, что вдохновленные ваш вопрос).
Малабарба

Ответы:

2

Как уже говорилось в комментариях по исторической причине, Emacs работает в терминалах, и эти устройства ориентированы на символы - вы получаете последовательность байтов без какой-либо гарантии, когда это происходит на клавиатуре.

Обсуждение также указывает, что возможно реализовать это для графической среды. Но никто не заинтересован в этом.

Обратите внимание, что некоторые программы, такие как игры или музыкальные программы, могут использовать подробную информацию о том, когда нажата клавиша, как долго и когда она отпущена, но редактирование текста не имеет с ними ничего общего.

Из руководства (info "(elisp)Mouse Events"):

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

Событие зависания может быть эмулировано таймером простоя - анализируя что-то после задержки.

gavenkoa
источник