OVH Cloud OVH Cloud

taille de l'indentation

22 réponses
Avatar
Julien Enocq
Bonjour,
je cherche à changer l'indentation.
Pour le moment quand j'indente une ligne avec tab, cela me rajoute 2
espaces. Je voudrai plutôt que ça me rajoute une tabulation, ou au
pire pouvoir changer le nombre d'espace, car je trouve que 2 c'est pas
assez, ça rend le texte trop ramassé.

Comment puis je faire ? J'ai bien trouvé comment changer la taille
d'une tabulation, mais pas comment remplacer les espaces par des
tabulations...

Merci d'avance.

10 réponses

1 2 3
Avatar
Sébastien Kirche
Le 10 septembre 2005 à 16:09, Julien Enocq s'est exprimé ainsi :

Bonjour,
je cherche à changer l'indentation.
Pour le moment quand j'indente une ligne avec tab, cela me rajoute 2
espaces. Je voudrai plutôt que ça me rajoute une tabulation, ou au
pire pouvoir changer le nombre d'espace, car je trouve que 2 c'est pas
assez, ça rend le texte trop ramassé.

Comment puis je faire ? J'ai bien trouvé comment changer la taille
d'une tabulation, mais pas comment remplacer les espaces par des
tabulations...



tab-width pour la largeur, et indent-tabs-mode (il me semble) pour
choisir entre des caractères tabulation ou des espaces.

--
Sébastien Kirche
Avatar
drkm
Julien Enocq writes:

Pour le moment quand j'indente une ligne avec tab, cela me rajoute 2
espaces.



Je pense que la longueur d'indentation est dépendante du mode
d'édition. Pour quel genre de fichiers veux-tu modifier cette
longueur ?

Comment puis je faire ? J'ai bien trouvé comment changer la taille
d'une tabulation, mais pas comment remplacer les espaces par des
tabulations...



Tu peux regarder du côté de la variable 'indent-tabs-mode'.
Elle contrôle le fait d'utiliser soit autant de tabulations que
possible, en complétant avec des espaces et en tenant compte de
la longueur d'une tabulation, pour arriver à la longueur
d'indentation calculée par le mode d'édition, soit uniquement des
espaces.

Personnellement, je pense qu'utiliser des tabulations présente
le risque (plutôt minimal, il est vrai) de ne pas être lisible de
la même manière dans différentes applications. J'ai donc par
défaut cette variable à nil.

--drkm
Avatar
Julien Enocq
drkm disait le 09/10/05 que :

Je pense que la longueur d'indentation est dépendante du mode
d'édition. Pour quel genre de fichiers veux-tu modifier cette
longueur ?



Surtout pour les sources C++

Tu peux regarder du côté de la variable 'indent-tabs-mode'.
Elle contrôle le fait d'utiliser soit autant de tabulations que
possible, en complétant avec des espaces et en tenant compte de
la longueur d'une tabulation, pour arriver à la longueur
d'indentation calculée par le mode d'édition, soit uniquement des
espaces.




Oui ça j'ai vérifié et c'etait activé, et ça ne l'empeche pas de
mettre uniquement des espaces, quelque sois le mode d'édition.

Personnellement, je pense qu'utiliser des tabulations présente
le risque (plutôt minimal, il est vrai) de ne pas être lisible de
la même manière dans différentes applications. J'ai donc par
défaut cette variable à nil.

--drkm



Dans ce cas, comment changer le nombres d'espace inséré ? Par défaut
en C++ il m'indente de 2 espaces, mais c'est à mon goût vraiment pas
assez...

Par contre je viens de m'apercevoir que j'ai un peu tout déréglé à
force de faire joujou... en mode AUCTeX quand j'ai par exemple:

begin{itemize}
item bla
item plop
end{itemize}

de base en fesant M-return a chaque ligne ça m'indente de 2 espaces,
mais si après j'appuis sur tab, ça m'indente de 7 espaces ! Pas très grave
mais 7 ça commence à faire beaucoup en fait ^_^
Avatar
drkm
Julien Enocq writes:

drkm disait le 09/10/05 que :

Je pense que la longueur d'indentation est dépendante du mode
d'édition. Pour quel genre de fichiers veux-tu modifier cette
longueur ?



Surtout pour les sources C++



Tu utilises CC Mode, j'imagine. Il a son propre système de
styles. Tu peux soit utiliser un style existant, soit le
modifier, soit créer le tien from scratch. Regarde du côté des
styles dans le manuel de CC Mode (par exemple 'c-basic-offset').
EmacsWiki devrait expliquer ce genre de chose.

Tu peux regarder du côté de la variable 'indent-tabs-mode'.



Oui ça j'ai vérifié et c'etait activé, et ça ne l'empeche pas de
mettre uniquement des espaces, quelque sois le mode d'édition.



Même lorsque la longueur d'indentation est au delà de
'tab-width' ? Bizarre.

Par contre je viens de m'apercevoir que j'ai un peu tout déréglé à
force de faire joujou...



Qu'as-tu pour l'instant dans ton ~/.emacs.el ? Peut-être
peux-tu le mettre en ligne ?

--drkm
Avatar
Julien Enocq
drkm disait le 09/10/05 que :

Tu utilises CC Mode, j'imagine. Il a son propre système de
styles. Tu peux soit utiliser un style existant, soit le
modifier, soit créer le tien from scratch. Regarde du côté des
styles dans le manuel de CC Mode (par exemple 'c-basic-offset').
EmacsWiki devrait expliquer ce genre de chose.



Oui effectivement c'etait bien ça, j'ai choisi "Override style
settings", reglé à 4, et maintenant ça indente avec des tabulations en
priorités et fini par des espaces si besoins, et c'est à la bonne
taille, merci :)

Par contre je viens de m'apercevoir que j'ai un peu tout déréglé à
force de faire joujou...



Qu'as-tu pour l'instant dans ton ~/.emacs.el ? Peut-être
peux-tu le mettre en ligne ?

--drkm



En fait en copiant le texte ici et en le relisant pour verifier si il
n'y avais pas d'infos perso j'ai trouvé la ligne coupable... La
prochaine fois je vérifie avant d'aller raconter ma vie.
Mais c'est vrai que ça a l'air d'être une ligne que j'ai rajouté moi
même, et j'en ai aucun souvenir... M'enfin le problème est maintenant
réglé.

Sinon juste une dernière question au cas où, toujours dans le cc-mode,
quand j'ai une structure comme if, while ou leurs amis j'ai les { et }
qui s'indente comme ça:

if(machin == 0)
{
bidule = 1;
}

alors que je voudrai ça:

if(machin == 0)
{
bidule = 1;
}

quand j'avais les indentations à 2 espaces ça passais, mais maintenant
que j'ai de plus grosses indentations ça fait très moche à mon goût :)

Enfin je pense pouvoir trouver ça tout seul, mais si au passage
quelqu'un sais ça me ferai gagner du temps :)

En tout cas merci à tous pour votre aide :)
Avatar
Julien Enocq
Bon pour mon indentation j'ai effectivement trouvé tout seul :)
C'est dingue comment tout est réglable, plus j'utilise emacs plus je l'aime.
Avatar
drkm
Julien Enocq writes:

Bon pour mon indentation j'ai effectivement trouvé tout seul :)



Qu'est-ce, pour les archives ? Si tu modifies plusieurs
variables de CC Mode, je te conseille de jeter un oeil aux
styles. Je trouve cela tout aussi clair, mais plus simple à
gérer, notamment si tu es amené a utiliser plusieurs styles
différents (projets académiques, stages, boulot, projets libres,
projets personnels, etc.).

;; Tu centralises les valeurs associées à ton style.
(defconst je-cc:default-style
'("gnu"
(c-basic-offset . 4)
(c-offsets-alist . ((substatement-open . 0)))))

;; Tu le nommes.
(c-add-style "jenocq" je-cc:default-style)

;; Et tu le renseignes comme le style par défaut. Tu peux
;; ici spécifier des styles différents pour des modes
;; différents.
(setq c-default-style "jenocq")

--drkm
Avatar
Julien Enocq
drkm disait le 09/11/05 que :


Bon pour mon indentation j'ai effectivement trouvé tout seul :)



Qu'est-ce, pour les archives ?



'(c-offsets-alist (quote ((substatement . 0) (substatement-open . 0))))

Enfin c'est ce qui c'est rajouté en le changeant avec le M-x
customise, après faut l'adapter pour l'utilisé tout seul...

Les 2 etaient arrivés a la valeur "2" je ne sais pas comment, je les
ai remis a "0".
On peut changer pas mal de trucs là dedans.

Si tu modifies plusieurs variables de CC Mode, je te conseille de
jeter un oeil aux styles. Je trouve cela tout aussi clair, mais
plus simple à gérer, notamment si tu es amené a utiliser plusieurs
styles différents (projets académiques, stages, boulot, projets
libres, projets personnels, etc.).

;; Tu centralises les valeurs associées à ton style.
(defconst je-cc:default-style
'("gnu"
(c-basic-offset . 4)
(c-offsets-alist . ((substatement-open . 0)))))

;; Tu le nommes.
(c-add-style "jenocq" je-cc:default-style)

;; Et tu le renseignes comme le style par défaut. Tu peux
;; ici spécifier des styles différents pour des modes
;; différents.
(setq c-default-style "jenocq")

--drkm



Ok merci, je vais sûrement faire ça, ça m'a l'air pratique. Hé mais en
fait tu avais trouvé le substatement-open à 0 toi aussi :p
Avatar
drkm
Julien Enocq writes:

'(c-offsets-alist (quote ((substatement . 0) (substatement-open . 0))))

Enfin c'est ce qui c'est rajouté en le changeant avec le M-x
customise, après faut l'adapter pour l'utilisé tout seul...

Les 2 etaient arrivés a la valeur "2" je ne sais pas comment, je les
ai remis a "0".



Du style "gnu" sans doute, qui si je ne m'abuse est le style
par défaut sauf pour le mode Java. En parlant des styles de CC
Mode, voici une vue d'ensemble (plus ou moins correcte), ça peut
aider à comprendre le bazar.

Il y a une série de variables dans CC Mode qui contrôlent des
aspects liés aux styles : indentation, commentaires, etc. Tu
trouveras la liste sur (info "(ccmode)Styles"). En fait, tu peux
utiliser n'importe quelle variable. Mais celles-là sont traitées
de manière spéciale : leur valeur par défaut est le symbole
'set-from-style'. Lorsque tu utilises un mode de CC Mode, par
exemple en créant un fichier C++, il va déterminer le style à
utiliser. Il va ensuite affecter les valeurs que tu as
renseignées pour certaines variables dans la description du
style. Mais pour ces quelques variables, il ne le fera que si
elles ont toujours pour valeur 'set-from-style', donc leur
affecter directement une valeur, comme tu l'as fait, masque la
valeur du le style. Je ne suis pas sûr d'être très clair, voici
un petit exemple :

(setq-default c-basic-offset 'set-from-style
c-backslash-column 78
c-offsets-alist '((substatement . 0)
(substatement-open . 0)))

(defconst test-style
'((c-basic-offset . 4)
(c-backslash-column . 70)
(c-offsets-alist . ((substatement . 2)
(class-open . 2)))))

(c-add-style "test" test-style)

(setq c-default-style "test")

Si tu crées un nouveau buffer et que tu y utilises le mode C++,
par exemple : 'C-x b test <RET> M-x c++-mode <RET>', tu
obtiendras les valeurs suivantes :

(list c-basic-offset c-backslash-column
(assq 'substatement c-offsets-alist)
(assq 'substatement-open c-offsets-alist)
(assq 'class-open c-offsets-alist))
==> (4 78 (substatement . 0) (substatement-open . 0)
(class-open . 2))

Si tu refixes le style par défaut à "gnu" :

(setq c-default-style "test")

tu obtiens alors les valeurs :

(list c-basic-offset c-backslash-column
(assq 'substatement c-offsets-alist)
(assq 'substatement-open c-offsets-alist)
(assq 'class-open c-offsets-alist))
==> (2 78 (substatement . 0) (substatement-open . 0)
(class-open . 0))

Par contre, si tu utilises 'C-c .' maintenant, après que le
style "gnu" ait été choisi, pour changer de style, en choisissant
le style "test", tu obtiens les valeurs suivantes :

(list c-basic-offset c-backslash-column
(assq 'substatement c-offsets-alist)
(assq 'substatement-open c-offsets-alist)
(assq 'class-open c-offsets-alist))
==> (4 70 (substatement . 2) (substatement-open . +)
(class-open . 2))

ce qui est pour moi un bug puisqu'il ne tient alors plus compte
des variables 'set-from-style' ou non, puisque leur valeur a déjà
été fixée. Ce qui semble alors contredire (info
"(ccmode)Choosing a Style") :

5. In all cases, the style described in `c-default-style' is
installed _before_ the language hooks are run, so you can
always override this setting by including an explicit call
to `c-set-style' in your language mode hook, or in
`c-mode-common-hook'.

puisque le résultat n'est alors plus le même. Ça mérite un email
sur la ML de CC Mode, ÀMHA.

Remarque également que 'c-offsets-alist' est traitée
différemment, puisque la valeur de cette variable est fusionnée
avec celle du style. Dans ton cas, tu as renseigné les valeurs
de 'substatement' et 'substatement-open', ce qui masque les
valeur correspondantes dans le style. Mais les autres entrées de
'c-offsets-alist' dans le style ne sont pas masquées.

Pour associer un style à un fichier, tu as plusieurs
possibilités. La plus simple est d'utiliser 'c-set-style' ou
'C-c .' afin de spécifier interactivement le style à utiliser.
Tu peux également modifier 'c-default-style' pour spécifier le
style à utiliser par défaut, ce qui peut être fait en tenant
compte du mode d'édition (Java, C++, C, ...). Tu peux également
utiliser 'c-set-style' dans un hook des modes d'édition de CC
Mode, ce qui te permet de choisir le style en fonction de
n'importe quel critère (nom de fichier, emplacement, phases de la
lunes, ...). Enfin, il te reste le moyen de l'indiquer dans le
fichier lui-même, avec la variable locale 'c-file-style' :

// -----------------------------------------------------------
// Local Variables:
// mode: c++
// c-file-style: "jenocq"
// End:
// -----------------------------------------------------------

Bon, tout cela est donné un peu pêle-mêle ; j'espère ne t'avoir
pas embrouillé plus qu'aidé.

--drkm
Avatar
drkm
drkm writes:

ce qui est pour moi un bug puisqu'il ne tient alors plus compte
des variables 'set-from-style' ou non, puisque leur valeur a déjà
été fixée. Ce qui semble alors contredire (info
"(ccmode)Choosing a Style") :

5. In all cases, the style described in `c-default-style' is
installed _before_ the language hooks are run, so you can
always override this setting by including an explicit call
to `c-set-style' in your language mode hook, or in
`c-mode-common-hook'.



Mmh. Il n'y a en fait pas moyen d'avoir ce comportement
interactivement, mais pour l'utilisation dans un hook par
exemple, on peut utiliser l'argument optionnel 'DONT-OVERRIDE' de
'c-set-style' (non-nil et non-t) :

(add-hook 'c++-mode-hook
(lambda ()
(when (in-a-XYZ-file-p)
(c-set-style "XYZ-style" 'dont-override))))

--drkm
1 2 3