104 Stimmen

Fehler "Argument vom falschen Typ: commandp" bei der Bindung eines Lambdas an einen Schlüssel

Ich erhalte hier die Meldung "Wrong type argument: commandp, (lambda nil (forward-line 5))".

(global-set-key [?\M-n] (lambda () (forward-line 5)))

Worin besteht der Fehler? Ich bin mir ziemlich sicher, dass es einfach ist und ich etwas Offensichtliches übersehe.

151voto

brendan Punkte 2565

global-set-key erwartet einen interaktiven Befehl. (lambda () (interactive) (forward-line 5)) sollte funktionieren.

Im Übrigen, C-h f commandp ist ein ziemlich guter Ausgangspunkt für derartige Fehler.

42voto

Baishampayan Ghose Punkte 18730

Die korrekte Form sollte wie folgt lauten -

(global-set-key (kbd "M-n") (lambda () (interactive) (forward-line 5)))

Das Problem war, dass Sie vergessen haben, die (interactive) (wie von Brendan erwähnt).

Übrigens, Sie werden feststellen, dass ich die (kbd) Funktion zur Angabe der Tastenbindung. Diese Funktion ist äußerst nützlich, da Sie die Tastenkombinationen fast wörtlich eingeben können.

2voto

Paul Bissex Punkte 1431

Ich habe diesen Fehler auch auf einem neuen Rechner gesehen, auf dem ich meine üblichen .emacs Datei installiert haben, aber meine Pakete nicht, und der auszuführende Befehl ist in einem dieser Pakete. (Denn ein Befehl, der nicht ausgeführt werden kann, ist definitiv nicht interaktiv!)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X