«Неправильный аргумент типа» в написанной мной функции Emacs

Мне бы хотелось, чтобы моя клавиша Tab сделала следующее:

Если я'м в минибуфере, используйте завершение слова.В противном случае, если выбран регион, сделайте отступ.В противном случае сделайте отступ в строке в точке (используя tab-to-tab-stop).

Вот'код, некоторые из которых основаны на фрагментах Iнашел в другом месте в Интернете:

(defun my-tab ()
  "If region is selected, indent it and keep it selected, else indent current line."
  (interactive)
       (if (use-region-p)
           (increase-left-margin (region-beginning) (region-end) nil)
           (tab-to-tab-stop))
        (setq deactivate-mark nil))
(defun my-untab ()
  "If region is selected, unindent it and keep it selected, else unindent current line."
  (interactive)
       (if (use-region-p)
           (decrease-left-margin (region-beginning) (region-end) nil)
         (indent-rigidly (line-beginning-position) (line-end-position) (- tab-width)))
        (setq deactivate-mark nil))
;; AJF: wrote this one myself
(defun ajf-tab-fun ()
   (if (minibufferp)
     (minibuffer-complete)
     (my-tab)))

(global-set-key (kbd "TAB") 'ajf-tab-fun)

Проблема в том, что когда я нажимаю клавишу табуляции, я получаю сообщение об ошибке:

Wrong type argument: commandp, ajf-tab-fun

Я установил debug-on-error на t, чтобы я мог отлаживать. Вот's вывод:

Debugger entered--Lisp error: (wrong-type-argument commandp ajf-tab-fun)
  call-interactively(ajf-tab-fun nil nil)

Что я должен делать вместо этого?

 legoscia09 июн. 2014 г., 10:44

Ответы на вопрос(2)

Решение Вопроса
(defun ajf-tab-fun ()
  (interactive)     ; add interactive to let emacs know to call it interactively
   (if (minibufferp)
     (minibuffer-complete)
     (my-tab)))

(interactive)

 Alan26 окт. 2012 г., 15:30
Здорово! Рад, что это было полезно для вас. Ваше решение было определенно полезным для меня!
 PascalVKooten26 окт. 2012 г., 00:45
Я на самом деле буду использовать ваш код / код, который вы нашли, и использовать его сам :)

которое вы описываете, уже во многом является поведением по умолчанию, за исключениемотступ» где по умолчанию "отступ по правилам отступа основного режима вместо "переместить текст вправо (или влево) на фиксированную величину ".

 Alan26 окт. 2012 г., 15:32
Да, но мне действительно нравится иметь возможность контролировать, сколько я отступаю. Если я хочу просто попросить код решить за меня, есть другие функции, которые я могу вызвать.

Ваш ответ на вопрос