elisp - para - emacs source code
Emacs Lisp: evaluar variable en alist (2)
Como alternativa al operador entre en la respuesta de , puede usar la función cons
. Esta función construirá una celda de contras con el primer argumento como su auto y el segundo argumento como su cdr. La notación de par de puntos en su código es una abreviatura para esto. Así podríamos reescribir su código de esta manera:
(setq my-frame-width 100)
(setq my-frame-height 50)
(add-to-list ''default-frame-alist (cons ''width my-frame-width))
(add-to-list ''default-frame-alist (cons ''height my-frame-height))
De esta manera, puede citar los símbolos que desea que aparezcan literalmente (como ancho y alto) y evaluar los símbolos cuyos valores necesita (como my-frame-width y my-frame-height). Prefiero este método porque es más sencillo. Sin embargo, eso es ciertamente una cuestión de opinión. Aquí hay más información sobre los contras y la lista para futuras referencias.
Probablemente esto sea una tontería, pero no tengo suficiente conocimiento de Elisp para entender lo que está pasando con respecto a las citas y la evaluación.
Supongamos que tengo este código Elisp:
(add-to-list ''default-frame-alist ''(width . 100))
(add-to-list ''default-frame-alist ''(height . 50))
Resultará en el valor esperado de frame-alist predeterminado:
((height 50)
(width 100))
Pero ahora si tengo esto:
(setq my-frame-width 100)
(setq my-frame-height 50)
(add-to-list ''default-frame-alist ''(width . my-frame-width))
(add-to-list ''default-frame-alist ''(height . my-frame-height))
Resultará en ...
((height my-frame-height)
(width my-frame-width))
y, a juzgar por la geometría del cuadro, nunca evalúa esas variables. ¿Cómo puedo hacer que los valores reales de my-frame-width y height aparezcan en esta lista? ¿Tengo demasiadas citas? Pero no puedo eliminar ninguna de las evaluaciones de agregar a la lista ...
Prueba esto:
(setq my-frame-width 100)
(setq my-frame-height 50)
(add-to-list ''default-frame-alist `(width . ,my-frame-width))
(add-to-list ''default-frame-alist `(height . ,my-frame-height))
Usar backquote en lugar de quote le permite usar, para forzar la evaluación de un parámetro.
Consulte el manual de referencia de Elisp. Escriba información de Cx, busque el manual de referencia de elisp y luego busque backquote dentro de eso.