No emacs, como posso passar um argumento para uma função em uma definição de atalhos de teclado

5

Eu quero criar um atalho para a função end-of-line+ e passar um valor de -1 para i. A função é declarada como:

  • (fim de linha + & n opcional)

O primeiro dos seguintes trechos abaixo, funciona ( sem um argumento ). mas as outras tentativas ( com um arg ) falham ... Eu não consegui encontrar um exemplo de uma ligação de teclas com args. Qual é o jeito certo de fazer isso?

(global-set-key (kbd  "C-s-E") 'end-of-line+)     ;; Okay!

(global-set-key (kbd  "C-s-E") 'end-of-line+ -1)   ;; Fails 
(global-set-key (kbd  "C-s-E") 'end-of-line+ '-1)  ;; Fails
(global-set-key (kbd  "C-s-E") '(end-of-line+ -1)) ;; Fails
    
por Peter.O 25.07.2011 / 16:48

1 resposta

6

A ideia é apenas construir uma nova função para expressar seu comportamento personalizado desejado (e ligar a chave a ela).

Ou com lambda ("anônimo", em lugar) ou com defun (neste caso, você dá um nome a ele e pode consultá-lo com o nome nome).

Para definir um "comando" interativo, você precisa prefixar (interactive) no corpo.

Por exemplo:

... (lambda() (interactive) (end-of-line+ -1)) ...

ou

(defun my-end-of-line ()
  "Invoke end-of-line with -1."
  (interactive)
  (end-of-line+ -1))
    
por 25.07.2011 / 17:14