Авто-отступ Emacs C-mode завершается неудачно после макроса препроцессора

Emacs 24.2 для Windows.

case TYPE_LONG: 
 {                           <------- 65383 
   traceCodePath(20);        
   tempLongVal = iterator_long(it);  
   tempLongVal = 10; 
   if (isBigEndian()) 
   { 
     swap_endian64(&tempLongValCon, &tempLongVal); 
     traceCodePath(25);      <------- 65601 
     if (i > 0) 
       {     <------ get weird from here /* ((substatement-open 65601)) */ 
 }           <------ this line aligns with the { below "case"  /* ((block-close 65383)) */ 
 }           <------ the code afterward all align with { below "case" /* ((block-close 65383)) */

Отступы в c-режиме работали хорошо с самого начала I пока я не добавил некоторый макрос препроцессора de #ifdef, #else, #end, после этого с некоторой точки кода все последующие отступы становятся беспорядочными. Синтетический символ каждой строки правильный, но все позиции якоря неправильные, кажется, что они не могут распознать {на том же уровне, но привязать некоторые {перед ними на верхнем уровне.

Что еще более странно, даже если я удалю эти макросы препроцессора снова, отступ не восстановится снова.
Что еще более странно, иногда позже, это восстановилось без причины. Я не знаю, какие операции вызвали это, но наиболее вероятным, я думаю, является "сохранить", "вернуть буфер" и т. Д.

Надеюсь, кто-то может выяснить причину, спасибо заранее.

1 ответ

Это вполне может быть связано с "ошибкой #14133 24.2; разрывы распознавания функций c на некоторых макросах препроцессора":

http://lists.gnu.org/archive/html/bug-gnu-emacs/2013-04/msg00055.html

Проблема, кажется, с пробелами, предшествующими #. Я заметил, что CMa и CMe перестали работать правильно, а регионы с автоматическим отступом были странными, как и в вашем случае.

Восстановление также не было последовательным для меня.

Патч, предложенный Аланом Маккензи, решил проблему для моего случая, вы должны попробовать его.

Вы также можете попробовать с emacs 23, я не смог воспроизвести ошибку в этой версии.

Другие вопросы по тегам