P: ¿cómo puedo obtener nuevos buffers para honrar el mapeo auto-mode-alist
?
Al encontrar un archivo , Emacs compara la extensión del archivo auto-mode-alist
para determinar qué modo principal usar para el búfer del archivo. ¿Hay alguna forma de utilizar la información auto-mode-alist
para determinar el modo de un búfer que (todavía) no tiene un archivo asociado?
Es decir: si abro un nuevo búfer cuyo nombre tiene algo parecido a una extensión de archivo, ¿puedo hacer que se abra automáticamente en el modo esperado? Por ejemplo, si tuviera que abrir un nuevo búfer a-new-buffer.el
que aún no está asociado con un archivo, quiero que se abra en emacs-lisp-mode
lugar del modo predeterminado.
buffers
major-mode
Dan
fuente
fuente
auto-mode-alist
, hace que el búfer " visite " el archivo (y eso se encarga de todo).org
búfer temporal para probar nuevas funciones en las que estoy escribiendo para su usoorg-mode
; b) unR
buffer temporal para hacer algunas manipulaciones estadísticas rápidas y descartables; c) un búfer de texto temporal para componer un correo electrónico. En cada caso, no quiero crear un archivo para visitar, solo quiero un búfer desechable que, sin embargo, se abra en el modo apropiado.C-x C-f
no , no " crear un archivo de la visita ". Ese es un malentendido fundamental. Simplemente hacen exactamente lo que estás buscando. Es solamente si y cuando intenta guardar el búfer que un archivo se crea. Si no intenta guardar el búfer, no se crea ningún archivo. Lo que quieres, por lo que entiendo hasta ahora, es "visitar un archivo" (lo que realmente significa abrir un búfer en el modo adecuado).Respuestas:
Comandos de visita de archivos como
C-x C-f
no crear un archivo para visitar. Hacen lo que estás buscando.Solo si y cuando intentas guardar el búfer se crea un archivo .
Si no intenta guardar el búfer, no se crea ningún archivo. Lo que quieres, por lo que entiendo hasta ahora, es " visitar un archivo " (lo que realmente significa abrir un búfer en el modo adecuado).
fuente
n
para no guardar o (a menudo) simplemente guardo el búfer. Y luego lanzo el archivo creado ... o no.)*scratch*
: se le pide que guarde cuando ese dedo golpea automáticamenteC-x C-s
.Si ha estado usando la solución de Juri Linkov durante años.
Creo búferes temporales con algo así
C-x
b
test.org
C-j
. Elmajor-mode
está determinado por la extensión del archivo a través deauto-mode-alist
.Para probar el efecto puedes probar
(prog1 (and (switch-to-buffer "my-new.org") major-mode) (kill-buffer "my-new.org"))
=>
org-mode
. En una limpieza,emacs -q
la prueba volveríafundamental-mode
.fuente
advice
opción que había estado usando. No estoy seguro de si sigo para qué(prog1...)
sirve la parte, pero la(setq-default major-mode ...)
parte es bastante agradable.prog1
prueba solo muestra que obtienes lo esperadomajor-mode
al cambiar a un búfer. Evalúe lasetq-default
parte y ejecute la prueba. Volveráorg-mode
Sin elsetq-default
volveríafundamental-mode
.Descubrí una forma basada en consejos usando ideas que vinieron de los comentarios de @ Drew y la respuesta de @ glucas que registraré aquí en caso de que sean útiles para alguien.
La versión corta: use
after
consejos para consultar si el búfer tiene un nombre de archivo asociado, configure uno temporalmente si no lo tiene, y luego deje que el resto de laset-auto-mode
maquinaria se encargue de los detalles. Después de un poco de pruebas (no extensas), parece estar funcionando bien.Para
ido-switch-buffer
y vainillaswitch-to-buffer
, los dos consejos serían:Considero que esta opción es útil además de
find-file
que @Drew levantó porque mis dedos pueden adelantarse a mi cerebro: la memoria muscular a menudo me llevará al territorio de cambio a buffer antes de que se me ocurra completamentefind-file
lo que necesito. Ahora, ambas opciones están disponibles.ACTUALIZACIÓN: error pequeño pero potencialmente irritante en el código anterior: volverá a ejecutar el gancho de modo en el búfer cada vez que lo cambie. Lo siguiente le da un nombre de archivo real fuera del
/tmp
directorio y evita ese problema:fuente
La
set-auto-mode
función establece el modo en función del archivo asociado con un búfer. Aquí hay una función que se establece temporalmentebuffer-file-name
desde el nombre del búfer para establecer el modo:Puede ejecutar esto cuando se cambia el nombre de un búfer utilizando consejos:
No estoy seguro del mejor lugar para conectar esto para afectar los nuevos buffers. Aquí estoy usando el
buffer-list-update-hook
, pero eso se llama en más casos de los que necesitamos.fuente
buffer-list-update-hook
porquechange-major-mode-hook
no se llamaba con el búfer actual esperado. Para el registro, probablemente tenga más sentido aconsejar a su función switch-buffer como lo hace @Dan en su respuesta.Puede usar buffers * scratch * con el fin de crear buffers temporales que tengan el mismo modo principal que el archivo en el que podría estar trabajando.
Aquí una respuesta de emacs SE que podría resolver su problema:
¿Cómo puedo alternar rápidamente entre un archivo y un búfer * scratch * que tiene el mismo modo principal?
La pregunta y la respuesta mencionadas fueron publicadas por mí. La respuesta en la función hace lo siguiente:
*scratch-X-mode*
si aún no existe, y cambia a este búfer recién creado.*scratch-X-mode*
ya existe, simplemente cambia a ese búfer.fuente
Aquí hay algunas buenas respuestas, pero quería agregar una cosa más. Emacs tiene un montón de características y, a menudo, hay varias formas de hacer algo. Puede agregar etiquetas en la parte superior de cualquier archivo que indiquen a emacs de qué tipo es, independientemente de la extensión. Por ejemplo agregando esto:
En la parte superior de un archivo se le hará saber a emacs que es un archivo Python incluso sin la
.py
extensión. Tenga en cuenta que#
al principio de la línea hay un comentario de estilo Python. Para diferentes tipos de archivos puede usar diferentes comentarios. Por ejemplo, para especificar un archivo Lisp que utiliza;
para iniciar una línea de comentarios y establecer el modo en emacs de esta manera:Consulte Especificar variables de archivo y Elegir modos de archivo .
fuente
switch-buffer
) y que el modo se configure automáticamente en algo diferentefundamental-mode
.