Извините, но ваш вопрос мне совершенно неясен, так что на это он может не ответить.
Вы говорите: «Как я могу найти число универсальных аргументов, использованных для вызова команды до числового аргумента». Я отвечу на это.
Не имеет значения, сколько раз вы пишете "P"
в спецификации строки interactive
. Значение является одинаковым каждый раз, и несколько таких случаев НЕ соответствуют многократному использованию C-u
.
Таким образом, (interactive "P\nP\nP")
просто создает три аргумента, которые имеют одинаковое значение - значение, которое получается при однократном использовании последовательности ключей префикса аргумента, независимо от того, является ли эта последовательность C-u
, C-9
, M--3
, C-u 360
или C-u C-u C-u
.
Если вы хотите, чтобы ваша функция различала, скажем, C-u
, C-u C-u
и C-u C-u C-u
, тогда она должна проверить необработанный аргумент префикса (что "P"
указывает для interactive
).
C-u
соответствует необработанному префиксу arg (4)
, то есть списку с только числом 4.
C-u C-u
соответствует необработанному префиксу arg (16)
.
C-u C-u C-u
соответствует необработанному префиксу arg (64)
.
(prefix-numeric-value '(4))
возвращает 4; (prefix-numeric-value '(16))
возвращает 16; и (prefix-numeric-value '(64))
возвращает 64.
См. Руководство по Elisp, узел Аргументы команды префикса .
Вы можете попрактиковаться с чем-то вроде этой команды, чтобы увидеть, какие результирующие необработанные и числовые аргументы префикса появляются при вводе различных последовательностей клавиш prefix-arg:
(defun foo (arg narg)
(interactive "P\np")
(message "ARG: %S, NARG: %S" arg narg))
Остальная часть вашего вопроса мне совершенно не понятна. Я не понимаю, что вы пытаетесь сделать с "dired-do-rename
. Если я прав, рассмотрите возможность размещения двух отдельных вопросов: один спрашивает, как отличить C-u
от C-u C-u
, а другой - что-то (что ?) о dired-do-rename
.