Emacs: универсальный аргумент (C-u) в функции

Я хотел бы использовать C-u в функции (например, regexp), где вызов ее с помощью C-u имеет другой эффект. Как я могу сделать это в Emacs? В документации не показано, как это сделать с помощью Emacs Lisp.

(defun test ()
  (interactive)
  (align-regexp)) ; I would like to add the C-u prefix to this.

Ответ 1

(defun my/test ()
  (interactive)
  (let ((current-prefix-arg 4)) ;; emulate C-u
    (call-interactively 'align-regexp) ;; invoke align-regexp interactively
    )
  )

Надеюсь, что это поможет.

Ответ 2

Я прибыл сюда в поисках способа определить, была ли моя функция вызвана с помощью Cu. Вот как вы это делаете:

(defun my-function ()
 (interactive)
  (if (equal current-prefix-arg nil) ; no C-u
   ;; then
    (message "my-function was called normally")
   ;; else
    (message "my-function was called with C-u")))

Оригинальный плакат спрашивал, как вызвать другую функцию с помощью Cu изнутри его функции. Я публикую это в качестве пояснения к комментарию @codyChan выше, в надежде, что это может помочь другим.