Ошибка неверного типа при оценке функции, связанной с ключом в Emacs - PullRequest
2 голосов
/ 18 марта 2012

Я написал функцию init-set-key-mappings, которая устанавливает все глобальные ключи в файле .emacs.

(defun init-set-key-mappings ()
 "All the key mappings go here"
  (let ((mappings (list
                '("\C-ca"   'open-fileline))))
    (mapcar (lambda (mapping)
          (let ((key (car mapping))
                (func (cadr mapping)))
            (progn
              (message (format "map key %s to %s" key func))
              (global-set-key key func))))
        mappings)))

Это хорошо оценивается, но когда я нажимаю C-c a, Emacs жалуется на «Неправильный аргумент типа commandp, (quote open-fileline)»

Что я делаю не так?

РЕДАКТИРОВАТЬ: Я нашел ответ. Удаление цитаты перед открытием файла, похоже, решает проблему. Зачем проблема в том, что это символ? Разве так не передаются функции - как символы?

1 Ответ

5 голосов
/ 18 марта 2012

Вы дважды цитировали функцию open-fileline. В выражении

(list '("\C-ca" 'open-fileline)))

первая кавычка указывает, что все в следующем списке указано. Затем вы добавили вторую цитату к open-fileline. Это означает, что список на самом деле не содержит символ в качестве второго элемента своего автомобиля, а символ в кавычках . Для сравнения:

(symbolp (cadar (list '("string" 'open-fileline))))

и

(symbolp (cadar (list '("string" open-fileline))))
...