Грешка при грешен тип при оценяване на функция, свързана с ключ в emacs

Написах функция 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, (цитат open-fileline)“

какво правя грешно

РЕДАКТИРАНЕ: Намерих отговора. Премахването на цитата преди отваряне на файл изглежда решава проблема. Защо проблемът е да бъдеш символ? Не се ли предават така функциите - като символи?


person Ravi    schedule 18.03.2012    source източник


Отговори (1)


Поставихте двойни кавички на функцията open-fileline. В израза

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

първата кавичка показва, че всичко в следния списък е цитирано. След това добавихте втори цитат към open-fileline. Което означава, че списъкът всъщност не съдържа символ като втори елемент от колата, а символ в кавички. Сравнете:

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

и

(symbolp (cadar (list '("string" open-fileline))))
person Tyler    schedule 18.03.2012