Compilación de bytes de mi modo:
(defun dict-setup-expansions ()
"Add `dict-mode' specific expansions."
(set (make-local-variable 'er/try-expand-list) (list #'dict-mark-article)))
da advertencia:
Warning: assignment to free variable `er/try-expand-list'
Esta es una situación normal porque er/try-expand-listse define en externo; biblioteca expand-regionque está en http://elpa.gnu.org
Mi extensión de registro de modo a la expand-regionbiblioteca, pero está bien ejecutar mi modo sin expand-regionmodo.
Creo que la forma correcta de lidiar con la advertencia es agregar una declaración:
(defvar er/try-expand-list)
defvar los documentos dicen:
The `defvar' form also declares the variable as "special",
so that it is always dynamically bound even if `lexical-binding' is t.
Yo uso -*- lexical-binding: t -*-. ¿Eso significa que sin defvarvariable er/try-expand-listestaré en el ámbito léxico y tengo un error real?

(defvar er/try-expand-list).Respuestas:
No,
setysetqno declare variables léxicas. Solo lolethace. Si lo hubiera usadoletaquí, tendría un error, pero está bien. La advertencia existe principalmente para detectar errores tipográficos cuando se utilizan variables dinámicas.Para que la advertencia desaparezca, úsela
defvarcomo en su pregunta, pero no cite el símbolo.fuente
eval-when-compileredundante a solodefvar? No veo ninguna advertencia sineval-when-compile. Parece queeval-when-compilees necesario si usa código activo, como(require ...)...