2010-12-20 9 views
6

No me puedo desplazamiento cero para algunas cosas para mis archivos de cabecera de C++ en emacs aunque tenga que definirse en mi archivo .emacs.emacs/protected/etiqueta privada de sangría pública del archivo de cabecera C++ que no trabaja para decalaje de origen

El archivo de cabecera siguiente muestra una definición de clase dentro de dos espacios de nombres y lo más importante la palabra clave pública me gustaría tener con traslado de origen, como a continuación.

namespace n1 
{ 
namespace n2 // no offset 
{ 

class SomeClass // no offset from namespace open curly 
{ 
public: // this line with zero offset 
    SomeClass(); // offset 4 
    ... 
}; 

inline SomeClass::SomeClass() // no offset 
{ 
} 

} // n2 
} // n2 

En mi fichero .emacs He añadido la etiqueta como esta:

(c-set-offset 'label 0) 

que utiliza Ctrl + C Ctrl-S para averiguar lo que va a modificar. Otras compensaciones que he definido en el archivo .emacs funcionan bien y también los valores que no sean 0 funcionan para la etiqueta.

cuando fijo la posición 0 para el sello que resulta ser 1 al golpear pestaña para esa línea. Esto es extraño y se ve como algo más está anulando o la adición de un mínimo de 1.

Puede alguien explicar cómo puedo lograr lo que quiero y tal vez también una explicación de lo que está pasando actualmente?

Uf, esta fue mi primera pregunta aquí. Gracias :)

ACTUALIZACIÓN:

Gracias a las respuestas que he podido conseguir un poco más lejos, pero todavía no hay solución global, ya que para cambiar las cosas necesarias para conseguir desfase total 0 para los descriptores de acceso dan lugar a otras cosas Yo no quiero Thsi es donde estoy actualmente:

(c-set-offset 'access-label 0) 

También necesitaba para obtener el archivo .h ser understoor como C++, por lo que añade:

(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode)) 

Esto por sí solo no es la eliminación de la 1 I Offset estaba viendo, pero parece que también hay inclass para el usuario. Establecer esto a 0 en realidad da como resultado el desplazamiento total 0.

(c-set-offset 'inclass 0) 

problema es que ahora otras cosas tales como los miembros están con total de 0, como a continuación:

class Foo 
{ 
public: 
Foo(); 
~Foo(); 

Para remediar esto he cambiado superior-intro para compensar 4

(c-set-offset 'topmost-intro 4) 

Qué a su vez dio lugar a otros cambios, por ejemplo, declaraciones de función en línea en el mismo archivo. Con todo, no estoy seguro de cómo modificar esto de la manera que lo quiero.

Update2:

Agregado declaración en línea de Héctor SomeClass sin desplazamiento.

Respuesta

2

Creo que usted quiere tener acceso de etiqueta en lugar de etiqueta. Ver here.

+0

Lo mismo aquí, el acceso a la etiqueta por sí sola no es ayudando, pero el enlace que proporcionó me dio la información necesaria, lo que agrega 1. – murrekatt

+0

Por cierto, puede dejar el desplazamiento de inclass y usar un desplazamiento negativo para el símbolo de la etiqueta de acceso. – Moberg

2

¿Quieres access-label en lugar de la etiqueta, y si C-C C-S le dio ((label 1)) que de significar que está en el modo C y no en C++ modo (modo C es el valor predeterminado para .h archivos).Si este es su problema, agregue

// Emacs, please set these 
// Local Variables: *** 
// mode: c++ *** 
// End: *** 

al final de su archivo .h o

// -*- C++ -*- 

al inicio.

+0

Esto no está dando el resultado que quería completamente, porque la etiqueta de acceso 0 será igual que la etiqueta 0. 1 compensación proveniente de otra. – murrekatt

+0

¿Cuál es el valor de la compensación del espacio de nombres? (No tocaría inclass, y señala que los offsets negativos son posibles ya que son acumulativos). – AProgrammer

+0

Estaba investigando eso también, pero eso estropea otras cosas, porque quiero tener 0 offset para las cosas dentro de los espacios de nombres. Tal vez solo necesito cambiar la forma en que me gustaría que se vea? ;) – murrekatt

1

Si utiliza

(c-set-offset 'innamespace 0) 

entonces la llave de apertura de un espacio de nombres no aumenta el nivel de sangría.

0

Creo que es posible que desee utilizar un número negativo. Por ejemplo, en mi c-offsets-alist, que tengo:

(inclass . +) 

Luego, en .emacs:

(c-set-offset 'access-label -1) 

Lo que me lleva mi deseada:

class A { 
public: 
    A(); 
    ... 
Cuestiones relacionadas