Actualmente trato de averiguar cómo puedo manejar algunas líneas específicamente sin estropear la sangría del resto del búfer. Considere la siguiente función MyFunc
como ejemplo:
void MyFunc()
{
unsigned y = 0;
DONOTINDENT;
unsigned int x = 5 + 2;
return x + 12;
}
Aquí, quiero que la línea DONOTINDENT;
tenga sangría en la columna 0, mientras que el resto de la función debe sangrarse normalmente. Traté de resolver esto usando la siguiente costumbre c-special-indent-hook
:
(defun my-c-mode-indent-hook ()
(let (p1 p2 myline)
(setq p1 (line-beginning-position))
(setq p2 (line-end-position))
(setq myLine (buffer-substring-no-properties p1 p2))
(if (string-match-p "DONOTINDENT" myLine)
(save-excursion
(indent-line-to 0))
)
)
)
(defun my-c-mode-common-hook ()
;; my customizations for all of c-mode and related modes
(setq c-special-indent-hook 'my-c-mode-indent-hook)
)
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
OK, esto funciona bastante bien para la línea DONOTINDENT;
, sin embargo, no funciona para todas las líneas posteriores, ya que estas están sangradas en relación con DONOTINDENT;
. Entonces, si DONOTINDENT;
se sangra a la columna 0, unsigned int x = 5 + 2;
también se sangrará a la columna 0, pero se debe sangrar a la columna c-basic-offset
.
¿Cómo puedo arreglar la sangría para las siguientes líneas? ¿Hay alguna variable interna que pueda usar para influir en el cálculo del nivel de sangría de las líneas posteriores, o este cálculo se basa únicamente en la sangría anterior? Creo que debería ser posible lograr esto de alguna manera, ya que las etiquetas en las declaraciones de mayúsculas y minúsculas están sangradas de manera similar, pero luché por resolver esto al profundizar en el código del modo cc.
¡Gracias por adelantado!
Saludos cordiales, Fabian
fuente