J’ai une question sur Emacs Lisp. Quelle est la différence entre setq et setq-default ? Je suis très confus à ce sujet.
Les tutoriels disent que setq prend effet dans le tampon local alors que setq-default affecte tous les tampons.
Par exemple, si j’ai écrit (setq a-var a-vars-value) dans init.el , après avoir démarré Emacs et ouvert un nouveau tampon, le a-var est également présent et sa valeur est a-vars-value . Je pensais que ce n’était pas censé être là. Il semble qu’il n’y ait pas de différence entre setq et setq-default .
Y a-t-il quelque chose qui ne va pas avec ma compréhension?
Merci beaucoup.
Par exemple:
1) J’ai écrit (setq hello 123) dans le fichier init.el , et j’exécute emacs abuffer dans le shell, puis j’entre “bonjour Cx Ce” , ça montre “123”. La même chose se produit lorsque je lance cela dans tous les nouveaux tampons.
2) J’ai écrit (setq tab-width 4) dans le fichier init.el. Lorsque je lance Cx Largeur de tabulation , il affiche “8” (le mode actuel est “Texte”). Cependant, quand j’utilise (setq-default tab-width 4) , il affiche “4”. Je ne peux pas expliquer ce phénomène.
Certaines variables dans Emacs sont “buffer-local”, ce qui signifie que chaque tampon est autorisé à avoir une valeur distincte pour cette variable qui remplace la valeur par défaut globale. tab-width
est un bon exemple de variable buffer-local.
Si une variable est buffer-local, alors setq
définit sa valeur locale dans le tampon actuel et setq-default
définit la valeur par défaut globale.
Si une variable n’est pas buffer-local, alors setq
et setq-default
font la même chose.
Dans votre cas 2, (setq tab-width 4)
définissez la valeur buffer-local de tab-width
à 4 dans le tampon actuel, en laissant la valeur par défaut globale de tab-width
à 8, donc lorsque vous avez évalué tab-width
dans un autre tampon qui n’avait pas de valeur locale, vous avez vu que 8. Ensuite, lorsque vous définissez la valeur par défaut à 4, ce tampon l’a pris, car il n’avait toujours pas de valeur locale.