program - emacs source code
La diferencia entre setq y setq-default en Emacs Lisp (1)
Algunas variables en Emacs son "buffer-local", lo que significa que cada búfer puede tener un valor separado para esa variable que invalida el valor predeterminado global. tab-width
es un buen ejemplo de una variable local de búfer.
Si una variable es local en el búfer, entonces setq
establece su valor local en el búfer actual y setq-default
establece el valor predeterminado global.
Si una variable no es un búfer local, entonces setq
y setq-default
hacen lo mismo.
En su caso 2, (setq tab-width 4)
establezca el valor local de buffer de tab-width
en 4 en el búfer actual, dejando el valor predeterminado global de tab-width
aún en 8, por lo que cuando evaluó tab-width
en en un búfer diferente que no tenía valor local, vio 8. Entonces, cuando estableció el valor predeterminado en 4, ese búfer lo recogió, ya que todavía no tenía un valor local.
Tengo una pregunta sobre Emacs Lisp. ¿Cuál es la diferencia entre setq y setq-default ? Estoy muy confundido al respecto.
Los tutoriales dicen que setq tiene efecto en el búfer local, mientras que setq-default afecta a todos los búferes.
Por ejemplo, si escribí (setq a-var a-vars-value) en init.el , encontré después de iniciar Emacs y abrir un nuevo búfer, a-var también está allí y su valor es a-vars-value . Pensé que no se suponía que estuviera allí. Parece que no hay diferencia entre setq y setq-default .
¿Hay algo mal con mi comprensión?
Muchas gracias.
Por ejemplo:
1) Escribí (setq hola 123) en el archivo init.el , y ejecuto emacs abuffer en la shell, luego ingreso "hola Cx Ce" , muestra "123". Lo mismo sucede cuando ejecuto esto en todos los buffers nuevos.
2) Escribí (setq tab-width 4) en el archivo init.el. Cuando ejecuto el ancho de tabulación Cx Ce , muestra "8" (el modo actual es ''Texto''). Sin embargo, cuando uso (setq-default tab-width 4) , muestra "4". No puedo explicar este fenómeno.