2012-02-02 10 views
6

Me gustaría que emacs tratara "#ifdef" exactamente como "{" y "#endif" como "}" en relación con la sangría. De este modo:¿Cómo hago que emacs trate a #ifdef y #endif como '{' y '}'?

#ifdef __linux__ 
    #include <sys/socket.h> 
#endif 

int func(void) 
{ 
    int foo = 0; 

    #ifdef DO_STUFF 
     foo = do_stuff(); 
    #endif 

    return foo; 
} 

en lugar de:

#ifdef __linux__ 
#include <sys/socket.h> 
#endif 

int func(void) 
{ 
    int foo = 0; 

#ifdef DO_STUFF 
    foo = do_stuff(); 
#endif 

    return foo; 
} 

jugar un poco con "CPP-macro" no hacer el truco. ¿Cómo lo haría? ¡Gracias!

Respuesta

4

Puede utilizar este archivo de EL para emacs: http://www.emacswiki.org/emacs/ppindent.el

Usted puede encontrar muchos información sobre emacs muesca aquí: http://www.emacswiki.org/emacs/IndentingC

+0

ppindent "sangrías" poniendo espacio entre '#' y 'ifdef'. Creo que eso hace que sea más difícil de leer. Quiero mantener el '#ifdef' junto y sangrar poniendo espacios en blanco antes del '#'. – colding

+0

Ok, realicé algunas modificaciones en el archivo lisp: [aquí] (http://pastebin.com/uUqYpCua), espero que esta vez sea lo que necesites. – ClemPi

+0

Eso está mucho más cerca de lo que necesito. Ahora, sin haberlo intentado todavía, ¿cómo sangraría cuando el #ifdef esté entre el código normal? ¿Doblaría independientemente del código circundante o seguiría el flujo por así decirlo? – colding

3

preprocesador Sin comentarios: están se suponía para empezar en la primera columna, de modo emacs es correcto allí, sin embargo, en la actualidad, los compiladores suelen permitir que se sangren. (Consulte Indenting #defines)

Dicho esto, consulte Indent preprocessor directives as C code in emacs para una discusión sobre esto. De hecho, podría tratar de cerrar esta pregunta como un duplicado de eso.

Estoy de acuerdo con algunos de los comentarios sobre ese tema, ya que es un error pensar en el preprocesador como de bloque o de alcance léxico, por lo que es realmente dañino aplicar sangría de la misma manera que con el código C regular.

+2

Creo que "se supone que deben comenzar" no es correcto. De acuerdo con los estándares actuales, no lo son. ¿Quizás quieras reemplazarlo por "se suponía que debían comenzar"? Eso no quiere decir que no estoy de acuerdo con usted en el punto de que * deberían * comenzar desde el principio desde un punto de vista de consistencia/mantenibilidad. –

+0

@NiklasBaumstark: Point. :) – Arafangion

+0

@ruakh: Gracias. Maldita sea, necesito café. – Arafangion

Cuestiones relacionadas