Emacs: Interface que mistura comandos e argumentos

2

Estou experimentando maneiras de configurar o Emacs para permitir que eu digite menos, mas obtendo a mesma coisa, explorando o fato de que, na programação, você faz (tipo) mais ou menos a mesma coisa repetidamente. Eu preciso disso por razões médicas, mas também porque faz sentido em geral.

A interface do Emacs que eu imagino é basicamente misturar comandos com argumentos. Vou apenas mostrar um exemplo e você entenderá imediatamente.

OK, você não precisa ser tão perspicaz para ver que, em C, o loop for, "menos que algo, incremento por um", é muito comum. Então eu pensei em escrever algo assim:

(defun C-for-loop-new-int-less-inc (var start stop)
  "Shortcut for putting a C for loop at point.
   Note: There are some specifics to i."
  (interactive "sVariable: \nnStarts at: \nnLess than: ")
  (insert
   (format "for (int %s = %d; %s < %d; %s++) {\n\n}"
           var start var stop var) )
  (previous-line)
  (c-indent-line-or-region) )

E para reduzir a digitação:

(defalias 'fnili 'C-for-loop-new-int-less-inc)

Agora, M-x fnili RET i RET 0 RET 10 RET deve levar você

for (int i = 0; i < 10; i++) {

}

com o cursor na segunda linha, com recuo.

Embora isso seja uma melhoria, como posso disparar o comando assim:

fnii0l10i

Dessa maneira, todos os ciclos RET -wait-reorient desapareceriam, em vez disso você escreveria o comando inteiro uma vez, e ele ficaria visível o tempo todo.

Agora, agora eu poderia escrever uma função que pega uma string, e depois analisa, mas eu não farei isso se o Emacs já tiver suporte para essa interface que eu busco.

Editar

Então, "template facility" é a designação?

Eu não acho que é difícil fazer. Se você quiser isso para toda a linguagem C, e para todas as voltas e reviravoltas possíveis, então eu concordo. Mas, para identificar apenas alguns casos demorados (para, switch case, o guarda em arquivos de cabeçalho) e implementá-los, isso seria um recurso útil.

É claro que, se o trabalho foi feito, não estou fazendo do zero (como eu disse :), então vou verificar seus links com certeza.

Mas ... Acho que meu exemplo foi muito complicado, então ofuscou a questão real, que é sobre a interface: em vez de acertar RET e obter uma linha em branco para cada argumento, colocando tudo em uma única linha de comando .

Um exemplo muito mais simples: em vez de M-x man RET irssi RET , como posso fazer M-x man"irssi" RET ? Neste exemplo, não é realmente benéfico (talvez levemente), porque é apenas um único argumento, e não há nada complicado para isso (que você precisa manter em seu cérebro), e você raramente cometerá um erro que você tem que "backtrack" para corrigir. Mas, no comando de exemplo for loop na postagem original (fictícia, como nunca a vi, se existir) - nesse caso, você realmente se beneficiaria dela.

    
por Emanuel Berg 07.04.2013 / 20:53

1 resposta

3

Um recurso de modelo que realmente ajuda é difícil de projetar e requer uma quantidade não trivial de código. Eu recomendo procurar por algo existente e possivelmente ajustá-lo às suas necessidades, em vez de construí-lo do zero.

O Emacs Wiki lista alguns pacotes. Os principais candidatos são:

por 08.04.2013 / 02:42

Tags