Nogle gange foretrækker jeg at arbejde lidt offline. Jeg kan time det og skrive det ned og undgå at starte min computer.
Jeg kan godt lide at bruge en tabel og org-update-all-dblocks
til at beregne mine timer for dagen. Det er meget praktisk for mig, fordi jeg måske bruger ulige antal minutter hele dagen på at arbejde for en klient.
Hvis jeg hurtigt vil tilføje mine offline timer og opdatere tabellen, gør org-mode
har allerede en funktion til dette? Jeg ved, at jeg kan org-clock-in
og org-clock-out
for at generere et ur , og indtast det derefter manuelt igen og brug org-update-all-dblocks
til at genberegne, men jeg vil helst gerne have en enkelt funktion, som jeg kan ringe til, der beder mig om, hvor mange minutter jeg vil indtaste. Det burde sandsynligvis Brug bare den aktuelle tid og dato som start, selvom det tilsyneladende ville være i konflikt med det arbejde, jeg begynder at udføre efter at have tilføjet de offline timer.
Det ville være endnu bedre, hvis org-mode
havde et koncept af offline timer, der forstod, at jeg måske kendte datoen, men jeg registrerede sandsynligvis ikke tidspunktet på dagen, og så tidspunktet på dagen kunne udelades, men stadig beregnes i en uretabel.
Hvis jeg skal skrive nogle q uick og beskidt elisp, hvilke funktioner vil være til nytte for mig bortset fra ovenstående? Jeg tror, at de brikker, jeg mangler, er noget at få fat i det seneste ur, noget at tilføje minutter til det og noget at anmode om et antal minutter.
Svar
Den følgende kommando indsætter den typiske org-logbogspost, et tidsinterval, der starter fra for N minutter siden:
(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)))
Svar
mutbuerger svar hjalp mig meget. Det er min første gang, jeg programmerer i en anden elisp end konfiguration. Hans svar var tæt på mærket, men jeg ville stadig have den normale funktionalitet ved clock-in og clock-out for at finde eller oprette logbogen under den nærmeste overskrift og tilføje en note.
Min ændrede løsning var denne:
(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 ))
Svar
Jeg administrerer offline-tider med en værktøjskasse med brugerdefinerede funktioner til at manipulere urlogfiler i Orgs egen syntaks og et script til at konvertere en stenografisk almindelig tekstnotation til Orgs syntaks.
Funktioner i https://github.com/clange/emacs/blob/master/.emacs.d/init/org-clock.el :
-
org-clock-split-current-interval
(Jeg bundet dette tilC-c o s
): Hvis der er et interval i den aktuelle linje, hvor faktisk to opgaver blev udført, skal du opdele det i to intervaller. -
org-clock-change-hh-mm
(bundet tilC-c o :
): Efterlader dagen uændret, tilpas timer / minutter for en urlog. Typisk brugstilfælde : kopier en urlogloglinje fra et andet sted, tilpas den til den tid, der er arbejdet offline.
Script: https://github.com/clange/scripts/blob/master/org-offline-to-clock/org-offline-to-clock.pl
Min arbejdsgang med at bruge den:
- optag offline-tider i en tekstfil f.eks. på min mobiltelefon
- synkroniser denne fil til min pc
- på pcen, kør
org-offline-to-clock.pl BEFORE > AFTER
- valider med
diff BEFORE AFTER
- hvis glad,
mv AFTER BEFORE
- flyt valgte linjer til min faktiske org-fil.