Редактирование рисунков

Чтобы создать рисунок, составленный из текстовых знаков (например изображение деления регистра на поля в качестве комментария в программе), используйте команду M-x edit-picture для входа в режим Picture.

В режиме Picture редактирование основывается на квадрантной модели текста, согласно которой текстовые знаки рассыпаны в области, простирающейся неограничено вправо и вниз. Понятие конца строки не существует в этой модели; самое большое, что вы можете сказать, -- это где находится последний непустой знак на строке.

Конечно, в действительности Emacs всегда рассматривает текст как последовательность знаков, и строки на самом деле имеют концы. Но в режиме Picture наиболее часто используемые команды заменяются вариантами, которые воспроизводят квадрантную модель текста. Они делают это, вставляя пробелы или превращая в пробелы знаки табуляции.

Большинство базовых команд редактирования Emacs переопределяются режимом Picture таким образом, чтобы делать в основном те же самые вещи, но квадрантным способом. Кроме того, режим Picture определяет разные ключи, начинающиеся с префикса C-c, для запуска специальных команд редактирования изображения.

Один из этих ключей, C-c C-c, достаточно важен. Часто рисунок --- это часть большего файла, который обычно редактируется в каком-нибудь другом основном режиме. Команда M-x edit-picture записывает имя предыдущего основного режима, и затем вы можете использовать команду C-c C-c (picture-mode-exit), чтобы вернуться в этот режим. Если C-c C-c не имеет числового аргумента, она также уничтожает пробелы в концах строк.

Все команды, используемые в режиме Picture, работают и в других режимах (если только загружена библиотека `picture'), но привязаны к ключам только в режиме Picture. Дальнейшие описания говорят о движении "на один столбец" и так далее, но все команды режима Picture обращаются с числовыми аргументами так же, как и их обычные эквиваленты.

Включение режима Picture вызывает ловушку picture-mode-hook (смотрите раздел Ловушки).

Основы редактирования в режиме Picture

Большинство ключей делают в режиме Picture то же самое, что они делают обычно, но в квадрантном стиле. Например, C-f перепривязывается на запуск команды picture-forward-column, которая передвигает точку на один столбец вправо, вставляя, если это необходимо, пробел, так что действительный конец строки не играет роли. C-b перепривязывается для запуска picture-backward-column, которая всегда двигает точку влево на один столбец, превращая знак табуляции в несколько пробелов, если это необходимо. C-n и C-p перепривязываются для запуска picture-move-down и picture-move-up, которые могут либо вставить пробелы, либо превратить знаки табуляции в пробелы, как необходимо, чтобы гарантировать, что точка остается в том же самом столбце. C-e запускает picture-end-of-line, которая передвигается за последний непустой знак на строке. Здесь не надо менять C-a, так как выбор модели экрана не влияет на начала строк.

Вставка текста приспосабливается к квадрантной модели экрана посредством использования режима Overwrite (смотрите раздел Второстепенные режимы). Самовставляющиеся знаки заменяют существующий текст, столбец за столбцом, а не выталкивают его вправо. RET запускает picture-newline, которая просто сдвигает на начало следующей строки, так что новый текст заменит эту строку.

Режим Picture предоставляет стирание текста вместо удаления и уничтожения. DEL (picture-backward-clear-column) заменяет предыдущий знак пробелом, а не удаляет его; это смещает точку назад. C-d (picture-clear-column) заменяет следующий знак или знаки пробелами, но не сдвигает точку. (Если вы хотите превратить знаки в пробелы и продвинуться через них, используйте SPC.) C-k (picture-clear-line) действительно уничтожает содержимое строки, но никогда не удаляет из буфера знаки перевода строки.

Чтобы сделать действительную вставку, вы должны использовать специальные команды. C-o (picture-open-line) создаёт пустую строку после текущей; она никогда не разбивает строку. C-M-o (split-line) имеет смысл в режиме Picture, поэтому она не изменяется. C-j (picture-duplicate-line) вставляет ниже текущей строки другую строку с тем же самым содержимым.

Чтобы сделать в режиме Picture действительное удаление, используйте C-w или C-c C-d (которая определяется для запуска delete-char, как C-d в других режимах), или с помощью одной из команд прямоугольника для рисунков (смотрите раздел Команды прямоугольника в режиме Picture).

Управление движением после вставки

Так как "самовставляющиеся" знаки в режиме Picture перезаписывают и передвигают точку, то нет существенного ограничения на то, как точка будет передвигаться. Обычно точка перемещается вправо, но вы можете определить любое из восьми ортогональных или диагональных направлений для движения после "самовставляющегося" знака. Это удобно для рисования линий в буфере.

C-c <
Сдвинуться после вставки влево (picture-movement-left).
C-c >
Сдвинуться после вставки вправо (picture-movement-right).
C-c ^
Сдвинуться после вставки вверх (picture-movement-up).
C-c .
Cдвинуться после вставки вниз (picture-movement-down).
C-c `
Сдвинуться после вставки вверх и влево (на "северо-запад") (picture-movement-nw).
C-c '
Сдвинуться после вставки вверх и вправо (на "северо-восток") (picture-movement-ne).
C-c /
Сдвинуться после вставки вниз и влево (на "юго-запад")
(picture-movement-sw).
C-c \
Сдвинуться после вставки вниз и вправо (на "юго-восток")
(picture-movement-se).

Две команды движения передвигают, основываясь на текущем направлении вставки. Команда C-c C-f (picture-motion) передвигает в том же самом направлении, в каком выполняется движение после текущей "вставки", тогда как C-c C-b (picture-motion-reverse) двигает в противоположном направлении.

Знаки табуляции в режиме Picture

В режиме Picture предусмотрены два вида действий, подобных табуляции. Для табуляции, основанной на контексте, используйте M-TAB (picture-tab-search). Без аргумента она передвигает в точку под следующий "интересный" знак, который следует за незначащим знаком в предыдущей непустой строке. "Следующий" означает здесь "появляющийся в более дальней горизонтальной позиции, чем та, с которой точка отправлялась". С аргументом, как в C-u M-TAB, эта команда переходит к следующему такому интересному знаку в текущей строке. M-TAB не изменяет текст, она только двигает точку. "Интересные" знаки определяются переменной picture-tab-chars, которая должна задавать набор знаков. Синтаксис этой переменной похож на синтаксис, используемый внутри `[...]' в регулярном выражении, но без `[' и `]'. Её значение по умолчанию равно "!-~".

Сама TAB запускает picture-tab, которая действует, основываясь на установленных текущих позициях табуляции; это эквивалент tab-to-tab-stop в режиме Picture. Обычно она просто двигает точку, но с числовым аргументом она стирает текст, через который передвинулась.

Формы табуляции, основанные на контексте и на позициях табуляции, объединяются вместе командой C-c TAB, picture-set-tab-stops. Эта команда устанавливает позиции табуляции, которые M-TAB считала бы значимыми в текущей строке. Использование этой команды вместе с TAB может дать эффект табуляции, основанной на контексте. Но M-TAB более удобна в тех случаях, когда её достаточно.

Может оказаться удобным запретить использование настоящих знаков табуляции в рисунках. Например, это помешает C-x TAB испортить рисунок. Вы можете сделать так, установив переменную indent-tabs-mode в значение nil. Смотрите раздел Табуляция по сравнению с пробелами.

Команды прямоугольника в режиме Picture

Режим Picture определяет команды для работы с прямоугольными кусками текста таким способом, который подходит для квадрантной модели. Стандартные команды для прямоугольников также могут быть полезны (смотрите раздел Прямоугольники).

C-c C-k
Очистить текущую область-прямоугольник (picture-clear-rectangle). С аргументом -- удалить её.
C-c C-w r
То же самое, но сначала сохранить содержимое прямоугольника в регистре r (picture-clear-rectangle-to-register).
C-c C-y
Скопировать последний уничтоженный прямоугольник в буфер путем перезаписи, при этом левый верхний угол находится в точке (picture-yank-rectangle). С аргументом -- вставка вместо перезаписи.
C-c C-x r
То же самое, но использовать прямоугольник из регистра r (picture-yank-rectangle-from-register).

Команды работы с прямоугольниками для рисунков, это C-c C-k (picture-clear-rectangle) и C-c C-w (picture-clear-rectangle-to-register), отличаются от стандартных команд прямоугольника тем, что они обычно очищают прямоугольник вместо его удаления; это аналогично тому, как в режиме Picture изменяется C-d.

Однако, удаление прямоугольников может быть удобным и в режиме Picture, поэтому эти команды удаляют прямоугольник, если им передан числовой аргумент. C-c C-k с числовым аргументом или без него сохраняет прямоугольник для C-c C-y.

Команды режима Picture для восстановления прямоугольников отличаются от стандартных тем, что они перезаписывают, а не вставляют. Точно так же вставка другого текста в режиме Picture отличается от вставки в других режимах. C-c C-y (picture-yank-rectangle) вставляет (при помощи перезаписи) прямоугольник, который был уничтожен самым последним, в то время как C-c C-x (picture-yank-rectangle-from-register) делает то же самое для прямоугольника, находящегося в указанном регистре.

Назад |  Вперед |  Содержание



Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2024