/ / Emacs: Chyba nesprávneho typu argumentu v Emacs23, ale nie v Emacs24 - emacs, compiler-errors, elisp, emacs24, emacs23

Emacs: Chyba nesprávneho typu argumentu v Emacs23, ale nie v Emacs24 - emacs, compiler-errors, elisp, emacs24, emacs23

Po prvé, budem priznávať, že som úplnýnováčik v spoločnosti Emacs a ELisp (a navyše Lisp vo všeobecnosti) a narazil som na chybu, ktorá ma dostala na chvíľu naraziť, zatiaľ čo sa pokúšam písať súbor .emacs.

Tu je minimálny príklad kódu, ktorý je potrebný na reprodukciu problému (t. J. Mať. Emac obsahujúci iba nasledovné):

(defun define-esc-key (keybind)
(define-key key-translation-map (kbd keybind) "my-esc))
(define-esc-key "M-j")

To spôsobí nasledovnú chybu s Emacs23:

Lisp error: (wrong-type-argument integer-or-marker-p keybind)
read-kbd-macro(keybind)
#[(keys) "301!207" [keys read-kbd-macro] 2 2186954](keybind)
(kbd keybind)
(define-key key-translation-map (kbd keybind) (quote my-esc))
define-esc-key("M-j")

ale pracuje tak, ako to očakávam v Emacs24. Tiež funguje v Emacs23, ak nahradím inštanciu keybind v define-esc-key funkčné teleso "M-j".

(Mimochodom, ospravedlňujem sa za zlý titul, ale nemohol som si pomyslieť na nič viac popisného.)

odpovede:

1 pre odpoveď č. 1

Z NEWS file:

* Lisp Changes in Emacs 24.3
...
*** `kbd" is now a function rather than a macro.

Znamená to, že v predchádzajúcich verziách Emacsu argument kbd musí byť doslova prítomná vo výzve, na rozdiel od použitia premennej vo vašom príklade.

Môžete tiež použiť eval a spätné vkladanie pre vloženie hodnoty:

(eval `(kbd ,keybind))