Come sincronizzare rapidamente le ore offline?

A volte preferisco lavorare offline. Posso cronometrarlo e annotarlo ed evitare di avviare il mio computer.

Mi piace usare una tabella e org-update-all-dblocks per calcolare le ore della giornata. È molto comodo per me, perché potrei dedicare un numero dispari di minuti durante il giorno a lavorare per un cliente.

Se voglio aggiungere rapidamente le mie ore offline e aggiornare la tabella, fa org-mode dispone già di una funzione per questo? So di poter org-clock-in e org-clock-out generare un orologio , quindi ridigitalo manualmente e usa org-update-all-dblocks per ricalcolare, ma idealmente mi piacerebbe una singola funzione che posso chiamare che mi chieda quanti minuti voglio inserire. Probabilmente dovrebbe utilizza semplicemente lora e la data correnti come inizio, anche se apparentemente sarebbe in conflitto con il lavoro che inizio a svolgere dopo aver aggiunto le ore offline.

Sarebbe ancora meglio se org-mode aveva un concetto di ore offline che capiva che potevo conoscere la data ma probabilmente non avevo registrato lora del giorno, quindi lora del giorno poteva essere omessa, ma calcolata comunque in una tabella dellorologio.

Se devo scrivere qualche q elisp sporco e sporco, quali funzioni mi sarebbero utili oltre a quanto sopra? Penso che i pezzi che mi mancano siano qualcosa per afferrare lorologio più recente, qualcosa per aggiungere minuti e qualcosa per richiedere un numero di minuti.

Risposta

Il seguente comando inserisce la tipica voce del registro dellorganizzazione, un intervallo di tempo che inizia da N minuti fa:

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

Risposta

La risposta di mutbuerger mi ha aiutato molto. È la prima volta che programmo in elisp diverso dalla configurazione. La sua risposta era vicina al segno, ma volevo comunque la normale funzionalità di clock-in e clock-out per trovare o creare il registro sotto lintestazione più vicina e aggiungere un nota.

La mia soluzione modificata era questa:

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

Risposta

Gestisco i tempi offline con un toolbox di funzioni personalizzate per manipolare i registri dellorologio nella sintassi dellorganizzazione e uno script per convertire una notazione abbreviata in testo normale nella sintassi dellorganizzazione.

Funzioni in https://github.com/clange/emacs/blob/master/.emacs.d/init/org-clock.el :

  • org-clock-split-current-interval (Lho vincolato a C-c o s): se cè un intervallo nella riga corrente, in cui in realtà sono state eseguite due attività, facilita la divisione in due intervalli.
  • org-clock-change-hh-mm (vincolato a C-c o :): lasciando il giorno invariato, adattare le ore / minuti di un registro dellorologio. : copia una riga di registro dellorologio da qualche altra parte, adattala in base allora lavorata offline.

Script: https://github.com/clange/scripts/blob/master/org-offline-to-clock/org-offline-to-clock.pl

Il mio flusso di lavoro per utilizzarlo:

  1. registra i tempi offline in un file di testo, ad es. sul mio telefono cellulare
  2. sincronizza questo file sul mio PC
  3. sul PC, esegui org-offline-to-clock.pl BEFORE > AFTER
  4. convalida con diff BEFORE AFTER
  5. se felice, mv AFTER BEFORE
  6. sposta le righe selezionate nel mio file org effettivo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *