A seguir, o que eu criei, seguindo as ideias de terdon .
Estou muito feliz com isso, ele faz o que eu queria, em alguns arquivos na variável my-martini-files
.
Editar: Uma contagem temporária foi adicionada, o que permite empilhar o progresso, e ainda redefinir a contagem às vezes, para não copiar / colar pesado que não deveria adicionar palavras em conta para o progresso alcançado.
Eu o vinculo a f4 para um relatório, C-f4 para reinicializar a contagem (de arquivos), S-f4 para empilhar o progresso e CS-f4 para iniciar um novo dia, todas as contagens a 0.
A fantasia consistiria agora em integrá-la à modelina, mas isso é outro assunto.
;; Teh Martini method
(require 'wc) ; The file terdon links to.
(defun wc-in-buffer (file)
"Return the number of words in the buffer opening the file
passed as an argument. It should already be open."
(with-current-buffer (get-file-buffer file)
(wc-non-interactive (point-min) (point-max)))
)
(defun my-martini-sum ()
"Sum words over my-martini-files."
(apply '+
(loop for file in my-martini-files
collect (wc-in-buffer file)))
)
(setq my-martini-files '("~/path/to/file.org"
"~/path/to/another/file.org"
;; Taken from org-agenda-files
))
(defun my-martini-update ()
"Update my-martini-count from files."
(interactive)
(setq my-martini-count (my-martini-sum))
(message "Files lengths updated."))
(defun my-martini-reset ()
"Reset counts and stack for a new day."
(interactive)
(my-martini-update)
(setq my-martini-stack 0)
(message "Martini counts re-initialized."))
(defun my-martini-stack ()
"Stack the current progress, and update.
To be used before pasting loads of unsignificant words."
(interactive)
(setq my-martini-stack (+ my-martini-stack (- (my-martini-sum) my-martini-count)))
(message "Current count is stacked. Mess at will, just update afterwards.")
)
(defun my-martini-report ()
"Display changes in total word count since last update."
(interactive)
(message (concat "As for now, "
(number-to-string (+ my-martini-stack (- (my-martini-sum) my-martini-count)))
" new words have been added today."))
)
(global-set-key [f4] 'my-martini-report)
(global-set-key [\C-f4] 'my-martini-update)
(global-set-key [\S-f4] 'my-martini-stack)
(global-set-key [\C-\S-f4] 'my-martini-reset)
Quaisquer comentários ou sugestões para melhorar o código são muito bem-vindos.