From d81da0a6bf601e4d1f754dec67a1b5d05244b213 Mon Sep 17 00:00:00 2001 From: Nikolay Puzanov Date: Fri, 18 Apr 2014 10:11:21 +0400 Subject: [PATCH] Add README.org --- .gitignore | 1 + README.org | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++ worktimer.scm | 18 +++++++------ 3 files changed, 81 insertions(+), 8 deletions(-) create mode 100644 README.org diff --git a/.gitignore b/.gitignore index b25c15b..4c3f7f3 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *~ +*.html diff --git a/README.org b/README.org new file mode 100644 index 0000000..1ce59f7 --- /dev/null +++ b/README.org @@ -0,0 +1,70 @@ +#+TITLE: README +#+AUTHOR: Николай Пузанов +#+EMAIL: punzik@gmail.com + +#+LANGUAGE: ru +#+STARTUP: showall + +Программа написана на [[http://www.schemers.org/][Scheme]] (реализация - [[http://www.gnu.org/software/guile/][GNU Guile]]) и предназначена для учета +рабочего времени. Применяется следующим образом: + +Начало работы над задачей: + +#+begin_sh +$ worktimer.scm start [НАЗВАНИЕ_ЗАДАЧИ] +#+end_sh + +Название задачи может состоять из нескольких частей, разделенных символом +прямого слэша. Части названия - это элементы иерархии задачи, например, название +проекта, название подпроекта, задача, подзадача и т.д. Программа учитывает +иерархическую структуру задач и вычисляет время задач, как сумму времен +подзадач. + +Пример: + +#+begin_sh +$ worktimer.scm start uberproject/website/design +#+end_sh + +Стартует отсчет времени на подзадачу "design" задачи "website" проекта +"uberproject". Уровни вложенности не ограничены. Если команде =start= не +передать агрумент, то будет запущена последняя задача. + +Остановить отсчет времени можно командой =stop=: + +#+begin_src sh +$ worktimer.scm stop +#+end_src + +или запустив новую задачу: + +#+begin_src sh +$ worktimer.scm start uberproject/website/programming +#+end_src + +По команде =report= выводится отчет по всем проектам и задачам: + +#+begin_src sh +$ worktimer.scm report +--- REPORT +Overall: 00:03:45 + uberproject: 00:03:45 + website: 00:03:45 + programming: 00:02:34 + design: 00:01:11 + +--- LAST STOPPED TASK +uberproject/website/programming: [2014-04-18 09:47:04] - [2014-04-18 09:49:38] - 00:02:34 +#+end_src + +Как видно, общее время работы над проектом составило 3 минуты и 45 секунд, из +которых на дизайн сайта ушло 1 минута 11 секунд, а на программирование 2 минуты +34 секунды. + +При запуске программы без аргументов выводится имя текущей задачи и текущий +таймер: + +#+begin_src sh +$ worktimer.scm +uberproject/website/programming: 00:02:51 +#+end_src diff --git a/worktimer.scm b/worktimer.scm index 14a4615..cbb1dd5 100755 --- a/worktimer.scm +++ b/worktimer.scm @@ -113,14 +113,16 @@ ;;; Parse timesheet file and return list of tasks (define (read-timesheet filename) - (call-with-input-file filename - (lambda (port) - (let loop ((recs '())) - (let ((line (get-line port))) - (if (eof-object? line) - (reverse recs) - (loop (let ((item (parse-task-string line))) - (if item (cons item recs) recs))))))))) + (if (file-exists? filename) + (call-with-input-file filename + (lambda (port) + (let loop ((recs '())) + (let ((line (get-line port))) + (if (eof-object? line) + (reverse recs) + (loop (let ((item (parse-task-string line))) + (if item (cons item recs) recs)))))))) + '())) ;;; Return difference of two dates (define (date-difference d1 d2)