Если команды Emerge были вызваны из другой программы на Лиспе, то в случае успешного завершения возвращается значение t, а если вы прервали объединение, возвращается nil.
22.14.6 Комбинирование двух версий
Иногда вы хотите сохранить оба варианта некоторого изменения. Чтобы сделать так,
используйте x c, которая редактирует буфер объединения следующим образом:
#ifdef NEW
версия из буфера A
#else /* not NEW */
версия из буфера B
#endif /* not NEW */
Хотя этот пример показывает условные конструкции препроцессора Си, разделяющие два альтернативные версии, вы можете задать используемые строки, устанавливая переменную emerge-combine-versions-template по вашему выбору. В этой строке ‘%a’ говорит, где нужно помещать версию A, а ‘%b’ говорит, говорит помещать версию B. Установка по умолчанию, которая выдает результат, показанный выше, выглядит следующим так:
"#ifdef NEW\n%a#else /* not NEW */\n%b#endif /* not NEW */\n"
22.14.7 Тонкие вопросы, связанные с Emerge
В процессе объединения вы не должны пытаться редактировать буферы A и B сами. Emerge временно изменяет их, но в конце возвращает в исходное состояние.
Вы можете производить любое число объединений одновременно — только не используйте один и тот же буфер в качестве входного более чем для одного объединения, так как временные изменения, сделанные в этих буферах, столкнулись бы друг с другом.
Запуск Emerge может занять продолжительное время, поскольку ей требуется полностью сравнить файлы. Emacs не можете ничего делать, пока diff не завершится. Возможно, в будущем кто-то изменит Emerge так, что она будет делать сравнение в фоновом режиме, когда входные файлы велики — тогда вы могли бы продолжать в Emacs другие дела, пока Emerge действительно не будет готова принимать команды.
После подготовки объединения Emerge запускает ловушку emerge-startup-hook (см.
Раздел 31.2.3 [Ловушки], с. 349).
22.15 Режим C и родственные с ним
Этот раздел описывает особые средства, доступные в режимах C, C++, Objective-C, Java, CORBA IDL и Pike. Когда мы говорим “режим C и родственные с ним”, мы имеем в виду эти режимы.
22.15.1 Команды перемещения в режиме C
Этот раздел описывает команды для перемещения точки в режиме C и родственных с ним режимах.
C-c C-u Перемещает точку назад к содержащей ее условной констукции препроцессора, оставляя метку в текущей позиции. Префиксный аргумент работает в качестве счетчика повторов. С отрицательным аргументом, перемещает точку вперед к концу этой условной констукции препроцессора. При проходе назад, #elif рассматривается как #else, за которой стоит #if. При проходе вперед #elif игнорируется.
C-c C-p Перемещает точку назад через условную констукцию препроцессора, оставляя метку в текущей позиции. Префиксный аргумент служит в качестве счетчика повторов. С отрицательным аргументом, перемещает вперед.
C-c C-n Перемещает точку вперед через условную констукцию препроцессора, оставляя метку в текущей позиции. Префиксный аргумент служит в качестве счетчика повторов. С отрицательным аргументом, перемещает назад.
M-a Перемещает точку к началу самого внутреннего оперетора Си (c-beginningof-statement). Если точка уже находится в начале оператора, перемещает к началу предыдущего. С префиксным аргументом n, перемещает назад на n ?
1 операторов.
Если точка находится внутри строки или комментария или после комментария (между ними только пропуск), эта команда перемещает по предложениям, а не по операторам.
Если эта функция вызвана из программы, она принимает три необязательных аргумента: префиксный числовой аргумент, предел позиции в буфере (не перемещаться назад далее этой позиции) и флаг, который говорит, нужно ли двигаться по предложениям внутри комментария.
M-e Перемещает точку к концу самого внутреннего оперетора Си; как M-a, но пере-
мещает в противоположном направлении (c-end-of-statement).
M-x c-backward-into-nomenclature
Перемещает точку назад к началу секции или слова в нотации Си++. С префиксным аргументом n, перемещает n раз. Если n отрицательно, перемещает вперед. Нотация Си++ обозначает запись имен символов в стиле ИменованиеСимволовВСмешанномРегистреИБезПодчерков; каждая заглавная буква начинает секцию или слово.
В проекте GNU мы рекомендуем использовать для разделения слов в иденти-
фикаторах Си или Си++ подчерки, а не изменение регистра.
M-x c-forward-into-nomenclature
Перемещает точку назад к концу секции или слова в нотации Си++. С префикс-
ным аргументом n, перемещает n раз.
22.15.2 Электрик–знаки в Си
В режиме Си и родственных с ним некоторые печатные знаки являются “электрическими” — помимо вставки самих себя, они также обновляют отступ в текущей строке и могут вставлять переводы строк. Это средство управляется переменной c-auto-newline. “Электрик”-знаки — это {, }, :, #, ;, ,, <, >, /, *, ( и ).
Электрик-знаки вставляют переводы строк, только если включено средство auto-newline (это отображается в строке режима как ‘/a’ после имени режима). Это средство управляется переменной c-auto-newline. Вы можете включить или выключить его командой C-c C-a:
C-c C-a Перекючает автоматическую вставку переводов строк (c-toggle-auto-state).
С префиксным аргументом, эта команда включает такую возможность, если аргумент положителен, и выключает, если аргумент отрицателен.
Двоеточие — это электрик-знак, поскольку это подходит для одного двоеточия. Но это неудобно, когда вы хотите вставить двойное двоеточие в Си++. Вы можете вставить двойное двоеточие в Си++ без вставки отступа или перевода строки, набирая C-c :.
C-c : Вставляет в точке оператор области видимости, двойное двоеточие, не изменяя отступ строки и не добавляя новых строк (c-scope-operator).
Электрик-ключ # обновляет отступ строки, если он оказался в начале директи-
вы препроцессора. Это происходит, когда значение c-electric-pound-behavior равно
(alignleft). Вы можете выключить эту возможность, устанавливая c-electric-poundbehavior в nil.
Переменная c-hanging-braces-alist управляет вставкой переводов строк до и после вставленных фигурных скобок. Это ассоциативный список с элементами в такой форме: (синтаксический–символ . список–пс). Большинство синтаксических символов, перечисленных в c-offsets-alist, имеют смысл и здесь.
Список список–пс может содержать один из символов before и after, либо оба, или это может быть nil. Когда вставляется фигурная скобка, в c-hanging-braces-alist ищется определяемый ей синтаксический контекст; если он найден, используется список–пс для выяснения того, где нужно вставить перевод строки: перед фигурной скобкой, после нее или и до, и после. Если ничего не найдено, по умолчанию вставляет перевод строки до и после фигурных скобок.
Переменная c-hanging-colons-alist управляет вставкой переводов строк до и после вставленных двоеточий. Это ассоциативный список, чьи элементы имеют форму (синтаксический–символ . список–пс). Список список–пс может содержать любые из символов before или after, либо оба, или это может быть nil.
Когда вставляется двоеточие, в этом cписке ищется определяемый им синтаксический символ, и если он найден, используется список–пс для выяснения того, где нужно вставить перевод строки: перед двоеточия, после него или и там, и там. Если этот символ не найден в списке, переводы строк не вставляется.
Электрик-знаки могут также автоматически удалять переводы строк, когда включено средство для их автоматической вставки. Это делает автоматическую вставку переводов строк более приемлимой, путем удаления переводов строк в большинстве случаев, когда это было бы желательно; устанавливая переменную c-cleanup-list, вы можете указать в каких случаях это происходить. Значение этой переменной — это список символов, каждый из которых описывает один случай возможного удаления перевода строки. Вот перечень воспринимаемых символов и их значений:
brace-catch-brace
Сжимает конструкцию ‘} catch (условие) {’, помещаяя ее целиком на одну строку. Сжатие происходит, когда вы набираете ‘{’, если между фигурными скобками нет ничего, кроме catch и условия.
brace-else-brace
Сжимает конструкцию ‘} else {’, помещаяя ее целиком на одну строку. Сжатие происходит, когда вы набираете ‘{’ после else, но только если между фигурными скобками и else нет ничего, кроме пропусков.
brace-elseif-brace
Сжимает конструкцию ‘} else if (…) {’, помещаяя ее целиком на одну строку. Сжатие происходит, когда вы набираете ‘{’, если между ‘}’ и ‘{’ нет ничего, кроме пропусков, не считая эти ключевые слова и условие для if.
empty-defun-braces
Сжимает фигурные скобки пустого определения функции, помещая их на одну строку. Сжатие происходит, когда вы набираете закрывающую фигурную скобку.
defun-close-semi
Сжимает двоеточие и struct или подобный тип объявления, помещая двоеточие на ту же строку, где стоит закрывающая фигурная скобка. Сжатие происходит, когда вы вводите двоеточие.
list-close-comma
Сжимает запятые, следующие после фигурных скобок в массивах и сложных инициализациях. Сжатие происходит, когда вы набираете запятые.
scope-operator
Сжимает двойное двоеточие, которое может обозначать оператор области видимости в Си++, помещая эти двоеточия вместе. Сжатие происходит, когда вы набираете второе двоеточие, но только если они разделены только пропуском.
22.15.3 Средство голодного удаления в Си
Когда включено средство голодного удаления (это показывается в строке режима как
‘/h’ или ‘/ah’ после имени режима), одна команда hDELi удаляет весь предшествующий пропуск, а не только одни пробел. Чтобы включать и выключать эту возможность, используйте C-c C-d:
C-c C-d Включает или выключает средство голодного удаления (c-toggle-hungrystate). С префиксным аргументом, эта команда включает такую возможность, если аргумент положителен, и выключает, если аргумент отрицателен.
Источник: Ричард Столмен, Руководство по GNU Emacs

March 28th, 2012
admin
Опубликовано в рубрике
Метки: