Como alterar o conteúdo de um pacote (header2.el)?

7

Encontrei o pacote Automatic File Headers , aplaudi e instalei com o MELPA. Eu achei os cabeçalhos de arquivos muito valiosos no desenvolvimento do projeto. Eu sempre sei quem esteve onde e quantas vezes eles estiveram lá. Na maioria das vezes, eu também sei o que eles fizeram. A contagem de atualização e a data da última modificação são muito úteis para determinar a versão correta de um arquivo a ser usado.

Há uma coisa que eu não consegui descobrir.

Por exemplo, após a instalação header2do MELPA, declare-o no seu 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)

Então, quando você cria um novo arquivo no Emacs, por exemplo, foobar.el. Você vê um cabeçalho. E será atualizado automaticamente quando você gravar o arquivo. Ok, vamos supor que eu gostaria de mudar o texto Last-Updated:para Foo-Last-Updated.

Então, fiz um grep on Last-Updateddo pacote header2e substitui todas as ocorrências por Foo-Last-Updated. Eu reiniciei o Emacs para ter certeza. E ainda é Last-Updatedexibido em seu lugar Foo-Last-Updated.

Alguma sugestão para alterar o conteúdo do cabeçalho? Não encontrei nada nos manuais.

ReneFroger
fonte
Você não precisa modificar o conteúdo do pacote. Você pode redefinir o que deseja depois de solicitar o pacote. Vou postar meu exemplo em uma resposta assim que chegar ao PC. Ele ainda está carregando o material antigo porque você não atualizou o arquivo .elc na mesma pasta. Exclua os arquivos .elc do pacote e suas edições no arquivo .el serão efetivas.
precisa saber é o seguinte
@kaushalmodi obrigado pela sua sugestão. Eu removi os arquivos * .elc compilados. E reiniciou o Emacs. Nada muda até agora ... outra sugestão?
ReneFroger
Você já experimentou em um arquivo novo? Se você estiver usando um antigo que já tenha um cabeçalho, gostaria de saber se sua alteração falha ao atualizar o cabeçalho pré-existente.
Dan

Respostas:

4

Personalizando header2cabeçalhos

A partir da documentação em header2.el:

Definir elementos de cabeçalho individuais. Estes são os blocos de construção usados ​​para construir um cabeçalho específico do site. Você pode adicionar suas próprias funções neste arquivo ou no seu .emacsarquivo. A variável make-header-hookespecifica as funções que realmente serão chamadas.

Aqui está um exemplo de como personalizar o cabeçalho ao seu gosto:

(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 os pacotes diretamente

Em geral, isso não é recomendado, porque se você deseja atualizar os pacotes usando o gerenciador de pacotes, suas edições serão perdidas quando o pacote for atualizado.

A partir da versão 24.4 do emacs, você pode adicionar o item abaixo ao init do emacs bem antes de começar a carregar pacotes. Isso garantirá que sempre o arquivo mais recente seja carregado (seja um arquivo .el ou .elc).

(setq load-prefer-newer t)

Mas se você não tiver isso, por padrão, o arquivo .elc será carregado se presente (e o .el será ignorado).

Mas, novamente, tente não editar os arquivos .el do pacote diretamente.

Mais informações

Kaushal Modi
fonte
Obrigado pela sua explicação muito clara, está claro agora. Vou aplicar as alterações pelo seu exemplo. E não tentarei mais editar o pacote.
ReneFroger
Alterei o conteúdo do meu cabeçalho personalizado para Last changed : on 30-04-2015 Version : 2 Como substituir o comportamento padrão de header2que ele substitui o conteúdo da última alteração e versão?
ReneFroger