В Emacs 23 и 24, следующие прекрасно работает:обратной совместимости для (интерактивный "^") в Emacs 22
(defun foo (&optional arg)
(interactive "^p")
(message "arg is %i" arg))
В Emacs 22, я получаю следующее сообщение об ошибке:
Invalid control letter `^' (136) in interactive calling string
Я попытался это:
(defun foo (&optional arg)
(interactive (concat (if (> emacs-major-version 22) "^" "") "p"))
(message "arg is %i" arg))
, но я получаю:
Wrong type argument: listp, "^p"
Каков наилучший способ использования ^
в Emacs 23 или 24, но не в Emacs 22?
Действительно, лучше использовать '(fboundp 'handle-shift-selection)' вместо '(> emacs-major-version 22)'. – Stefan
Есть ли способ избежать переопределения того, что '(интерактивный)' делает для меня? Я бы предпочел не понимать, как переопределить '(интерактивный"^NEnter число: ")'. Глядя на [источник Emacs для 'call-interactiveively'] (http://git.savannah.gnu.org/cgit/emacs.git/tree/src/callint.c?id=EMACS_22_3#n692) Я предполагаю здесь нет пути. –
@Stefan: если бы у emacs были условия времени на чтение, это было бы еще проще: '# + handle-shift-selection '^ p" # -handle-shift-selection "p" ' – sds