¿Cómo cambiar el contenido de un paquete (header2.el)?

7

Encontré el paquete Automatic File Headers , lo animé y lo instalé con MELPA. He encontrado que los encabezados de archivos son muy valiosos en el desarrollo de proyectos. Siempre sé quién ha estado dónde y cuántas veces estuvieron allí. Muy a menudo, también sé lo que hicieron. El recuento de actualizaciones y la fecha de la última modificación son muy útiles para determinar la versión adecuada de un archivo a utilizar.

Hay una cosa que no pude resolver.

Por ejemplo, después de instalar header2desde MELPA, declare en sus dot-emacs:

;; To have Emacs update file headers automatically whenever you save a
;; file, put this in your init file (~/.emacs):

(autoload 'auto-update-file-header "header2")
(add-hook 'write-file-hooks 'auto-update-file-header)

;; To have Emacs add a file header whenever you create a new file in
;; some mode, put this in your init file (~/.emacs):

(autoload 'auto-make-header "header2")
(add-hook 'emacs-lisp-mode-hook 'auto-make-header)
(add-hook 'c-mode-common-hook   'auto-make-header)

Entonces, cuando crea un nuevo archivo en Emacs, por ejemplo foobar.el. Ves un encabezado. Y se actualizará automáticamente cuando escriba el archivo. Está bien, vamos a suponer Me gustaría cambiar el texto Last-Updated:en Foo-Last-Updated.

Así que hice una revisión Last-Updateddel paquete header2y reemplacé todas las ocurrencias con Foo-Last-Updated. Reinicié Emacs para estar seguro. Y todavía se Last-Updatedmuestra en su lugar Foo-Last-Updated.

¿Alguna sugerencia para cambiar el contenido del encabezado? No encontré nada en los manuales.

ReneFroger
fuente
No debería tener que modificar el contenido del paquete. Puede redefinir las cosas que desee después de solicitar el paquete. Publicaré mi ejemplo en una respuesta una vez que llegue a una PC. Todavía está cargando las cosas viejas porque no ha actualizado el archivo .elc en la misma carpeta. Elimine los archivos .elc para el paquete y luego sus ediciones en el archivo .el serán efectivas.
Kaushal Modi
@kaushalmodi gracias por tu sugerencia. Eliminé los archivos compilados * .elc. Y reinició Emacs. Nada cambia hasta ahora ... ¿otra sugerencia?
ReneFroger
¿Lo has probado en un archivo nuevo? Si está utilizando uno antiguo que ya tiene un encabezado, me pregunto si su cambio no puede actualizar el encabezado preexistente.
Dan

Respuestas:

4

Personalizar header2encabezados

De la documentación en header2.el:

Definir elementos de encabezado individuales. Estos son los bloques de construcción utilizados para construir un encabezado específico del sitio. Puede agregar sus propias funciones en este archivo o en su .emacsarchivo. La variable make-header-hookespecifica las funciones que realmente se llamarán.

Aquí hay un ejemplo de cómo personalizar el encabezado a su gusto:

(require 'header2)

(defsubst my/header-timestamp ()
  "Insert field for timestamp"
  (insert header-prefix-string  "Time-stamp: <>\n"))

(defsubst my/header-projectname ()
  "Insert Project Name"
  (insert header-prefix-string "Project    : "
          (when (featurep 'projectile)
            (replace-regexp-in-string "/proj/\\(.*?\\)/.*"
                                      "\\1"
                                      (projectile-project-root)))
          "\n"))

(defsubst my/header-description ()
  "Insert \"Description: \" line."
  (insert header-prefix-string "Description: \n"))

(defsubst my/header-dash-line ()
  "Insert dashed line"
  (insert header-prefix-string)
  (insert-char ?- fill-column)
  (insert "\n"))

(setq make-header-hook '(my/header-timestamp
                         header-blank
                         my/header-dash-line
                         my/header-projectname
                         header-file-name
                         header-author
                         my/header-description
                         my/header-dash-line))

(add-hook 'emacs-lisp-mode-hook #'auto-make-header)

Modificando los paquetes directamente

En general, esto no se recomienda porque si desea actualizar los paquetes utilizando el administrador de paquetes, sus ediciones se perderán cuando se actualice el paquete.

A partir de la versión 24.4 de emacs, puede agregar lo siguiente a su emacs init desde el principio antes de comenzar a cargar paquetes. Eso asegurará que siempre se cargue el archivo más nuevo (ya sea un archivo .el o .elc).

(setq load-prefer-newer t)

Pero si no tiene eso, por defecto, el archivo .elc se carga si está presente (y el .el se ignora).

Pero nuevamente, intente no editar los archivos .el del paquete directamente.

Más información

Kaushal Modi
fuente
Gracias por su explicación muy clara, está claro ahora. Aplicaré los cambios con su ejemplo. Y ya no intentaré editar el paquete.
ReneFroger
Cambié el contenido de mi encabezado personalizado a Last changed : on 30-04-2015 Version : 2 ¿Cómo podría anular el comportamiento predeterminado de header2que reemplaza el contenido del último cambio y versión?
ReneFroger