Você está faltando um parêntese de fechamento. Provavelmente não em seu código, apenas na pergunta.
Helder S Ribeiro
Como uma observação lateral: quando você cita a função anônima dessa forma, ela não será compilada. Eu imagino que não seja grande coisa no seu caso, no entanto.
Phil Jackson
Respostas:
129
global-set-keyespera um comando interativo. (lambda () (interactive) (forward-line 5))deve funcionar.
A propósito, C-h f commandpé um bom ponto de partida para erros como esse.
Acho que não há lados negativos. Da documentação: >> A "chamada" para 'interativo' é na verdade uma declaração em vez de uma função; diz à 'chamada interativa' como ler os argumentos para passar para a função. Quando realmente chamado, 'interativo' retorna apenas nulo.
Dangelov
Portanto, de acordo com a (commandp)documentação, as funções lambda com chamada de nível superior (interactive)funcionam, mas como posso definir uma função com (defun)que funcione?
O problema é que você se esqueceu de colocar (interactive) (como o brendan mencionou).
A propósito, você notará que usei a (kbd)função para especificar a combinação de teclas. Essa função é extremamente útil, pois você pode colocar as teclas de atalho quase literalmente.
Também vi esse erro em uma nova máquina onde estou usando meu .emacsarquivo usual, mas não instalei meus pacotes, e o comando a ser executado está em um desses pacotes. (Porque um comando que não pode ser executado definitivamente não é interativo!)
Respostas:
global-set-key
espera um comando interativo.(lambda () (interactive) (forward-line 5))
deve funcionar.A propósito,
C-h f commandp
é um bom ponto de partida para erros como esse.fonte
(commandp)
documentação, as funções lambda com chamada de nível superior(interactive)
funcionam, mas como posso definir uma função com(defun)
que funcione?A forma correta deve ser esta -
(global-set-key (kbd "M-n") (lambda () (interactive) (forward-line 5)))
O problema é que você se esqueceu de colocar
(interactive)
(como o brendan mencionou).A propósito, você notará que usei a
(kbd)
função para especificar a combinação de teclas. Essa função é extremamente útil, pois você pode colocar as teclas de atalho quase literalmente.fonte
Também vi esse erro em uma nova máquina onde estou usando meu
.emacs
arquivo usual, mas não instalei meus pacotes, e o comando a ser executado está em um desses pacotes. (Porque um comando que não pode ser executado definitivamente não é interativo!)fonte