Estou recebendo um "argumento de tipo errado: commandp, (lambda nil (linha direta 5))" aqui.
(global-set-key [?\M-n] (lambda () (forward-line 5)))
Qual é o erro? Tenho quase certeza de que é simples e estou perdendo algo óbvio.
Estou recebendo um "argumento de tipo errado: commandp, (lambda nil (linha direta 5))" aqui.
(global-set-key [?\M-n] (lambda () (forward-line 5)))
Qual é o erro? Tenho quase certeza de que é simples e estou perdendo algo óbvio.
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.
(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.
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!)