Qual é a sequência de teclas mais conhecida no Emacs?


14

O Qt suporta ligações de teclas no estilo Emacs , no entanto, apenas para até quatro teclas. Para mostrar por que esse limite deve ser aumentado, seria útil mostrar exemplos de atalhos de teclado no estilo Emacs com ainda mais teclas do que isso. Existem exemplos conhecidos para isso ou talvez uma maneira de encontrar programaticamente sequências de teclas longas definidas nos mapas de teclas do Emacs?

edit: Eu pensei que isso era de conhecimento comum, mas uma sequência de teclas é um conjunto de chaves conforme lido por read-key-sequence. Tente F1 kseu candidato e veja se ele descreve seu comando ou um comando não relacionado que o precede.


Os únicos em que consigo pensar são conversões de seqüências de escape terminais, o que não se aplica ao Qt. Ir acima de 3 teclas reais é incomum.
Gilles 'SO- stop be evil'

Obrigado por fornecer o contexto / motivo da pergunta e o link. À primeira vista - antes de lê-lo, eu estava incorretamente supondo que a pergunta pudesse estar fora do tópico e não ser útil para ninguém.
Tirou

O problema com esta pergunta é que ninguém pode responder com certeza. Todos podem responder apenas para a sua configuração emacs. Não é baseado em opinião, mas é meio subjetivo.
Tobias

1
Isso inclui argumentos de prefixo? Se eu quiser descer mil linhas, posso dizer C-u 1 0 0 0 C-nquais são as seis chaves.
Stig Hemmer

1
@StigHemmer Não. Faça F1 k C-u 1 0 0 0 C-ne veja que C-ué uma sequência de teclas por si só.
Wasamasa

Respostas:


23

Eu testei com o seguinte script,

(key-description
 (car
  (sort
   (let (keyseqs)
     (mapatoms
      (lambda (sym)
        (when (commandp sym)
          (let ((where (where-is-internal sym nil nil t)))
            (when where
              (setq keyseqs (append keyseqs where)))))))
     keyseqs)
   (lambda (a b) (< (length b) (length a))))))

E o mais longo que recebo com o meu .emacs.dé C-x c C-x r iqual é algum comando do leme, e com o emacs -qque recebo o C-x a i lque executa o comando inverse-add-mode-abbrev.


12
Ha. Dá-me C-x M-c M-b u t t e r f l y:) Eu tinha esquecido que eu tinha feito isso ...
phils

where-is-internaldomina de longe o tempo de CPU aqui, mas você ainda pode facilmente raspar alguns ciclos, precedendo destrutivamente a lista mais curta pela via mais longa (setq keyseqs (nconc (where-is-internal sym nil nil t) keyseqs)).
Basil

1
@ phils Eu reconheço a referência, mas o que exatamente você definiu esse comando?
Dan is Fiddling por Firelight

@ DanNeely, acho que você nunca viu M-x butterfly? Eu só ligou-o a esse comando para uma maior autenticidade :)
phils

6

Não posso responder sobre o que há de mais longo em algum lugar, mas aqui estão algumas informações que podem ajudar.

  1. Eu tenho algumas bibliotecas que fornecem um conjunto de comandos relacionados vinculados a chaves em um mapa de teclas que eu vinculo a uma chave de prefixo.

    Como não quero cooptar chaves de usuário etc., normalmente vinculo essa chave de prefixo em, digamos C-xou, para other-windowcomandos, em C-x 4(mapa de teclas ctl-x-4-map).

  2. As mesmas considerações se aplicam a grupos de comandos em um mapa de teclado: eles às vezes obtêm seu próprio mapa de teclado. E assim por diante, recursivamente.

  3. Espero que pelo menos alguns usuários possam querer reconectar esses mapas de teclas (em qualquer nível) com suas próprias chaves de prefixo mais curtas, ou podem querer vincular comandos específicos a sequências de teclas mais curtas. Mas não quero fazer isso na própria biblioteca, obviamente.

Aqui está um exemplo de uma chave bastante longa: C-x 4 j t . % *(sete pressionamentos de tecla), que é obrigada a comandar icicle-bookmark-file-this-dir-all-tags-regexp-other-windowno Marcador + .

Anatomia:

  • Na C-x 4tecla do prefixo ( ctl-x-4-map).

  • Na jtecla prefixo, que é para todos os comandos para pular para um marcador .

  • Na ttecla prefixo, que é para todos os comandos para ir para os marcadores que são marcados de alguma forma.

  • Na .chave de prefixo, que é para todos os comandos para saltar para indicadores que são para arquivos no diretório atual que são marcados de alguma forma.

  • Na %chave de prefixo, que é para todos os comandos para saltar para marcadores que são para itens no diretório atual que possuem tags que correspondem a um regexp para o qual você é solicitado.

  • Na *chave, que é para todos os comandos para ir para os marcadores que são para itens no diretório atual que possuem tags , TODOS os quais correspondem a uma regexp solicitada. (Por outro lado, C-x 4 j t . % +é para os favoritos ALGUNS cujas tags correspondem ao regexp.)

Tudo isso é convencional no Bookmark + (e parte corresponde às convenções Dired, BTW): jé para comandos de salto , té para tag , .é para diretório atual , %é para regexp e *é para todos ( +é para alguns ).


(Oh, e usando @ sexp das mkcms, eu recebo C-x 4 j t f % *, que é igualmente longo. O fsignifica arquivo . É como C-x 4 j t . % *, mas os marcadores candidatos para a conclusão são todos os marcadores de arquivos, não apenas aqueles para os arquivos no diretório atual ( .).)


0

Magitadiciona sequências longas, pois permite que as opções sejam alternadas. Por exemplo, quando você solicita o log, pode selecionar opções curtas ou longas, se deseja ramificações remotas ou não, se deseja exibir graficamente as ramificações e assim por diante. A solicitação básica para um log é apenas um par de pressionamentos de tecla do magit-statusbuffer, mas você pode adicionar muito mais.

O mesmo se aplica à confirmação, duas teclas para uma confirmação básica, mas muitas adições opcionais.

Portanto, a questão está subespecificada, você está considerando apenas um stock(o que isso significa) emacs?


1
Longe disso, aceito exemplos vindos de qualquer lugar. O que você descreve é ​​um conjunto de seqüências de teclas, com cada sequência de teclas executando um comando. Para ter uma idéia do que é uma sequência de teclas, tente usar F1 ke veja quantas teclas você pode digitar até que ele descreva o comando.
precisa saber é
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.