A seguir é o que eu fiz, seguindo as idéias de Terdon .
Estou muito feliz com isso, ele faz o que eu queria, ao longo de alguns arquivos na my-martini-files
variável.
Editar: Uma contagem temporária foi adicionada, o que permite empilhar o progresso, e ainda redefine a contagem às vezes, para não usar cópias / colagens pesadas que não devem adicionar palavras ao progresso alcançado.
Liguei f4para um relatório, C-f4reinicializei a contagem (de arquivos), S-f4para empilhar o progresso e, C-S-f4para começar um novo dia, todas contagens em 0.
A fantasia consistiria agora em integrá-lo à 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 bem-vindos.
wc
por algumacount-true-words-lost-in-markup
função para qualquer linguagem de marcação, para a qual eu vi algumas respostas já existiam.