2

Реализуя метод Мартини, я бы хотел посчитать количество слов, добавленных в файл с момента последней контрольной точки (скажем, каждый день).

Я думаю, я мог бы посчитать слова из более старой резервной версии, сосчитать слова в текущей версии и разницу, но похоже, что большая обработка бесполезна, и есть файлы, которыми нужно управлять.

Есть ли способ посчитать это по пути, то есть иметь прогрессивный счет, который учитывает все входные данные, и что я смог бы сбросить в любой момент?

Я не против, чтобы он умер между сессиями. Я рассматриваю возможную проблему с янкингом, но в основном я не имею представления о том, как обрабатывать ввод, а не о файлах.

2 ответа2

1

Вы должны иметь возможность вызывать функцию подсчета слов при первом открытии сеанса emacs и сохранять результат в переменной. Затем вы можете снова запустить команду подсчета слов и обработать результат, чтобы получить количество добавленных слов.

Я попробовал, но мой emacs-lisp foo жалок. Если вы более осведомлены и знакомы с emacs-lisp, чем я, вы сможете изменить эту функцию подсчета слов в соответствии со своими потребностями. Пожалуйста, напишите сюда, если вы делаете, я хотел бы посмотреть, как :).

Я получил эту функцию и некоторую другую полезную информацию со страницы подсчета слов в вики emacs.


Если приемлемо решение без emacs, вы можете попробовать добавить эти строки в ваш ~/.bashrc:

function start_count(){
  wc -w $1 | cut -f 1 -d" " > ~/.count; 
  emacs $1
}
function show_progress(){
    p=`cat ~/.count`; 
    c=`wc -w $1  | cut -f 1 -d" "`; 
    echo "You have written "$(($c-$p))" words today!"
}

Теперь, когда вы начинаете работать, вы открываете свой файл для редактирования и сохраняете текущий счетчик слов в ~/.count примерно так:

start_count file.txt

Когда вы хотите проверить свой прогресс, просто запустите:

show_progress file.txt

Имейте в виду, что при этом управляющие последовательности LaTeX будут рассматриваться как слова, поэтому счет может быть не идеальным. Не знаю, как обойти это, хотя ...

1

Вот что я придумал, следуя идеям Тердона.

Я очень доволен этим, он делает то, что хотел, через несколько файлов в переменной my-martini-files .

Редактировать: Был добавлен временный счетчик, который позволяет составлять прогресс и иногда сбрасывать счетчик, чтобы не принимать тяжелые копии / вставки, которые не должны добавлять слова во внимание для достигнутого прогресса.

Я связал его с f4 для отчета, C-f4 для повторной инициализации счетчика (файлов), S-f4 для стека прогресса и CS-f4 для начала нового дня, все считается на 0.

Причуды теперь состоят в том, чтобы интегрировать их в модельную линию, но это другой вопрос.

;; 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)

Любые комментарии или предложения по улучшению кода приветствуются.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .