Большинство команд Emacs могут использовать аргумент префикса, число, указанное перед самой командой. (Не путайте аргументы префикса с префиксными клавишами.) Аргумент префикса всегда представляется значением, которое может быть nil, что означает, что в настоящее время нет аргумента префикса. Каждая команда может использовать аргумент префикса или игнорировать его.
Существуют два представления аргумента префикса: сырое и числовое. Цикл команд редактора использует сырое представление внутренне, как и переменные Lisp, хранящие эту информацию, но команды могут запрашивать любое из представлений.
Ниже приведены возможные значения сырого аргумента префикса:
nil, что означает отсутствие аргумента префикса. Его числовое значение равно 1, но множество команд проводят различие между nil и целым числом 1.
-. Это указывает на то, что были набраны M-- или C-u - без последующих цифр. Эквивалентное числовое значение равно -1, но некоторые команды проводят различие между целым числом -1 и символом -.
Мы иллюстрируем эти возможности, вызывая следующую функцию с различными префиксами:
(defun display-prefix (arg) "Отображает значение сырого аргумента префикса." (interactive "P") (message "%s" arg))
Ниже приведены результаты вызова display-prefix с различными сырыми аргументами префикса:
M-x display-prefix -| nil C-u M-x display-prefix -| (4) C-u C-u M-x display-prefix -| (16) C-u 3 M-x display-prefix -| 3 M-3 M-x display-prefix -| 3 ; (То же, что иC-u 3.) C-u - M-x display-prefix -| - M-- M-x display-prefix -| - ; (То же, что иC-u -.) C-u - 7 M-x display-prefix -| -7 M-- 7 M-x display-prefix -| -7 ; (То же, что иC-u -7.)
Emacs использует две переменные для хранения аргумента префикса: prefix-arg и current-prefix-arg. Команды, такие как universal-argument, которые устанавливают аргументы префикса для других команд, хранят их в prefix-arg. В отличие от этого, current-prefix-arg передает аргумент префикса текущей команде, поэтому установка его не влияет на аргументы префикса для будущих команд.
Обычно команды указывают, какое представление использовать для аргумента префикса — числовое или сырое — в спецификации interactive. (См. Использование interactive.) Альтернативно, функции могут напрямую смотреть на значение аргумента префикса в переменной current-prefix-arg, но это менее чисто.
Эта функция возвращает числовое значение допустимого сырого аргумента префикса arg. Аргумент может быть символом, числом или списком. Если это nil, возвращается значение 1; если это -, возвращается значение -1; если это число, возвращается это число; если это список, возвращается CAR этого списка (который должен быть числом).
Эта переменная хранит сырой аргумент префикса для текущей команды. Команды могут проверять его напрямую, но обычный способ доступа к нему — это (interactive "P").
Значение этой переменной — это сырой аргумент префикса для следующей команды редактирования. Команды, такие как universal-argument, которые указывают аргументы префикса для следующей команды, работают путем установки этой переменной.
Значение сырого аргумента префикса, использованное предыдущей командой.
Следующие команды существуют для настройки аргументов префикса для следующей команды. Не вызывайте их по какой-либо другой причине.
Эта команда считывает ввод и указывает аргумент префикса для следующей команды. Не вызывайте эту команду сами, если не знаете, что делаете.
Эта команда добавляет к аргументу префикса для следующей команды. Аргумент arg — это сырой аргумент префикса, как он был до этой команды; он используется для вычисления обновленного аргумента префикса. Не вызывайте эту команду сами, если не знаете, что делаете.
Эта команда добавляет к числовому аргументу следующей команды. Аргумент arg — это сырой аргумент префикса, как он был до этой команды; его значение инвертируется для формирования нового аргумента префикса. Не вызывайте эту команду сами, если не знаете, что делаете.