Estoy trabajando para dividir el código en archivos más pequeños y refactorizarlo un poco. Considere el siguiente código a continuación como la sección quiero extraer:Refactorización en Emacs
(require 'package)
(add-to-list 'package-archives
'("marmalade" . "http://marmalade-repo.org/packages/") t)
(package-initialize)
(when (not package-archive-contents)
(package-refresh-contents))
(defvar my-packages '(org magit)
"A list of packages to ensure are installed at launch.")
(dolist (p my-packages)
(when (not (package-installed-p p))
(package-install p)))
- Quiero aprovechar la sección anterior y reemplazarlo con algo así como
(require `file-name)
- Luego tomar el texto reemplazado y el lugar que en una nueva archivo en el directorio actual llamado
file-name.el
- Y a continuación, añadir una línea en la parte superior del archivo
(provides `file-name)
sería muy bueno si pudiera presionar un teclado y luego escribir un nombre y que esto ocurra. Si hay una manera fácil de hacerlo, me encantaría escuchar posibles soluciones.
Editar: estoy empezando una recompensa, porque creo que esto se aplica a más tipos de código de Lisp y me gustaría tener algo un poco más general que pueda ampliar.
He considerado yasnippet pero no creo que sea lo suficientemente potente como para realizar la tarea en cuestión. Básicamente, el flujo de trabajo ideal sería marcar las líneas a ser extraídas, reemplazando eso con una directiva de requerimiento o inclusión apropiada y enviando el texto a su propio archivo. Idealmente, un comando y algo que tenga en cuenta el tipo de archivo que se está editando o al menos el modo principal para que el comportamiento se pueda personalizar, una vez más yasnippet es bueno para realizar tareas diferentes al editar en diferentes modos principales, sin embargo no tendría idea de cómo hacer que funcione o evaluar la posibilidad de hacerlo funcionar.
Avíseme si necesita más información.
Me doy cuenta de que esto es bastante viejo, pero solo una sugerencia; Personalmente moví las llamadas '(delete-region ...) (insert)' * después de * el bloque '(with-current-buffer)', así que si p. hay un error al crear el archivo (tal vez directorio de solo lectura o algo así), la función abortará sin haber "dañado" el archivo original. – BRFennPocock