Attualmente provo a capire come posso gestire alcune righe in modo specifico senza incasinare il rientro del resto del buffer. Considera la seguente funzione MyFunc
come esempio:
void MyFunc()
{
unsigned y = 0;
DONOTINDENT;
unsigned int x = 5 + 2;
return x + 12;
}
Qui, voglio che la riga DONOTINDENT;
sia rientrata nella colonna 0, mentre il resto della funzione dovrebbe essere rientrato normalmente. Ho provato a risolverlo usando la seguente personalizzazione 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, questo funziona abbastanza bene per la linea DONOTINDENT;
, tuttavia non funziona per tutte le linee successive, poiché sono rientrate rispetto a DONOTINDENT;
. Quindi, se DONOTINDENT;
è rientrato nella colonna 0, unsigned int x = 5 + 2;
sarà rientrato anche nella colonna 0, ma dovrebbe essere rientrato nella colonna c-basic-offset
.
Come posso correggere il rientro per le seguenti righe? C'è qualche variabile interna che posso usare per influenzare il calcolo del livello di rientro delle righe successive, o questo calcolo è basato esclusivamente sul rientro precedente. Penso che dovrebbe essere possibile in qualche modo realizzare questo dato che le etichette nelle dichiarazioni di caso-caso sono rientrate in un modo simile, ma ho faticato a capirlo quando scavavo nel codice cc-mode.
Grazie in anticipo!
Cordiali saluti, Fabian