Аргументы команд префикса
Большинство команд Emacs могут использовать аргумент префикса, число, указанное перед самой командой. (Не путайте аргументы префикса с клавишами префикса.) Аргумент префикса в любое время представлен значением, которое может быть nil, что означает, что в настоящее время аргумент префикса отсутствует. Каждая команда может использовать аргумент префикса или игнорировать его.
Существует два представления аргумента префикса: сырое и числовое. Внутренне цикл команд редактора использует сырое представление, как и переменные Lisp, хранящие информацию, но команды могут запросить любое из представлений.
Вот возможные значения сырого аргумента префикса:
-
nil, что означает, что аргумент префикса отсутствует. Его числовое значение равно 1, но многочисленные команды различаютnilи целое число 1. - Целое число, которое представляет само себя.
- Список из одного элемента, который является целым числом. Такая форма аргумента префикса возникает в результате одного или нескольких нажатий C-u без цифр. Числовое значение — это целое число в списке, но некоторые команды различают такой список и само по себе целое число.
- Символ
-. Это указывает, что были набраны M-- или C-u - без последующих цифр. Эквивалентное числовое значение равно -1, но некоторые команды различают целое число -1 и символ-.
Мы иллюстрируем эти возможности, вызвав следующую функцию с различными префиксами:
(defun display-prefix (arg) "Display the value of the raw 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 ; (Same asC-u 3.) C-u - M-x display-prefix -| - M-- M-x display-prefix -| - ; (Same asC-u -.) C-u - 7 M-x display-prefix -| -7 M-- 7 M-x display-prefix -| -7 ; (Same asC-u -7.)
Emacs использует две переменные для хранения аргумента префикса: prefix-arg и current-prefix-arg. Такие команды, как universal-argument, которые устанавливают аргументы префикса для других команд, хранят их в prefix-arg. В отличие от этого, current-prefix-arg передает аргумент префикса текущей команде, поэтому установка его не влияет на аргументы префикса для будущих команд.
Обычно команды указывают, какое представление использовать для аргумента префикса, числовое или сырое, в спецификации interactive. (См. Использование интерактивного.) В качестве альтернативы функции могут просматривать значение аргумента префикса непосредственно в переменной current-prefix-arg, но это менее удобно.
- Функция: prefix-numeric-value arg
Эта функция возвращает числовое значение допустимого значения сырого аргумента префикса, arg. Аргумент может быть символом, числом или списком. Если это
nil, возвращается значение 1; если это-, возвращается значение -1; если это число, возвращается это число; если это список, возвращается CAR этого списка (который должен быть числом).
- Переменная: current-prefix-arg
Эта переменная содержит сырой аргумент префикса для текущей команды. Команды могут просматривать его непосредственно, но обычный метод доступа к нему —
(interactive "P").
- Переменная: prefix-arg
Значение этой переменной — сырой аргумент префикса для следующей команды редактирования. Команды, такие как
universal-argument, которые задают аргументы префикса для следующей команды, работают путем установки этой переменной.
- Переменная: last-prefix-arg
Значение сырого аргумента префикса, используемое предыдущей командой.
Существуют следующие команды для установки аргументов префикса для следующей команды. Не вызывайте их по другим причинам.
- Команда: universal-argument
Эта команда считывает входные данные и задает аргумент префикса для следующей команды. Не вызывайте эту команду самостоятельно, если вы не знаете, что делаете.
- Команда: digit-argument arg
Эта команда добавляет к аргументу префикса для следующей команды. Аргумент arg — это сырой аргумент префикса, как он был до этой команды; он используется для вычисления обновленного аргумента префикса. Не вызывайте эту команду самостоятельно, если вы не знаете, что делаете.
- Команда: negative-argument arg
Эта команда добавляет к числовому аргументу для следующей команды. Аргумент arg — это сырой аргумент префикса, как он был до этой команды; его значение инвертируется для формирования нового аргумента префикса. Не вызывайте эту команду самостоятельно, если вы не знаете, что делаете.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Prefix-Command-Arguments.html