por que o emacs não suporta eventos importantes de ativação / desativação

9

O AFAIK emacs não suporta keyup/keydownapenas eventos keypressed. Um exemplo de consequência é que, quando queremos marcar uma região, precisamos primeiro definir uma marca set-mark-commande, em seguida, podemos marcar a região movendo-nos ao redor do ponto. Embora esse seja realmente um recurso interessante, pois você não precisa pressionar uma tecla Shift enquanto marca o texto, às vezes seria desejável ter o mesmo comportamento de outros editores. Esta pergunta é para entender por que o emacs não suporta esse recurso e por que isso é considerado melhor . Também existe uma abordagem ideomatic como podemos resolver isso no emacs?

eixo
fonte
6
O Emacs também funciona em um terminal, e os principais eventos de ativação / desativação não fazem sentido nesse ambiente. Muito provavelmente, esse é pelo menos um motivo histórico pelo qual esses eventos não são suportados. Isso não significa que eles não poderiam ser suportados. Eu suspeito que ninguém viu uma necessidade suficientemente urgente de se preocupar com isso.
Harald Hanche-Olsen
11
Tudo bem que é um argumento válido, apesar de existirem outros recursos no emacs que só funcionam em um ambiente gráfico (fontes, eventos de mouse, etc.)
eixo
3
Eu escrevi um código que simula eventos chave para cima / baixo para visualizar um arquivo na tecla pressionada e feche o buffer de visualização na tecla pressionada, como a resposta diz que é hacky, mas talvez possa ser moldado em algo estável. emacs.stackexchange.com/questions/275/…
Jordon Biondo
3
A que "mesmo comportamento em outros editores" você se refere (não uso esses outros editores de texto)? O restante do texto parece sugerir "shift + movimento para selecionar", mas isso já é suportado no Emacs.
Stefan
4
Embora você está certo esses eventos-chave não existem no Emacs, você deve saber que o Emacs faz selecção de mudança de apoio (se é isso que inspiraram a sua pergunta).
Malabarba

Respostas:

2

Conforme respondido nos comentários por motivos históricos, o Emacs é executado em terminais e esses dispositivos são orientados a caracteres - você obtém uma sequência de bytes sem qualquer garantia quando isso acontece no teclado.

A discussão também aponta que é possível implementar isso para ambiente gráfico. Mas ninguém está interessado nisso.

Observe que alguns programas, como jogos ou software de música, podem usar informações detalhadas sobre quando a tecla é pressionada, quanto tempo e quando liberada, mas a edição de texto não tem nada em comum.

Do manual (info "(elisp)Mouse Events"):

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

O evento de foco pode ser emulado pelo timer ocioso - analisando as coisas ponto após atraso.

gavenkoa
fonte