Às vezes, prefiro trabalhar offline. Posso cronometrá-lo e anotá-lo, evitando inicializar meu computador.
Gosto de usar uma tabela e org-update-all-dblocks
para calcular minhas horas do dia. É muito conveniente para mim, porque posso passar vários minutos ao longo do dia fazendo trabalho para um cliente.
Se eu quiser adicionar rapidamente minhas horas off-line e atualizar a tabela, org-mode
já tem uma função para isso? Sei que posso org-clock-in
e org-clock-out
para gerar um relógio e, em seguida, redigite-o manualmente e use org-update-all-dblocks
para recalcular, mas o ideal é que eu possa chamar uma única função que me pergunte por quantos minutos desejo inserir. Provavelmente deveria apenas use a hora e a data atuais como o início, mesmo que isso aparentemente entre em conflito com o trabalho que eu começo a fazer depois de adicionar as horas offline.
Seria ainda melhor se org-mode
tinha um conceito de horas off-line que entendia que eu poderia saber a data, mas provavelmente não registrei a hora do dia e, portanto, a hora do dia poderia ser deixada de fora, mas ainda calculada em uma tabela de relógio.
Se eu tiver que escrever algum q uick e dirty elisp, que funções seriam úteis para mim além das acima? Acho que as peças que estou perdendo são algo para pegar o relógio mais recente, algo para adicionar minutos a ele e algo para solicitar um número de minutos.
Resposta
O comando a seguir insere a entrada típica do logbook da organização, um intervalo de tempo iniciando em N minutos atrás:
(defun org-insert-clock-range (&optional n) (interactive "NTime Offset (in min): ") (let* ((ctime (cdr (decode-time (current-time)))) (min (car ctime)) (start (apply "encode-time 0 (- min n) (cdr ctime)))) (org-insert-time-stamp start t t "CLOCK: ") (insert "--") (org-insert-time-stamp (current-time) t t)))
Resposta
A resposta de mutbuerger “me ajudou muito. É minha primeira vez programando em elisp diferente de configuração. Sua resposta foi quase certa, mas eu ainda queria a funcionalidade normal de entrada e saída para encontrar ou criar o livro de registro no título mais próximo e adicionar um observação.
Minha solução corrigida foi esta:
(defun offset-current-time (n) (let* ((ctime (cdr (decode-time (current-time)))) (minutes (car ctime))) (apply "encode-time 0 (- minutes n) (cdr ctime)))) (defun org-insert-clock-range (&optional n) (interactive "NTime Offset (in min): ") (org-clock-in nil (offset-current-time n)) (org-clock-out)) (defadvice org-clock-out (after org-clock-out-after activate) (org-update-all-dblocks)) (add-hook "org-mode-hook (lambda () ; Keys for org mode ;snip (define-key evil-normal-state-map (kbd "gl") "org-insert-clock-range) ;snip ))
Resposta
Eu gerencio horários off-line com uma caixa de ferramentas de funções personalizadas para manipular os registros do relógio na sintaxe da própria Org e um script para converter uma notação de texto simples abreviada para a sintaxe da Org.
Funções em https://github.com/clange/emacs/blob/master/.emacs.d/init/org-clock.el :
-
org-clock-split-current-interval
(Eu limitei isso aC-c o s
): se houver um intervalo na linha atual, no qual realmente duas tarefas foram realizadas, facilite a divisão em dois intervalos. -
org-clock-change-hh-mm
(vinculado aC-c o :
): deixando o dia inalterado, adapte as horas / minutos de um registro de relógio. Caso de uso típico : copie uma linha de registro do relógio de outro lugar, adapte-a de acordo com o tempo trabalhado offline.
Script: https://github.com/clange/scripts/blob/master/org-offline-to-clock/org-offline-to-clock.pl
Meu fluxo de trabalho para usá-lo:
- registrar os tempos offline em um arquivo de texto, por exemplo no meu celular
- sincronizar este arquivo com o meu PC
- no PC, executar
org-offline-to-clock.pl BEFORE > AFTER
- validar com
diff BEFORE AFTER
- se estiver satisfeito,
mv AFTER BEFORE
- mova as linhas selecionadas para meu arquivo org real.